SICAtoOpenSPCoopUtilities.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.spcoop.sica;

  21. import java.io.File;
  22. import java.net.URI;
  23. import java.util.List;

  24. import javax.wsdl.Binding;
  25. import javax.wsdl.Definition;

  26. import org.openspcoop2.core.constants.CostantiDB;
  27. import org.openspcoop2.core.id.IDAccordo;
  28. import org.openspcoop2.core.id.IDAccordoCooperazione;
  29. import org.openspcoop2.core.id.IDServizio;
  30. import org.openspcoop2.core.id.IDSoggetto;
  31. import org.openspcoop2.core.registry.AccordoCooperazione;
  32. import org.openspcoop2.core.registry.AccordoCooperazionePartecipanti;
  33. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  34. import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
  35. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  36. import org.openspcoop2.core.registry.ConfigurazioneServizio;
  37. import org.openspcoop2.core.registry.Connettore;
  38. import org.openspcoop2.core.registry.IdSoggetto;
  39. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  40. import org.openspcoop2.core.registry.constants.FormatoSpecifica;
  41. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  42. import org.openspcoop2.core.registry.constants.ServiceBinding;
  43. import org.openspcoop2.core.registry.constants.TipologiaServizio;
  44. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  45. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  46. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  47. import org.openspcoop2.core.registry.wsdl.RegistroOpenSPCoopUtilities;
  48. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  49. import org.openspcoop2.message.soap.SoapUtils;
  50. import org.openspcoop2.message.xml.MessageXMLUtils;
  51. import org.openspcoop2.protocol.sdk.registry.ProtocolFiltroRicercaAccordi;
  52. import org.openspcoop2.protocol.sdk.registry.ProtocolFiltroRicercaServizi;
  53. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  54. import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
  55. import org.openspcoop2.utils.LoggerWrapperFactory;
  56. import org.openspcoop2.utils.certificate.CertificateUtils;
  57. import org.openspcoop2.utils.wsdl.DefinitionWrapper;
  58. import org.openspcoop2.utils.wsdl.WSDLUtilities;
  59. import org.openspcoop2.utils.xml.AbstractXMLUtils;
  60. import org.slf4j.Logger;
  61. import org.w3c.dom.Document;
  62. import org.w3c.dom.Element;
  63. import org.w3c.dom.Node;
  64. import org.w3c.dom.NodeList;

  65. import it.gov.spcoop.sica.dao.Costanti;
  66. import it.gov.spcoop.sica.manifest.DocumentoCoordinamento;
  67. import it.gov.spcoop.sica.manifest.DocumentoLivelloServizio;
  68. import it.gov.spcoop.sica.manifest.DocumentoSemiformale;
  69. import it.gov.spcoop.sica.manifest.DocumentoSicurezza;
  70. import it.gov.spcoop.sica.manifest.ElencoPartecipanti;
  71. import it.gov.spcoop.sica.manifest.ElencoServiziComponenti;
  72. import it.gov.spcoop.sica.manifest.SpecificaCoordinamento;
  73. import it.gov.spcoop.sica.manifest.SpecificaLivelliServizio;
  74. import it.gov.spcoop.sica.manifest.SpecificaSicurezza;
  75. import it.gov.spcoop.sica.manifest.constants.TipoAdesione;
  76. import it.gov.spcoop.sica.manifest.constants.TipoDocumentoConversazione;
  77. import it.gov.spcoop.sica.manifest.constants.TipoDocumentoInterfaccia;
  78. import it.gov.spcoop.sica.manifest.driver.TipiDocumentoConversazione;
  79. import it.gov.spcoop.sica.manifest.driver.TipiDocumentoInterfaccia;
  80. import it.gov.spcoop.sica.manifest.driver.TipiDocumentoSicurezza;


  81. /**
  82. * Utilities di conversione da oggetto OpenSPCoop a oggetti SICA  e viceversa
  83. *
  84. * @author Andrea Poli (apoli@link.it)
  85. * @author $Author$
  86. * @version $Rev$, $Date$
  87. */
  88. public class SICAtoOpenSPCoopUtilities {

  89.    
  90.     /*
  91.      * uri:dn:<identificativo soggetto>
  92.      * Potrebbe essere dn=
  93.      * uri:dn:o=m_sa,c=it
  94.      * */
  95.    
  96.     /* IDSoggetti */
  97.     private static String [] getValoriDN(String dn) throws SICAToOpenSPCoopUtilitiesException{
  98.         String [] valori;
  99.         int indexOf = dn.indexOf("=");
  100.         if(indexOf<=0){
  101.             throw new SICAToOpenSPCoopUtilitiesException("Separatore validi per il dn non trovati");
  102.         }
  103.         valori =  dn.split(",");
  104.         if(valori==null || valori.length<1){
  105.             throw new SICAToOpenSPCoopUtilitiesException("Identificazione dn non riuscita: null??");
  106.         }
  107.         return valori;
  108.     }
  109.     public static void validateIDSoggettoSICA(String dn) throws SICAToOpenSPCoopUtilitiesException{
  110.         String tmp = new String(dn);
  111.         if(tmp.startsWith("uri:dn:")){
  112.             tmp = tmp.substring("uri:dn:".length());
  113.         }
  114.         if(tmp==null || "".equals(tmp))
  115.             throw new SICAToOpenSPCoopUtilitiesException("DN non fornita");
  116.         if(tmp.contains("c=it")==false){
  117.             throw new SICAToOpenSPCoopUtilitiesException("c=it non presente");
  118.         }
  119.         if(tmp.contains(",")==false){
  120.             throw new SICAToOpenSPCoopUtilitiesException("Nessuna amministrazione definita nella radice c=it");
  121.         }
  122.         if(tmp.contains("=")==false){
  123.             throw new SICAToOpenSPCoopUtilitiesException("Nessuna amministrazione definita nella radice c=it");
  124.         }
  125.         String [] valoriDN = SICAtoOpenSPCoopUtilities.getValoriDN(tmp);
  126.         boolean campoObbligatorioO = false;
  127.         for(int i=0; i<valoriDN.length; i++){
  128.             if(valoriDN[i].contains("=")==false){
  129.                 throw new SICAToOpenSPCoopUtilitiesException("Identificazione dn non riuscita: ["+valoriDN[i]+"] non separata dal carattere \"=\"");
  130.             }
  131.             String [] keyValue = valoriDN[i].trim().split("=");
  132.             if(keyValue.length!=2){
  133.                 throw new SICAToOpenSPCoopUtilitiesException("Identificazione dn non riuscita: ["+valoriDN[i]+"] contiene piu' di un carattere \"=\"");
  134.             }
  135.             if(keyValue[0].trim().contains(" ")){
  136.                 throw new SICAToOpenSPCoopUtilitiesException("Identificazione dn non riuscita: il campo ["+valoriDN[i]+"] contiene spazi nella chiave identificativa ["+keyValue[0].trim()+"]");
  137.             }
  138.             if(CertificateUtils.formatKeyPrincipal(keyValue[0]).equalsIgnoreCase("O")){
  139.                 campoObbligatorioO = true;
  140.             }
  141.         }
  142.         if(!campoObbligatorioO){
  143.             throw new SICAToOpenSPCoopUtilitiesException("Nessuna amministrazione definita nella radice c=it (o=XX non trovato)");
  144.         }
  145.        
  146.     }
  147.     public static String appendURI_IDSoggettoSica(String dn) throws SICAToOpenSPCoopUtilitiesException{
  148.         SICAtoOpenSPCoopUtilities.validateIDSoggettoSICA(dn);
  149.         return "uri:dn:" + dn;  
  150.     }
  151.     public static String removeURI_IDSoggettoSica(String uri_dn) throws SICAToOpenSPCoopUtilitiesException{
  152.         SICAtoOpenSPCoopUtilities.validateIDSoggettoSICA(uri_dn);
  153.         if(uri_dn.startsWith("uri:dn:")){
  154.             uri_dn = uri_dn.substring("uri:dn:".length());
  155.         }
  156.         return uri_dn;
  157.     }
  158.     // NOTA: Metodo che permette di costruire DistinguishedName non standard: gestisce i tipi diversi da SPC.
  159.     // Da utilizzare con cautela
  160.     public static String buildIDSoggettoSica(IDSoggetto idSoggetto,boolean createURI) throws SICAToOpenSPCoopUtilitiesException{
  161.         String soggetto = null;
  162.         if("spc".equals(idSoggetto.getTipo())){
  163.             // standard, utilizzo solo il nome
  164.             soggetto = idSoggetto.getNome();
  165.         }else{
  166.             // non standard, utilizzo tipo/nome per avere l'univocita'
  167.             soggetto = idSoggetto.toString();
  168.         }
  169.         return SICAtoOpenSPCoopUtilities.buildIDSoggettoSica(soggetto, createURI);
  170.     }
  171.     public static String buildIDSoggettoSica(String soggetto,boolean createURI) throws SICAToOpenSPCoopUtilitiesException{
  172.         if(soggetto==null || "".equals(soggetto))
  173.             throw new SICAToOpenSPCoopUtilitiesException("Identificativo soggetto non fornito");
  174.         StringBuilder bf = new StringBuilder();
  175.         if(createURI){
  176.             bf.append("uri:dn:");
  177.         }
  178.         bf.append("o=");
  179.         bf.append(soggetto);
  180.         bf.append(",c=it");
  181.         return bf.toString();
  182.     }
  183.     public static String idSoggetto_openspcoopToSica(org.openspcoop2.core.id.IDSoggetto idSoggetto) throws SICAToOpenSPCoopUtilitiesException{

  184.         if(idSoggetto==null)
  185.             throw new SICAToOpenSPCoopUtilitiesException("IDSoggetto non definito");
  186.         if(idSoggetto.getTipo()==null)
  187.             throw new SICAToOpenSPCoopUtilitiesException("IDSoggetto.tipo non definito");
  188.         if(idSoggetto.getNome()==null)
  189.             throw new SICAToOpenSPCoopUtilitiesException("IDSoggetto.nome non definito");
  190.         if("spc".equals(idSoggetto.getTipo())==false)
  191.             throw new SICAToOpenSPCoopUtilitiesException("Tipo soggetto diverso da SPC non utilizzabile");
  192.        
  193.         return SICAtoOpenSPCoopUtilities.buildIDSoggettoSica(idSoggetto.getNome(),true);
  194.     }
  195.     public static org.openspcoop2.core.id.IDSoggetto idSoggetto_sicaToOpenspcoop(String uriSoggetto) throws SICAToOpenSPCoopUtilitiesException{
  196.         return SICAtoOpenSPCoopUtilities.idSoggetto_sicaToOpenspcoop(uriSoggetto,true);
  197.     }
  198.     public static org.openspcoop2.core.id.IDSoggetto idSoggetto_sicaToOpenspcoop(String uriSoggetto,boolean uri) throws SICAToOpenSPCoopUtilitiesException{
  199.        
  200.         if(uriSoggetto==null)
  201.             throw new SICAToOpenSPCoopUtilitiesException("uriSoggetto non definito");
  202.        
  203.         String senzaSpazi = uriSoggetto.replaceAll("" , "");
  204.        
  205.         if(senzaSpazi.startsWith("uri:dn:")==false && uri)
  206.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriSoggetto ("+uriSoggetto+") non corretto (uri:dn:o=<identificativo soggetto>,c=it)");
  207.         if( (senzaSpazi.indexOf(",c=it")<=0) && senzaSpazi.indexOf(" c=it")<=0)
  208.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriSoggetto ("+uriSoggetto+") non corretto (uri:dn:o=<identificativo soggetto>,c=it)");
  209.         if(uri){
  210.             if(senzaSpazi.indexOf(",o=")<=0 && senzaSpazi.indexOf(":o=")<=0 && senzaSpazi.indexOf(" o=")<=0){
  211.                 throw new SICAToOpenSPCoopUtilitiesException("Formato uriSoggetto ("+uriSoggetto+") non corretto (uri:dn:o=<identificativo soggetto>,c=it)");
  212.             }
  213.         }else{
  214.             if(senzaSpazi.indexOf(",o=")<=0 && senzaSpazi.indexOf("o=")<0){
  215.                 throw new SICAToOpenSPCoopUtilitiesException("Formato uriSoggetto ("+uriSoggetto+") non corretto (o=<identificativo soggetto>,c=it)");
  216.             }
  217.         }
  218.        
  219.         int index = -1;
  220.         int lenghtPrefixO = 3;
  221.         if(uri){
  222.             index = senzaSpazi.indexOf(",o=");
  223.             if(index<=0){
  224.                 index = senzaSpazi.indexOf(":o=");
  225.             }
  226.             if(index<=0){
  227.                 index = senzaSpazi.indexOf(" o=");
  228.             }
  229.         }else{
  230.             index = senzaSpazi.indexOf(",o=");
  231.             if(index<=0){
  232.                 index = senzaSpazi.indexOf("o=");
  233.                 lenghtPrefixO = 2;
  234.             }
  235.         }
  236.        
  237.        
  238.         int endSoggetto = senzaSpazi.length();
  239.         if(senzaSpazi.indexOf(",",index+1)>0){
  240.             endSoggetto = senzaSpazi.indexOf(",",index+1);
  241.         }
  242.        
  243.         org.openspcoop2.core.id.IDSoggetto idSoggetto =
  244.              new org.openspcoop2.core.id.IDSoggetto("spc",senzaSpazi.substring(index+lenghtPrefixO,endSoggetto));
  245.         return idSoggetto;
  246.     }
  247.     public static String readDNSoggettoFromUriAccordo(String uriAccordo) throws SICAToOpenSPCoopUtilitiesException{
  248.         if(uriAccordo==null)
  249.             throw new SICAToOpenSPCoopUtilitiesException("uriAccordo non definito");
  250.         String [] values = uriAccordo.split(":");
  251.         if(values.length != 5)
  252.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriAccordo ("+uriAccordo+") non valido (urn:<tipo_accordo>:<soggetto_organizzativo>:<nome_accordo>:<versione>)");
  253.         String urn = values[0];
  254.         if("urn".equals(urn)==false)
  255.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriAccordo ("+uriAccordo+") non valido (urn:<tipo_accordo>:<soggetto_organizzativo>:<nome_accordo>:<versione>)");
  256.         String soggetto = values[2];
  257.         if(soggetto==null)
  258.             throw new SICAToOpenSPCoopUtilitiesException("Soggetto non presente nell'uriAccordo ("+uriAccordo+")");
  259.         return soggetto;
  260.     }
  261.    
  262.    
  263.    
  264.    
  265.    
  266.    
  267.    
  268.    
  269.    
  270.     /*
  271.      * urn:adc:<nome_accordo>:<versione>
  272.      * */
  273.     public static String buildIDAccordoCooperazioneSica(String nome_accordo,Integer versione)throws SICAToOpenSPCoopUtilitiesException{
  274.        
  275.         if(nome_accordo==null || "".equals(nome_accordo))
  276.             throw new SICAToOpenSPCoopUtilitiesException("Nome accordo non fornito");
  277.         if(versione==null)
  278.             throw new SICAToOpenSPCoopUtilitiesException("Versione non fornita");
  279.        
  280.         StringBuilder bf = new StringBuilder();
  281.         bf.append("urn:");
  282.         bf.append(Costanti.TIPO_ACCORDO_COOPERAZIONE);
  283.         bf.append(":");
  284.         bf.append(nome_accordo);
  285.         bf.append(":");
  286.         bf.append(versione);
  287.         return bf.toString();
  288.     }
  289.    
  290.     public static String idAccordoCooperazione_openspcoopToSica(IRegistryReader registryReader, IDAccordoCooperazione idAccordo) throws SICAToOpenSPCoopUtilitiesException{
  291.         if(idAccordo==null)
  292.             throw new SICAToOpenSPCoopUtilitiesException("IDAccordo non definito");
  293.         if(idAccordo.getNome()==null)
  294.             throw new SICAToOpenSPCoopUtilitiesException("IDAccordo.nome non definito");
  295.         if(idAccordo.getVersione()==null)
  296.             throw new SICAToOpenSPCoopUtilitiesException("IDAccordo.versione non definito");
  297.    
  298.         // Recupero property del nome Accordo
  299.         String nomeAccordo = null;
  300.         try{
  301.             AccordoCooperazione ac = registryReader.getAccordoCooperazione(idAccordo);
  302. //          if(ac.sizeProtocolPropertyList()<=0){
  303. //              throw new Exception("Nome dell'accordo da utilizzare non trovato: non esistono proprieta' di protocollo all'interno dell'accordo di servizio");
  304. //          }
  305. //          for (int i = 0; i < ac.sizeProtocolPropertyList(); i++) {
  306. //              if(org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti.SPCOOP_PROTOCOL_PROPERTIES_NOME_ACCORDO_CNIPA.equals(ac.getProtocolProperty(i).getName())){
  307. //                  nomeAccordo = ac.getProtocolProperty(i).getValue();
  308. //              }      
  309. //          }
  310. //          if(nomeAccordo==null){
  311. //              throw new Exception("Nome dell'accordo da utilizzare non trovato all'interno delle proprieta' di protocollo dell'accordo di servizio");
  312. //          }
  313.             nomeAccordo = ac.getNome();
  314.         }catch(Exception e){
  315.             throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  316.         }
  317.        
  318.         return SICAtoOpenSPCoopUtilities.buildIDAccordoCooperazioneSica(nomeAccordo,idAccordo.getVersione());
  319.     }
  320.     public static IDAccordoCooperazione idAccordoCooperazione_sicaToOpenspcoop(IRegistryReader registryReader, String uriAccordo) throws SICAToOpenSPCoopUtilitiesException{
  321.         if(uriAccordo==null)
  322.             throw new SICAToOpenSPCoopUtilitiesException("uriAccordo non definito");
  323.         String [] values = uriAccordo.split(":");
  324.         if(values.length != 4)
  325.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriAccordo ("+uriAccordo+") non valido (urn:adc:<nome_accordo>:<versione>)");
  326.         String urn = values[0];
  327.         if("urn".equals(urn)==false)
  328.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriAccordo ("+uriAccordo+") non valido (urn:adc:<nome_accordo>:<versione>)");
  329.         String tipoAccordo = values[1];
  330.         if("adc".equals(tipoAccordo)==false)
  331.             throw new SICAToOpenSPCoopUtilitiesException("Tipo presente nell'uriAccordo ("+tipoAccordo+") non corrisponde quello atteso (adc)");
  332.         String nome = values[2];
  333.         if(nome==null)
  334.             throw new SICAToOpenSPCoopUtilitiesException("Nome non presente nell'uriAccordo ("+uriAccordo+")");
  335.         String versione = values[3];
  336.         if(versione==null)
  337.             throw new SICAToOpenSPCoopUtilitiesException("Versione non presente nell'uriAccordo ("+uriAccordo+")");
  338.         Integer versioneInt = null;
  339.         try{
  340.             versioneInt = Integer.parseInt(versione);
  341.         }catch(Exception e){
  342.             throw new SICAToOpenSPCoopUtilitiesException("Versione presente nell'uriAccordo ("+uriAccordo+") non ha un formato numerico: "+e.getMessage(),e);
  343.         }
  344.        
  345.         try{
  346.             ProtocolFiltroRicercaAccordi filtro = new ProtocolFiltroRicercaAccordi();
  347.             filtro.setVersione(versioneInt);
  348. //          org.openspcoop2.protocol.sdk.properties.ProtocolProperties protocolProperties = new org.openspcoop2.protocol.sdk.properties.ProtocolProperties();
  349. //          protocolProperties.addProperty(org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti.SPCOOP_PROTOCOL_PROPERTIES_NOME_ACCORDO_CNIPA, nome);
  350. //          filtro.setProtocolProperties(protocolProperties);
  351.             List<IDAccordoCooperazione> list = null;
  352.             try {
  353.                 list = registryReader.findIdAccordiCooperazione(filtro);
  354.             }catch(RegistryNotFound notFound) {}
  355.             if(list==null || list.size()<=0){
  356.                 throw new Exception("Non sono stati trovati accordi che contengono il nome '"+nome+"'");
  357.             }
  358.             if(list.size()>1){
  359.                 throw new Exception("Sono stati trovati più accordi ("+list.size()+") che contengono il nome '"+nome+"' e  la versione '"+versioneInt+"'");
  360.             }
  361.             return list.get(0);
  362.         }catch(Exception e){
  363.             throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  364.         }
  365.        
  366.     }
  367.    
  368.    
  369.    
  370.    
  371.    
  372.    
  373.    
  374.    
  375.    
  376.     /*
  377.      * urn:<tipo_accordo>:<soggetto_organizzativo>:<nome_accordo>:<versione>
  378.      * */
  379.     public static String buildIDAccordoSica(String tipo_accordo,String soggetto,String nome_accordo,Integer versione)throws SICAToOpenSPCoopUtilitiesException{
  380.        
  381.         if(tipo_accordo==null || "".equals(tipo_accordo))
  382.             throw new SICAToOpenSPCoopUtilitiesException("Tipo accordo non fornito");
  383.         if(soggetto==null || "".equals(soggetto))
  384.             throw new SICAToOpenSPCoopUtilitiesException("Soggetto organizzativo non fornito");
  385.         if(nome_accordo==null || "".equals(nome_accordo))
  386.             throw new SICAToOpenSPCoopUtilitiesException("Nome accordo non fornito");
  387.         if(versione==null)
  388.             throw new SICAToOpenSPCoopUtilitiesException("Versione non fornita");
  389.        
  390.         StringBuilder bf = new StringBuilder();
  391.         bf.append("urn:");
  392.         bf.append(tipo_accordo);
  393.         bf.append(":");
  394.         bf.append(soggetto);
  395.         bf.append(":");
  396.         bf.append(nome_accordo);
  397.         bf.append(":");
  398.         bf.append(versione);
  399.         return bf.toString();
  400.     }
  401.    
  402.     public static String idAccordoServizioParteComune_openspcoopToSica(IRegistryReader registryReader, IDAccordo idAccordo,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  403.        
  404.         // Recupero property del nome Accordo
  405.         String nomeAccordo = null;
  406.         try{
  407.             AccordoServizioParteComune aspc = registryReader.getAccordoServizioParteComune(idAccordo, false, false);
  408. //          if(aspc.sizeProtocolPropertyList()<=0){
  409. //              throw new Exception("Nome dell'accordo da utilizzare non trovato: non esistono proprieta' di protocollo all'interno dell'accordo di servizio");
  410. //          }
  411. //          for (int i = 0; i < aspc.sizeProtocolPropertyList(); i++) {
  412. //              if(org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti.SPCOOP_PROTOCOL_PROPERTIES_NOME_ACCORDO_CNIPA.equals(aspc.getProtocolProperty(i).getName())){
  413. //                  nomeAccordo = aspc.getProtocolProperty(i).getValue();
  414. //              }      
  415. //          }
  416. //          if(nomeAccordo==null){
  417. //              throw new Exception("Nome dell'accordo da utilizzare non trovato all'interno delle proprieta' di protocollo dell'accordo di servizio");
  418. //          }
  419.             nomeAccordo = aspc.getNome();
  420.         }catch(Exception e){
  421.             throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  422.         }
  423.        
  424.         return SICAtoOpenSPCoopUtilities.idAccordo_openspcoopToSica(nomeAccordo,idAccordo.getVersione(),idAccordo.getSoggettoReferente(),
  425.                 Costanti.TIPO_ACCORDO_SERVIZIO_PARTE_COMUNE,sicaToOpenSPCoopContext);
  426.     }
  427.     public static IDAccordo idAccordoServizioParteComune_sicaToOpenspcoop(IRegistryReader registryReader,String uriAccordo,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  428.         return SICAtoOpenSPCoopUtilities.idAccordo_sicaToOpenspcoop(registryReader,uriAccordo,Costanti.TIPO_ACCORDO_SERVIZIO_PARTE_COMUNE,sicaToOpenSPCoopContext);
  429.     }
  430.        
  431.     public static String idAccordoServizioComposto_openspcoopToSica(IRegistryReader registryReader, IDAccordo idAccordo,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  432.        
  433.         // Recupero property del nome Accordo
  434.         String nomeAccordo = null;
  435.         try{
  436.             AccordoServizioParteComune aspc = registryReader.getAccordoServizioParteComune(idAccordo, false, false);
  437. //          if(aspc.sizeProtocolPropertyList()<=0){
  438. //              throw new Exception("Nome dell'accordo da utilizzare non trovato: non esistono proprieta' di protocollo all'interno dell'accordo di servizio");
  439. //          }
  440. //          for (int i = 0; i < aspc.sizeProtocolPropertyList(); i++) {
  441. //              if(org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti.SPCOOP_PROTOCOL_PROPERTIES_NOME_ACCORDO_CNIPA.equals(aspc.getProtocolProperty(i).getName())){
  442. //                  nomeAccordo = aspc.getProtocolProperty(i).getValue();
  443. //              }      
  444. //          }
  445. //          if(nomeAccordo==null){
  446. //              throw new Exception("Nome dell'accordo da utilizzare non trovato all'interno delle proprieta' di protocollo dell'accordo di servizio");
  447. //          }
  448.             nomeAccordo = aspc.getNome();
  449.         }catch(Exception e){
  450.             throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  451.         }
  452.        
  453.         return SICAtoOpenSPCoopUtilities.idAccordo_openspcoopToSica(nomeAccordo,idAccordo.getVersione(),idAccordo.getSoggettoReferente(),
  454.                 Costanti.TIPO_ACCORDO_SERVIZIO_COMPOSTO,sicaToOpenSPCoopContext);
  455.     }
  456.     public static IDAccordo idAccordoServizioComposto_sicaToOpenspcoop(IRegistryReader registryReader,String uriAccordo,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  457.         return SICAtoOpenSPCoopUtilities.idAccordo_sicaToOpenspcoop(registryReader,uriAccordo,Costanti.TIPO_ACCORDO_SERVIZIO_COMPOSTO,sicaToOpenSPCoopContext);
  458.     }
  459.        
  460.     public static String idAccordoServizioParteSpecifica_openspcoopToSica(IRegistryReader registryReader, IDServizio idServizio,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  461.        
  462.         // Recupero property del nome Accordo
  463.         String nomeAccordo = null;
  464.         try{
  465.             AccordoServizioParteSpecifica asps = registryReader.getAccordoServizioParteSpecifica(idServizio, false);
  466. //          if(asps.sizeProtocolPropertyList()<=0){
  467. //              throw new Exception("Nome dell'accordo da utilizzare non trovato: non esistono proprieta' di protocollo all'interno dell'accordo di servizio");
  468. //          }
  469. //          for (int i = 0; i < asps.sizeProtocolPropertyList(); i++) {
  470. //              if(org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti.SPCOOP_PROTOCOL_PROPERTIES_NOME_ACCORDO_CNIPA.equals(asps.getProtocolProperty(i).getName())){
  471. //                  nomeAccordo = asps.getProtocolProperty(i).getValue();
  472. //              }      
  473. //          }
  474. //          if(nomeAccordo==null){
  475. //              throw new Exception("Nome dell'accordo da utilizzare non trovato all'interno delle proprieta' di protocollo dell'accordo di servizio");
  476. //          }
  477.             nomeAccordo = asps.getNome();
  478.         }catch(Exception e){
  479.             throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  480.         }
  481.        
  482.         return SICAtoOpenSPCoopUtilities.idAccordo_openspcoopToSica(nomeAccordo,idServizio.getVersione(),idServizio.getSoggettoErogatore(),
  483.                 Costanti.TIPO_ACCORDO_SERVIZIO_PARTE_SPECIFICA,sicaToOpenSPCoopContext);
  484.     }
  485.     public static IDServizio idAccordoServizioParteSpecifica_sicaToOpenspcoop(IRegistryReader registryReader,String uriAccordo,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  486.         return SICAtoOpenSPCoopUtilities.idServizio_sicaToOpenspcoop(registryReader,uriAccordo,Costanti.TIPO_ACCORDO_SERVIZIO_PARTE_SPECIFICA,sicaToOpenSPCoopContext);
  487.     }
  488.    
  489.    
  490.    
  491.     private static String idAccordo_openspcoopToSica(String nomeAccordo, Integer versioneAccordo, IDSoggetto soggettoAccordo,
  492.             String tipo,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  493.         if(nomeAccordo==null)
  494.             throw new SICAToOpenSPCoopUtilitiesException("IDAccordo.nome non definito");
  495.         if(versioneAccordo==null)
  496.             throw new SICAToOpenSPCoopUtilitiesException("IDAccordo.versione non definito");
  497.         if(soggettoAccordo==null)
  498.             throw new SICAToOpenSPCoopUtilitiesException("IDAccordo.soggetto non definito");
  499.         if(soggettoAccordo.getTipo()==null)
  500.             throw new SICAToOpenSPCoopUtilitiesException("IDAccordo.soggetto.tipo non definito");
  501.         if(soggettoAccordo.getNome()==null)
  502.             throw new SICAToOpenSPCoopUtilitiesException("IDAccordo.soggetto.nome non definito");
  503.         if("spc".equals(soggettoAccordo.getTipo())==false)
  504.             throw new SICAToOpenSPCoopUtilitiesException("Tipo soggetto referente diverso da SPC non utilizzabile");
  505.        
  506.         String codiceIPASoggettoReferente =
  507.             sicaToOpenSPCoopContext.getCodiceIPA(new IDSoggetto(soggettoAccordo.getTipo(), soggettoAccordo.getNome()));
  508.         if(codiceIPASoggettoReferente==null){
  509.             codiceIPASoggettoReferente = SICAtoOpenSPCoopUtilities.buildIDSoggettoSica(soggettoAccordo.getNome(),false);    
  510.         }
  511.        
  512.         return SICAtoOpenSPCoopUtilities.buildIDAccordoSica(tipo,
  513.                 codiceIPASoggettoReferente,
  514.                 nomeAccordo,
  515.                 versioneAccordo);
  516.     }
  517.     public static IDAccordo idAccordo_sicaToOpenspcoop(IRegistryReader registryReader, String uriAccordo,String tipoAtteso,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  518.         if(uriAccordo==null)
  519.             throw new SICAToOpenSPCoopUtilitiesException("uriAccordo non definito");
  520.         String [] values = uriAccordo.split(":");
  521.         if(values.length != 5)
  522.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriAccordo ("+uriAccordo+") non valido (urn:<tipo_accordo>:<soggetto_organizzativo>:<nome_accordo>:<versione>)");
  523.         String urn = values[0];
  524.         if("urn".equals(urn)==false)
  525.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriAccordo ("+uriAccordo+") non valido (urn:<tipo_accordo>:<soggetto_organizzativo>:<nome_accordo>:<versione>)");
  526.         String tipoAccordo = values[1];
  527.         if(tipoAtteso.equals(tipoAccordo)==false)
  528.             throw new SICAToOpenSPCoopUtilitiesException("Tipo presente nell'uriAccordo ("+tipoAccordo+") non corrisponde quello atteso ("+tipoAtteso+")");
  529.         String soggetto = values[2];
  530.         if(soggetto==null)
  531.             throw new SICAToOpenSPCoopUtilitiesException("Soggetto non presente nell'uriAccordo ("+uriAccordo+")");
  532.         IDSoggetto idSoggetto = sicaToOpenSPCoopContext.getIDSoggetto(soggetto);
  533.         if(idSoggetto==null)
  534.             idSoggetto = SICAtoOpenSPCoopUtilities.idSoggetto_sicaToOpenspcoop(soggetto,false);
  535.         String nome = values[3];
  536.         if(nome==null)
  537.             throw new SICAToOpenSPCoopUtilitiesException("Nome non presente nell'uriAccordo ("+uriAccordo+")");
  538.         String versione = values[4];
  539.         if(versione==null)
  540.             throw new SICAToOpenSPCoopUtilitiesException("Versione non presente nell'uriAccordo ("+uriAccordo+")");
  541.         Integer versioneInt = null;
  542.         try{
  543.             versioneInt = Integer.parseInt(versione);
  544.         }catch(Exception e){
  545.             throw new SICAToOpenSPCoopUtilitiesException("Versione presente nell'uriAccordo ("+uriAccordo+") non ha un formato numerico: "+e.getMessage(),e);
  546.         }
  547.        
  548.         try{
  549.             ProtocolFiltroRicercaAccordi filtro = new ProtocolFiltroRicercaAccordi();
  550.             filtro.setVersione(versioneInt);
  551.             filtro.setSoggetto(idSoggetto);
  552. //          org.openspcoop2.protocol.sdk.properties.ProtocolProperties protocolProperties = new org.openspcoop2.protocol.sdk.properties.ProtocolProperties();
  553. //          protocolProperties.addProperty(org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti.SPCOOP_PROTOCOL_PROPERTIES_NOME_ACCORDO_CNIPA, nome);
  554. //          filtro.setProtocolProperties(protocolProperties);
  555.             List<IDAccordo> list = null;
  556.             try {
  557.                 list = registryReader.findIdAccordiServizioParteComune(filtro);
  558.             }catch(RegistryNotFound notFound) {}
  559.             if(list==null || list.size()<=0){
  560.                 throw new Exception("Non sono stati trovati accordi che contengono il nome '"+nome+"'");
  561.             }
  562.             if(list.size()>1){
  563.                 throw new Exception("Sono stati trovati più accordi ("+list.size()+") che contengono il nome '"+nome+"',  la versione '"+versioneInt+"' ed il soggetto '"+idSoggetto+"'");
  564.             }
  565.             return list.get(0);
  566.         }catch(Exception e){
  567.             throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  568.         }

  569.     }
  570.     public static IDServizio idServizio_sicaToOpenspcoop(IRegistryReader registryReader, String uriAccordo,String tipoAtteso,SICAtoOpenSPCoopContext sicaToOpenSPCoopContext) throws SICAToOpenSPCoopUtilitiesException{
  571.         if(uriAccordo==null)
  572.             throw new SICAToOpenSPCoopUtilitiesException("uriAccordo non definito");
  573.         String [] values = uriAccordo.split(":");
  574.         if(values.length != 5)
  575.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriAccordo ("+uriAccordo+") non valido (urn:<tipo_accordo>:<soggetto_organizzativo>:<nome_accordo>:<versione>)");
  576.         String urn = values[0];
  577.         if("urn".equals(urn)==false)
  578.             throw new SICAToOpenSPCoopUtilitiesException("Formato uriAccordo ("+uriAccordo+") non valido (urn:<tipo_accordo>:<soggetto_organizzativo>:<nome_accordo>:<versione>)");
  579.         String tipoAccordo = values[1];
  580.         if(tipoAtteso.equals(tipoAccordo)==false)
  581.             throw new SICAToOpenSPCoopUtilitiesException("Tipo presente nell'uriAccordo ("+tipoAccordo+") non corrisponde quello atteso ("+tipoAtteso+")");
  582.         String soggetto = values[2];
  583.         if(soggetto==null)
  584.             throw new SICAToOpenSPCoopUtilitiesException("Soggetto non presente nell'uriAccordo ("+uriAccordo+")");
  585.         IDSoggetto idSoggetto = sicaToOpenSPCoopContext.getIDSoggetto(soggetto);
  586.         if(idSoggetto==null)
  587.             idSoggetto = SICAtoOpenSPCoopUtilities.idSoggetto_sicaToOpenspcoop(soggetto,false);
  588.         String nome = values[3];
  589.         if(nome==null)
  590.             throw new SICAToOpenSPCoopUtilitiesException("Nome non presente nell'uriAccordo ("+uriAccordo+")");
  591.         String versione = values[4];
  592.         if(versione==null)
  593.             throw new SICAToOpenSPCoopUtilitiesException("Versione non presente nell'uriAccordo ("+uriAccordo+")");
  594.         Integer versioneInt = null;
  595.         try{
  596.             versioneInt = Integer.parseInt(versione);
  597.         }catch(Exception e){
  598.             throw new SICAToOpenSPCoopUtilitiesException("Versione presente nell'uriAccordo ("+uriAccordo+") non ha un formato numerico: "+e.getMessage(),e);
  599.         }
  600.        
  601.         try{
  602.             ProtocolFiltroRicercaServizi filtro = new ProtocolFiltroRicercaServizi();
  603.             filtro.setVersioneServizio(versioneInt);
  604.             filtro.setSoggettoErogatore(idSoggetto);
  605. //          org.openspcoop2.protocol.sdk.properties.ProtocolProperties protocolProperties = new org.openspcoop2.protocol.sdk.properties.ProtocolProperties();
  606. //          protocolProperties.addProperty(org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti.SPCOOP_PROTOCOL_PROPERTIES_NOME_ACCORDO_CNIPA, nome);
  607. //          filtro.setProtocolPropertiesServizi(protocolProperties);
  608.             List<IDServizio> list = null;
  609.             try {
  610.                 list = registryReader.findIdAccordiServizioParteSpecifica(filtro);
  611.             }catch(RegistryNotFound notFound) {}
  612.             if(list==null || list.size()<=0){
  613.                 throw new Exception("Non sono stati trovati accordi che contengono il nome '"+nome+"'");
  614.             }
  615.             if(list.size()>1){
  616.                 throw new Exception("Sono stati trovati più accordi ("+list.size()+") che contengono il nome '"+nome+"',  la versione '"+versioneInt+"' ed il soggetto '"+idSoggetto+"'");
  617.             }
  618.             return list.get(0);
  619.         }catch(Exception e){
  620.             throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  621.         }

  622.     }
  623.    
  624.    
  625.    
  626.    
  627.    
  628.    
  629.    
  630.    
  631.    
  632.     /* WSDL Utilities */
  633.     public static String readConnettoreFromWsdlImplementativo(byte[] wsdlImplementativo) throws SICAToOpenSPCoopUtilitiesException{
  634.        
  635.         try{
  636.             AbstractXMLUtils xmlUtils = org.openspcoop2.message.xml.MessageXMLUtils.DEFAULT;        
  637.             Document documentLogico = xmlUtils.newDocument(wsdlImplementativo);
  638.            
  639.             NodeList list = documentLogico.getChildNodes();
  640.             if(list!=null){
  641.                 for(int i=0; i<list.getLength(); i++){
  642.                     Node child = list.item(i);
  643.                     if("definitions".equals(child.getLocalName())){
  644.                         NodeList listDefinition = child.getChildNodes();
  645.                         if(listDefinition!=null){
  646.                             for(int j=0; j<listDefinition.getLength(); j++){
  647.                                 Node childDefinition = listDefinition.item(j);
  648.                                 if("service".equals(childDefinition.getLocalName())){
  649.                                     NodeList listPort = childDefinition.getChildNodes();
  650.                                     if(listPort!=null){
  651.                                         for(int z=0; z<listPort.getLength(); z++){
  652.                                             Node port = listPort.item(z);
  653.                                             if("port".equals(port.getLocalName())){
  654.                                                 NodeList addressList = port.getChildNodes();
  655.                                                 if(addressList!=null){
  656.                                                     for(int m=0; m<addressList.getLength(); m++){
  657.                                                         Node address = addressList.item(m);
  658.                                                         if("address".equals(address.getLocalName())){
  659.                                                             return address.getAttributes().getNamedItem("location").getNodeValue();
  660.                                                         }
  661.                                                     }
  662.                                                 }
  663.                                             }
  664.                                         }
  665.                                     }
  666.                                 }
  667.                             }
  668.                         }
  669.                     }
  670.                 }
  671.             }
  672.            
  673.             return null;
  674.            
  675.         }catch(Exception e){
  676.             throw new SICAToOpenSPCoopUtilitiesException("readWsdlImplementativo error: "+e.getMessage(),e);
  677.         }
  678.     }
  679.     public static byte[] saveConnettoreIntoWsdlImplementativo(byte[] wsdlImplementativo,String url) throws SICAToOpenSPCoopUtilitiesException{
  680.        
  681.         try{
  682.             AbstractXMLUtils xmlUtils = org.openspcoop2.message.xml.MessageXMLUtils.DEFAULT;        
  683.             Document documentLogico = xmlUtils.newDocument(wsdlImplementativo);
  684.            
  685.             NodeList list = documentLogico.getChildNodes();
  686.             if(list!=null){
  687.                 for(int i=0; i<list.getLength(); i++){
  688.                     Node child = list.item(i);
  689.                     if("definitions".equals(child.getLocalName())){
  690.                         NodeList listDefinition = child.getChildNodes();
  691.                         if(listDefinition!=null){
  692.                             for(int j=0; j<listDefinition.getLength(); j++){
  693.                                 Node childDefinition = listDefinition.item(j);
  694.                                 if("service".equals(childDefinition.getLocalName())){
  695.                                     NodeList listPort = childDefinition.getChildNodes();
  696.                                     if(listPort!=null){
  697.                                         for(int z=0; z<listPort.getLength(); z++){
  698.                                             Node port = listPort.item(z);
  699.                                             if("port".equals(port.getLocalName())){
  700.                                                 NodeList addressList = port.getChildNodes();
  701.                                                 if(addressList!=null){
  702.                                                     for(int m=0; m<addressList.getLength(); m++){
  703.                                                         Node address = addressList.item(m);
  704.                                                         if("address".equals(address.getLocalName())){
  705.                                                             address.getAttributes().getNamedItem("location").setNodeValue(url);
  706.                                                         }
  707.                                                     }
  708.                                                 }
  709.                                             }
  710.                                         }
  711.                                     }
  712.                                 }
  713.                             }
  714.                         }
  715.                     }
  716.                 }
  717.             }
  718.            
  719.             return xmlUtils.toByteArray(documentLogico);
  720.            
  721.         }catch(Exception e){
  722.             throw new SICAToOpenSPCoopUtilitiesException("readWsdlImplementativo error: "+e.getMessage(),e);
  723.         }
  724.     }
  725.    
  726.     public static boolean isWsdlEmpty(byte[] wsdl){
  727.        
  728.         try{
  729.            
  730.             // <wsdl:definitions xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\"/>
  731.             Element el = MessageXMLUtils.DEFAULT.newElement(wsdl);
  732.            
  733.             if("http://schemas.xmlsoap.org/wsdl/".equals(el.getNamespaceURI())==false){
  734.                 return false;
  735.             }
  736.             if("definitions".equals(el.getLocalName())==false){
  737.                 return false;
  738.             }
  739.            
  740.             List<Node> childs = SoapUtils.getNotEmptyChildNodes(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), el, false);
  741.             if(childs.size()<=0){
  742.                 return true;
  743.             }
  744.             else{
  745.                 return false;
  746.             }
  747.        
  748.         }catch(Exception e){
  749.             //e.printStackTrace();
  750.             return false;
  751.         }
  752.     }
  753.    
  754.     private static String resizeDescriptionForMaxLength(String description){
  755.         if(description!=null && description.length()>255){
  756.             return description.substring(0, 252)+"...";
  757.         }
  758.         else{
  759.             return description;
  760.         }
  761.     }
  762.    
  763.    
  764.    
  765.    
  766.    
  767.    
  768.    
  769.    
  770.    
  771.    
  772.     /* Accordi di cooperazione */
  773.     public static org.openspcoop2.core.registry.AccordoCooperazione accordoCooperazione_sicaToOpenspcoop(
  774.             IRegistryReader registryReader,
  775.             it.gov.spcoop.sica.dao.AccordoCooperazione accordoCooperazioneSICA,
  776.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,
  777.             Logger logParam) throws SICAToOpenSPCoopUtilitiesException{
  778.        
  779.         Logger log = logParam;
  780.         if(log==null){
  781.             log = LoggerWrapperFactory.getLogger(SICAtoOpenSPCoopUtilities.class);
  782.         }
  783.        
  784.         org.openspcoop2.core.registry.AccordoCooperazione accCooperazioneOpenspcoop = new org.openspcoop2.core.registry.AccordoCooperazione();
  785.        
  786.         /* Metadati presenti nel Manifest dell'Accordo di Cooperazione. */
  787.         it.gov.spcoop.sica.manifest.AccordoCooperazione manifest = accordoCooperazioneSICA.getManifesto();
  788.         accCooperazioneOpenspcoop.setDescrizione(resizeDescriptionForMaxLength(manifest.getDescrizione()));
  789.         accCooperazioneOpenspcoop.setNome(manifest.getNome());
  790.         if(manifest.getVersione()!=null)
  791.             accCooperazioneOpenspcoop.setVersione(Integer.parseInt(manifest.getVersione()));
  792.         accCooperazioneOpenspcoop.setOraRegistrazione(manifest.getDataCreazione());
  793.         //accCooperazioneOpenspcoop.setDataPubblicazione(manifest.getDataPubblicazione());
  794.         //manifest.getRiservato() ???
  795.        
  796.         // Coordinatore:
  797.         if(manifest.getCoordinatore()!=null){
  798.             IdSoggetto soggettoReferente =
  799.                 new IdSoggetto();
  800.             IDSoggetto soggettoCoordinatore = sicaToOpenspcoopContext.getIDSoggetto(SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(manifest.getCoordinatore().toString()));
  801.             if(soggettoCoordinatore==null){
  802.                 soggettoCoordinatore = SICAtoOpenSPCoopUtilities.idSoggetto_sicaToOpenspcoop(manifest.getCoordinatore().toString());
  803.             }
  804.             soggettoReferente.setNome(soggettoCoordinatore.getNome());
  805.             soggettoReferente.setTipo(soggettoCoordinatore.getTipo());
  806.             accCooperazioneOpenspcoop.setSoggettoReferente(soggettoReferente);
  807.         }
  808.                
  809.         // Allegati
  810.         if(manifest.getAllegati()!=null){
  811.             for(int i=0; i<manifest.getAllegati().sizeGenericoDocumentoList(); i++){
  812.                 String fileName = manifest.getAllegati().getGenericoDocumento(i);
  813.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  814.                 docOpenspcoop.setFile(fileName);
  815.                 docOpenspcoop.setRuolo(RuoliDocumento.allegato.toString());        
  816.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  817.                 for(int j=0; j<accordoCooperazioneSICA.sizeAllegati(); j++){
  818.                     if(fileName.equals(accordoCooperazioneSICA.getAllegato(j).getNome())){
  819.                         docSICA = accordoCooperazioneSICA.getAllegato(j);
  820.                     }
  821.                 }
  822.                 if(docSICA==null)
  823.                     throw new SICAToOpenSPCoopUtilitiesException("Allegato con nome["+fileName+"] non trovato");
  824.                 docOpenspcoop.setTipo(docSICA.getTipo());
  825.                 docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  826.                 accCooperazioneOpenspcoop.addAllegato(docOpenspcoop);
  827.             }
  828.         }
  829.        
  830.         // SpecificaSemiformale
  831.         if(manifest.getSpecificaSemiformale()!=null){
  832.             for(int i=0; i<manifest.getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  833.                 DocumentoSemiformale specificaSemiformale = manifest.getSpecificaSemiformale().getDocumentoSemiformale(i);
  834.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  835.                 String fileName = specificaSemiformale.getBase();
  836.                 docOpenspcoop.setFile(fileName);
  837.                 docOpenspcoop.setRuolo(RuoliDocumento.specificaSemiformale.toString());        
  838.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  839.                 for(int j=0; j<accordoCooperazioneSICA.sizeSpecificheSemiformali(); j++){
  840.                     if(fileName.equals(accordoCooperazioneSICA.getSpecificaSemiformale(j).getNome())){
  841.                         docSICA = accordoCooperazioneSICA.getSpecificaSemiformale(j);
  842.                     }
  843.                 }
  844.                 if(docSICA==null)
  845.                     throw new SICAToOpenSPCoopUtilitiesException("SpecificaSemiformale con nome["+fileName+"] non trovato");
  846.                 docOpenspcoop.setTipo(docSICA.getTipo());
  847.                 docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  848.                 accCooperazioneOpenspcoop.addSpecificaSemiformale(docOpenspcoop);
  849.             }
  850.         }
  851.        
  852.         // Partecipanti
  853.         ElencoPartecipanti elencoPartecipantiSICA = manifest.getElencoPartecipanti();
  854.         if(elencoPartecipantiSICA!=null){
  855.             if(elencoPartecipantiSICA.sizePartecipanteList()>0){
  856.                 accCooperazioneOpenspcoop.setElencoPartecipanti(new AccordoCooperazionePartecipanti());
  857.             }
  858.             for(int i=0; i<elencoPartecipantiSICA.sizePartecipanteList(); i++){
  859.                 String partecipante = elencoPartecipantiSICA.getPartecipante(i).toString();
  860.                
  861.                 IdSoggetto soggetto =
  862.                     new IdSoggetto();
  863.                 IDSoggetto soggettoPartecipante = sicaToOpenspcoopContext.getIDSoggetto(SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(partecipante));
  864.                 if(soggettoPartecipante==null){
  865.                     soggettoPartecipante = SICAtoOpenSPCoopUtilities.idSoggetto_sicaToOpenspcoop(partecipante);
  866.                 }
  867.                 soggetto.setNome(soggettoPartecipante.getNome());
  868.                 soggetto.setTipo(soggettoPartecipante.getTipo());
  869.                 accCooperazioneOpenspcoop.getElencoPartecipanti().addSoggettoPartecipante(soggetto);
  870.             }
  871.         }
  872.        
  873.         // ServiziComposti
  874.         it.gov.spcoop.sica.manifest.ElencoServiziComposti serviziComposti = manifest.getServiziComposti();
  875.         if(serviziComposti!=null){
  876.             for(int i=0; i<serviziComposti.sizeServizioCompostoList(); i++){
  877.                 String servizioComposto = serviziComposti.getServizioComposto(i).toString();
  878.                 IDAccordo idAccordo = SICAtoOpenSPCoopUtilities.idAccordoServizioComposto_sicaToOpenspcoop(registryReader,servizioComposto,sicaToOpenspcoopContext);
  879.                 try{
  880.                     accCooperazioneOpenspcoop.addUriServiziComposti(IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordo));
  881.                 }catch(Exception e){
  882.                     throw new SICAToOpenSPCoopUtilitiesException("uri IDAccordo servizio composto ["+servizioComposto+"] non costruibile: "+e.getMessage(),e);
  883.                 }
  884.             }
  885.         }
  886.        
  887.         /* Firma apposta dal Servizio di Registro quando l'accordo viene scaricato dal Registro stesso  */
  888.         //if(manifest.getFirmato() && accordoCooperazioneSICA.getFirma()!=null)
  889.         //  accCooperazioneOpenspcoop.setByteFirma(accordoCooperazioneSICA.getFirma().getBytes());
  890.        
  891.        
  892.         return accCooperazioneOpenspcoop;
  893.     }
  894.     public static it.gov.spcoop.sica.dao.AccordoCooperazione accordoCooperazione_openspcoopToSica(
  895.             IRegistryReader registryReader,
  896.             org.openspcoop2.core.registry.AccordoCooperazione accordoCooperazioneOpenspcoop,
  897.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,
  898.             Logger logParam)throws SICAToOpenSPCoopUtilitiesException{
  899.                
  900.         Logger log = logParam;
  901.         if(log==null){
  902.             log = LoggerWrapperFactory.getLogger(SICAtoOpenSPCoopUtilities.class);
  903.         }
  904.        
  905.         boolean includiInfoRegistroGenerale = sicaToOpenspcoopContext.isSICAClient_includiInfoRegistroGenerale();
  906.                
  907.         it.gov.spcoop.sica.dao.AccordoCooperazione accCooperazioneSICA =
  908.             new it.gov.spcoop.sica.dao.AccordoCooperazione();
  909.        
  910.         /* Metadati presenti nel Manifest dell'Accordo di Cooperazione. */
  911.         it.gov.spcoop.sica.manifest.AccordoCooperazione manifest = new it.gov.spcoop.sica.manifest.AccordoCooperazione();
  912.         manifest.setDescrizione(accordoCooperazioneOpenspcoop.getDescrizione());
  913.         manifest.setNome(accordoCooperazioneOpenspcoop.getNome());
  914.         manifest.setDataCreazione(accordoCooperazioneOpenspcoop.getOraRegistrazione());
  915.         //manifest.getRiservato() ???
  916.        
  917.         if(includiInfoRegistroGenerale){
  918.            
  919.             if(accordoCooperazioneOpenspcoop.getVersione()!=null){
  920.                 manifest.setVersione(accordoCooperazioneOpenspcoop.getVersione().intValue()+"");
  921.             }
  922.             //manifest.setDataPubblicazione(accordoCooperazioneOpenspcoop.getDataPubblicazione());
  923.             //if(accordoCooperazioneOpenspcoop.getByteFirma()!=null){
  924.             //  manifest.setFirmato(true);
  925.             //}
  926.            
  927.             // Coordinatore
  928.             if(accordoCooperazioneOpenspcoop.getSoggettoReferente()==null)
  929.                 throw new SICAToOpenSPCoopUtilitiesException("Soggetto referente non definito");
  930.             IDSoggetto soggettoCoordinatore = new IDSoggetto(accordoCooperazioneOpenspcoop.getSoggettoReferente().getTipo(),accordoCooperazioneOpenspcoop.getSoggettoReferente().getNome());
  931.             String uriCoordinatore = sicaToOpenspcoopContext.getCodiceIPA(soggettoCoordinatore);
  932.             if(uriCoordinatore==null)
  933.                 uriCoordinatore = SICAtoOpenSPCoopUtilities.idSoggetto_openspcoopToSica(soggettoCoordinatore);
  934.             else
  935.                 uriCoordinatore = SICAtoOpenSPCoopUtilities.appendURI_IDSoggettoSica(uriCoordinatore);
  936.             try {
  937.                 manifest.setCoordinatore(new URI(uriCoordinatore));
  938.             }catch(Exception e) {
  939.                 throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  940.             }
  941.            
  942.             // ServiziComposti
  943.             it.gov.spcoop.sica.manifest.ElencoServiziComposti sComposti = null;
  944.             for(int i=0; i<accordoCooperazioneOpenspcoop.sizeUriServiziCompostiList(); i++){
  945.                 String uriServizioComposto =  accordoCooperazioneOpenspcoop.getUriServiziComposti(i);
  946.                    
  947.                 if(sComposti==null)
  948.                     sComposti = new it.gov.spcoop.sica.manifest.ElencoServiziComposti();
  949.                 try{
  950.                     sComposti.addServizioComposto(new URI(SICAtoOpenSPCoopUtilities.
  951.                             idAccordoServizioComposto_openspcoopToSica(registryReader,
  952.                                     IDAccordoFactory.getInstance().getIDAccordoFromUri(uriServizioComposto),sicaToOpenspcoopContext)));
  953.                 }catch(Exception e){
  954.                     throw new SICAToOpenSPCoopUtilitiesException("Costruzione IDAccordo servizio composto ["+uriServizioComposto+"] non riuscito: "+e.getMessage(),e);
  955.                 }
  956.             }
  957.             if(sComposti!=null)
  958.                 manifest.setServiziComposti(sComposti);
  959.            
  960.         }
  961.        
  962.         // Allegati
  963.         if(accordoCooperazioneOpenspcoop.sizeAllegatoList()>0){
  964.             it.gov.spcoop.sica.manifest.ElencoAllegati allegato = new it.gov.spcoop.sica.manifest.ElencoAllegati();
  965.             for(int i=0; i<accordoCooperazioneOpenspcoop.sizeAllegatoList(); i++){
  966.                 org.openspcoop2.core.registry.Documento docOpenspcoop = accordoCooperazioneOpenspcoop.getAllegato(i);
  967.                 allegato.addGenericoDocumento(docOpenspcoop.getFile());
  968.                 it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  969.                 docSICA.setTipo(docOpenspcoop.getTipo());
  970.                 docSICA.setNome(docOpenspcoop.getFile());
  971.                 if(docOpenspcoop.getByteContenuto()==null){
  972.                     throw new SICAToOpenSPCoopUtilitiesException("Byte dell'allegato "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  973.                 }
  974.                 docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  975.                 accCooperazioneSICA.addAllegato(docSICA);
  976.             }
  977.             manifest.setAllegati(allegato);
  978.         }
  979.        
  980.         // SpecificheSemiformali
  981.         if(accordoCooperazioneOpenspcoop.sizeSpecificaSemiformaleList()>0){
  982.             it.gov.spcoop.sica.manifest.SpecificaSemiformale specificaSemiformale = new it.gov.spcoop.sica.manifest.SpecificaSemiformale();
  983.             for(int i=0; i<accordoCooperazioneOpenspcoop.sizeSpecificaSemiformaleList(); i++){
  984.                 org.openspcoop2.core.registry.Documento docOpenspcoop = accordoCooperazioneOpenspcoop.getSpecificaSemiformale(i);
  985.                
  986.                 it.gov.spcoop.sica.manifest.DocumentoSemiformale docSemiformale = new it.gov.spcoop.sica.manifest.DocumentoSemiformale();
  987.                 docSemiformale.setTipo(docOpenspcoop.getTipo());
  988.                 docSemiformale.setBase(docOpenspcoop.getFile());
  989.                 specificaSemiformale.addDocumentoSemiformale(docSemiformale);
  990.                
  991.                 it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  992.                 docSICA.setTipo(docOpenspcoop.getTipo());
  993.                 docSICA.setNome(docOpenspcoop.getFile());
  994.                 if(docOpenspcoop.getByteContenuto()==null){
  995.                     throw new SICAToOpenSPCoopUtilitiesException("Byte della specifica semiformale "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  996.                 }
  997.                 docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  998.                 accCooperazioneSICA.addSpecificaSemiformale(docSICA);
  999.             }
  1000.             manifest.setSpecificaSemiformale(specificaSemiformale);
  1001.         }

  1002.         // Partecipanti
  1003.         it.gov.spcoop.sica.manifest.ElencoPartecipanti partecipanti = null;
  1004.         if(accordoCooperazioneOpenspcoop.getElencoPartecipanti()!=null){
  1005.             AccordoCooperazionePartecipanti partecipantiOpenSPCoop = accordoCooperazioneOpenspcoop.getElencoPartecipanti();
  1006.             for(int i=0; i<partecipantiOpenSPCoop.sizeSoggettoPartecipanteList(); i++){
  1007.                 IdSoggetto soggetto = partecipantiOpenSPCoop.getSoggettoPartecipante(i);
  1008.                 IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  1009.                
  1010.                 if(partecipanti==null)
  1011.                     partecipanti = new it.gov.spcoop.sica.manifest.ElencoPartecipanti();
  1012.                 String codiceIPAPartecipante = sicaToOpenspcoopContext.getCodiceIPA(idSoggetto);
  1013.                 if(codiceIPAPartecipante==null){
  1014.                     codiceIPAPartecipante = SICAtoOpenSPCoopUtilities.idSoggetto_openspcoopToSica(idSoggetto);
  1015.                 }
  1016.                 else
  1017.                     codiceIPAPartecipante = SICAtoOpenSPCoopUtilities.appendURI_IDSoggettoSica(codiceIPAPartecipante);
  1018.                 try {
  1019.                     partecipanti.addPartecipante(new URI(codiceIPAPartecipante));
  1020.                 }catch(Exception e) {
  1021.                     throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  1022.                 }
  1023.             }
  1024.         }
  1025.         if(partecipanti!=null)
  1026.             manifest.setElencoPartecipanti(partecipanti);
  1027.        
  1028.         /* Firma apposta dal Servizio di Registro quando l'accordo viene scaricato dal Registro stesso  */
  1029.         if(includiInfoRegistroGenerale){
  1030.             //if(accordoCooperazioneOpenspcoop.getByteFirma()!=null){
  1031.             //  it.gov.spcoop.sica.firma.Firma firma = new it.gov.spcoop.sica.firma.Firma();
  1032.             //  accCooperazioneSICA.setFirma(firma);
  1033.             //}
  1034.         }
  1035.        
  1036.         accCooperazioneSICA.setManifesto(manifest);
  1037.         return accCooperazioneSICA;
  1038.     }
  1039.    
  1040.    
  1041.    
  1042.    
  1043.    
  1044.    
  1045.    
  1046.    
  1047.    
  1048.    
  1049.    
  1050.     /* Accordi di servizio, parte comune */
  1051.     public static org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizioParteComune_sicaToOpenspcoop(
  1052.             IRegistryReader registryReader,
  1053.             it.gov.spcoop.sica.dao.AccordoServizioParteComune accordoServizioSICA,
  1054.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,
  1055.             Logger log)throws SICAToOpenSPCoopUtilitiesException{
  1056.        
  1057.         if(log==null){
  1058.             log = LoggerWrapperFactory.getLogger(SICAtoOpenSPCoopUtilities.class);
  1059.         }
  1060.        
  1061.         boolean verificaCorreggiLocationWSDL = sicaToOpenspcoopContext.isWSDL_XSD_allineaImportInclude();
  1062.         boolean prettyDocument = sicaToOpenspcoopContext.isWSDL_XSD_prettyDocuments();
  1063.         boolean documentoSpecificaEGOV_asClientSICADisabled_childUnquilified = sicaToOpenspcoopContext.isInformazioniEGov_wscpDisabled_childUnqualified();
  1064.         boolean documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified = sicaToOpenspcoopContext.isInformazioniEGov_wscpEnabled_childUnqualified();
  1065.        
  1066.         org.openspcoop2.core.registry.AccordoServizioParteComune accServizioOpenspcoop = new org.openspcoop2.core.registry.AccordoServizioParteComune();
  1067.         accServizioOpenspcoop.setServiceBinding(ServiceBinding.SOAP);
  1068.         accServizioOpenspcoop.setFormatoSpecifica(FormatoSpecifica.WSDL_11);
  1069.        
  1070.         /* Metadati presenti nel Manifest dell'Accordo di Cooperazione. */
  1071.         it.gov.spcoop.sica.manifest.AccordoServizio manifest = accordoServizioSICA.getManifesto();
  1072.         accServizioOpenspcoop.setDescrizione(resizeDescriptionForMaxLength(manifest.getDescrizione()));
  1073.         accServizioOpenspcoop.setNome(manifest.getNome());
  1074.         if(manifest.getVersione()!=null){
  1075.             accServizioOpenspcoop.setVersione(Integer.parseInt(manifest.getVersione()));
  1076.         }
  1077.         accServizioOpenspcoop.setOraRegistrazione(manifest.getDataCreazione());
  1078.         //accServizioOpenspcoop.setDataPubblicazione(manifest.getDataPubblicazione());
  1079.         accServizioOpenspcoop.setProfiloCollaborazione(CostantiRegistroServizi.ONEWAY); // Default per AS
  1080.         //manifest.getRiservato() ???
  1081.        
  1082.         it.gov.spcoop.sica.manifest.AccordoServizioParteComune parteComune = manifest.getParteComune();
  1083.        
  1084.         // SpecificaInterfaccia
  1085.         it.gov.spcoop.sica.manifest.SpecificaInterfaccia specificaInterfaccia = parteComune.getSpecificaInterfaccia();
  1086.         if( (accordoServizioSICA.getInterfacciaConcettuale()!=null) ||  (accordoServizioSICA.getInterfacciaLogicaLatoErogatore()!=null) || (accordoServizioSICA.getInterfacciaLogicaLatoFruitore()!=null) ){
  1087.             if(specificaInterfaccia.getInterfacciaConcettuale()!=null &&  accordoServizioSICA.getInterfacciaConcettuale()!=null &&
  1088.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getInterfacciaConcettuale().getContenuto()) ){
  1089.                 accServizioOpenspcoop.setByteWsdlConcettuale(accordoServizioSICA.getInterfacciaConcettuale().getContenuto());
  1090.             }
  1091.             if(specificaInterfaccia.getInterfacciaLogicaLatoErogatore()!=null && accordoServizioSICA.getInterfacciaLogicaLatoErogatore()!=null &&
  1092.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getInterfacciaLogicaLatoErogatore().getContenuto()) ){
  1093.                 accServizioOpenspcoop.setByteWsdlLogicoErogatore(accordoServizioSICA.getInterfacciaLogicaLatoErogatore().getContenuto());
  1094.             }
  1095.             if(specificaInterfaccia.getInterfacciaLogicaLatoFruitore()!=null && accordoServizioSICA.getInterfacciaLogicaLatoFruitore()!=null &&
  1096.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getInterfacciaLogicaLatoFruitore().getContenuto()) ){
  1097.                 accServizioOpenspcoop.setByteWsdlLogicoFruitore(accordoServizioSICA.getInterfacciaLogicaLatoFruitore().getContenuto());
  1098.             }
  1099.         }
  1100.        
  1101.         // SpecificaConversazione
  1102.         it.gov.spcoop.sica.manifest.SpecificaConversazione specificaConversazione = parteComune.getSpecificaConversazione();
  1103.         if( (accordoServizioSICA.getConversazioneConcettuale()!=null) ||  (accordoServizioSICA.getConversazioneLogicaErogatore()!=null) || (accordoServizioSICA.getConversazioneLogicaFruitore()!=null) ){
  1104.             if(specificaConversazione.getConversazioneConcettuale()!=null && accordoServizioSICA.getConversazioneConcettuale()!=null  &&
  1105.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getConversazioneConcettuale().getContenuto()) ){
  1106.                 accServizioOpenspcoop.setByteSpecificaConversazioneConcettuale(accordoServizioSICA.getConversazioneConcettuale().getContenuto());
  1107.             }
  1108.             if(specificaConversazione.getConversazioneLogicaLatoErogatore()!=null && accordoServizioSICA.getConversazioneLogicaErogatore()!=null  &&
  1109.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getConversazioneLogicaErogatore().getContenuto()) ){
  1110.                 accServizioOpenspcoop.setByteSpecificaConversazioneErogatore(accordoServizioSICA.getConversazioneLogicaErogatore().getContenuto());
  1111.             }
  1112.             if(specificaConversazione.getConversazioneLogicaLatoFruitore()!=null && accordoServizioSICA.getConversazioneLogicaFruitore()!=null  &&
  1113.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getConversazioneLogicaFruitore().getContenuto()) ){
  1114.                 accServizioOpenspcoop.setByteSpecificaConversazioneFruitore(accordoServizioSICA.getConversazioneLogicaFruitore().getContenuto());
  1115.             }
  1116.         }
  1117.        
  1118.         // Pubblicatore:
  1119.         if(parteComune.getPubblicatore()!=null){
  1120.             IdSoggetto soggettoReferente =
  1121.                 new IdSoggetto();
  1122.             IDSoggetto soggettoPubblicatore = sicaToOpenspcoopContext.getIDSoggetto(SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(parteComune.getPubblicatore().toString()));
  1123.             if(soggettoPubblicatore==null){
  1124.                 soggettoPubblicatore = SICAtoOpenSPCoopUtilities.idSoggetto_sicaToOpenspcoop(parteComune.getPubblicatore().toString());
  1125.             }
  1126.             soggettoReferente.setNome(soggettoPubblicatore.getNome());
  1127.             soggettoReferente.setTipo(soggettoPubblicatore.getTipo());
  1128.             accServizioOpenspcoop.setSoggettoReferente(soggettoReferente);
  1129.         }
  1130.        
  1131.         boolean findDocumentoSpecificaEGOV = false;
  1132.         String tipoDocumentoSpecificaEGovTrovato = null;
  1133.         String fileNameSpecificaEGovTrovata = null;
  1134.        
  1135.         // Allegati
  1136.         if(manifest.getAllegati()!=null){
  1137.             for(int i=0; i<manifest.getAllegati().sizeGenericoDocumentoList(); i++){
  1138.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  1139.                 String fileName = manifest.getAllegati().getGenericoDocumento(i);
  1140.                
  1141.                 docOpenspcoop.setFile(fileName);
  1142.                 docOpenspcoop.setRuolo(RuoliDocumento.allegato.toString());        
  1143.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  1144.                 for(int j=0; j<accordoServizioSICA.sizeAllegati(); j++){
  1145.                     if(fileName.equals(accordoServizioSICA.getAllegato(j).getNome())){
  1146.                         docSICA = accordoServizioSICA.getAllegato(j);
  1147.                     }
  1148.                 }
  1149.                 if(docSICA==null)
  1150.                     throw new SICAToOpenSPCoopUtilitiesException("Allegato con nome["+fileName+"] non trovato");
  1151.                
  1152.                 if(Costanti.ALLEGATO_DEFINITORIO_XSD.equals(fileName)){
  1153.                    
  1154.                     accServizioOpenspcoop.setByteWsdlDefinitorio(docSICA.getContenuto());
  1155.                
  1156.                 }else{
  1157.                    
  1158.                     // tipo: http://spcoop.gov.it/sica/wscp
  1159.                     boolean specificaEGovAsClientSICA = it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto());
  1160.                     // tipo: http://www.cnipa.it/collProfiles
  1161.                     boolean specificaEGovAsDocumentoCNIPA = it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto());
  1162.                    
  1163.                     // Check vincoli di unicita
  1164.                     if(findDocumentoSpecificaEGOV){
  1165.                         String fileNameTmp = Costanti.ALLEGATI_DIR+File.separatorChar+fileName;
  1166.                         if(specificaEGovAsClientSICA){
  1167.                             throw new SICAToOpenSPCoopUtilitiesException("Nel package sono presenti piu' di una specifica delle informazioni egov. E' stata gia' processata una specifica di tipo "+tipoDocumentoSpecificaEGovTrovato+" ("+fileNameSpecificaEGovTrovata+") e adesso e' stato riscontrato una specifica di tipo "+it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE+" ("+fileNameTmp+")");
  1168.                         }
  1169.                         if(specificaEGovAsDocumentoCNIPA){
  1170.                             throw new SICAToOpenSPCoopUtilitiesException("Nel package sono presenti piu' di una specifica delle informazioni egov. E' stata gia' processata una specifica di tipo "+tipoDocumentoSpecificaEGovTrovato+" ("+fileNameSpecificaEGovTrovata+") e adesso e' stato riscontrato una specifica di tipo "+it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE+" ("+fileNameTmp+")");
  1171.                         }
  1172.                     }else{
  1173.                         if(specificaEGovAsClientSICA && specificaEGovAsDocumentoCNIPA){
  1174.                             throw new SICAToOpenSPCoopUtilitiesException("Trovata specifica delle informazioni egov sia di tipo "+it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE+" che di tipo "+it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE+" ??");
  1175.                         }
  1176.                         if(specificaEGovAsClientSICA || specificaEGovAsDocumentoCNIPA){
  1177.                             findDocumentoSpecificaEGOV = true;
  1178.                             fileNameSpecificaEGovTrovata = Costanti.ALLEGATI_DIR+File.separatorChar+fileName;
  1179.                         }
  1180.                     }
  1181.                    
  1182.                     // Gestione
  1183.                     if(specificaEGovAsClientSICA){
  1184.                         try{
  1185.                             it.gov.spcoop.sica.wscp.driver.XMLUtils.mapProfiloCollaborazioneEGOVIntoAS(log,docSICA.getContenuto(), accServizioOpenspcoop, documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified);
  1186.                             tipoDocumentoSpecificaEGovTrovato = it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE;
  1187.                         }catch(Exception e){
  1188.                             throw new SICAToOpenSPCoopUtilitiesException("Errore durante la verifica dell'esistenza del documento di tipo 'ProfiloCollaborazioneEGOV' per il file ["+fileName+"] : "+e.getMessage(),e);
  1189.                         }
  1190.                     }
  1191.                     else if(specificaEGovAsDocumentoCNIPA){
  1192.                         try{
  1193.                             it.cnipa.collprofiles.driver.XMLUtils.mapProfiloCollaborazioneEGOVIntoAS(log,docSICA.getContenuto(), accServizioOpenspcoop, documentoSpecificaEGOV_asClientSICADisabled_childUnquilified);
  1194.                             tipoDocumentoSpecificaEGovTrovato = it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE;
  1195.                         }catch(Exception e){
  1196.                             throw new SICAToOpenSPCoopUtilitiesException("Errore durante la verifica dell'esistenza del documento di tipo 'ProfiloCollaborazioneEGOV' per il file ["+fileName+"] : "+e.getMessage(),e);
  1197.                         }
  1198.                     }
  1199.                     else{
  1200.                         //allegatoGenerico
  1201.                         docOpenspcoop.setTipo(docSICA.getTipo());
  1202.                         docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  1203.                         accServizioOpenspcoop.addAllegato(docOpenspcoop);
  1204.                     }
  1205.                 }
  1206.             }
  1207.         }
  1208.        
  1209.         // SpecificaSemiformale
  1210.         if(manifest.getSpecificaSemiformale()!=null){
  1211.             for(int i=0; i<manifest.getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  1212.                 DocumentoSemiformale specificaSemiformale = manifest.getSpecificaSemiformale().getDocumentoSemiformale(i);
  1213.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  1214.                 String fileName = specificaSemiformale.getBase();
  1215.                
  1216.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  1217.                 for(int j=0; j<accordoServizioSICA.sizeSpecificheSemiformali(); j++){
  1218.                     if(fileName.equals(accordoServizioSICA.getSpecificaSemiformale(j).getNome())){
  1219.                         docSICA = accordoServizioSICA.getSpecificaSemiformale(j);
  1220.                     }
  1221.                 }
  1222.                 if(docSICA==null)
  1223.                     throw new SICAToOpenSPCoopUtilitiesException("SpecificaSemiformale con nome["+fileName+"] non trovato");
  1224.                
  1225.                 // tipo: http://spcoop.gov.it/sica/wscp
  1226.                 boolean specificaEGovAsClientSICA = it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto());
  1227.                 // tipo: http://www.cnipa.it/collProfiles
  1228.                 boolean specificaEGovAsDocumentoCNIPA = it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto());
  1229.                
  1230.                 // Check vincoli di unicita
  1231.                 if(findDocumentoSpecificaEGOV){
  1232.                     String fileNameTmp = Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+fileName;
  1233.                     if(specificaEGovAsClientSICA){
  1234.                         throw new SICAToOpenSPCoopUtilitiesException("Nel package sono presenti piu' di una specifica delle informazioni egov. E' stata gia' processata una specifica di tipo "+tipoDocumentoSpecificaEGovTrovato+" ("+fileNameSpecificaEGovTrovata+") e adesso e' stato riscontrato una specifica di tipo "+it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE+" ("+fileNameTmp+")");
  1235.                     }
  1236.                     if(specificaEGovAsDocumentoCNIPA){
  1237.                         throw new SICAToOpenSPCoopUtilitiesException("Nel package sono presenti piu' di una specifica delle informazioni egov. E' stata gia' processata una specifica di tipo "+tipoDocumentoSpecificaEGovTrovato+" ("+fileNameSpecificaEGovTrovata+") e adesso e' stato riscontrato una specifica di tipo "+it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE+" ("+fileNameTmp+")");
  1238.                     }
  1239.                 }else{
  1240.                     if(specificaEGovAsClientSICA && specificaEGovAsDocumentoCNIPA){
  1241.                         throw new SICAToOpenSPCoopUtilitiesException("La specifica delle informazioni egov e' sia di tipo "+it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE+" che di tipo "+it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE+" ??");
  1242.                     }
  1243.                     if(specificaEGovAsClientSICA || specificaEGovAsDocumentoCNIPA){
  1244.                         findDocumentoSpecificaEGOV = true;
  1245.                         fileNameSpecificaEGovTrovata = Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+fileName;
  1246.                     }
  1247.                 }
  1248.                
  1249.                 // Gestione
  1250.                 if(specificaEGovAsClientSICA){
  1251.                     try{
  1252.                         it.gov.spcoop.sica.wscp.driver.XMLUtils.mapProfiloCollaborazioneEGOVIntoAS(log,docSICA.getContenuto(), accServizioOpenspcoop, documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified);
  1253.                         tipoDocumentoSpecificaEGovTrovato = it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE;
  1254.                         findDocumentoSpecificaEGOV = true;
  1255.                     }catch(Exception e){
  1256.                         throw new SICAToOpenSPCoopUtilitiesException("Errore durante la verifica dell'esistenza del documento di tipo 'ProfiloCollaborazioneEGOV' per il file ["+fileName+"] : "+e.getMessage(),e);
  1257.                     }
  1258.                 }
  1259.                 else if(specificaEGovAsDocumentoCNIPA){
  1260.                     try{
  1261.                         it.cnipa.collprofiles.driver.XMLUtils.mapProfiloCollaborazioneEGOVIntoAS(log,docSICA.getContenuto(), accServizioOpenspcoop, documentoSpecificaEGOV_asClientSICADisabled_childUnquilified);
  1262.                         tipoDocumentoSpecificaEGovTrovato = it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE;
  1263.                         findDocumentoSpecificaEGOV = true;
  1264.                     }catch(Exception e){
  1265.                         throw new SICAToOpenSPCoopUtilitiesException("Errore durante la verifica dell'esistenza del documento di tipo 'ProfiloCollaborazioneEGOV' per il file ["+fileName+"] : "+e.getMessage(),e);
  1266.                     }
  1267.                 }
  1268.                 else{
  1269.                     //specificaSemiformaleGenerica
  1270.                     docOpenspcoop.setFile(fileName);
  1271.                     docOpenspcoop.setRuolo(RuoliDocumento.specificaSemiformale.toString());        
  1272.                     docOpenspcoop.setTipo(docSICA.getTipo());
  1273.                     docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  1274.                     accServizioOpenspcoop.addSpecificaSemiformale(docOpenspcoop);
  1275.                 }
  1276.             }
  1277.         }
  1278.    
  1279.        
  1280.         /* Firma apposta dal Servizio di Registro quando l'accordo viene scaricato dal Registro stesso  */
  1281.         //if(manifest.getFirmato() && accordoServizioSICA.getFirma()!=null)
  1282.         //  accServizioOpenspcoop.setByteFirma(accordoServizioSICA.getFirma().getBytes());
  1283.        
  1284.         // Correggo eventuali import/include malformati in maniera conforme alla struttura del package CNIPA
  1285.         if(verificaCorreggiLocationWSDL){
  1286.             try{
  1287.                 RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), log);
  1288.                 registroOpenSPCoopUtilities.updateLocation(accServizioOpenspcoop,false,prettyDocument);
  1289.             }catch(Exception e){
  1290.                 throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.setImportLocation error: "+e.getMessage(),e);
  1291.             }
  1292.         }
  1293.        
  1294.         if(findDocumentoSpecificaEGOV==false){
  1295.             accServizioOpenspcoop.setProfiloCollaborazione(null); // In modo da riconoscere il caso e farlo gestire
  1296.         }
  1297.        
  1298.         return accServizioOpenspcoop;
  1299.     }
  1300.     public static it.gov.spcoop.sica.dao.AccordoServizioParteComune accordoServizioParteComune_openspcoopToSica(
  1301.             IRegistryReader registryReader,
  1302.             org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizioOpenspcoop,
  1303.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,
  1304.             Logger log)throws SICAToOpenSPCoopUtilitiesException{
  1305.        
  1306.         if(log==null){
  1307.             log = LoggerWrapperFactory.getLogger(SICAtoOpenSPCoopUtilities.class);
  1308.         }
  1309.        
  1310.         boolean documentoSpecificaEGOV_asClientSICA = sicaToOpenspcoopContext.isInformazioniEGov_wscp();
  1311.         boolean documentoSpecificaEGOV_asSpecificaSemiformale = sicaToOpenspcoopContext.isInformazioniEGov_specificaSemiformale();
  1312.         boolean documentoSpecificaEGOV_asClientSICADisabled_namespaceCNIPA = sicaToOpenspcoopContext.isInformazioniEGov_wscpDisabled_namespaceCnipa();
  1313.         boolean documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified = sicaToOpenspcoopContext.isInformazioniEGov_wscpEnabled_childUnqualified();
  1314.         boolean documentoSpecificaEGOV_nomiSPCoopQualified = sicaToOpenspcoopContext.isInformazioniEGov_nomiSPCoop_qualified();
  1315.         boolean verificaCorreggiLocationWSDL = sicaToOpenspcoopContext.isWSDL_XSD_allineaImportInclude();
  1316.         boolean prettyDocument = sicaToOpenspcoopContext.isWSDL_XSD_prettyDocuments();
  1317.         boolean includiInfoRegistroGenerale = sicaToOpenspcoopContext.isSICAClient_includiInfoRegistroGenerale();
  1318.         boolean wsdlEmptySeNonDefiniti = sicaToOpenspcoopContext.isWSDL_XSD_accordiParteSpecifica_wsdlEmpty();

  1319.         // Correggo eventuali import/include malformati in maniera conforme alla struttura del package CNIPA
  1320.         if(verificaCorreggiLocationWSDL){
  1321.             try{
  1322.                 RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), log);
  1323.                 registroOpenSPCoopUtilities.updateLocation(accordoServizioOpenspcoop,true,prettyDocument);
  1324.             }catch(Exception e){
  1325.                 throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.setImportLocation error: "+e.getMessage(),e);
  1326.             }
  1327.         }
  1328.        
  1329.         it.gov.spcoop.sica.dao.AccordoServizioParteComune accServParteComuneSICA =
  1330.             new it.gov.spcoop.sica.dao.AccordoServizioParteComune();
  1331.        
  1332.         /* Metadati presenti nel Manifest dell'Accordo di Cooperazione. */
  1333.         it.gov.spcoop.sica.manifest.AccordoServizio manifest = new it.gov.spcoop.sica.manifest.AccordoServizio();
  1334.         manifest.setDescrizione(accordoServizioOpenspcoop.getDescrizione());
  1335.         manifest.setNome(accordoServizioOpenspcoop.getNome());
  1336.         manifest.setDataCreazione(accordoServizioOpenspcoop.getOraRegistrazione());
  1337.         //manifest.getRiservato() ???
  1338.        
  1339.         it.gov.spcoop.sica.manifest.AccordoServizioParteComune parteComune = new it.gov.spcoop.sica.manifest.AccordoServizioParteComune();
  1340.        
  1341.         if(includiInfoRegistroGenerale){
  1342.             if(accordoServizioOpenspcoop.getVersione()!=null){
  1343.                 manifest.setVersione(accordoServizioOpenspcoop.getVersione().intValue()+"");
  1344.             }
  1345.             //manifest.setDataPubblicazione(accordoServizioOpenspcoop.getDataPubblicazione());
  1346.             //if(accordoServizioOpenspcoop.getByteFirma()!=null){
  1347.             //  manifest.setFirmato(true);
  1348.             //}
  1349.            
  1350.             // Pubblicatore
  1351.             if(accordoServizioOpenspcoop.getSoggettoReferente()==null)
  1352.                 throw new SICAToOpenSPCoopUtilitiesException("Soggetto referente non definito");
  1353.             IDSoggetto soggettoPubblicatore = new IDSoggetto(accordoServizioOpenspcoop.getSoggettoReferente().getTipo(),accordoServizioOpenspcoop.getSoggettoReferente().getNome());
  1354.             String uriPubblicatore = sicaToOpenspcoopContext.getCodiceIPA(soggettoPubblicatore);
  1355.             if(uriPubblicatore==null){
  1356.                 uriPubblicatore = SICAtoOpenSPCoopUtilities.idSoggetto_openspcoopToSica(soggettoPubblicatore);
  1357.             }
  1358.             else
  1359.                 uriPubblicatore = SICAtoOpenSPCoopUtilities.appendURI_IDSoggettoSica(uriPubblicatore);
  1360.             try {
  1361.                 parteComune.setPubblicatore(new URI(uriPubblicatore));
  1362.             }catch(Exception e) {
  1363.                 throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  1364.             }
  1365.         }
  1366.        
  1367.        
  1368.         // SpecificaInterfaccia
  1369.         it.gov.spcoop.sica.manifest.SpecificaInterfaccia specificaInterfaccia = null;
  1370.         if(  (accordoServizioOpenspcoop.getByteWsdlConcettuale()!=null) || (accordoServizioOpenspcoop.getByteWsdlLogicoErogatore()!=null) || (accordoServizioOpenspcoop.getByteWsdlLogicoFruitore()!=null) ){
  1371.             specificaInterfaccia = new it.gov.spcoop.sica.manifest.SpecificaInterfaccia();
  1372.         }
  1373.         if(wsdlEmptySeNonDefiniti || (accordoServizioOpenspcoop.getByteWsdlConcettuale()!=null)){
  1374.             it.gov.spcoop.sica.manifest.DocumentoInterfaccia docInterfaccia = new it.gov.spcoop.sica.manifest.DocumentoInterfaccia();
  1375.             docInterfaccia.setBase(Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL);
  1376.             docInterfaccia.setTipo(TipoDocumentoInterfaccia.WSDL);
  1377.             specificaInterfaccia.setInterfacciaConcettuale(docInterfaccia);
  1378.            
  1379.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  1380.             doc.setTipo(TipiDocumentoInterfaccia.WSDL.toString());
  1381.             doc.setNome(Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL);
  1382.             if(accordoServizioOpenspcoop.getByteWsdlConcettuale()!=null){
  1383.                 doc.setContenuto(accordoServizioOpenspcoop.getByteWsdlConcettuale());
  1384.             }else{
  1385.                 // Imposto WSDL Empty per compatibilita Client SICA
  1386.                 doc.setContenuto(Costanti.WSDL_EMPTY.getBytes());
  1387.             }
  1388.             accServParteComuneSICA.setInterfacciaConcettuale(doc);
  1389.         }
  1390.         if(wsdlEmptySeNonDefiniti || (accordoServizioOpenspcoop.getByteWsdlLogicoErogatore()!=null)){
  1391.             it.gov.spcoop.sica.manifest.DocumentoInterfaccia docInterfaccia = new it.gov.spcoop.sica.manifest.DocumentoInterfaccia();
  1392.             docInterfaccia.setBase(Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL);
  1393.             docInterfaccia.setTipo(TipoDocumentoInterfaccia.WSDL);
  1394.             specificaInterfaccia.setInterfacciaLogicaLatoErogatore(docInterfaccia);
  1395.            
  1396.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  1397.             doc.setTipo(TipiDocumentoInterfaccia.WSDL.toString());
  1398.             doc.setNome(Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL);
  1399.             if(accordoServizioOpenspcoop.getByteWsdlLogicoErogatore()!=null){
  1400.                 doc.setContenuto(accordoServizioOpenspcoop.getByteWsdlLogicoErogatore());
  1401.             }else{
  1402.                 // Imposto WSDL Empty per compatibilita Client SICA
  1403.                 doc.setContenuto(Costanti.WSDL_EMPTY.getBytes());
  1404.             }
  1405.             accServParteComuneSICA.setInterfacciaLogicaLatoErogatore(doc);
  1406.         }
  1407.         if(wsdlEmptySeNonDefiniti || (accordoServizioOpenspcoop.getByteWsdlLogicoFruitore()!=null)){
  1408.             it.gov.spcoop.sica.manifest.DocumentoInterfaccia docInterfaccia = new it.gov.spcoop.sica.manifest.DocumentoInterfaccia();
  1409.             docInterfaccia.setBase(Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL);
  1410.             docInterfaccia.setTipo(TipoDocumentoInterfaccia.WSDL);
  1411.             specificaInterfaccia.setInterfacciaLogicaLatoFruitore(docInterfaccia);
  1412.            
  1413.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  1414.             doc.setTipo(TipiDocumentoInterfaccia.WSDL.toString());
  1415.             doc.setNome(Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL);
  1416.             if(accordoServizioOpenspcoop.getByteWsdlLogicoFruitore()!=null){
  1417.                 doc.setContenuto(accordoServizioOpenspcoop.getByteWsdlLogicoFruitore());
  1418.             }else{
  1419.                 // Imposto WSDL Empty per compatibilita Client SICA
  1420.                 doc.setContenuto(Costanti.WSDL_EMPTY.getBytes());
  1421.             }
  1422.             accServParteComuneSICA.setInterfacciaLogicaLatoFruitore(doc);
  1423.         }
  1424.         if(specificaInterfaccia!=null){
  1425.             parteComune.setSpecificaInterfaccia(specificaInterfaccia);
  1426.         }
  1427.        
  1428.        
  1429.         // SpecificaConversazione (li cerco sia negli allegati che nelle specifiche semiformali)
  1430.         it.gov.spcoop.sica.manifest.SpecificaConversazione specificaConversazione = null;
  1431.         if(  (accordoServizioOpenspcoop.getByteSpecificaConversazioneConcettuale()!=null) ||
  1432.                 (accordoServizioOpenspcoop.getByteSpecificaConversazioneErogatore()!=null) ||
  1433.                 (accordoServizioOpenspcoop.getByteSpecificaConversazioneFruitore()!=null) ){
  1434.             specificaConversazione = new it.gov.spcoop.sica.manifest.SpecificaConversazione();
  1435.         }
  1436.         if(accordoServizioOpenspcoop.getByteSpecificaConversazioneConcettuale()!=null){
  1437.             it.gov.spcoop.sica.manifest.DocumentoConversazione docConversazione = new it.gov.spcoop.sica.manifest.DocumentoConversazione();
  1438.             docConversazione.setBase(Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL);
  1439.             docConversazione.setTipo(TipoDocumentoConversazione.WSBL);
  1440.             specificaConversazione.setConversazioneConcettuale(docConversazione);
  1441.            
  1442.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  1443.             doc.setTipo(TipiDocumentoConversazione.WSBL.toString());
  1444.             doc.setNome(Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL);
  1445.             doc.setContenuto(accordoServizioOpenspcoop.getByteSpecificaConversazioneConcettuale());
  1446.             accServParteComuneSICA.setConversazioneConcettuale(doc);
  1447.         }
  1448.         if(accordoServizioOpenspcoop.getByteSpecificaConversazioneErogatore()!=null){
  1449.             it.gov.spcoop.sica.manifest.DocumentoConversazione docConversazione = new it.gov.spcoop.sica.manifest.DocumentoConversazione();
  1450.             docConversazione.setBase(Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL);
  1451.             docConversazione.setTipo(TipoDocumentoConversazione.WSBL);
  1452.             specificaConversazione.setConversazioneLogicaLatoErogatore(docConversazione);
  1453.            
  1454.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  1455.             doc.setTipo(TipiDocumentoConversazione.WSBL.toString());
  1456.             doc.setNome(Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL);
  1457.             doc.setContenuto(accordoServizioOpenspcoop.getByteSpecificaConversazioneErogatore());
  1458.             accServParteComuneSICA.setConversazioneLogicaErogatore(doc);
  1459.         }
  1460.         if(accordoServizioOpenspcoop.getByteSpecificaConversazioneFruitore()!=null){
  1461.             it.gov.spcoop.sica.manifest.DocumentoConversazione docConversazione = new it.gov.spcoop.sica.manifest.DocumentoConversazione();
  1462.             docConversazione.setBase(Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL);
  1463.             docConversazione.setTipo(TipoDocumentoConversazione.WSBL);
  1464.             specificaConversazione.setConversazioneLogicaLatoFruitore(docConversazione);
  1465.            
  1466.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  1467.             doc.setTipo(TipiDocumentoConversazione.WSBL.toString());
  1468.             doc.setNome(Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL);
  1469.             doc.setContenuto(accordoServizioOpenspcoop.getByteSpecificaConversazioneFruitore());
  1470.             accServParteComuneSICA.setConversazioneLogicaFruitore(doc);
  1471.         }
  1472.         if(specificaConversazione!=null){
  1473.             parteComune.setSpecificaConversazione(specificaConversazione);
  1474.         }
  1475.        
  1476.                
  1477.         /* Allegati */
  1478.         it.gov.spcoop.sica.manifest.ElencoAllegati allegati = null;
  1479.         // ProfiloCollaborazioneEGOV
  1480.         if(accordoServizioOpenspcoop.sizePortTypeList()>0 && !documentoSpecificaEGOV_asSpecificaSemiformale){
  1481.             String docGenerico = null;
  1482.             if(documentoSpecificaEGOV_asClientSICA){
  1483.                 try{
  1484.                     docGenerico = it.gov.spcoop.sica.wscp.driver.XMLUtils.generaGenericoDocumento(accordoServizioOpenspcoop, accServParteComuneSICA,
  1485.                             documentoSpecificaEGOV_nomiSPCoopQualified, documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified);
  1486.                 }catch(Exception e){
  1487.                     throw new SICAToOpenSPCoopUtilitiesException("Errore durante la conversione delle informazioni eGov in Allegati (http://spcoop.gov.it/sica/wscp): "+e.getMessage(),e);
  1488.                 }
  1489.             }else{
  1490.                 try{
  1491.                     docGenerico = it.cnipa.collprofiles.driver.XMLUtils.generaGenericoDocumento(accordoServizioOpenspcoop, accServParteComuneSICA,
  1492.                             documentoSpecificaEGOV_asClientSICADisabled_namespaceCNIPA,
  1493.                             documentoSpecificaEGOV_nomiSPCoopQualified);
  1494.                 }catch(Exception e){
  1495.                     throw new SICAToOpenSPCoopUtilitiesException("Errore durante la conversione delle informazioni eGov in Allegati (http://www.cnipa.it/collProfiles): "+e.getMessage(),e);
  1496.                 }
  1497.             }
  1498.             if(docGenerico!=null){
  1499.                 if(allegati==null){
  1500.                     allegati = new it.gov.spcoop.sica.manifest.ElencoAllegati();
  1501.                 }
  1502.                 allegati.addGenericoDocumento(docGenerico);
  1503.                 manifest.setAllegati(allegati);
  1504.             }
  1505.         }
  1506.         // Altri allegati generici
  1507.         if(accordoServizioOpenspcoop.sizeAllegatoList()>0){
  1508.             if(allegati==null){
  1509.                 allegati = new it.gov.spcoop.sica.manifest.ElencoAllegati();
  1510.             }
  1511.             for(int i=0; i<accordoServizioOpenspcoop.sizeAllegatoList(); i++){
  1512.                 org.openspcoop2.core.registry.Documento docOpenspcoop = accordoServizioOpenspcoop.getAllegato(i);
  1513.                 allegati.addGenericoDocumento(docOpenspcoop.getFile());
  1514.                
  1515.                 it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  1516.                 docSICA.setTipo(docOpenspcoop.getTipo());
  1517.                 docSICA.setNome(docOpenspcoop.getFile());
  1518.                 if(docOpenspcoop.getByteContenuto()==null){
  1519.                     throw new SICAToOpenSPCoopUtilitiesException("Byte dell'allegato "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  1520.                 }
  1521.                 docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  1522.                 accServParteComuneSICA.addAllegato(docSICA);
  1523.             }
  1524.             manifest.setAllegati(allegati);
  1525.         }
  1526.         // WSDL Definitorio
  1527.         if(accordoServizioOpenspcoop.getByteWsdlDefinitorio()!=null){
  1528.             if(allegati==null) {
  1529.                 allegati = new it.gov.spcoop.sica.manifest.ElencoAllegati();
  1530.             }
  1531.             allegati.addGenericoDocumento(Costanti.ALLEGATO_DEFINITORIO_XSD);
  1532.             manifest.setAllegati(allegati);
  1533.            
  1534.             it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  1535.             docSICA.setTipo("XSD");
  1536.             docSICA.setNome(Costanti.ALLEGATO_DEFINITORIO_XSD);
  1537.             docSICA.setContenuto(accordoServizioOpenspcoop.getByteWsdlDefinitorio());
  1538.             accServParteComuneSICA.addAllegato(docSICA);
  1539.         }
  1540.        
  1541.        
  1542.        
  1543.         /* SpecificheSemiformali */
  1544.         it.gov.spcoop.sica.manifest.SpecificaSemiformale specificaSemiformale = null;
  1545.         // ProfiloCollaborazioneEGOV
  1546.         if(accordoServizioOpenspcoop.sizePortTypeList()>0 && documentoSpecificaEGOV_asSpecificaSemiformale){
  1547.             it.gov.spcoop.sica.manifest.DocumentoSemiformale docSemiformale = null;
  1548.             if(documentoSpecificaEGOV_asClientSICA){
  1549.                 try{
  1550.                     docSemiformale = it.gov.spcoop.sica.wscp.driver.XMLUtils.generaDocumentoSemiformale(accordoServizioOpenspcoop, accServParteComuneSICA,
  1551.                             documentoSpecificaEGOV_nomiSPCoopQualified, documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified);
  1552.                 }catch(Exception e){
  1553.                     throw new SICAToOpenSPCoopUtilitiesException("Errore durante la conversione delle informazioni eGov in SpecificaSemiformale (http://spcoop.gov.it/sica/wscp): "+e.getMessage(),e);
  1554.                 }
  1555.             }else{
  1556.                 try{
  1557.                     docSemiformale = it.cnipa.collprofiles.driver.XMLUtils.generaDocumentoSemiformale(accordoServizioOpenspcoop, accServParteComuneSICA,
  1558.                             documentoSpecificaEGOV_asClientSICADisabled_namespaceCNIPA,
  1559.                             documentoSpecificaEGOV_nomiSPCoopQualified);
  1560.                 }catch(Exception e){
  1561.                     throw new SICAToOpenSPCoopUtilitiesException("Errore durante la conversione delle informazioni eGov in SpecificaSemiformale (http://www.cnipa.it/collProfiles): "+e.getMessage(),e);
  1562.                 }
  1563.             }
  1564.             if(docSemiformale!=null){
  1565.                 if(specificaSemiformale==null){
  1566.                     specificaSemiformale = new it.gov.spcoop.sica.manifest.SpecificaSemiformale();
  1567.                 }
  1568.                 specificaSemiformale.addDocumentoSemiformale(docSemiformale);
  1569.                 manifest.setSpecificaSemiformale(specificaSemiformale);
  1570.             }
  1571.         }
  1572.         // Altre Specifiche semiformali
  1573.         if(accordoServizioOpenspcoop.sizeSpecificaSemiformaleList()>0){
  1574.             if(specificaSemiformale==null){
  1575.                 specificaSemiformale = new it.gov.spcoop.sica.manifest.SpecificaSemiformale();
  1576.             }
  1577.             for(int i=0; i<accordoServizioOpenspcoop.sizeSpecificaSemiformaleList(); i++){
  1578.                 org.openspcoop2.core.registry.Documento docOpenspcoop = accordoServizioOpenspcoop.getSpecificaSemiformale(i);
  1579.                
  1580.                 it.gov.spcoop.sica.manifest.DocumentoSemiformale docSemiformale = new it.gov.spcoop.sica.manifest.DocumentoSemiformale();
  1581.                 docSemiformale.setTipo(docOpenspcoop.getTipo());
  1582.                 docSemiformale.setBase(docOpenspcoop.getFile());
  1583.                 specificaSemiformale.addDocumentoSemiformale(docSemiformale);
  1584.                            
  1585.                 it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  1586.                 docSICA.setTipo(docOpenspcoop.getTipo());
  1587.                 docSICA.setNome(docOpenspcoop.getFile());
  1588.                 if(docOpenspcoop.getByteContenuto()==null){
  1589.                     throw new SICAToOpenSPCoopUtilitiesException("Byte della specifica semiformale "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  1590.                 }
  1591.                 docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  1592.                 accServParteComuneSICA.addSpecificaSemiformale(docSICA);
  1593.             }
  1594.             manifest.setSpecificaSemiformale(specificaSemiformale);
  1595.         }

  1596.        
  1597.         /* Firma apposta dal Servizio di Registro quando l'accordo viene scaricato dal Registro stesso  */
  1598.         if(includiInfoRegistroGenerale){
  1599.             //if(accordoServizioOpenspcoop.getByteFirma()!=null){
  1600.             //  it.gov.spcoop.sica.firma.Firma firma = new it.gov.spcoop.sica.firma.Firma();
  1601.             //  accServParteComuneSICA.setFirma(firma);
  1602.             //}
  1603.         }
  1604.        
  1605.        
  1606.         // Setto parte comune
  1607.         manifest.setParteComune(parteComune);
  1608.        
  1609.         accServParteComuneSICA.setManifesto(manifest);
  1610.         return accServParteComuneSICA;

  1611.     }
  1612.    
  1613.    
  1614.    
  1615.    
  1616.    
  1617.    
  1618.     /* Accordi di servizio, parte specifica */
  1619.     public static org.openspcoop2.core.registry.AccordoServizioParteSpecifica accordoServizioParteSpecifica_sicaToOpenspcoop(
  1620.             IRegistryReader registryReader,
  1621.             it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica accordoServizioSICA,
  1622.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,
  1623.             Logger log)throws SICAToOpenSPCoopUtilitiesException{
  1624.         return SICAtoOpenSPCoopUtilities.accordoServizioParteSpecifica_sicaToOpenspcoop(registryReader,accordoServizioSICA, sicaToOpenspcoopContext,null,log);
  1625.     }
  1626.     public static org.openspcoop2.core.registry.AccordoServizioParteSpecifica accordoServizioParteSpecifica_sicaToOpenspcoop(
  1627.             IRegistryReader registryReader,
  1628.             it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica accordoServizioSICA,
  1629.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,String Servizio,
  1630.             Logger log)throws SICAToOpenSPCoopUtilitiesException{
  1631.        
  1632.         if(log==null){
  1633.             log = LoggerWrapperFactory.getLogger(SICAtoOpenSPCoopUtilities.class);
  1634.         }
  1635.        
  1636.         boolean verificaCorreggiLocationWSDL = sicaToOpenspcoopContext.isWSDL_XSD_allineaImportInclude();
  1637.         boolean prettyDocument = sicaToOpenspcoopContext.isWSDL_XSD_prettyDocuments();
  1638.         boolean eliminaInformazioniASParteComuneWSDL = sicaToOpenspcoopContext.isWSDL_XSD_accordiParteSpecifica_gestioneParteComune();
  1639.         boolean sicaToOpenspcoopAggiuntaImportParteComune = sicaToOpenspcoopContext.isWSDL_XSD_accordiParteSpecifica_sicaToOpenspcoop_aggiuntaImportParteComune();
  1640.        
  1641.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica aspsOpenSPCoop = new org.openspcoop2.core.registry.AccordoServizioParteSpecifica();
  1642.        
  1643.         IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  1644.         AbstractXMLUtils xmlUtils = org.openspcoop2.message.xml.MessageXMLUtils.DEFAULT;        
  1645.         WSDLUtilities wsdlUtilities = WSDLUtilities.getInstance(xmlUtils);
  1646.                
  1647.         /* Metadati presenti nel Manifest dell'Accordo di Cooperazione. */
  1648.         it.gov.spcoop.sica.manifest.AccordoServizio manifest = accordoServizioSICA.getManifesto();
  1649.        
  1650.         aspsOpenSPCoop.setNome(manifest.getNome());
  1651.         if(manifest.getVersione()!=null){
  1652.             aspsOpenSPCoop.setVersione(Integer.parseInt(manifest.getVersione()));
  1653.         }
  1654.        
  1655.         aspsOpenSPCoop.setDescrizione(resizeDescriptionForMaxLength(manifest.getDescrizione()));
  1656.         aspsOpenSPCoop.setOraRegistrazione(manifest.getDataCreazione());
  1657.         //aspsOpenSPCoop.setDataPubblicazione(manifest.getDataPubblicazione());
  1658.         //manifest.getRiservato() ???
  1659.        
  1660.         it.gov.spcoop.sica.manifest.AccordoServizioParteSpecifica parteSpecifica = manifest.getParteSpecifica();
  1661.        
  1662.         // riferimentoParteComune
  1663.         try{
  1664.             String[] split =  parteSpecifica.getRiferimentoParteComune().toString().split(":");
  1665.             if(split.length<2)
  1666.                 throw new Exception("Riferimento parte comune non corretto (split non riuscito) ["+parteSpecifica.getRiferimentoParteComune()+"]");
  1667.             if(split[1].equals(Costanti.TIPO_ACCORDO_SERVIZIO_COMPOSTO)){
  1668.                 aspsOpenSPCoop.setAccordoServizioParteComune(idAccordoFactory.getUriFromIDAccordo(SICAtoOpenSPCoopUtilities.idAccordoServizioComposto_sicaToOpenspcoop(registryReader,parteSpecifica.getRiferimentoParteComune().toString(),sicaToOpenspcoopContext)));
  1669.             }else if(split[1].equals(Costanti.TIPO_ACCORDO_SERVIZIO_PARTE_COMUNE)){
  1670.                 aspsOpenSPCoop.setAccordoServizioParteComune(idAccordoFactory.getUriFromIDAccordo(SICAtoOpenSPCoopUtilities.idAccordoServizioParteComune_sicaToOpenspcoop(registryReader,parteSpecifica.getRiferimentoParteComune().toString(),sicaToOpenspcoopContext)));
  1671.             }else{
  1672.                 throw new Exception("Tipo accordo ["+split[1]+"] non conosciuto");
  1673.             }
  1674.         }catch(Exception e){
  1675.             throw new SICAToOpenSPCoopUtilitiesException("Trasformazione riferimento parte comune ["+parteSpecifica.getRiferimentoParteComune()+"] non riuscita: "+e.getMessage(),e);
  1676.         }
  1677.        
  1678.         // Specifica Porti di Accesso
  1679.         String nomeServizio = Servizio; // Servizio puo' essere null, in tal caso calcolo il nome dal wsdl
  1680.         String nomeServizioCorrelato = Servizio; // Servizio puo' essere null, in tal caso calcolo il nome dal wsdl
  1681.         it.gov.spcoop.sica.manifest.SpecificaPortiAccesso specificaInterfaccia = parteSpecifica.getSpecificaPortiAccesso();
  1682.         if( (accordoServizioSICA.getPortiAccessoFruitore()!=null) ||  (accordoServizioSICA.getPortiAccessoErogatore()!=null) ){
  1683.             if(specificaInterfaccia.getPortiAccessoErogatore()!=null &&  accordoServizioSICA.getPortiAccessoErogatore()!=null
  1684.                     && accordoServizioSICA.getPortiAccessoErogatore().getContenuto()!=null
  1685.                     && !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getPortiAccessoErogatore().getContenuto()) ){
  1686.                 byte[] doc = accordoServizioSICA.getPortiAccessoErogatore().getContenuto();
  1687.                 if(eliminaInformazioniASParteComuneWSDL){
  1688.                     try{
  1689.                         RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  1690.                         doc = registroOpenSPCoopUtilities.eliminaASParteComune(doc,true);
  1691.                     }catch(Exception e){
  1692.                         throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.eliminaASParteComune error: "+e.getMessage(),e);
  1693.                     }
  1694.                 }else if(sicaToOpenspcoopAggiuntaImportParteComune){
  1695.                     try{
  1696.                         RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  1697.                         doc = registroOpenSPCoopUtilities.aggiungiImportASParteComune(doc,true);
  1698.                     }catch(Exception e){
  1699.                         throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.aggiungiImportASParteComune error: "+e.getMessage(),e);
  1700.                     }
  1701.                 }
  1702.                 aspsOpenSPCoop.setByteWsdlImplementativoErogatore(doc);
  1703.                 aspsOpenSPCoop.setTipologiaServizio(TipologiaServizio.NORMALE);
  1704.                
  1705.                 // Identificazione servizio SPCoop
  1706.                 if(nomeServizio==null){
  1707.                     try{
  1708.                         Document d = xmlUtils.newDocument(doc);
  1709.                         wsdlUtilities.removeImports(d);
  1710.                         DefinitionWrapper wsdl = new DefinitionWrapper(d,xmlUtils);
  1711.                         java.util.Map<?,?> bindings = wsdl.getAllBindings();
  1712.                         if(bindings==null || bindings.size()<=0){
  1713.                             throw new Exception("Bindings non presenti");
  1714.                         }
  1715.                         java.util.Iterator<?> bindingIterator = bindings.values().iterator();
  1716.                         while(bindingIterator.hasNext()) {
  1717.                             Binding binding = (Binding) bindingIterator.next();
  1718.                             if(binding.getPortType()==null){
  1719.                                 throw new Exception("Un binding non specifica il port type implementato");
  1720.                             }
  1721.                             if(binding.getPortType().getQName()==null){
  1722.                                 throw new Exception("Binding con port type che non possiede QName");
  1723.                             }
  1724.                             if(nomeServizio==null)
  1725.                                 nomeServizio=binding.getPortType().getQName().getLocalPart();
  1726.                             else{
  1727.                                 if(nomeServizio.equals(binding.getPortType().getQName().getLocalPart())==false){
  1728.                                     throw new Exception("Trovato piu' di un port-type implementato dai binding definiti nell'interfaccia");
  1729.                                 }
  1730.                             }
  1731.                         }
  1732.                     }catch(Exception e){
  1733.                         log.error("Identificazione servizio spcoop da wsdl implementativo erogatore non riuscita: "+e.getMessage(),e);
  1734.                         //throw new SICAToOpenSPCoopUtilitiesException("Identificazione servizio spcoop da wsdl implementativo erogatore non riuscita: "+e.getMessage(),e);
  1735.                         // Il Servizio verra' selezionato tramite select list
  1736.                         nomeServizio = "Errore lettura dati Wsdl: "+e.getMessage();
  1737.                     }
  1738.                 }
  1739.             }
  1740.             if(specificaInterfaccia.getPortiAccessoFruitore()!=null &&  accordoServizioSICA.getPortiAccessoFruitore()!=null
  1741.                     && accordoServizioSICA.getPortiAccessoFruitore().getContenuto()!=null
  1742.                     && !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getPortiAccessoFruitore().getContenuto()) ){
  1743.                 byte[] doc = accordoServizioSICA.getPortiAccessoFruitore().getContenuto();
  1744.                 if(eliminaInformazioniASParteComuneWSDL){
  1745.                     try{
  1746.                         RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  1747.                         doc = registroOpenSPCoopUtilities.eliminaASParteComune(doc,false);
  1748.                     }catch(Exception e){
  1749.                         throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.eliminaASParteComune error: "+e.getMessage(),e);
  1750.                     }
  1751.                 }else if(sicaToOpenspcoopAggiuntaImportParteComune){
  1752.                     try{
  1753.                         RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  1754.                         doc = registroOpenSPCoopUtilities.aggiungiImportASParteComune(doc,false);
  1755.                     }catch(Exception e){
  1756.                         throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.aggiungiImportASParteComune error: "+e.getMessage(),e);
  1757.                     }
  1758.                 }
  1759.                 aspsOpenSPCoop.setByteWsdlImplementativoFruitore(doc);
  1760.                 aspsOpenSPCoop.setTipologiaServizio(TipologiaServizio.CORRELATO);
  1761.                
  1762.                 // Identificazione servizio SPCoop
  1763.                 if(nomeServizioCorrelato==null){
  1764.                     try{
  1765.                         Document d = xmlUtils.newDocument(doc);
  1766.                         wsdlUtilities.removeImports(d);
  1767.                         DefinitionWrapper wsdl = new DefinitionWrapper(d,xmlUtils);
  1768.                         java.util.Map<?,?> bindings = wsdl.getAllBindings();
  1769.                         if(bindings==null || bindings.size()<=0){
  1770.                             throw new Exception("Bindings non presenti");
  1771.                         }
  1772.                         java.util.Iterator<?> bindingIterator = bindings.values().iterator();
  1773.                         while(bindingIterator.hasNext()) {
  1774.                             Binding binding = (Binding) bindingIterator.next();
  1775.                             if(binding.getPortType()==null){
  1776.                                 throw new Exception("Un binding non specifica il port type implementato");
  1777.                             }
  1778.                             if(binding.getPortType().getQName()==null){
  1779.                                 throw new Exception("Binding con port type che non possiede QName");
  1780.                             }
  1781.                             if(nomeServizioCorrelato==null)
  1782.                                 nomeServizioCorrelato=binding.getPortType().getQName().getLocalPart();
  1783.                             else{
  1784.                                 if(nomeServizioCorrelato.equals(binding.getPortType().getQName().getLocalPart())==false){
  1785.                                     throw new Exception("Trovato piu' di un port-type implementato dai binding definiti nell'interfaccia");
  1786.                                 }
  1787.                             }
  1788.                         }
  1789.                     }catch(Exception e){
  1790.                         log.error("Identificazione servizio spcoop da wsdl implementativo fruitore non riuscita: "+e.getMessage(),e);
  1791.                         // throw new SICAToOpenSPCoopUtilitiesException("Identificazione servizio spcoop da wsdl implementativo fruitore non riuscita: "+e.getMessage(),e);
  1792.                         // Il Servizio verra' selezionato tramite select list
  1793.                         nomeServizioCorrelato = "Errore lettura dati Wsdl: "+e.getMessage();
  1794.                     }
  1795.                 }
  1796.             }
  1797.         }
  1798.         if(TipologiaServizio.CORRELATO.equals(aspsOpenSPCoop.getTipologiaServizio())){
  1799.             if(nomeServizioCorrelato==null){
  1800.                 //throw new SICAToOpenSPCoopUtilitiesException("Identificazione nome del Servizio SPCoop correlato non riuscita tramite la lettura dei wsdl implementativi");
  1801.                 // Il Servizio verra' selezionato tramite select list
  1802.                 nomeServizioCorrelato = "Errore lettura dati Wsdl: wsdl implementativo fruitore non esistente o corrotto";
  1803.             }
  1804.             //else{
  1805.             aspsOpenSPCoop.setTipo("spc");
  1806.             aspsOpenSPCoop.setNome(nomeServizioCorrelato);
  1807.             aspsOpenSPCoop.setPortType(nomeServizioCorrelato);
  1808.             //}
  1809.         }else{
  1810.             if(nomeServizio==null){
  1811.                 //throw new SICAToOpenSPCoopUtilitiesException("Identificazione nome del Servizio SPCoop non riuscita tramite la lettura dei wsdl implementativi");
  1812.                 // Il Servizio verra' selezionato tramite select list
  1813.                 nomeServizio = "Errore lettura dati Wsdl: wsdl implementativo erogatore non esistente o corrotto";
  1814.             }
  1815.             //else{
  1816.             aspsOpenSPCoop.setTipo("spc");
  1817.             aspsOpenSPCoop.setNome(nomeServizio);
  1818.             aspsOpenSPCoop.setPortType(nomeServizio);
  1819.             //}
  1820.         }
  1821.                
  1822.         // Adesione
  1823.         //aspsOpenSPCoop.setTipoAdesione(parteSpecifica.getAdesione());
  1824.        
  1825.        
  1826.         // Erogatore:
  1827.         IDSoggetto soggettoErogatore = null;
  1828.         if(parteSpecifica.getErogatore()!=null){
  1829.             soggettoErogatore = sicaToOpenspcoopContext.getIDSoggetto(SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(parteSpecifica.getErogatore().toString()));
  1830.             if(soggettoErogatore==null){
  1831.                 soggettoErogatore = SICAtoOpenSPCoopUtilities.idSoggetto_sicaToOpenspcoop(parteSpecifica.getErogatore().toString());
  1832.             }
  1833.             aspsOpenSPCoop.setTipoSoggettoErogatore(soggettoErogatore.getTipo());
  1834.             aspsOpenSPCoop.setNomeSoggettoErogatore(soggettoErogatore.getNome());
  1835.         }
  1836.    
  1837.                        
  1838.         // Allegati
  1839.         if(manifest.getAllegati()!=null){
  1840.             for(int i=0; i<manifest.getAllegati().sizeGenericoDocumentoList(); i++){
  1841.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  1842.                 String fileName = manifest.getAllegati().getGenericoDocumento(i);
  1843.                 docOpenspcoop.setFile(fileName);
  1844.                 docOpenspcoop.setRuolo(RuoliDocumento.allegato.toString());        
  1845.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  1846.                 for(int j=0; j<accordoServizioSICA.sizeAllegati(); j++){
  1847.                     if(fileName.equals(accordoServizioSICA.getAllegato(j).getNome())){
  1848.                         docSICA = accordoServizioSICA.getAllegato(j);
  1849.                     }
  1850.                 }
  1851.                 if(docSICA==null)
  1852.                     throw new SICAToOpenSPCoopUtilitiesException("Allegato con nome["+fileName+"] non trovato");
  1853.                 docOpenspcoop.setTipo(docSICA.getTipo());
  1854.                 docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  1855.                 aspsOpenSPCoop.addAllegato(docOpenspcoop);
  1856.             }
  1857.         }
  1858.        
  1859.         // SpecificaSemiformale
  1860.         if(manifest.getSpecificaSemiformale()!=null){
  1861.             for(int i=0; i<manifest.getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  1862.                 DocumentoSemiformale specificaSemiformale = manifest.getSpecificaSemiformale().getDocumentoSemiformale(i);
  1863.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  1864.                 String fileName = specificaSemiformale.getBase();
  1865.                
  1866.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  1867.                 for(int j=0; j<accordoServizioSICA.sizeSpecificheSemiformali(); j++){
  1868.                     if(fileName.equals(accordoServizioSICA.getSpecificaSemiformale(j).getNome())){
  1869.                         docSICA = accordoServizioSICA.getSpecificaSemiformale(j);
  1870.                     }
  1871.                 }
  1872.                 if(docSICA==null)
  1873.                     throw new SICAToOpenSPCoopUtilitiesException("SpecificaSemiformale con nome["+fileName+"] non trovato");
  1874.                
  1875.                 docOpenspcoop.setFile(fileName);
  1876.                 docOpenspcoop.setRuolo(RuoliDocumento.specificaSemiformale.toString());        
  1877.                 docOpenspcoop.setTipo(docSICA.getTipo());
  1878.                 docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  1879.                 aspsOpenSPCoop.addSpecificaSemiformale(docOpenspcoop);
  1880.             }
  1881.         }
  1882.        
  1883.        
  1884.         // SpecificaSicurezza
  1885.         SpecificaSicurezza specificaSicurezza = parteSpecifica.getSpecificaSicurezza();
  1886.         if(specificaSicurezza!=null){
  1887.             for(int i=0; i<specificaSicurezza.sizeDocumentoSicurezzaList(); i++){
  1888.                 DocumentoSicurezza docSicurezzaSICA = specificaSicurezza.getDocumentoSicurezza(i);
  1889.                
  1890.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  1891.                 String fileName = docSicurezzaSICA.getBase();
  1892.                
  1893.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  1894.                 for(int j=0; j<accordoServizioSICA.sizeSpecificheSicurezza(); j++){
  1895.                     if(fileName.equals(accordoServizioSICA.getSpecificaSicurezza(j).getNome())){
  1896.                         docSICA = accordoServizioSICA.getSpecificaSicurezza(j);
  1897.                     }
  1898.                 }
  1899.                 if(docSICA==null)
  1900.                     throw new SICAToOpenSPCoopUtilitiesException("SpecificaSicurezza con nome["+fileName+"] non trovato");
  1901.                
  1902.                 docOpenspcoop.setFile(fileName);
  1903.                 docOpenspcoop.setRuolo(RuoliDocumento.specificaSicurezza.toString());          
  1904.                 docOpenspcoop.setTipo(docSICA.getTipo());
  1905.                 docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  1906.                 aspsOpenSPCoop.addSpecificaSicurezza(docOpenspcoop);
  1907.             }
  1908.         }
  1909.        
  1910.        
  1911.         // Specifica Livelli di Servizio
  1912.         SpecificaLivelliServizio specificaLivelliServizio = parteSpecifica.getSpecificaLivelliServizio();
  1913.         if(specificaLivelliServizio!=null){
  1914.             for(int i=0; i<specificaLivelliServizio.sizeDocumentoLivelloServizioList(); i++){
  1915.                 DocumentoLivelloServizio docLS = specificaLivelliServizio.getDocumentoLivelloServizio(i);
  1916.                
  1917.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  1918.                 String fileName = docLS.getBase();
  1919.                
  1920.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  1921.                 for(int j=0; j<accordoServizioSICA.sizeSpecificheLivelliServizio(); j++){
  1922.                     if(fileName.equals(accordoServizioSICA.getSpecificaLivelloServizio(j).getNome())){
  1923.                         docSICA = accordoServizioSICA.getSpecificaLivelloServizio(j);
  1924.                     }
  1925.                 }
  1926.                 if(docSICA==null)
  1927.                     throw new SICAToOpenSPCoopUtilitiesException("SpecificaLivelloServizio con nome["+fileName+"] non trovato");
  1928.                
  1929.                 docOpenspcoop.setFile(fileName);
  1930.                 docOpenspcoop.setRuolo(RuoliDocumento.specificaLivelloServizio.toString());        
  1931.                 docOpenspcoop.setTipo(docSICA.getTipo());
  1932.                 docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  1933.                 aspsOpenSPCoop.addSpecificaLivelloServizio(docOpenspcoop);
  1934.             }
  1935.         }
  1936.    
  1937.        
  1938.        
  1939.         // Connettore servizio
  1940.         String url = null;
  1941.         if(aspsOpenSPCoop.getByteWsdlImplementativoErogatore()!=null){
  1942.             try{
  1943.                 url = SICAtoOpenSPCoopUtilities.readConnettoreFromWsdlImplementativo(aspsOpenSPCoop.getByteWsdlImplementativoErogatore());
  1944.             }catch(Exception e){
  1945.                 log.info("Lettura WsdlLocation non riuscita (ImplementativoErogatore): "+e.getMessage(),e);
  1946.             }
  1947.         }else if(aspsOpenSPCoop.getByteWsdlImplementativoFruitore()!=null){
  1948.             try{
  1949.                 url = SICAtoOpenSPCoopUtilities.readConnettoreFromWsdlImplementativo(aspsOpenSPCoop.getByteWsdlImplementativoFruitore());
  1950.             }catch(Exception e){
  1951.                 log.info("Lettura WsdlLocation non riuscita (ImplementativoFruitore): "+e.getMessage(),e);
  1952.             }
  1953.         }
  1954.         Connettore connettore = new Connettore();
  1955.         if(soggettoErogatore!=null){
  1956.             String nomeConn = "CNT_" + soggettoErogatore.getTipo() + "/" + soggettoErogatore.getNome() + "_" +
  1957.                     aspsOpenSPCoop.getTipo() + "/" + aspsOpenSPCoop.getNome();
  1958.             connettore.setNome(nomeConn);
  1959.         }
  1960.         if(url!=null){
  1961.             connettore.setTipo(CostantiDB.CONNETTORE_TIPO_HTTP);
  1962.             org.openspcoop2.core.registry.Property prop = new org.openspcoop2.core.registry.Property();
  1963.             prop.setNome(CostantiDB.CONNETTORE_HTTP_LOCATION);
  1964.             prop.setValore(url);
  1965.             connettore.addProperty(prop);
  1966.         }else{
  1967.             connettore.setTipo(CostantiDB.CONNETTORE_TIPO_DISABILITATO);
  1968.         }
  1969.         aspsOpenSPCoop.setConfigurazioneServizio(new ConfigurazioneServizio());
  1970.         aspsOpenSPCoop.getConfigurazioneServizio().setConnettore(connettore);
  1971.        
  1972.        
  1973.        
  1974.         /* Firma apposta dal Servizio di Registro quando l'accordo viene scaricato dal Registro stesso  */
  1975.         //if(manifest.getFirmato() && accordoServizioSICA.getFirma()!=null)
  1976.         //  aspsOpenSPCoop.setByteFirma(accordoServizioSICA.getFirma().getBytes());
  1977.        
  1978.        
  1979.         // Correggo eventuali import/include malformati in maniera conforme alla struttura del package CNIPA
  1980.         if(verificaCorreggiLocationWSDL){
  1981.             try{
  1982.                 RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  1983.                 registroOpenSPCoopUtilities.updateLocation(aspsOpenSPCoop,false,prettyDocument);
  1984.             }catch(Exception e){
  1985.                 //throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.setImportLocation error: "+e.getMessage(),e);
  1986.                 // Verra impostato uno stato bozza
  1987.                 log.error("Lettura connettore indicato nel WSDL Implementativo (Port) non riuscita: "+e.getMessage(),e);    
  1988.             }
  1989.         }
  1990.        
  1991.         return aspsOpenSPCoop;
  1992.     }
  1993.     /*public static it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica accordoServizioParteSpecifica_openspcoopToSica(
  1994.             IRegistryReader registryReader,
  1995.             org.openspcoop2.core.registry.Servizio accordoServizioOpenspcoop,
  1996.             boolean implementazioneAccordoServizioComposto,
  1997.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext)throws SICAToOpenSPCoopUtilitiesException{
  1998.         return accordoServizioParteSpecifica_openspcoopToSica(registryReader,accordoServizioOpenspcoop, implementazioneAccordoServizioComposto, null, sicaToOpenspcoopContext);
  1999.     }*/
  2000.     public static it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica accordoServizioParteSpecifica_openspcoopToSica(
  2001.             IRegistryReader registryReader,
  2002.             org.openspcoop2.core.registry.AccordoServizioParteSpecifica aspsOpenspcoop,
  2003.             boolean implementazioneAccordoServizioComposto,
  2004.             org.openspcoop2.core.registry.AccordoServizioParteComune parteComuneDaIncludereWSDLImplementativo,
  2005.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,
  2006.             Logger log)throws SICAToOpenSPCoopUtilitiesException{
  2007.        
  2008.         if(log==null){
  2009.             log = LoggerWrapperFactory.getLogger(SICAtoOpenSPCoopUtilities.class);
  2010.         }
  2011.        
  2012.         boolean verificaCorreggiLocationWSDL = sicaToOpenspcoopContext.isWSDL_XSD_allineaImportInclude();
  2013.         boolean prettyDocument = sicaToOpenspcoopContext.isWSDL_XSD_prettyDocuments();
  2014.         boolean includiInfoRegistroGenerale = sicaToOpenspcoopContext.isSICAClient_includiInfoRegistroGenerale();
  2015.         boolean wsdlEmptySeNonDefiniti = sicaToOpenspcoopContext.isWSDL_XSD_accordiParteSpecifica_wsdlEmpty();
  2016.         boolean openspcoopToSicaEliminazioneImportParteComune = sicaToOpenspcoopContext.isWSDL_XSD_accordiParteSpecifica_openspcoopToSica_eliminazioneImportParteComune();
  2017.        
  2018.         AbstractXMLUtils xmlUtils = org.openspcoop2.message.xml.MessageXMLUtils.DEFAULT;        
  2019.        
  2020.         IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  2021.        
  2022.         // Correggo eventuali import/include malformati in maniera conforme alla struttura del package CNIPA
  2023.         if(verificaCorreggiLocationWSDL){
  2024.             try{
  2025.                 RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  2026.                 registroOpenSPCoopUtilities.updateLocation(aspsOpenspcoop,true,prettyDocument);
  2027.             }catch(Exception e){
  2028.                 throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.setImportLocation error: "+e.getMessage(),e);
  2029.             }
  2030.         }
  2031.                    
  2032.         it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica accServParteSpecificaSICA =
  2033.             new it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica();
  2034.        
  2035.         /* Metadati presenti nel Manifest dell'Accordo di Cooperazione. */
  2036.         it.gov.spcoop.sica.manifest.AccordoServizio manifest = new it.gov.spcoop.sica.manifest.AccordoServizio();
  2037.         manifest.setDescrizione(aspsOpenspcoop.getDescrizione());
  2038.         manifest.setNome(aspsOpenspcoop.getNome());
  2039.         manifest.setDataCreazione(aspsOpenspcoop.getOraRegistrazione());
  2040.         //manifest.getRiservato() ???
  2041.        
  2042.         it.gov.spcoop.sica.manifest.AccordoServizioParteSpecifica parteSpecifica = new it.gov.spcoop.sica.manifest.AccordoServizioParteSpecifica();
  2043.                
  2044.         if(includiInfoRegistroGenerale){
  2045.             if(aspsOpenspcoop.getVersione()!=null){
  2046.                 manifest.setVersione(aspsOpenspcoop.getVersione().intValue()+"");
  2047.             }
  2048.             //manifest.setDataPubblicazione(aspsOpenspcoop.getDataPubblicazione());
  2049.        
  2050.             // Erogatore:
  2051.             IDSoggetto soggettoErogatore = new IDSoggetto(aspsOpenspcoop.getTipoSoggettoErogatore(),aspsOpenspcoop.getNomeSoggettoErogatore());
  2052.             String uriErogatore = sicaToOpenspcoopContext.getCodiceIPA(soggettoErogatore);
  2053.             if(uriErogatore==null){
  2054.                 uriErogatore =  SICAtoOpenSPCoopUtilities.idSoggetto_openspcoopToSica(soggettoErogatore);
  2055.             }
  2056.             else
  2057.                 uriErogatore = SICAtoOpenSPCoopUtilities.appendURI_IDSoggettoSica(uriErogatore);
  2058.             try {
  2059.                 parteSpecifica.setErogatore(new URI(uriErogatore));
  2060.             }catch(Exception e) {
  2061.                 throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  2062.             }
  2063.            
  2064.             //if(aspsOpenspcoop.getByteFirma()!=null){
  2065.             //  manifest.setFirmato(true);
  2066.             //}
  2067.         }
  2068.        
  2069.        
  2070.         // riferimentoParteComune
  2071.         try{
  2072.             if(implementazioneAccordoServizioComposto)
  2073.                 parteSpecifica.setRiferimentoParteComune(new URI(SICAtoOpenSPCoopUtilities.idAccordoServizioComposto_openspcoopToSica(registryReader,idAccordoFactory.getIDAccordoFromUri(aspsOpenspcoop.getAccordoServizioParteComune()),sicaToOpenspcoopContext)));
  2074.             else
  2075.                 parteSpecifica.setRiferimentoParteComune(new URI(SICAtoOpenSPCoopUtilities.idAccordoServizioParteComune_openspcoopToSica(registryReader,idAccordoFactory.getIDAccordoFromUri(aspsOpenspcoop.getAccordoServizioParteComune()),sicaToOpenspcoopContext)));
  2076.         }catch(Exception e){
  2077.             throw new SICAToOpenSPCoopUtilitiesException("Trasformazione riferimento parte comune ["+aspsOpenspcoop.getAccordoServizioParteComune()+"] non riuscita: "+e.getMessage(),e);
  2078.         }
  2079.        
  2080.         // Calcolo connettore servizioOpenspcoop
  2081.         String urlConnettore = null;
  2082.         if(aspsOpenspcoop.getConfigurazioneServizio()!=null && aspsOpenspcoop.getConfigurazioneServizio().getConnettore()!=null){
  2083.             if(CostantiDB.CONNETTORE_TIPO_HTTP.equals(aspsOpenspcoop.getConfigurazioneServizio().getConnettore().getTipo()) ||
  2084.                     CostantiDB.CONNETTORE_TIPO_HTTPS.equals(aspsOpenspcoop.getConfigurazioneServizio().getConnettore().getTipo())){
  2085.                 if(aspsOpenspcoop.getConfigurazioneServizio().getConnettore().sizePropertyList()>0){
  2086.                     for(int i=0; i<aspsOpenspcoop.getConfigurazioneServizio().getConnettore().sizePropertyList(); i++){
  2087.                         if(CostantiDB.CONNETTORE_HTTP_LOCATION.equals(aspsOpenspcoop.getConfigurazioneServizio().getConnettore().getProperty(i).getNome())){
  2088.                             urlConnettore = aspsOpenspcoop.getConfigurazioneServizio().getConnettore().getProperty(i).getValore();
  2089.                         }
  2090.                     }
  2091.                 }
  2092.             }
  2093.         }
  2094.        
  2095.         // Specifica Porti di Accesso
  2096.         it.gov.spcoop.sica.manifest.SpecificaPortiAccesso specificaPortiAccesso = null;
  2097.         if(  (aspsOpenspcoop.getByteWsdlImplementativoErogatore()!=null) || (aspsOpenspcoop.getByteWsdlImplementativoFruitore()!=null) ){
  2098.             specificaPortiAccesso = new it.gov.spcoop.sica.manifest.SpecificaPortiAccesso();
  2099.         }
  2100.        
  2101.         // ImplementativoErogatore
  2102.         if(wsdlEmptySeNonDefiniti || aspsOpenspcoop.getByteWsdlImplementativoErogatore()!=null){
  2103.             it.gov.spcoop.sica.manifest.DocumentoInterfaccia docInterfacciaErogatore = new it.gov.spcoop.sica.manifest.DocumentoInterfaccia();
  2104.             docInterfacciaErogatore.setBase(Costanti.SPECIFICA_PORTI_ACCESSO_EROGATORE_WSDL);
  2105.             docInterfacciaErogatore.setTipo(TipoDocumentoInterfaccia.WSDL);
  2106.             specificaPortiAccesso.setPortiAccessoErogatore(docInterfacciaErogatore);
  2107.             it.gov.spcoop.sica.dao.Documento docErogatore = new it.gov.spcoop.sica.dao.Documento();
  2108.             docErogatore.setTipo(TipiDocumentoInterfaccia.WSDL.toString());
  2109.             docErogatore.setNome(Costanti.SPECIFICA_PORTI_ACCESSO_EROGATORE_WSDL);
  2110.             byte [] wsdlImplementativoErogatore = null;
  2111.             if(aspsOpenspcoop.getByteWsdlImplementativoErogatore()!=null){
  2112.                
  2113.                 wsdlImplementativoErogatore = aspsOpenspcoop.getByteWsdlImplementativoErogatore();
  2114.                 if(parteComuneDaIncludereWSDLImplementativo!=null){
  2115.                     // Includo parte comune
  2116.                     try{
  2117.                         RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  2118.                         Definition wsdl = registroOpenSPCoopUtilities.buildWsdlFromObjects(parteComuneDaIncludereWSDLImplementativo, wsdlImplementativoErogatore, true);
  2119.                         DefinitionWrapper wsdlOpenSPCoop = new DefinitionWrapper(wsdl,xmlUtils);
  2120.                         wsdlImplementativoErogatore = wsdlOpenSPCoop.toByteArray();
  2121.                     }catch(Exception e){
  2122.                         log.info("Inserimento parte comune nel wsdl non riuscito (ImplementativoErogatore): "+e.getMessage(),e);
  2123.                     }
  2124.                 }
  2125.                 else if(openspcoopToSicaEliminazioneImportParteComune){
  2126.                     // Elimino import parte comune
  2127.                     try{
  2128.                         RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  2129.                         wsdlImplementativoErogatore = registroOpenSPCoopUtilities.eliminaImportASParteComune(wsdlImplementativoErogatore);
  2130.                     }catch(Exception e){
  2131.                         throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.eliminaImportASParteComune error: "+e.getMessage(),e);
  2132.                     }
  2133.                 }
  2134.                 if(urlConnettore!=null){
  2135.                     // salvo il connettore
  2136.                     try{
  2137.                         wsdlImplementativoErogatore = SICAtoOpenSPCoopUtilities.saveConnettoreIntoWsdlImplementativo(wsdlImplementativoErogatore,
  2138.                                 urlConnettore);
  2139.                     }catch(Exception e){
  2140.                         log.info("Impostazione WsdlLocation non riuscita (ImplementativoErogatore): "+e.getMessage(),e);
  2141.                     }
  2142.                 }  
  2143.             }
  2144.             else{
  2145.                 // Imposto WSDL Empty per compatibilita Client SICA
  2146.                 wsdlImplementativoErogatore = Costanti.WSDL_EMPTY.getBytes();
  2147.             }
  2148.             docErogatore.setContenuto(wsdlImplementativoErogatore);
  2149.             accServParteSpecificaSICA.setPortiAccessoErogatore(docErogatore);
  2150.         }
  2151.        
  2152.         // ImplementativoFruitore
  2153.         if(wsdlEmptySeNonDefiniti || aspsOpenspcoop.getByteWsdlImplementativoFruitore()!=null){
  2154.             it.gov.spcoop.sica.manifest.DocumentoInterfaccia docInterfacciaFruitore = new it.gov.spcoop.sica.manifest.DocumentoInterfaccia();
  2155.             docInterfacciaFruitore.setBase(Costanti.SPECIFICA_PORTI_ACCESSO_FRUITORE_WSDL);
  2156.             docInterfacciaFruitore.setTipo(TipoDocumentoInterfaccia.WSDL);
  2157.             specificaPortiAccesso.setPortiAccessoFruitore(docInterfacciaFruitore);
  2158.             it.gov.spcoop.sica.dao.Documento docFruitore = new it.gov.spcoop.sica.dao.Documento();
  2159.             docFruitore.setTipo(TipiDocumentoInterfaccia.WSDL.toString());
  2160.             docFruitore.setNome(Costanti.SPECIFICA_PORTI_ACCESSO_FRUITORE_WSDL);
  2161.             byte [] wsdlImplementativoFruitore = null;
  2162.             if(aspsOpenspcoop.getByteWsdlImplementativoFruitore()!=null){
  2163.                
  2164.                 wsdlImplementativoFruitore = aspsOpenspcoop.getByteWsdlImplementativoFruitore();
  2165.                 if(parteComuneDaIncludereWSDLImplementativo!=null){
  2166.                     // Includo parte comune
  2167.                     try{
  2168.                         RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  2169.                         Definition wsdl = registroOpenSPCoopUtilities.buildWsdlFromObjects(parteComuneDaIncludereWSDLImplementativo, wsdlImplementativoFruitore, false);
  2170.                         DefinitionWrapper wsdlOpenSPCoop = new DefinitionWrapper(wsdl,xmlUtils);
  2171.                         wsdlImplementativoFruitore = wsdlOpenSPCoop.toByteArray();
  2172.                     }catch(Exception e){
  2173.                         log.info("Inserimento parte comune nel wsdl non riuscito (ImplementativoFruitore): "+e.getMessage(),e);
  2174.                     }
  2175.                 }
  2176.                 else if(openspcoopToSicaEliminazioneImportParteComune){
  2177.                     // Elimino import parte comune
  2178.                     try{
  2179.                         RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),log);
  2180.                         wsdlImplementativoFruitore = registroOpenSPCoopUtilities.eliminaImportASParteComune(wsdlImplementativoFruitore);
  2181.                     }catch(Exception e){
  2182.                         throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.eliminaImportASParteComune error: "+e.getMessage(),e);
  2183.                     }
  2184.                 }
  2185.                 if(urlConnettore!=null){
  2186.                     // salvo il connettore
  2187.                     try{
  2188.                         wsdlImplementativoFruitore = SICAtoOpenSPCoopUtilities.saveConnettoreIntoWsdlImplementativo(wsdlImplementativoFruitore,
  2189.                                 urlConnettore);
  2190.                     }catch(Exception e){
  2191.                         log.info("Impostazione WsdlLocation non riuscita (ImplementativoFruitore): "+e.getMessage(),e);
  2192.                     }
  2193.                 }
  2194.             }
  2195.             else{
  2196.                 // Imposto WSDL Empty per compatibilita Client SICA
  2197.                 wsdlImplementativoFruitore = Costanti.WSDL_EMPTY.getBytes();
  2198.             }
  2199.             docFruitore.setContenuto(wsdlImplementativoFruitore);
  2200.             accServParteSpecificaSICA.setPortiAccessoFruitore(docFruitore);
  2201.         }
  2202.        
  2203.         // Imposto specificaPortiAccesso
  2204.         if(specificaPortiAccesso!=null){
  2205.             parteSpecifica.setSpecificaPortiAccesso(specificaPortiAccesso);
  2206.         }
  2207.            
  2208.         // Adesione
  2209.         //parteSpecifica.setAdesione(aspsOpenspcoop.getTipoAdesione());
  2210.         parteSpecifica.setAdesione(TipoAdesione.AUTOMATICA);
  2211.        
  2212.                
  2213.         // Allegati
  2214.         if(aspsOpenspcoop.sizeAllegatoList()>0){
  2215.             it.gov.spcoop.sica.manifest.ElencoAllegati allegati = new it.gov.spcoop.sica.manifest.ElencoAllegati();
  2216.             for(int i=0; i<aspsOpenspcoop.sizeAllegatoList(); i++){
  2217.                 org.openspcoop2.core.registry.Documento docOpenspcoop = aspsOpenspcoop.getAllegato(i);
  2218.                
  2219.                 allegati.addGenericoDocumento(docOpenspcoop.getFile());
  2220.                
  2221.                 it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  2222.                 docSICA.setTipo(docOpenspcoop.getTipo());
  2223.                 docSICA.setNome(docOpenspcoop.getFile());
  2224.                 if(docOpenspcoop.getByteContenuto()==null){
  2225.                     throw new SICAToOpenSPCoopUtilitiesException("Byte dell'allegato "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  2226.                 }
  2227.                 docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  2228.                 accServParteSpecificaSICA.addAllegato(docSICA);
  2229.             }
  2230.             manifest.setAllegati(allegati);
  2231.         }
  2232.        
  2233.         // SpecificheSemiformali
  2234.         if(aspsOpenspcoop.sizeSpecificaSemiformaleList()>0){
  2235.             it.gov.spcoop.sica.manifest.SpecificaSemiformale specificaSemiformale = new it.gov.spcoop.sica.manifest.SpecificaSemiformale();
  2236.             for(int i=0; i<aspsOpenspcoop.sizeSpecificaSemiformaleList(); i++){
  2237.                 org.openspcoop2.core.registry.Documento docOpenspcoop = aspsOpenspcoop.getSpecificaSemiformale(i);
  2238.                
  2239.                 it.gov.spcoop.sica.manifest.DocumentoSemiformale docSemiformale = new it.gov.spcoop.sica.manifest.DocumentoSemiformale();
  2240.                 docSemiformale.setTipo(docOpenspcoop.getTipo());
  2241.                 docSemiformale.setBase(docOpenspcoop.getFile());
  2242.                 specificaSemiformale.addDocumentoSemiformale(docSemiformale);          
  2243.                
  2244.                 it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  2245.                 docSICA.setTipo(docOpenspcoop.getTipo());
  2246.                 docSICA.setNome(docOpenspcoop.getFile());
  2247.                 if(docOpenspcoop.getByteContenuto()==null){
  2248.                     throw new SICAToOpenSPCoopUtilitiesException("Byte della specifica semiformale "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  2249.                 }
  2250.                 docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  2251.                 accServParteSpecificaSICA.addSpecificaSemiformale(docSICA);
  2252.             }
  2253.             manifest.setSpecificaSemiformale(specificaSemiformale);
  2254.         }
  2255.        
  2256.        
  2257.         // SpecificheSicurezza
  2258.         it.gov.spcoop.sica.manifest.SpecificaSicurezza specificaSicurezza = null;
  2259.         for(int i=0; i<aspsOpenspcoop.sizeSpecificaSicurezzaList(); i++){
  2260.             org.openspcoop2.core.registry.Documento docOpenspcoop = aspsOpenspcoop.getSpecificaSicurezza(i);
  2261.            
  2262.             if(specificaSicurezza==null)
  2263.                 specificaSicurezza = new it.gov.spcoop.sica.manifest.SpecificaSicurezza();
  2264.            
  2265.             // In OpenSPCoop e' stato aggiunto xacmlPolicy non gestito dal CNIPA
  2266.             String tipo = docOpenspcoop.getTipo();
  2267.             if(!TipiDocumentoSicurezza.LINGUAGGIO_NATURALE.getNome().equals(tipo) && !TipiDocumentoSicurezza.WSPOLICY.getNome().equals(tipo)){
  2268.                 tipo = TipiDocumentoSicurezza.LINGUAGGIO_NATURALE.getNome(); // forzo tipo di linguaggio naturale.
  2269.             }
  2270.            
  2271.             it.gov.spcoop.sica.manifest.DocumentoSicurezza docSicurezza = new it.gov.spcoop.sica.manifest.DocumentoSicurezza();
  2272.             docSicurezza.setTipo(tipo);
  2273.             docSicurezza.setBase(docOpenspcoop.getFile());
  2274.             specificaSicurezza.addDocumentoSicurezza(docSicurezza);
  2275.                    
  2276.             it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  2277.             docSICA.setTipo(tipo);
  2278.             docSICA.setNome(docOpenspcoop.getFile());
  2279.             if(docOpenspcoop.getByteContenuto()==null){
  2280.                 throw new SICAToOpenSPCoopUtilitiesException("Byte della specifica di sicurezza "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  2281.             }
  2282.             docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  2283.             accServParteSpecificaSICA.addSpecificaSicurezza(docSICA);
  2284.         }
  2285.         if(specificaSicurezza!=null)
  2286.             parteSpecifica.setSpecificaSicurezza(specificaSicurezza);
  2287.        
  2288.        
  2289.         // Specifiche Livelli di Servizio
  2290.         it.gov.spcoop.sica.manifest.SpecificaLivelliServizio specificaLivelliServizio = null;
  2291.         for(int i=0; i<aspsOpenspcoop.sizeSpecificaLivelloServizioList(); i++){
  2292.             org.openspcoop2.core.registry.Documento docOpenspcoop = aspsOpenspcoop.getSpecificaLivelloServizio(i);
  2293.            
  2294.             if(specificaLivelliServizio==null)
  2295.                 specificaLivelliServizio = new it.gov.spcoop.sica.manifest.SpecificaLivelliServizio();
  2296.             it.gov.spcoop.sica.manifest.DocumentoLivelloServizio docLivelliServizio = new it.gov.spcoop.sica.manifest.DocumentoLivelloServizio();
  2297.            
  2298.             docLivelliServizio.setTipo(docOpenspcoop.getTipo());
  2299.             docLivelliServizio.setBase(docOpenspcoop.getFile());
  2300.             specificaLivelliServizio.addDocumentoLivelloServizio(docLivelliServizio);
  2301.            
  2302.             it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  2303.             docSICA.setTipo(docOpenspcoop.getTipo());
  2304.             docSICA.setNome(docOpenspcoop.getFile());
  2305.             if(docOpenspcoop.getByteContenuto()==null){
  2306.                 throw new SICAToOpenSPCoopUtilitiesException("Byte della specifica del livello di servizio "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  2307.             }
  2308.             docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  2309.             accServParteSpecificaSICA.addSpecificaLivelloServizio(docSICA);
  2310.         }
  2311.         if(specificaLivelliServizio!=null)
  2312.             parteSpecifica.setSpecificaLivelliServizio(specificaLivelliServizio);

  2313.        
  2314.         /* Firma apposta dal Servizio di Registro quando l'accordo viene scaricato dal Registro stesso  */
  2315.         if(includiInfoRegistroGenerale){
  2316.             //if(aspsOpenspcoop.getByteFirma()!=null){
  2317.             //  it.gov.spcoop.sica.firma.Firma firma = new it.gov.spcoop.sica.firma.Firma();
  2318.             //  accServParteSpecificaSICA.setFirma(firma);
  2319.             //}
  2320.         }
  2321.        
  2322.        
  2323.         // Setto parte comune
  2324.         manifest.setParteSpecifica(parteSpecifica);
  2325.        
  2326.         accServParteSpecificaSICA.setManifesto(manifest);
  2327.         return accServParteSpecificaSICA;
  2328.     }
  2329.    
  2330.    
  2331.    
  2332.    
  2333.    
  2334.    
  2335.    
  2336.     /* Servizio Composto */
  2337.     public static org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizioComposto_sicaToOpenspcoop(
  2338.             IRegistryReader registryReader,
  2339.             it.gov.spcoop.sica.dao.AccordoServizioComposto accordoServizioSICA,
  2340.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,
  2341.             Logger log)throws SICAToOpenSPCoopUtilitiesException{
  2342.        
  2343.         if(log==null){
  2344.             log = LoggerWrapperFactory.getLogger(SICAtoOpenSPCoopUtilities.class);
  2345.         }
  2346.        
  2347.         boolean verificaCorreggiLocationWSDL = sicaToOpenspcoopContext.isWSDL_XSD_allineaImportInclude();
  2348.         boolean prettyDocument = sicaToOpenspcoopContext.isWSDL_XSD_prettyDocuments();
  2349.         boolean documentoSpecificaEGOV_asClientSICADisabled_childUnquilified = sicaToOpenspcoopContext.isInformazioniEGov_wscpDisabled_childUnqualified();
  2350.         boolean documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified = sicaToOpenspcoopContext.isInformazioniEGov_wscpEnabled_childUnqualified();
  2351.        
  2352.         org.openspcoop2.core.registry.AccordoServizioParteComune accServizioOpenspcoop = new org.openspcoop2.core.registry.AccordoServizioParteComune();
  2353.         accServizioOpenspcoop.setServiceBinding(ServiceBinding.SOAP);
  2354.         accServizioOpenspcoop.setFormatoSpecifica(FormatoSpecifica.WSDL_11);
  2355.        
  2356.         IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  2357.        
  2358.         /* Metadati presenti nel Manifest dell'Accordo di Cooperazione. */
  2359.         it.gov.spcoop.sica.manifest.ServizioComposto manifest = accordoServizioSICA.getManifesto();
  2360.         accServizioOpenspcoop.setDescrizione(resizeDescriptionForMaxLength(manifest.getDescrizione()));
  2361.         accServizioOpenspcoop.setNome(manifest.getNome());
  2362.         if(manifest.getVersione()!=null){
  2363.             accServizioOpenspcoop.setVersione(Integer.parseInt(manifest.getVersione()));
  2364.         }
  2365.         accServizioOpenspcoop.setOraRegistrazione(manifest.getDataCreazione());
  2366.         //accServizioOpenspcoop.setDataPubblicazione(manifest.getDataPubblicazione());
  2367.         accServizioOpenspcoop.setProfiloCollaborazione(CostantiRegistroServizi.ONEWAY); // Default per AS
  2368.         //manifest.getRiservato() ???
  2369.        
  2370.         // SpecificaInterfaccia
  2371.         it.gov.spcoop.sica.manifest.SpecificaInterfaccia specificaInterfaccia = manifest.getSpecificaInterfaccia();
  2372.         if( (accordoServizioSICA.getInterfacciaConcettuale()!=null) ||  (accordoServizioSICA.getInterfacciaLogicaLatoErogatore()!=null) || (accordoServizioSICA.getInterfacciaLogicaLatoFruitore()!=null) ){
  2373.             if(specificaInterfaccia.getInterfacciaConcettuale()!=null &&  accordoServizioSICA.getInterfacciaConcettuale()!=null &&
  2374.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getInterfacciaConcettuale().getContenuto()) ){
  2375.                 accServizioOpenspcoop.setByteWsdlConcettuale(accordoServizioSICA.getInterfacciaConcettuale().getContenuto());
  2376.             }
  2377.             if(specificaInterfaccia.getInterfacciaLogicaLatoErogatore()!=null && accordoServizioSICA.getInterfacciaLogicaLatoErogatore()!=null &&
  2378.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getInterfacciaLogicaLatoErogatore().getContenuto()) ){
  2379.                 accServizioOpenspcoop.setByteWsdlLogicoErogatore(accordoServizioSICA.getInterfacciaLogicaLatoErogatore().getContenuto());
  2380.             }
  2381.             if(specificaInterfaccia.getInterfacciaLogicaLatoFruitore()!=null && accordoServizioSICA.getInterfacciaLogicaLatoFruitore()!=null &&
  2382.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getInterfacciaLogicaLatoFruitore().getContenuto()) ){
  2383.                 accServizioOpenspcoop.setByteWsdlLogicoFruitore(accordoServizioSICA.getInterfacciaLogicaLatoFruitore().getContenuto());
  2384.             }
  2385.         }
  2386.        
  2387.         // SpecificaConversazione
  2388.         it.gov.spcoop.sica.manifest.SpecificaConversazione specificaConversazione = manifest.getSpecificaConversazione();
  2389.         if( (accordoServizioSICA.getConversazioneConcettuale()!=null) ||  (accordoServizioSICA.getConversazioneLogicaErogatore()!=null) || (accordoServizioSICA.getConversazioneLogicaFruitore()!=null) ){
  2390.             if(specificaConversazione.getConversazioneConcettuale()!=null && accordoServizioSICA.getConversazioneConcettuale()!=null  &&
  2391.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getConversazioneConcettuale().getContenuto()) ){
  2392.                 accServizioOpenspcoop.setByteSpecificaConversazioneConcettuale(accordoServizioSICA.getConversazioneConcettuale().getContenuto());
  2393.             }
  2394.             if(specificaConversazione.getConversazioneLogicaLatoErogatore()!=null && accordoServizioSICA.getConversazioneLogicaErogatore()!=null  &&
  2395.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getConversazioneLogicaErogatore().getContenuto()) ){
  2396.                 accServizioOpenspcoop.setByteSpecificaConversazioneErogatore(accordoServizioSICA.getConversazioneLogicaErogatore().getContenuto());
  2397.             }
  2398.             if(specificaConversazione.getConversazioneLogicaLatoFruitore()!=null && accordoServizioSICA.getConversazioneLogicaFruitore()!=null  &&
  2399.                     !SICAtoOpenSPCoopUtilities.isWsdlEmpty(accordoServizioSICA.getConversazioneLogicaFruitore().getContenuto()) ){
  2400.                 accServizioOpenspcoop.setByteSpecificaConversazioneFruitore(accordoServizioSICA.getConversazioneLogicaFruitore().getContenuto());
  2401.             }
  2402.         }
  2403.        
  2404.         // Pubblicatore:
  2405.         if(manifest.getPubblicatore()!=null){
  2406.             IdSoggetto soggettoReferente =
  2407.                 new IdSoggetto();
  2408.             IDSoggetto soggettoPubblicatore = sicaToOpenspcoopContext.getIDSoggetto(SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(manifest.getPubblicatore().toString()));
  2409.             if(soggettoPubblicatore==null){
  2410.                 soggettoPubblicatore = SICAtoOpenSPCoopUtilities.idSoggetto_sicaToOpenspcoop(manifest.getPubblicatore().toString());
  2411.             }
  2412.             soggettoReferente.setNome(soggettoPubblicatore.getNome());
  2413.             soggettoReferente.setTipo(soggettoPubblicatore.getTipo());
  2414.             accServizioOpenspcoop.setSoggettoReferente(soggettoReferente);
  2415.         }
  2416.        

  2417.         // Riferimento accordo di cooperazione:
  2418.         org.openspcoop2.core.registry.AccordoServizioParteComuneServizioComposto servizioComposto =
  2419.             new org.openspcoop2.core.registry.AccordoServizioParteComuneServizioComposto();
  2420.         IDAccordoCooperazione idAccordo = SICAtoOpenSPCoopUtilities.idAccordoCooperazione_sicaToOpenspcoop(registryReader,manifest.getRiferimentoAccordoCooperazione().toString());
  2421.         try{
  2422.             servizioComposto.setAccordoCooperazione(idAccordoCooperazioneFactory.getUriFromIDAccordo(idAccordo));
  2423.         }catch(Exception e){
  2424.             throw new SICAToOpenSPCoopUtilitiesException("Trasformazione IDAccordo di cooperazione ["+manifest.getRiferimentoAccordoCooperazione()+"] non riuscito: "+e.getMessage(),e);
  2425.         }
  2426.        
  2427.         // Servizi componenti
  2428.         if(manifest.getServiziComponenti()!=null){
  2429.             for(int i=0; i<manifest.getServiziComponenti().sizeServizioComponenteList(); i++){
  2430.                 String servComponente = manifest.getServiziComponenti().getServizioComponente(i).toString();
  2431.                 //IDServizio idServizioComponente = idAccordoServizioParteSpecifica_sicaToOpenspcoop(servComponente,sicaToOpenspcoopContext);
  2432.                 IDServizio idServizioComponente = sicaToOpenspcoopContext.getIDServizio(servComponente);
  2433.                 if(idServizioComponente==null){
  2434.                     throw new SICAToOpenSPCoopUtilitiesException("Trasformazione uriAPS["+servComponente+"] in IDServizio SPCoop non riuscita");
  2435.                 }
  2436.                 org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente servComponenteOpenspcoop =
  2437.                     new org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente();
  2438.                 try{
  2439.                     servComponenteOpenspcoop.setTipo(idServizioComponente.getTipo());
  2440.                     servComponenteOpenspcoop.setNome(idServizioComponente.getNome());
  2441.                     servComponenteOpenspcoop.setVersione(idServizioComponente.getVersione());
  2442.                     servComponenteOpenspcoop.setTipoSoggetto(idServizioComponente.getSoggettoErogatore().getTipo());
  2443.                     servComponenteOpenspcoop.setNomeSoggetto(idServizioComponente.getSoggettoErogatore().getNome());
  2444.                 }catch(Exception e){
  2445.                     throw new SICAToOpenSPCoopUtilitiesException("Trasformazione IDAccordo di servizio composto ["+servComponente+"] non riuscito: "+e.getMessage(),e);
  2446.                 }
  2447.                 servizioComposto.addServizioComponente(servComponenteOpenspcoop);
  2448.             }
  2449.         }

  2450.         boolean findDocumentoSpecificaEGOV = false;
  2451.         String tipoDocumentoSpecificaEGovTrovato = null;
  2452.         String fileNameSpecificaEGovTrovata = null;
  2453.    
  2454.         // Allegati
  2455.         if(manifest.getAllegati()!=null){
  2456.             for(int i=0; i<manifest.getAllegati().sizeGenericoDocumentoList(); i++){
  2457.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  2458.                 String fileName = manifest.getAllegati().getGenericoDocumento(i);
  2459.                 docOpenspcoop.setFile(fileName);
  2460.                 docOpenspcoop.setRuolo(RuoliDocumento.allegato.toString());        
  2461.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  2462.                 for(int j=0; j<accordoServizioSICA.sizeAllegati(); j++){
  2463.                     if(fileName.equals(accordoServizioSICA.getAllegato(j).getNome())){
  2464.                         docSICA = accordoServizioSICA.getAllegato(j);
  2465.                     }
  2466.                 }
  2467.                 if(docSICA==null)
  2468.                     throw new SICAToOpenSPCoopUtilitiesException("Allegato con nome["+fileName+"] non trovato");
  2469.                
  2470.                 if(Costanti.ALLEGATO_DEFINITORIO_XSD.equals(fileName)){
  2471.                    
  2472.                     accServizioOpenspcoop.setByteWsdlDefinitorio(docSICA.getContenuto());
  2473.                
  2474.                 }else{
  2475.                    
  2476.                     // tipo: http://spcoop.gov.it/sica/wscp
  2477.                     boolean specificaEGovAsClientSICA = it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto());
  2478.                     // tipo: http://www.cnipa.it/collProfiles
  2479.                     boolean specificaEGovAsDocumentoCNIPA = it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto());
  2480.                    
  2481.                     // Check vincoli di unicita
  2482.                     if(findDocumentoSpecificaEGOV){
  2483.                         String fileNameTmp = Costanti.ALLEGATI_DIR+File.separatorChar+fileName;
  2484.                         if(specificaEGovAsClientSICA){
  2485.                             throw new SICAToOpenSPCoopUtilitiesException("Nel package sono presenti piu' di una specifica delle informazioni egov. E' stata gia' processata una specifica di tipo "+tipoDocumentoSpecificaEGovTrovato+" ("+fileNameSpecificaEGovTrovata+") e adesso e' stato riscontrato una specifica di tipo "+it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE+" ("+fileNameTmp+")");
  2486.                         }
  2487.                         if(specificaEGovAsDocumentoCNIPA){
  2488.                             throw new SICAToOpenSPCoopUtilitiesException("Nel package sono presenti piu' di una specifica delle informazioni egov. E' stata gia' processata una specifica di tipo "+tipoDocumentoSpecificaEGovTrovato+" ("+fileNameSpecificaEGovTrovata+") e adesso e' stato riscontrato una specifica di tipo "+it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE+" ("+fileNameTmp+")");
  2489.                         }
  2490.                     }else{
  2491.                         if(specificaEGovAsClientSICA && specificaEGovAsDocumentoCNIPA){
  2492.                             throw new SICAToOpenSPCoopUtilitiesException("Trovata specifica delle informazioni egov sia di tipo "+it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE+" che di tipo "+it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE+" ??");
  2493.                         }
  2494.                         if(specificaEGovAsClientSICA || specificaEGovAsDocumentoCNIPA){
  2495.                             findDocumentoSpecificaEGOV = true;
  2496.                             fileNameSpecificaEGovTrovata = Costanti.ALLEGATI_DIR+File.separatorChar+fileName;
  2497.                         }
  2498.                     }
  2499.                    
  2500.                     // Gestione
  2501.                     if(specificaEGovAsClientSICA){
  2502.                         try{
  2503.                             it.gov.spcoop.sica.wscp.driver.XMLUtils.mapProfiloCollaborazioneEGOVIntoAS(log,docSICA.getContenuto(), accServizioOpenspcoop, documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified);
  2504.                             tipoDocumentoSpecificaEGovTrovato = it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE;
  2505.                         }catch(Exception e){
  2506.                             throw new SICAToOpenSPCoopUtilitiesException("Errore durante la verifica dell'esistenza del documento di tipo 'ProfiloCollaborazioneEGOV' per il file ["+fileName+"] : "+e.getMessage(),e);
  2507.                         }
  2508.                     }
  2509.                     else if(specificaEGovAsDocumentoCNIPA){
  2510.                         try{
  2511.                             it.cnipa.collprofiles.driver.XMLUtils.mapProfiloCollaborazioneEGOVIntoAS(log,docSICA.getContenuto(), accServizioOpenspcoop, documentoSpecificaEGOV_asClientSICADisabled_childUnquilified);
  2512.                             tipoDocumentoSpecificaEGovTrovato = it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE;
  2513.                         }catch(Exception e){
  2514.                             throw new SICAToOpenSPCoopUtilitiesException("Errore durante la verifica dell'esistenza del documento di tipo 'ProfiloCollaborazioneEGOV' per il file ["+fileName+"] : "+e.getMessage(),e);
  2515.                         }
  2516.                     }
  2517.                     else{
  2518.                         //allegatoGenerico
  2519.                         docOpenspcoop.setTipo(docSICA.getTipo());
  2520.                         docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  2521.                         accServizioOpenspcoop.addAllegato(docOpenspcoop);
  2522.                     }
  2523.                 }
  2524.             }
  2525.         }
  2526.        
  2527.        
  2528.        
  2529.         // SpecificaSemiformale
  2530.         if(manifest.getSpecificaSemiformale()!=null){
  2531.             for(int i=0; i<manifest.getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  2532.                 DocumentoSemiformale specificaSemiformale = manifest.getSpecificaSemiformale().getDocumentoSemiformale(i);
  2533.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  2534.                 String fileName = specificaSemiformale.getBase();
  2535.                
  2536.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  2537.                 for(int j=0; j<accordoServizioSICA.sizeSpecificheSemiformali(); j++){
  2538.                     if(fileName.equals(accordoServizioSICA.getSpecificaSemiformale(j).getNome())){
  2539.                         docSICA = accordoServizioSICA.getSpecificaSemiformale(j);
  2540.                     }
  2541.                 }
  2542.                 if(docSICA==null)
  2543.                     throw new SICAToOpenSPCoopUtilitiesException("SpecificaSemiformale con nome["+fileName+"] non trovato");
  2544.                
  2545.                 // tipo: http://spcoop.gov.it/sica/wscp
  2546.                 boolean specificaEGovAsClientSICA = it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto());
  2547.                 // tipo: http://www.cnipa.it/collProfiles
  2548.                 boolean specificaEGovAsDocumentoCNIPA = it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto());
  2549.                
  2550.                 // Check vincoli di unicita
  2551.                 if(findDocumentoSpecificaEGOV){
  2552.                     String fileNameTmp = Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+fileName;
  2553.                     if(specificaEGovAsClientSICA){
  2554.                         throw new SICAToOpenSPCoopUtilitiesException("Nel package sono presenti piu' di una specifica delle informazioni egov. E' stata gia' processata una specifica di tipo "+tipoDocumentoSpecificaEGovTrovato+" ("+fileNameSpecificaEGovTrovata+") e adesso e' stato riscontrato una specifica di tipo "+it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE+" ("+fileNameTmp+")");
  2555.                     }
  2556.                     if(specificaEGovAsDocumentoCNIPA){
  2557.                         throw new SICAToOpenSPCoopUtilitiesException("Nel package sono presenti piu' di una specifica delle informazioni egov. E' stata gia' processata una specifica di tipo "+tipoDocumentoSpecificaEGovTrovato+" ("+fileNameSpecificaEGovTrovata+") e adesso e' stato riscontrato una specifica di tipo "+it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE+" ("+fileNameTmp+")");
  2558.                     }
  2559.                 }else{
  2560.                     if(specificaEGovAsClientSICA && specificaEGovAsDocumentoCNIPA){
  2561.                         throw new SICAToOpenSPCoopUtilitiesException("La specifica delle informazioni egov e' sia di tipo "+it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE+" che di tipo "+it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE+" ??");
  2562.                     }
  2563.                     if(specificaEGovAsClientSICA || specificaEGovAsDocumentoCNIPA){
  2564.                         findDocumentoSpecificaEGOV = true;
  2565.                         fileNameSpecificaEGovTrovata = Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+fileName;
  2566.                     }
  2567.                 }
  2568.                
  2569.                 // Gestione
  2570.                 if(specificaEGovAsClientSICA){
  2571.                     try{
  2572.                         it.gov.spcoop.sica.wscp.driver.XMLUtils.mapProfiloCollaborazioneEGOVIntoAS(log,docSICA.getContenuto(), accServizioOpenspcoop, documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified);
  2573.                         tipoDocumentoSpecificaEGovTrovato = it.gov.spcoop.sica.wscp.driver.Costanti.TARGET_NAMESPACE;
  2574.                         findDocumentoSpecificaEGOV = true;
  2575.                     }catch(Exception e){
  2576.                         throw new SICAToOpenSPCoopUtilitiesException("Errore durante la verifica dell'esistenza del documento di tipo 'ProfiloCollaborazioneEGOV' per il file ["+fileName+"] : "+e.getMessage(),e);
  2577.                     }
  2578.                 }
  2579.                 else if(specificaEGovAsDocumentoCNIPA){
  2580.                     try{
  2581.                         it.cnipa.collprofiles.driver.XMLUtils.mapProfiloCollaborazioneEGOVIntoAS(log,docSICA.getContenuto(), accServizioOpenspcoop, documentoSpecificaEGOV_asClientSICADisabled_childUnquilified);
  2582.                         tipoDocumentoSpecificaEGovTrovato = it.cnipa.collprofiles.driver.Costanti.TARGET_NAMESPACE;
  2583.                         findDocumentoSpecificaEGOV = true;
  2584.                     }catch(Exception e){
  2585.                         throw new SICAToOpenSPCoopUtilitiesException("Errore durante la verifica dell'esistenza del documento di tipo 'ProfiloCollaborazioneEGOV' per il file ["+fileName+"] : "+e.getMessage(),e);
  2586.                     }
  2587.                 }
  2588.                 else{
  2589.                     //specificaSemiformaleGenerica
  2590.                     docOpenspcoop.setFile(fileName);
  2591.                     docOpenspcoop.setRuolo(RuoliDocumento.specificaSemiformale.toString());        
  2592.                     docOpenspcoop.setTipo(docSICA.getTipo());
  2593.                     docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  2594.                     accServizioOpenspcoop.addSpecificaSemiformale(docOpenspcoop);
  2595.                 }
  2596.             }
  2597.         }
  2598.    
  2599.        
  2600.         // Specifica coordinamento
  2601.         SpecificaCoordinamento specificaCoordinamento = manifest.getSpecificaCoordinamento();
  2602.         if(specificaCoordinamento!=null){
  2603.             for(int i=0; i<specificaCoordinamento.sizeDocumentoCoordinamentoList(); i++){
  2604.                 DocumentoCoordinamento docCoordinamento = specificaCoordinamento.getDocumentoCoordinamento(i);
  2605.                
  2606.                 org.openspcoop2.core.registry.Documento docOpenspcoop = new org.openspcoop2.core.registry.Documento();
  2607.                 String fileName = docCoordinamento.getBase();
  2608.                 docOpenspcoop.setFile(fileName);
  2609.                 docOpenspcoop.setRuolo(RuoliDocumento.specificaCoordinamento.toString());          
  2610.                 it.gov.spcoop.sica.dao.Documento docSICA = null;
  2611.                 for(int j=0; j<accordoServizioSICA.sizeSpecificheCoordinamento(); j++){
  2612.                     if(fileName.equals(accordoServizioSICA.getSpecificaCoordinamento(j).getNome())){
  2613.                         docSICA = accordoServizioSICA.getSpecificaCoordinamento(j);
  2614.                     }
  2615.                 }
  2616.                 if(docSICA==null)
  2617.                     throw new SICAToOpenSPCoopUtilitiesException("SpecificaCoordinamento con nome["+fileName+"] non trovato");
  2618.                 docOpenspcoop.setTipo(docSICA.getTipo());
  2619.                 docOpenspcoop.setByteContenuto(docSICA.getContenuto());
  2620.                 servizioComposto.addSpecificaCoordinamento(docOpenspcoop);
  2621.             }
  2622.         }
  2623.        
  2624.         /* Firma apposta dal Servizio di Registro quando l'accordo viene scaricato dal Registro stesso  */
  2625.         //if(manifest.getFirmato() && accordoServizioSICA.getFirma()!=null)
  2626.         //  accServizioOpenspcoop.setByteFirma(accordoServizioSICA.getFirma().getBytes());
  2627.        
  2628.         // Imposto servizio composto
  2629.         accServizioOpenspcoop.setServizioComposto(servizioComposto);
  2630.        
  2631.         // Correggo eventuali import/include malformati in maniera conforme alla struttura del package CNIPA
  2632.         if(verificaCorreggiLocationWSDL){
  2633.             try{
  2634.                 RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), log);
  2635.                 registroOpenSPCoopUtilities.updateLocation(accServizioOpenspcoop,false,prettyDocument);
  2636.             }catch(Exception e){
  2637.                 throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.setImportLocation error: "+e.getMessage(),e);
  2638.             }
  2639.         }
  2640.        
  2641.        
  2642.         if(findDocumentoSpecificaEGOV==false){
  2643.             accServizioOpenspcoop.setProfiloCollaborazione(null); // In modo da riconoscere il caso e farlo gestire
  2644.         }
  2645.        
  2646.         return accServizioOpenspcoop;
  2647.     }
  2648.     public static it.gov.spcoop.sica.dao.AccordoServizioComposto accordoServizioComposto_openspcoopToSica(
  2649.             IRegistryReader registryReader,
  2650.             org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizioOpenspcoop,
  2651.             SICAtoOpenSPCoopContext sicaToOpenspcoopContext,
  2652.             Logger log)throws SICAToOpenSPCoopUtilitiesException{
  2653.        
  2654.         if(log==null){
  2655.             log = LoggerWrapperFactory.getLogger(SICAtoOpenSPCoopUtilities.class);
  2656.         }
  2657.        
  2658.         boolean documentoSpecificaEGOV_asClientSICA = sicaToOpenspcoopContext.isInformazioniEGov_wscp();
  2659.         boolean documentoSpecificaEGOV_asSpecificaSemiformale = sicaToOpenspcoopContext.isInformazioniEGov_specificaSemiformale();
  2660.         boolean documentoSpecificaEGOV_asClientSICADisabled_namespaceCNIPA = sicaToOpenspcoopContext.isInformazioniEGov_wscpDisabled_namespaceCnipa();
  2661.         boolean documentoSpecificaEGOV_nomiSPCoopQualified = sicaToOpenspcoopContext.isInformazioniEGov_nomiSPCoop_qualified();
  2662.         boolean documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified = sicaToOpenspcoopContext.isInformazioniEGov_wscpEnabled_childUnqualified();
  2663.         boolean verificaCorreggiLocationWSDL = sicaToOpenspcoopContext.isWSDL_XSD_allineaImportInclude();
  2664.         boolean prettyDocument = sicaToOpenspcoopContext.isWSDL_XSD_prettyDocuments();
  2665.         boolean includiInfoRegistroGenerale = sicaToOpenspcoopContext.isSICAClient_includiInfoRegistroGenerale();
  2666.         boolean wsdlEmptySeNonDefiniti = sicaToOpenspcoopContext.isWSDL_XSD_accordiParteSpecifica_wsdlEmpty();
  2667.        
  2668.         // Correggo eventuali import/include malformati in maniera conforme alla struttura del package CNIPA
  2669.         if(verificaCorreggiLocationWSDL){
  2670.             try{
  2671.                 RegistroOpenSPCoopUtilities registroOpenSPCoopUtilities = new RegistroOpenSPCoopUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), log);
  2672.                 registroOpenSPCoopUtilities.updateLocation(accordoServizioOpenspcoop,true,prettyDocument);
  2673.             }catch(Exception e){
  2674.                 throw new SICAToOpenSPCoopUtilitiesException("RegistroOpenSPCoopUtilities.setImportLocation error: "+e.getMessage(),e);
  2675.             }
  2676.         }
  2677.        
  2678.         it.gov.spcoop.sica.dao.AccordoServizioComposto accServCompostoSICA =
  2679.             new it.gov.spcoop.sica.dao.AccordoServizioComposto();
  2680.        
  2681.         IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  2682.                
  2683.         /* Metadati presenti nel Manifest dell'Accordo di Cooperazione. */
  2684.         it.gov.spcoop.sica.manifest.ServizioComposto manifest = new it.gov.spcoop.sica.manifest.ServizioComposto();
  2685.         manifest.setDescrizione(accordoServizioOpenspcoop.getDescrizione());
  2686.         manifest.setNome(accordoServizioOpenspcoop.getNome());
  2687.         manifest.setDataCreazione(accordoServizioOpenspcoop.getOraRegistrazione());
  2688.         //manifest.getRiservato() ???
  2689.        
  2690.         if(includiInfoRegistroGenerale){
  2691.             if(accordoServizioOpenspcoop.getVersione()!=null){
  2692.                 manifest.setVersione(accordoServizioOpenspcoop.getVersione().intValue()+"");
  2693.             }
  2694.             //manifest.setDataPubblicazione(accordoServizioOpenspcoop.getDataPubblicazione());
  2695.        
  2696.             // Pubblicatore
  2697.             if(accordoServizioOpenspcoop.getSoggettoReferente()==null)
  2698.                 throw new SICAToOpenSPCoopUtilitiesException("Soggetto referente non definito");
  2699.             IDSoggetto soggettoPubblicatore = new IDSoggetto(accordoServizioOpenspcoop.getSoggettoReferente().getTipo(),accordoServizioOpenspcoop.getSoggettoReferente().getNome());
  2700.             String uriPubblicatore = sicaToOpenspcoopContext.getCodiceIPA(soggettoPubblicatore);
  2701.             if(uriPubblicatore==null){
  2702.                 uriPubblicatore = SICAtoOpenSPCoopUtilities.idSoggetto_openspcoopToSica(soggettoPubblicatore);
  2703.             }
  2704.             else
  2705.                 uriPubblicatore = SICAtoOpenSPCoopUtilities.appendURI_IDSoggettoSica(uriPubblicatore);
  2706.             try {
  2707.                 manifest.setPubblicatore(new URI(uriPubblicatore));
  2708.             }catch(Exception e) {
  2709.                 throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  2710.             }
  2711.            
  2712.            
  2713.             //if(accordoServizioOpenspcoop.getByteFirma()!=null){
  2714.             //  manifest.setFirmato(true);
  2715.             //}
  2716.         }
  2717.        
  2718.        
  2719.         // SpecificaInterfaccia
  2720.         it.gov.spcoop.sica.manifest.SpecificaInterfaccia specificaInterfaccia = null;
  2721.         if(  (accordoServizioOpenspcoop.getByteWsdlConcettuale()!=null) || (accordoServizioOpenspcoop.getByteWsdlLogicoErogatore()!=null) || (accordoServizioOpenspcoop.getByteWsdlLogicoFruitore()!=null) ){
  2722.             specificaInterfaccia = new it.gov.spcoop.sica.manifest.SpecificaInterfaccia();
  2723.         }
  2724.         if(wsdlEmptySeNonDefiniti || (accordoServizioOpenspcoop.getByteWsdlConcettuale()!=null)){
  2725.             it.gov.spcoop.sica.manifest.DocumentoInterfaccia docInterfaccia = new it.gov.spcoop.sica.manifest.DocumentoInterfaccia();
  2726.             docInterfaccia.setBase(Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL);
  2727.             docInterfaccia.setTipo(TipoDocumentoInterfaccia.WSDL);
  2728.             specificaInterfaccia.setInterfacciaConcettuale(docInterfaccia);
  2729.            
  2730.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  2731.             doc.setTipo(TipiDocumentoInterfaccia.WSDL.toString());
  2732.             doc.setNome(Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL);
  2733.             if(accordoServizioOpenspcoop.getByteWsdlConcettuale()!=null){
  2734.                 doc.setContenuto(accordoServizioOpenspcoop.getByteWsdlConcettuale());
  2735.             }else{
  2736.                 // Imposto WSDL Empty per compatibilita Client SICA
  2737.                 doc.setContenuto(Costanti.WSDL_EMPTY.getBytes());
  2738.             }
  2739.             accServCompostoSICA.setInterfacciaConcettuale(doc);
  2740.         }
  2741.         if(wsdlEmptySeNonDefiniti || (accordoServizioOpenspcoop.getByteWsdlLogicoErogatore()!=null)){
  2742.             it.gov.spcoop.sica.manifest.DocumentoInterfaccia docInterfaccia = new it.gov.spcoop.sica.manifest.DocumentoInterfaccia();
  2743.             docInterfaccia.setBase(Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL);
  2744.             docInterfaccia.setTipo(TipoDocumentoInterfaccia.WSDL);
  2745.             specificaInterfaccia.setInterfacciaLogicaLatoErogatore(docInterfaccia);
  2746.            
  2747.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  2748.             doc.setTipo(TipiDocumentoInterfaccia.WSDL.toString());
  2749.             doc.setNome(Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL);
  2750.             if(accordoServizioOpenspcoop.getByteWsdlLogicoErogatore()!=null){
  2751.                 doc.setContenuto(accordoServizioOpenspcoop.getByteWsdlLogicoErogatore());
  2752.             }else{
  2753.                 // Imposto WSDL Empty per compatibilita Client SICA
  2754.                 doc.setContenuto(Costanti.WSDL_EMPTY.getBytes());
  2755.             }
  2756.             accServCompostoSICA.setInterfacciaLogicaLatoErogatore(doc);
  2757.         }
  2758.         if(wsdlEmptySeNonDefiniti || (accordoServizioOpenspcoop.getByteWsdlLogicoFruitore()!=null)){
  2759.             it.gov.spcoop.sica.manifest.DocumentoInterfaccia docInterfaccia = new it.gov.spcoop.sica.manifest.DocumentoInterfaccia();
  2760.             docInterfaccia.setBase(Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL);
  2761.             docInterfaccia.setTipo(TipoDocumentoInterfaccia.WSDL);
  2762.             specificaInterfaccia.setInterfacciaLogicaLatoFruitore(docInterfaccia);
  2763.            
  2764.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  2765.             doc.setTipo(TipiDocumentoInterfaccia.WSDL.toString());
  2766.             doc.setNome(Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL);
  2767.             if(accordoServizioOpenspcoop.getByteWsdlLogicoFruitore()!=null){
  2768.                 doc.setContenuto(accordoServizioOpenspcoop.getByteWsdlLogicoFruitore());
  2769.             }else{
  2770.                 // Imposto WSDL Empty per compatibilita Client SICA
  2771.                 doc.setContenuto(Costanti.WSDL_EMPTY.getBytes());
  2772.             }
  2773.             accServCompostoSICA.setInterfacciaLogicaLatoFruitore(doc);
  2774.         }
  2775.         if(specificaInterfaccia!=null){
  2776.             manifest.setSpecificaInterfaccia(specificaInterfaccia);
  2777.         }
  2778.        
  2779.        
  2780.         // SpecificaConversazione
  2781.         it.gov.spcoop.sica.manifest.SpecificaConversazione specificaConversazione = null;
  2782.         if(  (accordoServizioOpenspcoop.getByteSpecificaConversazioneConcettuale()!=null) ||
  2783.                 (accordoServizioOpenspcoop.getByteSpecificaConversazioneErogatore()!=null) ||
  2784.                 (accordoServizioOpenspcoop.getByteSpecificaConversazioneFruitore()!=null) ){
  2785.             specificaConversazione = new it.gov.spcoop.sica.manifest.SpecificaConversazione();
  2786.         }
  2787.         if(accordoServizioOpenspcoop.getByteSpecificaConversazioneConcettuale()!=null){
  2788.             it.gov.spcoop.sica.manifest.DocumentoConversazione docConversazione = new it.gov.spcoop.sica.manifest.DocumentoConversazione();
  2789.             docConversazione.setBase(Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL);
  2790.             docConversazione.setTipo(TipoDocumentoConversazione.WSBL);
  2791.             specificaConversazione.setConversazioneConcettuale(docConversazione);
  2792.            
  2793.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  2794.             doc.setTipo(TipiDocumentoConversazione.WSBL.toString());
  2795.             doc.setNome(Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL);
  2796.             doc.setContenuto(accordoServizioOpenspcoop.getByteSpecificaConversazioneConcettuale());
  2797.             accServCompostoSICA.setConversazioneConcettuale(doc);
  2798.         }
  2799.         if(accordoServizioOpenspcoop.getByteSpecificaConversazioneErogatore()!=null){
  2800.             it.gov.spcoop.sica.manifest.DocumentoConversazione docConversazione = new it.gov.spcoop.sica.manifest.DocumentoConversazione();
  2801.             docConversazione.setBase(Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL);
  2802.             docConversazione.setTipo(TipoDocumentoConversazione.WSBL);
  2803.             specificaConversazione.setConversazioneLogicaLatoErogatore(docConversazione);
  2804.            
  2805.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  2806.             doc.setTipo(TipiDocumentoConversazione.WSBL.toString());
  2807.             doc.setNome(Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL);
  2808.             doc.setContenuto(accordoServizioOpenspcoop.getByteSpecificaConversazioneErogatore());
  2809.             accServCompostoSICA.setConversazioneLogicaErogatore(doc);
  2810.         }
  2811.         if(accordoServizioOpenspcoop.getByteSpecificaConversazioneFruitore()!=null){
  2812.             it.gov.spcoop.sica.manifest.DocumentoConversazione docConversazione = new it.gov.spcoop.sica.manifest.DocumentoConversazione();
  2813.             docConversazione.setBase(Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL);
  2814.             docConversazione.setTipo(TipoDocumentoConversazione.WSBL);
  2815.             specificaConversazione.setConversazioneLogicaLatoFruitore(docConversazione);
  2816.            
  2817.             it.gov.spcoop.sica.dao.Documento doc = new it.gov.spcoop.sica.dao.Documento();
  2818.             doc.setTipo(TipiDocumentoConversazione.WSBL.toString());
  2819.             doc.setNome(Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL);
  2820.             doc.setContenuto(accordoServizioOpenspcoop.getByteSpecificaConversazioneFruitore());
  2821.             accServCompostoSICA.setConversazioneLogicaFruitore(doc);
  2822.         }
  2823.         if(specificaConversazione!=null){
  2824.             manifest.setSpecificaConversazione(specificaConversazione);
  2825.         }
  2826.        
  2827.        
  2828.            

  2829.         // Riferimento accordo di cooperazione:
  2830.         String uriAccordoCooperazione = null;
  2831.         if(accordoServizioOpenspcoop.getServizioComposto()==null){
  2832.             throw new SICAToOpenSPCoopUtilitiesException("ServizioComposto non definito");
  2833.         }
  2834.         try{
  2835.             uriAccordoCooperazione =  SICAtoOpenSPCoopUtilities.idAccordoCooperazione_openspcoopToSica(registryReader,idAccordoCooperazioneFactory.getIDAccordoFromUri(accordoServizioOpenspcoop.getServizioComposto().getAccordoCooperazione()));
  2836.         }catch(Exception e){
  2837.             throw new SICAToOpenSPCoopUtilitiesException("Trasformazione IDAccordo di cooperazione ["+accordoServizioOpenspcoop.getServizioComposto().getAccordoCooperazione()+"] non riuscito: "+e.getMessage(),e);
  2838.         }
  2839.         try {
  2840.             manifest.setRiferimentoAccordoCooperazione(new URI(uriAccordoCooperazione));
  2841.         }catch(Exception e) {
  2842.             throw new SICAToOpenSPCoopUtilitiesException(e.getMessage(),e);
  2843.         }
  2844.        
  2845.        
  2846.        
  2847.         // Servizi componenti
  2848.         ElencoServiziComponenti servComponentiSICA = null;
  2849.         for(int i=0; i<accordoServizioOpenspcoop.getServizioComposto().sizeServizioComponenteList(); i++){
  2850.             AccordoServizioParteComuneServizioCompostoServizioComponente servComponente = accordoServizioOpenspcoop.getServizioComposto().getServizioComponente(i);
  2851.        
  2852.             if(servComponentiSICA==null)
  2853.                 servComponentiSICA = new ElencoServiziComponenti();
  2854.             try{
  2855.                 IDServizio idServ = IDServizioFactory.getInstance().getIDServizioFromValues(servComponente.getTipo(),servComponente.getNome(),
  2856.                         servComponente.getTipoSoggetto(),servComponente.getNomeSoggetto(),
  2857.                         servComponente.getVersione());
  2858.                 String uriAPS = sicaToOpenspcoopContext.getUriAPS(idServ);
  2859.                 if(uriAPS==null){
  2860.                     throw new SICAToOpenSPCoopUtilitiesException("Trasformazione IDServizio ["+idServ+"] in uri accordo servizio parte specifica non riuscita");
  2861.                 }
  2862.                 servComponentiSICA.addServizioComponente(new URI(uriAPS));
  2863.             }catch(Exception e){
  2864.                 IDServizio idServWithOutCheck = IDServizioFactory.getInstance().getIDServizioFromValuesWithoutCheck(servComponente.getTipo(),servComponente.getNome(),
  2865.                         servComponente.getTipoSoggetto(),servComponente.getNomeSoggetto(),
  2866.                         servComponente.getVersione());
  2867.                 throw new SICAToOpenSPCoopUtilitiesException("Trasformazione IDServizio ["+idServWithOutCheck+"] non riuscito: "+e.getMessage(),e);
  2868.             }
  2869.         }
  2870.         if(servComponentiSICA!=null)
  2871.             manifest.setServiziComponenti(servComponentiSICA);
  2872.        
  2873.        
  2874.         /* Allegati */
  2875.         it.gov.spcoop.sica.manifest.ElencoAllegati allegati = null;
  2876.         // ProfiloCollaborazioneEGOV
  2877.         if(accordoServizioOpenspcoop.sizePortTypeList()>0 && !documentoSpecificaEGOV_asSpecificaSemiformale){
  2878.             String docGenerico = null;
  2879.             if(documentoSpecificaEGOV_asClientSICA){
  2880.                 try{
  2881.                     docGenerico = it.gov.spcoop.sica.wscp.driver.XMLUtils.generaGenericoDocumento(accordoServizioOpenspcoop, accServCompostoSICA,
  2882.                             documentoSpecificaEGOV_nomiSPCoopQualified, documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified);
  2883.                 }catch(Exception e){
  2884.                     throw new SICAToOpenSPCoopUtilitiesException("Errore durante la conversione delle informazioni eGov in Allegati (http://spcoop.gov.it/sica/wscp): "+e.getMessage(),e);
  2885.                 }
  2886.             }else{
  2887.                 try{
  2888.                     docGenerico = it.cnipa.collprofiles.driver.XMLUtils.generaGenericoDocumento(accordoServizioOpenspcoop, accServCompostoSICA,
  2889.                             documentoSpecificaEGOV_asClientSICADisabled_namespaceCNIPA,
  2890.                             documentoSpecificaEGOV_nomiSPCoopQualified);
  2891.                 }catch(Exception e){
  2892.                     throw new SICAToOpenSPCoopUtilitiesException("Errore durante la conversione delle informazioni eGov in Allegati (http://www.cnipa.it/collProfiles): "+e.getMessage(),e);
  2893.                 }
  2894.             }
  2895.             if(docGenerico!=null){
  2896.                 if(allegati==null){
  2897.                     allegati = new it.gov.spcoop.sica.manifest.ElencoAllegati();
  2898.                 }
  2899.                 allegati.addGenericoDocumento(docGenerico);
  2900.                 manifest.setAllegati(allegati);
  2901.             }
  2902.         }
  2903.         // Altri allegati generici
  2904.         if(accordoServizioOpenspcoop.sizeAllegatoList()>0){
  2905.             if(allegati==null){
  2906.                 allegati = new it.gov.spcoop.sica.manifest.ElencoAllegati();
  2907.             }
  2908.             for(int i=0; i<accordoServizioOpenspcoop.sizeAllegatoList(); i++){
  2909.                 org.openspcoop2.core.registry.Documento docOpenspcoop = accordoServizioOpenspcoop.getAllegato(i);
  2910.                
  2911.                 allegati.addGenericoDocumento(docOpenspcoop.getFile());
  2912.                    
  2913.                 it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  2914.                 docSICA.setTipo(docOpenspcoop.getTipo());
  2915.                 docSICA.setNome(docOpenspcoop.getFile());
  2916.                 if(docOpenspcoop.getByteContenuto()==null){
  2917.                     throw new SICAToOpenSPCoopUtilitiesException("Byte dell'allegato "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  2918.                 }
  2919.                 docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  2920.                 accServCompostoSICA.addAllegato(docSICA);
  2921.             }
  2922.             manifest.setAllegati(allegati);
  2923.         }
  2924.         // WSDL Definitorio
  2925.         if(accordoServizioOpenspcoop.getByteWsdlDefinitorio()!=null){
  2926.             if(allegati==null){
  2927.                 allegati = new it.gov.spcoop.sica.manifest.ElencoAllegati();
  2928.             }
  2929.             allegati.addGenericoDocumento(Costanti.ALLEGATO_DEFINITORIO_XSD);
  2930.             manifest.setAllegati(allegati);
  2931.            
  2932.             it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  2933.             docSICA.setTipo("XSD");
  2934.             docSICA.setNome(Costanti.ALLEGATO_DEFINITORIO_XSD);
  2935.             docSICA.setContenuto(accordoServizioOpenspcoop.getByteWsdlDefinitorio());
  2936.             accServCompostoSICA.addAllegato(docSICA);
  2937.         }
  2938.        
  2939.        
  2940.         /* SpecificheSemiformali */
  2941.         it.gov.spcoop.sica.manifest.SpecificaSemiformale specificaSemiformale = null;
  2942.         // ProfiloCollaborazioneEGOV
  2943.         if(accordoServizioOpenspcoop.sizePortTypeList()>0 && documentoSpecificaEGOV_asSpecificaSemiformale){
  2944.             it.gov.spcoop.sica.manifest.DocumentoSemiformale docSemiformale = null;
  2945.             if(documentoSpecificaEGOV_asClientSICA){
  2946.                 try{
  2947.                     docSemiformale = it.gov.spcoop.sica.wscp.driver.XMLUtils.generaDocumentoSemiformale(accordoServizioOpenspcoop, accServCompostoSICA,
  2948.                             documentoSpecificaEGOV_nomiSPCoopQualified, documentoSpecificaEGOV_asClientSICAEnabled_childUnquilified);
  2949.                 }catch(Exception e){
  2950.                     throw new SICAToOpenSPCoopUtilitiesException("Errore durante la conversione delle informazioni eGov in SpecificaSemiformale (http://spcoop.gov.it/sica/wscp): "+e.getMessage(),e);
  2951.                 }
  2952.             }else{
  2953.                 try{
  2954.                     docSemiformale = it.cnipa.collprofiles.driver.XMLUtils.generaDocumentoSemiformale(accordoServizioOpenspcoop, accServCompostoSICA,
  2955.                             documentoSpecificaEGOV_asClientSICADisabled_namespaceCNIPA,
  2956.                             documentoSpecificaEGOV_nomiSPCoopQualified);
  2957.                 }catch(Exception e){
  2958.                     throw new SICAToOpenSPCoopUtilitiesException("Errore durante la conversione delle informazioni eGov in SpecificaSemiformale (http://www.cnipa.it/collProfiles): "+e.getMessage(),e);
  2959.                 }
  2960.             }
  2961.             if(docSemiformale!=null){
  2962.                 if(specificaSemiformale==null){
  2963.                     specificaSemiformale = new it.gov.spcoop.sica.manifest.SpecificaSemiformale();
  2964.                 }
  2965.                 specificaSemiformale.addDocumentoSemiformale(docSemiformale);
  2966.                 manifest.setSpecificaSemiformale(specificaSemiformale);
  2967.             }
  2968.         }
  2969.         // Altre Specifiche semiformali
  2970.         if(accordoServizioOpenspcoop.sizeSpecificaSemiformaleList()>0){
  2971.             if(specificaSemiformale==null){
  2972.                 specificaSemiformale = new it.gov.spcoop.sica.manifest.SpecificaSemiformale();
  2973.             }
  2974.             for(int i=0; i<accordoServizioOpenspcoop.sizeSpecificaSemiformaleList(); i++){
  2975.                 org.openspcoop2.core.registry.Documento docOpenspcoop = accordoServizioOpenspcoop.getSpecificaSemiformale(i);
  2976.                
  2977.                 it.gov.spcoop.sica.manifest.DocumentoSemiformale docSemiformale = new it.gov.spcoop.sica.manifest.DocumentoSemiformale();
  2978.                 docSemiformale.setTipo(docOpenspcoop.getTipo());
  2979.                 docSemiformale.setBase(docOpenspcoop.getFile());
  2980.                 specificaSemiformale.addDocumentoSemiformale(docSemiformale);
  2981.                
  2982.                 it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  2983.                 docSICA.setTipo(docOpenspcoop.getTipo());
  2984.                 docSICA.setNome(docOpenspcoop.getFile());
  2985.                 if(docOpenspcoop.getByteContenuto()==null){
  2986.                     throw new SICAToOpenSPCoopUtilitiesException("Byte della specifica semiformale "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  2987.                 }
  2988.                 docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  2989.                 accServCompostoSICA.addSpecificaSemiformale(docSICA);
  2990.             }
  2991.             manifest.setSpecificaSemiformale(specificaSemiformale);
  2992.         }

  2993.        
  2994.         // Specifiche di coordinamento
  2995.         it.gov.spcoop.sica.manifest.SpecificaCoordinamento coordinamento = null;
  2996.         for(int i=0; i<accordoServizioOpenspcoop.getServizioComposto().sizeSpecificaCoordinamentoList(); i++){
  2997.             org.openspcoop2.core.registry.Documento docOpenspcoop = accordoServizioOpenspcoop.getServizioComposto().getSpecificaCoordinamento(i);
  2998.            
  2999.             if(coordinamento==null)
  3000.                 coordinamento = new it.gov.spcoop.sica.manifest.SpecificaCoordinamento();
  3001.            
  3002.             it.gov.spcoop.sica.manifest.DocumentoCoordinamento docCoordinamento = new it.gov.spcoop.sica.manifest.DocumentoCoordinamento();
  3003.             docCoordinamento.setTipo(docOpenspcoop.getTipo());
  3004.             docCoordinamento.setBase(docOpenspcoop.getFile());
  3005.             coordinamento.addDocumentoCoordinamento(docCoordinamento);
  3006.            
  3007.             it.gov.spcoop.sica.dao.Documento docSICA = new it.gov.spcoop.sica.dao.Documento();
  3008.             docSICA.setTipo(docOpenspcoop.getTipo());
  3009.             docSICA.setNome(docOpenspcoop.getFile());
  3010.             if(docOpenspcoop.getByteContenuto()==null){
  3011.                 throw new SICAToOpenSPCoopUtilitiesException("Byte della specifica di coordinamento "+docOpenspcoop.getFile()+" di tipo "+docOpenspcoop.getTipo()+" non forniti");
  3012.             }
  3013.             docSICA.setContenuto(docOpenspcoop.getByteContenuto());
  3014.             accServCompostoSICA.addSpecificaCoordinamento(docSICA);
  3015.         }
  3016.         if(coordinamento!=null)
  3017.             manifest.setSpecificaCoordinamento(coordinamento);
  3018.        
  3019.        
  3020.         /* Firma apposta dal Servizio di Registro quando l'accordo viene scaricato dal Registro stesso  */
  3021.         if(includiInfoRegistroGenerale){
  3022.             //if(accordoServizioOpenspcoop.getByteFirma()!=null){
  3023.             //  it.gov.spcoop.sica.firma.Firma firma = new it.gov.spcoop.sica.firma.Firma();
  3024.             //  accServCompostoSICA.setFirma(firma);
  3025.             //}
  3026.         }
  3027.        
  3028.         accServCompostoSICA.setManifesto(manifest);
  3029.         return accServCompostoSICA;
  3030.     }
  3031. }