XMLDataConverter.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.core.registry.driver.utils;

  21. import java.io.ByteArrayInputStream;
  22. import java.io.ByteArrayOutputStream;
  23. import java.io.File;
  24. import java.io.FileInputStream;
  25. import java.io.InputStream;
  26. import java.net.HttpURLConnection;
  27. import java.net.URL;
  28. import java.net.URLConnection;
  29. import java.sql.Connection;
  30. import java.util.ArrayList;
  31. import java.util.List;
  32. import java.util.Properties;

  33. import javax.net.ssl.KeyManagerFactory;
  34. import javax.net.ssl.TrustManagerFactory;

  35. import org.openspcoop2.core.commons.ProtocolFactoryReflectionUtils;
  36. import org.openspcoop2.core.config.AccessoRegistroRegistro;
  37. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  38. import org.openspcoop2.core.constants.CostantiDB;
  39. import org.openspcoop2.core.constants.TipiConnettore;
  40. import org.openspcoop2.core.id.IDAccordo;
  41. import org.openspcoop2.core.id.IDAccordoCooperazione;
  42. import org.openspcoop2.core.id.IDGruppo;
  43. import org.openspcoop2.core.id.IDRuolo;
  44. import org.openspcoop2.core.id.IDScope;
  45. import org.openspcoop2.core.id.IDServizio;
  46. import org.openspcoop2.core.id.IDSoggetto;
  47. import org.openspcoop2.core.mapping.DBMappingUtils;
  48. import org.openspcoop2.core.registry.AccordoCooperazione;
  49. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  50. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  51. import org.openspcoop2.core.registry.Azione;
  52. import org.openspcoop2.core.registry.ConfigurazioneServizio;
  53. import org.openspcoop2.core.registry.Connettore;
  54. import org.openspcoop2.core.registry.Fruitore;
  55. import org.openspcoop2.core.registry.Gruppo;
  56. import org.openspcoop2.core.registry.Operation;
  57. import org.openspcoop2.core.registry.PortType;
  58. import org.openspcoop2.core.registry.PortaDominio;
  59. import org.openspcoop2.core.registry.Property;
  60. import org.openspcoop2.core.registry.ProtocolProperty;
  61. import org.openspcoop2.core.registry.RegistroServizi;
  62. import org.openspcoop2.core.registry.Resource;
  63. import org.openspcoop2.core.registry.Ruolo;
  64. import org.openspcoop2.core.registry.Scope;
  65. import org.openspcoop2.core.registry.Soggetto;
  66. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  67. import org.openspcoop2.core.registry.constants.PddTipologia;
  68. import org.openspcoop2.core.registry.constants.ProfiloCollaborazione;
  69. import org.openspcoop2.core.registry.constants.ProprietariDocumento;
  70. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  71. import org.openspcoop2.core.registry.constants.ServiceBinding;
  72. import org.openspcoop2.core.registry.constants.StatiAccordo;
  73. import org.openspcoop2.core.registry.constants.StatoFunzionalita;
  74. import org.openspcoop2.core.registry.driver.BeanUtilities;
  75. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  76. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  77. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  78. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  79. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziCRUD;
  80. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  81. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  82. import org.openspcoop2.core.registry.driver.uddi.DriverRegistroServiziUDDI;
  83. import org.openspcoop2.core.registry.driver.web.DriverRegistroServiziWEB;
  84. import org.openspcoop2.core.registry.driver.xml.DriverRegistroServiziXML;
  85. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  86. import org.openspcoop2.message.xml.ValidatoreXSD;
  87. import org.openspcoop2.utils.CopyStream;
  88. import org.openspcoop2.utils.LoggerWrapperFactory;
  89. import org.openspcoop2.utils.certificate.KeystoreType;
  90. import org.openspcoop2.utils.transport.http.HttpUtilities;
  91. import org.slf4j.Logger;

  92. /**
  93.  * Classe utilizzata per convertire dati presenti in un file XML in un altra risorsa che implementa l'interfaccia CRUD.
  94.  *
  95.  * @author Poli Andrea (apoli@link.it)
  96.  * @author $Author$
  97.  * @version $Rev$, $Date$
  98.  */
  99. public class XMLDataConverter {

  100.     /** GestoreCRUD */
  101.     private IDriverRegistroServiziCRUD gestoreCRUD = null;
  102.     /** 'Root' del servizio dei registri OpenSPCoop. */
  103.     private org.openspcoop2.core.registry.RegistroServizi sorgenteRegistro;
  104.     /** Logger */
  105.     private Logger log = null;
  106.     /** Logger alternativo per i driver */
  107.     private Logger logDriver = null;
  108.     /** SuperUser */
  109.     private String superUser = null;
  110.     /** Tipo del backend di destinazione */
  111.     private String tipoBEDestinazione;
  112.    
  113.     // Factory
  114.     private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  115.     private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  116.     private IDServizioFactory idServizioFactory = IDServizioFactory.getInstance();

  117.    
  118.     public XMLDataConverter(String sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  119.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,null,null);
  120.     }
  121.     public XMLDataConverter(String sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  122.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,null);
  123.     }
  124.     public XMLDataConverter(String sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  125.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,logDriver);
  126.     }
  127.    
  128.     public XMLDataConverter(byte[] sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  129.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,null,null);
  130.     }
  131.     public XMLDataConverter(byte[] sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  132.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,null);
  133.     }
  134.     public XMLDataConverter(byte[] sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  135.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,logDriver);
  136.     }
  137.    
  138.     public XMLDataConverter(InputStream sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  139.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,null,null);
  140.     }
  141.     public XMLDataConverter(InputStream sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  142.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,null);
  143.     }
  144.     public XMLDataConverter(InputStream sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  145.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,logDriver);
  146.     }
  147.    
  148.     public XMLDataConverter(File sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  149.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,null,null);
  150.     }
  151.     public XMLDataConverter(File sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  152.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,null);
  153.     }
  154.     public XMLDataConverter(File sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  155.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,logDriver);
  156.     }
  157.    
  158.     public XMLDataConverter(RegistroServizi sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  159.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,null,null);
  160.     }
  161.     public XMLDataConverter(RegistroServizi sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  162.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,null);
  163.     }
  164.     public XMLDataConverter(RegistroServizi sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  165.         XMLDataConverterSetup(sorgente,destinazione,superUser,protocolloDefault,log,logDriver);
  166.     }
  167.    
  168.     private void XMLDataConverterSetup(Object sorgente,AccessoRegistroRegistro destinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  169.    
  170.         if(log == null)
  171.             this.log = LoggerWrapperFactory.getLogger(XMLDataConverter.class);
  172.         else
  173.             this.log = log;
  174.         this.logDriver = logDriver;
  175.        
  176.         if(destinazione==null)
  177.             throw new DriverRegistroServiziException("GestoreCRUD non definito");
  178.        
  179.         this.tipoBEDestinazione = destinazione.getTipo().toString();
  180.         this.superUser = superUser;
  181.        
  182.         // Istanziazione sorgente
  183.         try{
  184.             if(sorgente instanceof RegistroServizi) {
  185.                 this.sorgenteRegistro = (RegistroServizi) sorgente;
  186.             }
  187.             else if(sorgente instanceof String){
  188.                 createSorgente((String)sorgente);
  189.                 // Calcolo directory padre
  190.                 try{
  191.                     File f = new File((String)sorgente);
  192.                     if(f.getParentFile()!=null){
  193.                         this.parentFile = f.getParentFile();
  194.                     }
  195.                 }catch(Exception e){
  196.                     // ignore
  197.                 }
  198.             }
  199.             else if (sorgente instanceof byte[]){
  200.                 createSorgente((byte[])sorgente);
  201.             }else if (sorgente instanceof InputStream){
  202.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  203.                 InputStream is = (InputStream) sorgente;
  204. //              int letti = 0;
  205. //              byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  206. //              while( (letti=is.read(reads)) != -1 ){
  207. //                  bout.write(reads,0,letti);  
  208. //              }
  209.                 CopyStream.copy(is, bout);
  210.                 bout.flush();
  211.                 bout.close();
  212.                 createSorgente(bout.toByteArray());
  213.             }else if (sorgente instanceof File){
  214.                 createSorgente(((File)sorgente).getAbsolutePath());
  215.                 // Calcolo directory padre
  216.                 try{
  217.                     File f = (File)sorgente;
  218.                     if(f.getParentFile()!=null){
  219.                         this.parentFile = f.getParentFile();
  220.                     }
  221.                 }catch(Exception e){
  222.                     // ignore
  223.                 }
  224.             }
  225.         }catch(DriverRegistroServiziException d){
  226.             throw d;
  227.         }catch(Exception e){
  228.             throw new DriverRegistroServiziException("Creazione sorgente ["+sorgente.getClass().getName()+"] non riuscita: "+e.getMessage(),e);
  229.         }
  230.        
  231.         // Istanziazione CRUD
  232.         try{
  233.             if(CostantiConfigurazione.REGISTRO_DB.equals(destinazione.getTipo())){
  234.                 if(destinazione.getLocation()==null)
  235.                     throw new Exception("Location (DataSource) non definita");
  236.                 if(destinazione.getTipoDatabase()==null)
  237.                     throw new Exception("TipoDatabase (DataSource) non definita");
  238.                 if(destinazione.getGenericPropertiesMap()==null)
  239.                     throw new Exception("Contesto di localizzazione del datasource non definito in GenericProperties");
  240.                 java.util.Properties properties = new Properties();
  241.                 properties.putAll(destinazione.getGenericPropertiesMap());
  242.                 this.gestoreCRUD = new DriverRegistroServiziDB(destinazione.getLocation(),properties,this.logDriver,destinazione.getTipoDatabase());
  243.                 if(((DriverRegistroServiziDB)this.gestoreCRUD).create)
  244.                     this.log.info("Inizializzato Registro dei Servizi DB");
  245.                 else
  246.                     throw new Exception("RegistroServizi DB non inizializzato");
  247.             }
  248.             else if(CostantiConfigurazione.REGISTRO_UDDI.equals(destinazione.getTipo())){
  249.                 if(destinazione.getLocation()==null)
  250.                     throw new Exception("Location (InquiryURL) non definita");
  251.                 if(destinazione.getGenericPropertiesMap()==null)
  252.                     throw new Exception("PublishURL/UrlPrefix/PathPrefix non definita in GenericProperties");
  253.                 if(destinazione.getGenericPropertiesMap().size()!=3)
  254.                     throw new Exception("PublishURL/UrlPrefix/PathPrefix non definita in GenericProperties (size:"+destinazione.getGenericPropertiesMap().size()+")");
  255.                 if((destinazione.getGenericPropertiesMap().get("publishUrl") instanceof String) == false)
  256.                     throw new Exception("PublishURL definita in GenericProperties non e' un oggetto String");
  257.                 if((destinazione.getGenericPropertiesMap().get("urlPrefix") instanceof String) == false)
  258.                     throw new Exception("UrlPrefix definita in GenericProperties non e' un oggetto String");
  259.                 if((destinazione.getGenericPropertiesMap().get("pathPrefix") instanceof String) == false)
  260.                     throw new Exception("PathPrefix definita in GenericProperties non e' un oggetto String");
  261.                 this.gestoreCRUD = new DriverRegistroServiziUDDI(destinazione.getLocation(),
  262.                         destinazione.getGenericPropertiesMap().get("publishUrl"),
  263.                         destinazione.getUser(),destinazione.getPassword(),
  264.                         destinazione.getGenericPropertiesMap().get("urlPrefix"),
  265.                         destinazione.getGenericPropertiesMap().get("pathPrefix"),
  266.                         this.logDriver);
  267.                 if(((DriverRegistroServiziUDDI)this.gestoreCRUD).create)
  268.                     this.log.info("Inizializzato Registro dei Servizi UDDI");
  269.                 else
  270.                     throw new Exception("RegistroServizi UDDI non inizializzato");
  271.             }
  272.             else if(CostantiConfigurazione.REGISTRO_WEB.equals(destinazione.getTipo())){
  273.                 if(destinazione.getLocation()==null)
  274.                     throw new Exception("Location (UrlPrefix) non definita");
  275.                 if(destinazione.getGenericPropertiesMap()==null)
  276.                     throw new Exception("PathPrefix non definita in GenericProperties");
  277.                 if(destinazione.getGenericPropertiesMap().size()!=1)
  278.                     throw new Exception("PathPrefix non definita in GenericProperties (size:"+destinazione.getGenericPropertiesMap().size()+")");
  279.                 if((destinazione.getGenericPropertiesMap().get("pathPrefix") instanceof String) == false)
  280.                     throw new Exception("PathPrefix definita in GenericProperties non e' un oggetto String");
  281.                 this.gestoreCRUD = new DriverRegistroServiziWEB(destinazione.getLocation(),
  282.                         destinazione.getGenericPropertiesMap().get("pathPrefix"),
  283.                         this.logDriver);
  284.                 this.log.info("Inizializzato Registro dei Servizi WEB");
  285.                 if(((DriverRegistroServiziWEB)this.gestoreCRUD).create)
  286.                     this.log.info("Inizializzato Registro dei Servizi WEB");
  287.                 else
  288.                     throw new Exception("RegistroServizi WEB non inizializzato");
  289.        
  290.             }else{
  291.                 throw new Exception("Tipo di registro CRUD non gestito: "+destinazione.getTipo());
  292.             }
  293.         }catch(Exception e){
  294.             throw new DriverRegistroServiziException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  295.         }
  296.        
  297.         // Protocol initialize
  298.         try {
  299.             ProtocolFactoryReflectionUtils.initializeProtocolManager(protocolloDefault, this.log);
  300.         }catch(Exception e){
  301.             throw new DriverRegistroServiziException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  302.         }
  303.        
  304.        
  305.     }
  306.    
  307.    
  308.     public XMLDataConverter(String sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  309.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,null,null);
  310.     }
  311.     public XMLDataConverter(String sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  312.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,null);
  313.     }
  314.     public XMLDataConverter(String sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  315.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,logDriver);
  316.     }
  317.    
  318.     public XMLDataConverter(byte[] sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  319.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,null,null);
  320.     }
  321.     public XMLDataConverter(byte[] sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  322.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,null);
  323.     }
  324.     public XMLDataConverter(byte[] sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  325.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,logDriver);
  326.     }
  327.    
  328.     public XMLDataConverter(InputStream sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  329.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,null,null);
  330.     }
  331.     public XMLDataConverter(InputStream sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  332.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,null);
  333.     }
  334.     public XMLDataConverter(InputStream sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  335.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,logDriver);
  336.     }
  337.    
  338.     public XMLDataConverter(File sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  339.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,null,null);
  340.     }
  341.     public XMLDataConverter(File sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  342.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,null);
  343.     }
  344.     public XMLDataConverter(File sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  345.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,logDriver);
  346.     }
  347.    
  348.     public XMLDataConverter(RegistroServizi sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  349.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,null,null);
  350.     }
  351.     public XMLDataConverter(RegistroServizi sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  352.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,null);
  353.     }
  354.     public XMLDataConverter(RegistroServizi sorgente,IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  355.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,superUser,protocolloDefault,log,logDriver);
  356.     }
  357.    
  358.     private void XMLDataConverterSetup(Object sorgente, IDriverRegistroServiziCRUD gestoreCRUD, String tipoDestinazione,
  359.             String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  360.        
  361.         if(log == null)
  362.             this.log = LoggerWrapperFactory.getLogger(XMLDataConverter.class);
  363.         else
  364.             this.log = log;
  365.         this.logDriver = logDriver;
  366.        
  367.         if(gestoreCRUD==null)
  368.             throw new DriverRegistroServiziException("GestoreCRUD non definito");
  369.        
  370.         this.tipoBEDestinazione = tipoDestinazione;
  371.         this.superUser = superUser;
  372.        
  373.         // Istanziazione sorgente
  374.         try{
  375.             if(sorgente instanceof RegistroServizi) {
  376.                 this.sorgenteRegistro = (RegistroServizi) sorgente;
  377.             }
  378.             else if(sorgente instanceof String){
  379.                 createSorgente((String)sorgente);
  380.                 // Calcolo directory padre
  381.                 try{
  382.                     File f = new File((String)sorgente);
  383.                     if(f.getParentFile()!=null){
  384.                         this.parentFile = f.getParentFile();
  385.                     }
  386.                 }catch(Exception e){
  387.                     // ignore
  388.                 }
  389.             }
  390.             else if (sorgente instanceof byte[]){
  391.                 createSorgente((byte[])sorgente);
  392.             }else if (sorgente instanceof InputStream){
  393.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  394.                 InputStream is = (InputStream) sorgente;
  395. //              int letti = 0;
  396. //              byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  397. //              while( (letti=is.read(reads)) != -1 ){
  398. //                  bout.write(reads,0,letti);  
  399. //              }
  400.                 CopyStream.copy(is, bout);
  401.                 bout.flush();
  402.                 bout.close();
  403.                 createSorgente(bout.toByteArray());
  404.             }else if (sorgente instanceof File){
  405.                 createSorgente(((File)sorgente).getAbsolutePath());
  406.                 // Calcolo directory padre
  407.                 try{
  408.                     File f = (File)sorgente;
  409.                     if(f.getParentFile()!=null){
  410.                         this.parentFile = f.getParentFile();
  411.                     }
  412.                 }catch(Exception e){
  413.                     // ignore
  414.                 }
  415.             }
  416.         }catch(DriverRegistroServiziException d){
  417.             throw d;
  418.         }catch(Exception e){
  419.             throw new DriverRegistroServiziException("Creazione sorgente ["+sorgente.getClass().getName()+"] non riuscita: "+e.getMessage(),e);
  420.         }
  421.        
  422.         // Istanziazione CRUD
  423.         this.gestoreCRUD = gestoreCRUD;
  424.        
  425.         // Protocol initialize
  426.         try {
  427.             ProtocolFactoryReflectionUtils.initializeProtocolManager(protocolloDefault, this.log);
  428.         }catch(Exception e){
  429.             throw new DriverRegistroServiziException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  430.         }
  431.        
  432.        
  433.     }
  434.    
  435.    
  436.    
  437.     public XMLDataConverter(String sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  438.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,null,null);
  439.     }
  440.     public XMLDataConverter(String sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  441.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,null);
  442.     }
  443.     public XMLDataConverter(String sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  444.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,logDriver);
  445.     }
  446.    
  447.     public XMLDataConverter(byte[] sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  448.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,null,null);
  449.     }
  450.     public XMLDataConverter(byte[] sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  451.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,null);
  452.     }
  453.     public XMLDataConverter(byte[] sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  454.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,logDriver);
  455.     }
  456.    
  457.     public XMLDataConverter(InputStream sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  458.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,null,null);
  459.     }
  460.     public XMLDataConverter(InputStream sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  461.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,null);
  462.     }
  463.     public XMLDataConverter(InputStream sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  464.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,logDriver);
  465.     }
  466.    
  467.     public XMLDataConverter(File sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  468.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,null,null);
  469.     }
  470.     public XMLDataConverter(File sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  471.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,null);
  472.     }
  473.     public XMLDataConverter(File sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  474.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,logDriver);
  475.     }
  476.    
  477.     public XMLDataConverter(RegistroServizi sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault) throws DriverRegistroServiziException{
  478.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,null,null);
  479.     }
  480.     public XMLDataConverter(RegistroServizi sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log) throws DriverRegistroServiziException{
  481.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,null);
  482.     }
  483.     public XMLDataConverter(RegistroServizi sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  484.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,superUser,protocolloDefault,log,logDriver);
  485.     }
  486.    
  487.     private File parentFile = null;

  488.     private void XMLDataConverterSetup(Object sorgente,Connection connection,String tipoDatabase,String superUser,String protocolloDefault,Logger log,Logger logDriver) throws DriverRegistroServiziException{
  489.    
  490.         if(log == null)
  491.             this.log = LoggerWrapperFactory.getLogger(XMLDataConverter.class);
  492.         else
  493.             this.log = log;
  494.         this.logDriver = logDriver;
  495.        
  496.         this.superUser = superUser;
  497.         this.tipoBEDestinazione = CostantiConfigurazione.REGISTRO_DB.toString();
  498.        
  499.         // Istanziazione sorgente
  500.         try{
  501.             if(sorgente instanceof RegistroServizi) {
  502.                 this.sorgenteRegistro = (RegistroServizi) sorgente;
  503.             }
  504.             else if(sorgente instanceof String){
  505.                 createSorgente((String)sorgente);
  506.                 // Calcolo directory padre
  507.                 try{
  508.                     File f = new File((String)sorgente);
  509.                     if(f.getParentFile()!=null){
  510.                         this.parentFile = f.getParentFile();
  511.                     }
  512.                 }catch(Exception e){
  513.                     // ignore
  514.                 }
  515.             }
  516.             else if (sorgente instanceof byte[]){
  517.                 createSorgente((byte[])sorgente);
  518.             }else if (sorgente instanceof InputStream){
  519.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  520.                 InputStream is = (InputStream) sorgente;
  521. //              int letti = 0;
  522. //              byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  523. //              while( (letti=is.read(reads)) != -1 ){
  524. //                  bout.write(reads,0,letti);  
  525. //              }
  526.                 CopyStream.copy(is, bout);
  527.                 bout.flush();
  528.                 bout.close();
  529.                 createSorgente(bout.toByteArray());
  530.             }else if (sorgente instanceof File){
  531.                 createSorgente(((File)sorgente).getAbsolutePath());
  532.                 // Calcolo directory padre
  533.                 try{
  534.                     File f = (File)sorgente;
  535.                     if(f.getParentFile()!=null){
  536.                         this.parentFile = f.getParentFile();
  537.                     }
  538.                 }catch(Exception e){
  539.                     // ignore
  540.                 }
  541.             }
  542.         }catch(DriverRegistroServiziException d){
  543.             throw d;
  544.         }catch(Exception e){
  545.             throw new DriverRegistroServiziException("Creazione sorgente ["+sorgente.getClass().getName()+"] non riuscita: "+e.getMessage(),e);
  546.         }
  547.        
  548.         // Istanziazione CRUD in version DB
  549.         try{
  550.             this.gestoreCRUD = new DriverRegistroServiziDB(connection,this.logDriver,tipoDatabase);
  551.             if(((DriverRegistroServiziDB)this.gestoreCRUD).create)
  552.                 this.log.info("Inizializzato Configurazione DB");
  553.             else
  554.                 throw new Exception("Configurazione DB non inizializzato");
  555.         }catch(Exception e){
  556.             throw new DriverRegistroServiziException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  557.         }
  558.        
  559.         // Protocol initialize
  560.         try {
  561.             ProtocolFactoryReflectionUtils.initializeProtocolManager(protocolloDefault, this.log);
  562.         }catch(Exception e){
  563.             throw new DriverRegistroServiziException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  564.         }
  565.     }
  566.    
  567.    
  568.    
  569.    
  570.     private void createSorgente(String sorgente)throws DriverRegistroServiziException{
  571.         // Istanziazione Sorgente
  572.         if(sorgente==null)
  573.             throw new DriverRegistroServiziException("Sorgente non definita");
  574.        
  575.         // ValidatoreXSD
  576.         ValidatoreXSD validatoreRegistro = null;
  577.         try{
  578.             validatoreRegistro = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), this.log,DriverRegistroServiziXML.class.getResourceAsStream("/registroServizi.xsd"));
  579.         }catch (Exception e) {
  580.             throw new DriverRegistroServiziException("Riscontrato errore durante l'inizializzazione dello schema del Registro dei Servizi di OpenSPCoop: "+e.getMessage());
  581.         }
  582.         FileInputStream fXML = null;
  583.         try{
  584.             if(sorgente.startsWith("http://") || sorgente.startsWith("file://")){
  585.                 validatoreRegistro.valida(sorgente);  
  586.             }else{
  587.                 fXML = new FileInputStream(sorgente);
  588.                 validatoreRegistro.valida(fXML);
  589.             }
  590.         }catch (Exception e) {
  591.             throw new DriverRegistroServiziException("Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage());
  592.         }finally{
  593.             if(fXML!=null){
  594.                 try{
  595.                     fXML.close();
  596.                 }catch(Exception e){
  597.                     // close
  598.                 }
  599.             }
  600.         }
  601.        
  602.         try{
  603.             InputStream iStream = null;
  604.             HttpURLConnection httpConn = null;
  605.             if(sorgente.startsWith("http://") || sorgente.startsWith("file://")){
  606.                 try{
  607.                     URL url = new URL(sorgente);
  608.                     URLConnection connection = url.openConnection();
  609.                     httpConn = (HttpURLConnection) connection;
  610.                     httpConn.setRequestMethod("GET");
  611.                     httpConn.setDoOutput(true);
  612.                     httpConn.setDoInput(true);
  613.                     iStream = httpConn.getInputStream();
  614.                 }catch(Exception e) {
  615.                     try{  
  616. //                      if(iStream!=null)
  617. //                          iStream.close();
  618.                         if(httpConn !=null)
  619.                             httpConn.disconnect();
  620.                     } catch(Exception ef) {
  621.                         // ignore
  622.                     }
  623.                     throw new DriverRegistroServiziException("Riscontrato errore durante la creazione dell'inputStream del registro dei servizi (HTTP) : \n\n"+e.getMessage());
  624.                 }
  625.             }else{
  626.                 try{  
  627.                     iStream = new FileInputStream(sorgente);
  628.                 }catch(java.io.FileNotFoundException e) {
  629.                     throw new DriverRegistroServiziException("Riscontrato errore durante la creazione dell'inputStream del registro dei servizi (FILE) : \n\n"+e.getMessage());
  630.                 }
  631.             }



  632.             /* ---- Unmarshall del file di configurazione ---- */
  633.             try{  
  634.                 org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  635.                 this.sorgenteRegistro = deserializer.readRegistroServizi(iStream);
  636.             } catch(Exception e) {
  637.                 try{  
  638.                     if(iStream!=null)
  639.                         iStream.close();
  640.                     if(httpConn !=null)
  641.                         httpConn.disconnect();
  642.                 } catch(Exception ef) {
  643.                     // ignore
  644.                 }
  645.                 throw new DriverRegistroServiziException("Riscontrato errore durante l'unmarshall del file di configurazione: "+e.getMessage());
  646.             }

  647.             try{  
  648.                 // Chiusura dello Stream
  649.                 if(iStream!=null)
  650.                     iStream.close();
  651.                 // Chiusura dell'eventuale connessione HTTP
  652.                 if(httpConn !=null)
  653.                     httpConn.disconnect();
  654.             } catch(Exception e) {
  655.                 throw new DriverRegistroServiziException("Riscontrato errore durante la chiusura dell'Input Stream: "+e.getMessage());
  656.             }
  657.            
  658.         } catch(Exception e) {
  659.             throw new DriverRegistroServiziException("Riscontrato errore durante l'istanziazione del registro: "+e.getMessage(),e);
  660.         }
  661.     }
  662.    
  663.    
  664.     private void createSorgente(byte[] sorgente)throws DriverRegistroServiziException{
  665.         // Istanziazione Sorgente
  666.         if(sorgente==null)
  667.             throw new DriverRegistroServiziException("Sorgente non definita");
  668.        
  669.         // ValidatoreXSD
  670.         ValidatoreXSD validatoreRegistro = null;
  671.         try{
  672.             validatoreRegistro = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), this.log,DriverRegistroServiziXML.class.getResourceAsStream("/registroServizi.xsd"));
  673.         }catch (Exception e) {
  674.             throw new DriverRegistroServiziException("Riscontrato errore durante l'inizializzazione dello schema del Registro dei Servizi di OpenSPCoop: "+e.getMessage());
  675.         }
  676.         try{
  677.             validatoreRegistro.valida(new ByteArrayInputStream(sorgente));
  678.         }catch (Exception e) {
  679.             throw new DriverRegistroServiziException("Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage());
  680.         }
  681.        
  682.         try{
  683.             InputStream iStream = null;
  684.             try{  
  685.                 iStream = new ByteArrayInputStream(sorgente);
  686.             }catch(Exception e) {
  687. //              try{  
  688. //                  if(iStream!=null)
  689. //                      iStream.close();
  690. //              } catch(java.io.IOException ef) {
  691. //                  // close
  692. //              }
  693.                 throw new DriverRegistroServiziException("Riscontrato errore durante la creazione dell'inputStreamReader del registro dei servizi : \n\n"+e.getMessage());
  694.             }


  695.             /* ---- Unmarshall del file di configurazione ---- */
  696.             try{  
  697.                 org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  698.                 this.sorgenteRegistro = deserializer.readRegistroServizi(iStream);
  699.             } catch(Exception e) {
  700.                 try{  
  701.                     if(iStream!=null)
  702.                         iStream.close();
  703.                 } catch(Exception ef) {
  704.                     // close
  705.                 }
  706.                 throw new DriverRegistroServiziException("Riscontrato errore durante l'unmarshall del file di configurazione: "+e.getMessage());
  707.             }

  708.             try{  
  709.                 // Chiusura dello Stream
  710.                 if(iStream!=null)
  711.                     iStream.close();
  712.             } catch(Exception e) {
  713.                 throw new DriverRegistroServiziException("Riscontrato errore durante la chiusura dell'Input Stream: "+e.getMessage());
  714.             }
  715.            
  716.         } catch(Exception e) {
  717.             throw new DriverRegistroServiziException("Riscontrato errore durante l'istanziazione del registro: "+e.getMessage(),e);
  718.         }
  719.     }
  720.    
  721.    
  722.    
  723.    
  724.    
  725.    
  726.     public void convertXML(boolean reset, boolean mantieniFruitoriEsistenti,boolean aggiornamentoSoggetti,StatiAccordo statoAccordo) throws DriverRegistroServiziException{
  727.         convertXML(reset,new PdDConfig(),mantieniFruitoriEsistenti,aggiornamentoSoggetti,statoAccordo);
  728.     }
  729.     public void convertXML(boolean reset, boolean mantieniFruitoriEsistenti,boolean aggiornamentoSoggetti,StatiAccordo statoAccordo, boolean updateEnabled) throws DriverRegistroServiziException{
  730.         convertXML(reset,new PdDConfig(),mantieniFruitoriEsistenti,aggiornamentoSoggetti,statoAccordo,updateEnabled);
  731.     }
  732.    
  733.     // pddEsterne da impostare solo nel caso di conversione per govwayConsole
  734.     public void convertXML(boolean reset, PdDConfig pddConfig, boolean mantieniFruitoriEsistenti,boolean aggiornamentoSoggetti,StatiAccordo statoAccordo) throws DriverRegistroServiziException{
  735.         this.convertXML(reset, pddConfig, mantieniFruitoriEsistenti, aggiornamentoSoggetti, statoAccordo, true);
  736.     }
  737.     public void convertXML(boolean reset, PdDConfig pddConfig, boolean mantieniFruitoriEsistenti,boolean aggiornamentoSoggetti,StatiAccordo statoAccordo, boolean updateEnabled) throws DriverRegistroServiziException{
  738.        
  739.         // Reset
  740.         if(reset){
  741.             try{
  742.                 this.log.info("RegistroServizi, reset in corso...");
  743.                 this.gestoreCRUD.reset();
  744.                 this.log.info("RegistroServizi, reset effettuato.");
  745.             }catch(Exception e){
  746.                 e.printStackTrace(System.err);
  747.                 throw new DriverRegistroServiziException("Reset del RegistroServizi non riuscita: "+e.getMessage(),e);
  748.             }
  749.         }
  750.        
  751.            
  752.         // Porte di Dominio
  753.         try{
  754.            
  755.             for(int i=0; i<this.sorgenteRegistro.sizePortaDominioList(); i++){
  756.                 PortaDominio pdd = this.sorgenteRegistro.getPortaDominio(i);
  757.                 pdd.setSuperUser(this.superUser);
  758.                 impostaInformazioniRegistroDB_PortaDominio(pdd);
  759.                
  760.                 if( (reset==false) && this.gestoreCRUD.existsPortaDominio(pdd.getNome())){
  761.                     if(updateEnabled) {
  762.                         this.log.info("Porta di Dominio "+pdd.getNome()+" aggiornamento in corso...");
  763.                         this.gestoreCRUD.updatePortaDominio(pdd);
  764.                         this.log.info("Porta di Dominio "+pdd.getNome()+" aggiornata.");
  765.                     }
  766.                     else {
  767.                         this.log.info("Porta di Dominio "+pdd.getNome()+" non aggiornata (aggiornamento disabilitato).");
  768.                     }
  769.                 }else{
  770.                     this.log.info("Porta di Dominio "+pdd.getNome()+" creazione in corso...");
  771.                     this.gestoreCRUD.createPortaDominio(pdd);
  772.                     this.log.info("Porta di Dominio "+pdd.getNome()+" creata.");                
  773.                 }
  774.                
  775.                 if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione) && pddConfig.getPddOperativaCtrlstatSinglePdd()!=null){
  776.                     impostaInformazioniRegistroDB_PortaDominio_update(pdd, pddConfig.getPddOperativaCtrlstatSinglePdd(),
  777.                             this.log, ((DriverRegistroServiziDB)this.gestoreCRUD), pddConfig.getTipoPdd());
  778.                 }  

  779.             }
  780.            
  781.         }catch(Exception e){
  782.             e.printStackTrace(System.err);
  783.             throw new DriverRegistroServiziException("Errore durante la conversione XML delle porte di dominio: "+e.getMessage(),e);
  784.         }
  785.        
  786.        
  787.        
  788.        
  789.        
  790.        
  791.         // Gruppi
  792.         try{
  793.            
  794.             for(int i=0; i<this.sorgenteRegistro.sizeGruppoList(); i++){
  795.                 Gruppo gruppo = this.sorgenteRegistro.getGruppo(i);
  796.                 gruppo.setSuperUser(this.superUser);
  797.                 impostaInformazioniRegistroDB_Gruppo(gruppo);
  798.                
  799.                 IDGruppo idGruppo = new IDGruppo(gruppo.getNome());
  800.                 if( (reset==false) && this.gestoreCRUD.existsGruppo(idGruppo)){
  801.                     if(updateEnabled) {
  802.                         this.log.info("Gruppo "+gruppo.getNome()+" aggiornamento in corso...");
  803.                         this.gestoreCRUD.updateGruppo(gruppo);
  804.                         this.log.info("Gruppo "+gruppo.getNome()+" aggiornato.");
  805.                     }
  806.                     else {
  807.                         this.log.info("Gruppo "+gruppo.getNome()+" non aggiornato (aggiornamento disabilitato).");
  808.                     }
  809.                 }else{
  810.                     this.log.info("Gruppo "+gruppo.getNome()+" creazione in corso...");
  811.                     this.gestoreCRUD.createGruppo(gruppo);
  812.                     this.log.info("Gruppo "+gruppo.getNome()+" creato.");              
  813.                 }
  814.                
  815.             }
  816.            
  817.         }catch(Exception e){
  818.             e.printStackTrace(System.err);
  819.             throw new DriverRegistroServiziException("Errore durante la conversione XML dei gruppi: "+e.getMessage(),e);
  820.         }
  821.        
  822.        
  823.        
  824.        
  825.        
  826.         // Ruoli
  827.         try{
  828.            
  829.             for(int i=0; i<this.sorgenteRegistro.sizeRuoloList(); i++){
  830.                 Ruolo ruolo = this.sorgenteRegistro.getRuolo(i);
  831.                 ruolo.setSuperUser(this.superUser);
  832.                 impostaInformazioniRegistroDB_Ruolo(ruolo);
  833.                
  834.                 IDRuolo idRuolo = new IDRuolo(ruolo.getNome());
  835.                 if( (reset==false) && this.gestoreCRUD.existsRuolo(idRuolo)){
  836.                     if(updateEnabled) {
  837.                         this.log.info("Ruolo "+ruolo.getNome()+" aggiornamento in corso...");
  838.                         this.gestoreCRUD.updateRuolo(ruolo);
  839.                         this.log.info("Ruolo "+ruolo.getNome()+" aggiornato.");
  840.                     }
  841.                     else {
  842.                         this.log.info("Ruolo "+ruolo.getNome()+" non aggiornato (aggiornamento disabilitato).");
  843.                     }
  844.                 }else{
  845.                     this.log.info("Ruolo "+ruolo.getNome()+" creazione in corso...");
  846.                     this.gestoreCRUD.createRuolo(ruolo);
  847.                     this.log.info("Ruolo "+ruolo.getNome()+" creato.");            
  848.                 }
  849.                
  850.             }
  851.            
  852.         }catch(Exception e){
  853.             e.printStackTrace(System.err);
  854.             throw new DriverRegistroServiziException("Errore durante la conversione XML dei ruoli: "+e.getMessage(),e);
  855.         }
  856.        
  857.        
  858.        
  859.        
  860.        
  861.        
  862.         // Scope
  863.         try{
  864.            
  865.             for(int i=0; i<this.sorgenteRegistro.sizeScopeList(); i++){
  866.                 Scope scope = this.sorgenteRegistro.getScope(i);
  867.                 scope.setSuperUser(this.superUser);
  868.                 impostaInformazioniRegistroDB_Scope(scope);
  869.                
  870.                 IDScope idScope = new IDScope(scope.getNome());
  871.                 if( (reset==false) && this.gestoreCRUD.existsScope(idScope)){
  872.                     if(updateEnabled) {
  873.                         this.log.info("Scope "+scope.getNome()+" aggiornamento in corso...");
  874.                         this.gestoreCRUD.updateScope(scope);
  875.                         this.log.info("Scope "+scope.getNome()+" aggiornato.");
  876.                     }
  877.                     else {
  878.                         this.log.info("Scope "+scope.getNome()+" non aggiornato (aggiornamento disabilitato).");
  879.                     }
  880.                 }else{
  881.                     this.log.info("Scope "+scope.getNome()+" creazione in corso...");
  882.                     this.gestoreCRUD.createScope(scope);
  883.                     this.log.info("Scope "+scope.getNome()+" creato.");            
  884.                 }
  885.                
  886.             }
  887.            
  888.         }catch(Exception e){
  889.             e.printStackTrace(System.err);
  890.             throw new DriverRegistroServiziException("Errore durante la conversione XML degli scope: "+e.getMessage(),e);
  891.         }
  892.                
  893.        
  894.        
  895.        

  896.         // Soggetto
  897.         try{
  898.            
  899.             for(int i=0; i<this.sorgenteRegistro.sizeSoggettoList(); i++){
  900.                 Soggetto soggetto = this.sorgenteRegistro.getSoggetto(i);
  901.                 this.gestioneSoggetto(soggetto, reset, aggiornamentoSoggetti,pddConfig.getPddOperativaCtrlstatSinglePdd(), updateEnabled);
  902.             }
  903.            
  904.         }catch(Exception e){
  905.             e.printStackTrace(System.err);
  906.             throw new DriverRegistroServiziException("Errore durante la conversione XML dei soggetti: "+e.getMessage(),e);
  907.         }
  908.        
  909.        
  910.         // Accordi Cooperazione
  911.         try{
  912.             for(int i=0; i<this.sorgenteRegistro.sizeAccordoCooperazioneList(); i++){
  913.                 AccordoCooperazione ac = this.sorgenteRegistro.getAccordoCooperazione(i);
  914.                
  915.                 // stato package
  916.                 if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  917.                     ac.setStatoPackage(statoAccordo.toString());
  918.                 }
  919.                
  920.                 this.gestioneAccordoCooperazione(ac, reset, updateEnabled);
  921.             }
  922.            
  923.         }catch(Exception e){
  924.             e.printStackTrace(System.err);
  925.             throw new DriverRegistroServiziException("Errore durante la conversione XML degli accordi di cooperazione: "+e.getMessage(),e);
  926.         }
  927.        
  928.        
  929.         // Accordi Servizio Parte Comune
  930.         List<AccordoServizioParteComune> accordiServizioComposti = new ArrayList<AccordoServizioParteComune>();
  931.         List<String> accordiServizioCompostiID = new ArrayList<>();
  932.         try{
  933.             for(int i=0; i<this.sorgenteRegistro.sizeAccordoServizioParteComuneList(); i++){
  934.                 AccordoServizioParteComune as = this.sorgenteRegistro.getAccordoServizioParteComune(i);
  935.                
  936.                 // stato package
  937.                 if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  938.                     as.setStatoPackage(statoAccordo.toString());
  939.                 }
  940.                
  941.                 if(as.getServizioComposto()==null){
  942.                     this.gestioneAccordoServizioParteComune(as, reset, updateEnabled);
  943.                 }else{
  944.                     String idAccordoServizioComposto = this.idAccordoFactory.getUriFromAccordo(as);
  945.                     this.log.debug("AccordoServizio ["+idAccordoServizioComposto+"] e' un accordo di servizio composto, verra posticipata la gestione dopo la creazione dei servizi");
  946.                     accordiServizioComposti.add(as);
  947.                     accordiServizioCompostiID.add(idAccordoServizioComposto);
  948.                 }
  949.             }
  950.            
  951.         }catch(Exception e){
  952.             e.printStackTrace(System.err);
  953.             throw new DriverRegistroServiziException("Errore durante la conversione XML degli accordi: "+e.getMessage(),e);
  954.         }
  955.        
  956.        
  957.         // Accordo Servizio Parte Specifica
  958.         List<AccordoServizioParteSpecifica> servizioComposti = new ArrayList<AccordoServizioParteSpecifica>();
  959.         List<Soggetto> servizioComposti_Soggetti = new ArrayList<Soggetto>();
  960.         try{
  961.            
  962.             for(int i=0; i<this.sorgenteRegistro.sizeSoggettoList(); i++){
  963.                 Soggetto soggetto = this.sorgenteRegistro.getSoggetto(i);
  964.                 for(int j=0; j<soggetto.sizeAccordoServizioParteSpecificaList(); j++){
  965.                     AccordoServizioParteSpecifica servizio = soggetto.getAccordoServizioParteSpecifica(j);
  966.                    
  967.                     // stato package
  968.                     if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  969.                         servizio.setStatoPackage(statoAccordo.toString());
  970.                     }
  971.                     // accordo parte specifica
  972.                     if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  973.                         if(servizio.getVersione()==null){
  974.                             servizio.setVersione(1);
  975.                         }
  976.                     }
  977.                    
  978.                     boolean servizioComposto = accordiServizioCompostiID.contains(servizio.getAccordoServizioParteComune());
  979.                     if(!servizioComposto){
  980.                         this.gestioneServizio(servizio, soggetto, reset, mantieniFruitoriEsistenti,statoAccordo, updateEnabled);
  981.                     }else{
  982.                         String uri = this.idServizioFactory.getUriFromAccordo(servizio);
  983.                         this.log.debug("Servizio ["+uri+"] e' un servizio composto, verra posticipata la gestione dopo la creazione degli accordi di servizio composti");
  984.                         servizioComposti.add(servizio);
  985.                         servizioComposti_Soggetti.add(soggetto);
  986.                     }
  987.                 }
  988.             }
  989.            
  990.         }catch(Exception e){
  991.             e.printStackTrace(System.err);
  992.             throw new DriverRegistroServiziException("Errore durante la conversione XML dei servizi: "+e.getMessage(),e);
  993.         }
  994.        
  995.         // Accordi Servizio Composti
  996.         try{
  997.             while(accordiServizioComposti.size()>0){
  998.                 AccordoServizioParteComune as = accordiServizioComposti.remove(0);
  999.                 this.gestioneAccordoServizioParteComune(as, reset, updateEnabled);
  1000.             }
  1001.         }catch(Exception e){
  1002.             e.printStackTrace(System.err);
  1003.             throw new DriverRegistroServiziException("Errore durante la conversione XML degli accordi di servizio composti: "+e.getMessage(),e);
  1004.         }
  1005.        
  1006.         // Servizi di  Accordi Servizio Composti
  1007.         try{
  1008.             while(servizioComposti.size()>0){
  1009.                 AccordoServizioParteSpecifica servizio = servizioComposti.remove(0);
  1010.                 Soggetto soggetto = servizioComposti_Soggetti.remove(0);
  1011.                 this.gestioneServizio(servizio, soggetto, reset, mantieniFruitoriEsistenti,statoAccordo, updateEnabled);
  1012.             }
  1013.         }catch(Exception e){
  1014.             e.printStackTrace(System.err);
  1015.             throw new DriverRegistroServiziException("Errore durante la conversione XML dei servizi degli accordi di servizio composti: "+e.getMessage(),e);
  1016.         }
  1017.        
  1018.     }
  1019.    
  1020.     public static void impostaInformazioniRegistroDB_PortaDominio(PortaDominio pdd) throws DriverRegistroServiziException{
  1021.         if(pdd.getImplementazione()==null)
  1022.             pdd.setImplementazione("standard");
  1023.     }
  1024.    
  1025.     public static void impostaInformazioniRegistroDB_PortaDominio_update(PortaDominio pdd,
  1026.             String nomePddOperativaCtrlstatSinglePdD,Logger log,DriverRegistroServiziDB driverRegistroServiziDB,String tipoPdd) throws DriverRegistroServiziException{
  1027.         if(pdd.getNome().equals(nomePddOperativaCtrlstatSinglePdD)){
  1028.             log.info("Porta di Dominio "+pdd.getNome()+" aggiornamento tipo["+PddTipologia.OPERATIVO.toString()+"] in corso...");
  1029.             driverRegistroServiziDB.updateTipoPortaDominio(pdd.getNome(), PddTipologia.OPERATIVO.toString());
  1030.             log.info("Porta di Dominio "+pdd.getNome()+" aggiornata con tipo "+PddTipologia.OPERATIVO.toString()+".");
  1031.         }else{
  1032.             log.info("Porta di Dominio "+pdd.getNome()+" aggiornamento tipo["+PddTipologia.ESTERNO.toString()+"] in corso...");
  1033.             driverRegistroServiziDB.updateTipoPortaDominio(pdd.getNome(), tipoPdd);
  1034.             log.info("Porta di Dominio "+pdd.getNome()+" aggiornata con tipo "+PddTipologia.ESTERNO.toString()+".");
  1035.         }
  1036.     }
  1037.    
  1038.     public static void impostaInformazioniRegistroDB_Gruppo(Gruppo gruppo) throws DriverRegistroServiziException{

  1039.     }
  1040.    
  1041.     public static void impostaInformazioniRegistroDB_Ruolo(Ruolo ruolo) throws DriverRegistroServiziException{

  1042.     }
  1043.    
  1044.     public static void impostaInformazioniRegistroDB_Scope(Scope scope) throws DriverRegistroServiziException{

  1045.     }
  1046.    
  1047.    
  1048.    
  1049.     private static void mantieniFruitori(AccordoServizioParteSpecifica old,AccordoServizioParteSpecifica servizio){
  1050.         for(int fr=0; fr<old.sizeFruitoreList(); fr++){
  1051.             boolean find = false;
  1052.             for(int frNew =0; frNew < servizio.sizeFruitoreList(); frNew++){
  1053.                 if(servizio.getFruitore(frNew).getTipo().equals(old.getFruitore(fr).getTipo()) &&
  1054.                         servizio.getFruitore(frNew).getNome().equals(old.getFruitore(fr).getNome()) ){
  1055.                     find = true;
  1056.                     break;
  1057.                 }
  1058.             }
  1059.             if(!find){
  1060.                 servizio.addFruitore(old.getFruitore(fr));
  1061.             }
  1062.         }
  1063.     }
  1064.    
  1065.     public static void aggiornatoStatoFruitori(AccordoServizioParteSpecifica servizio,StatiAccordo statoAccordo){
  1066.         for(int i =0; i < servizio.sizeFruitoreList(); i++){
  1067.             servizio.getFruitore(i).setStatoPackage(statoAccordo.toString());
  1068.         }
  1069.     }
  1070.    
  1071.     public void delete(boolean deleteSoggetti, boolean deleteMappingErogazioneFruizione) throws DriverRegistroServiziException{
  1072.        
  1073.         // Servizi
  1074.         try{
  1075.            
  1076.             for(int i=0; i<this.sorgenteRegistro.sizeSoggettoList(); i++){
  1077.                 Soggetto soggetto = this.sorgenteRegistro.getSoggetto(i);
  1078.                 for(int j=0; j<soggetto.sizeAccordoServizioParteSpecificaList(); j++){
  1079.                     AccordoServizioParteSpecifica servizio = soggetto.getAccordoServizioParteSpecifica(j);
  1080.                     servizio.setTipoSoggettoErogatore(soggetto.getTipo());
  1081.                     servizio.setNomeSoggettoErogatore(soggetto.getNome());
  1082.                     IDServizio idServizio = this.idServizioFactory.getIDServizioFromAccordo(servizio);
  1083.                     String uri = this.idServizioFactory.getUriFromAccordo(servizio);
  1084.                    
  1085.                     if(deleteMappingErogazioneFruizione && this.gestoreCRUD instanceof DriverRegistroServiziDB) {
  1086.                         DriverRegistroServiziDB driver = (DriverRegistroServiziDB) this.gestoreCRUD;
  1087.                         Connection con = null;
  1088.                         try {
  1089.                             con = driver.getConnection("XMLDataConverter.mappingErogazioneFruizione");
  1090.                             if(con.getAutoCommit()) {
  1091.                                 con.setAutoCommit(false);
  1092.                             }
  1093.                             this.log.info("Servizio "+uri+" (mappingErogazione) eliminazione in corso...");                        
  1094.                             if(this.gestoreCRUD.existsAccordoServizioParteSpecifica(idServizio)){
  1095.                                 // elimino anche tutti i mapping fruitori
  1096.                                 AccordoServizioParteSpecifica dbImage = driver.getAccordoServizioParteSpecifica(idServizio);
  1097.                                 for (Fruitore fruitore : dbImage.getFruitoreList()) {
  1098.                                     IDSoggetto idFruitore = new IDSoggetto(fruitore.getTipo(), fruitore.getNome());
  1099.                                     if(DBMappingUtils.existsIDPorteDelegateAssociate(idServizio, idFruitore, con, driver.getTipoDB())) {
  1100.                                         DBMappingUtils.deleteMappingFruizione(idServizio, idFruitore, true, con, driver.getTipoDB()); // elimina anche le porte delegate
  1101.                                     }
  1102.                                 }
  1103.                             }
  1104.                             if(DBMappingUtils.existsIDPorteApplicativeAssociate(idServizio, con, driver.getTipoDB())) {
  1105.                                 DBMappingUtils.deleteMappingErogazione(idServizio, true, con, driver.getTipoDB()); // elimina anche le porte applicative
  1106.                             }
  1107.                             this.log.info("Servizio "+uri+" (mappingErogazione) eliminazione completata");
  1108.                         }
  1109.                         finally {
  1110.                             try {
  1111.                                 if(con!=null) {
  1112.                                     con.commit();
  1113.                                 }
  1114.                             }catch(Exception t) {
  1115.                                 // ignore
  1116.                             }
  1117.                             try {
  1118.                                 if(con!=null) {
  1119.                                     con.setAutoCommit(true);
  1120.                                 }
  1121.                             }catch(Exception t) {
  1122.                                 // ignore
  1123.                             }
  1124.                             driver.releaseConnection(con);
  1125.                         }
  1126.                     }
  1127.                    
  1128.                     this.log.info("Servizio "+uri+" eliminazione in corso...");
  1129.                     if(this.gestoreCRUD.existsAccordoServizioParteSpecifica(idServizio)){
  1130.                         this.gestoreCRUD.deleteAccordoServizioParteSpecifica(((IDriverRegistroServiziGet)this.gestoreCRUD).getAccordoServizioParteSpecifica(idServizio));
  1131.                     }
  1132.                     this.log.info("Servizio "+uri+" eliminato.");
  1133.                 }
  1134.             }
  1135.            
  1136.         }catch(Exception e){
  1137.             e.printStackTrace(System.err);
  1138.             throw new DriverRegistroServiziException("Errore durante l'eliminazione dei servizi: "+e.getMessage(),e);
  1139.         }
  1140.        
  1141.            
  1142.        
  1143.        
  1144.         // Accordi Servizio
  1145.         List<AccordoServizioParteComune> asServiziNonComposti = new ArrayList<AccordoServizioParteComune>();
  1146.         try{
  1147.             for(int i=0; i<this.sorgenteRegistro.sizeAccordoServizioParteComuneList(); i++){
  1148.                 AccordoServizioParteComune as = this.sorgenteRegistro.getAccordoServizioParteComune(i);
  1149.                 if(as.getServizioComposto()==null){
  1150.                     asServiziNonComposti.add(as);
  1151.                 }
  1152.                 else{
  1153.                     this.log.info("Accordo di Servizio Composto "+this.idAccordoFactory.getUriFromAccordo(as)+" eliminazione in corso...");
  1154.                     if( this.gestoreCRUD.existsAccordoServizioParteComune(this.idAccordoFactory.getIDAccordoFromAccordo(as))){
  1155.                         this.gestoreCRUD.deleteAccordoServizioParteComune(((IDriverRegistroServiziGet)this.gestoreCRUD).getAccordoServizioParteComune(this.idAccordoFactory.getIDAccordoFromAccordo(as)));
  1156.                     }
  1157.                     this.log.info("Accordo di Servizio Composto "+this.idAccordoFactory.getUriFromAccordo(as)+" eliminato");
  1158.                 }
  1159.             }
  1160.            
  1161.             while(asServiziNonComposti.size()>0){
  1162.                 AccordoServizioParteComune as =  asServiziNonComposti.remove(0);
  1163.                 this.log.info("Accordo di Servizio "+this.idAccordoFactory.getUriFromAccordo(as)+" eliminazione in corso...");
  1164.                 if( this.gestoreCRUD.existsAccordoServizioParteComune(this.idAccordoFactory.getIDAccordoFromAccordo(as))){
  1165.                     this.gestoreCRUD.deleteAccordoServizioParteComune(((IDriverRegistroServiziGet)this.gestoreCRUD).getAccordoServizioParteComune(this.idAccordoFactory.getIDAccordoFromAccordo(as)));
  1166.                 }
  1167.                 this.log.info("Accordo di Servizio "+this.idAccordoFactory.getUriFromAccordo(as)+" eliminato");
  1168.             }
  1169.            
  1170.         }catch(Exception e){
  1171.             e.printStackTrace(System.err);
  1172.             throw new DriverRegistroServiziException("Errore durante l'eliminazione degli accordi: "+e.getMessage(),e);
  1173.         }
  1174.        
  1175.        
  1176.        
  1177.        
  1178.         // Accordi Cooperazione
  1179.         try{
  1180.             for(int i=0; i<this.sorgenteRegistro.sizeAccordoCooperazioneList(); i++){
  1181.                 AccordoCooperazione ac = this.sorgenteRegistro.getAccordoCooperazione(i);
  1182.                 this.log.info("Accordo di Cooperazione "+this.idAccordoCooperazioneFactory.getUriFromAccordo(ac)+" eliminazione in corso...");
  1183.                 if( this.gestoreCRUD.existsAccordoCooperazione(this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(ac))){
  1184.                     this.gestoreCRUD.deleteAccordoCooperazione(((IDriverRegistroServiziGet)this.gestoreCRUD).getAccordoCooperazione(this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(ac)));
  1185.                 }
  1186.                 this.log.info("Accordo di Cooperazione "+this.idAccordoCooperazioneFactory.getUriFromAccordo(ac)+" eliminato");
  1187.             }
  1188.            
  1189.         }catch(Exception e){
  1190.             e.printStackTrace(System.err);
  1191.             throw new DriverRegistroServiziException("Errore durante l'eliminazione degli accordi di cooperazione: "+e.getMessage(),e);
  1192.         }
  1193.        
  1194.        
  1195.         if(deleteSoggetti){
  1196.            
  1197.             // Soggetto
  1198.             try{
  1199.                
  1200.                 for(int i=0; i<this.sorgenteRegistro.sizeSoggettoList(); i++){
  1201.                     Soggetto soggetto = this.sorgenteRegistro.getSoggetto(i);
  1202.                     IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  1203.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" eliminazione in corso...");
  1204.                     if( this.gestoreCRUD.existsSoggetto(idSoggetto)){
  1205.                         this.gestoreCRUD.deleteSoggetto(((IDriverRegistroServiziGet)this.gestoreCRUD).getSoggetto(idSoggetto));
  1206.                     }
  1207.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" eliminato.");
  1208.                 }
  1209.                
  1210.             }catch(Exception e){
  1211.                 e.printStackTrace(System.err);
  1212.                 throw new DriverRegistroServiziException("Errore durante l'eliminazione dei soggetti: "+e.getMessage(),e);
  1213.             }
  1214.            
  1215.            
  1216.             // Porte di Dominio
  1217.             try{
  1218.                
  1219.                 for(int i=0; i<this.sorgenteRegistro.sizePortaDominioList(); i++){
  1220.                     PortaDominio pdd = this.sorgenteRegistro.getPortaDominio(i);
  1221.                     this.log.info("Porta di Dominio "+pdd.getNome()+" eliminazione in corso...");
  1222.                     if( this.gestoreCRUD.existsPortaDominio(pdd.getNome())){
  1223.                         this.gestoreCRUD.deletePortaDominio(((IDriverRegistroServiziGet)this.gestoreCRUD).getPortaDominio(pdd.getNome()));
  1224.                     }
  1225.                     this.log.info("Porta di Dominio "+pdd.getNome()+" eliminata.");
  1226.                 }
  1227.                
  1228.             }catch(Exception e){
  1229.                 e.printStackTrace(System.err);
  1230.                 throw new DriverRegistroServiziException("Errore durante l'eliminazione delle porte di dominio: "+e.getMessage(),e);
  1231.             }
  1232.            
  1233.         }
  1234.            
  1235.     }
  1236.    
  1237.    
  1238.     private byte [] gestioneBytesDocumenti_Wsdl_Wsbl(String documento) throws Exception{
  1239.         ByteArrayOutputStream bout = new ByteArrayOutputStream();
  1240.         if(documento!=null && (documento.equals("http://undefined")==false) ){
  1241.             if(documento.startsWith("http://") || documento.startsWith("file://")){
  1242.                 byte[] file = HttpUtilities.requestHTTPFile(documento);
  1243.                 if(file==null)
  1244.                     throw new Exception("byte[] is null");
  1245.                 else
  1246.                     bout.write(file);
  1247.             }else{
  1248.                 File f = new File(documento);
  1249.                 if(f.exists()){
  1250.                     FileInputStream file = null;
  1251.                     try{
  1252.                         file = new FileInputStream(f);
  1253. //                      byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  1254. //                      int letti = 0;
  1255. //                      while( (letti=file.read(reads)) >=0 ){
  1256. //                          bout.write(reads,0,letti);
  1257. //                      }
  1258.                         CopyStream.copy(file, bout);
  1259.                     }finally{
  1260.                         try{
  1261.                             if(file!=null){
  1262.                                 file.close();
  1263.                             }
  1264.                         }catch(Exception eClose){
  1265.                             // close
  1266.                         }
  1267.                     }
  1268.                 }
  1269.                 else if(this.parentFile!=null){
  1270.                     File fWithParent = new File(this.parentFile,documento);
  1271.                     if(fWithParent.exists()){
  1272.                         FileInputStream file = null;
  1273.                         try{
  1274.                             file = new FileInputStream(fWithParent);
  1275. //                          byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  1276. //                          int letti = 0;
  1277. //                          while( (letti=file.read(reads)) >=0 ){
  1278. //                              bout.write(reads,0,letti);
  1279. //                          }
  1280.                             CopyStream.copy(file, bout);
  1281.                         }finally{
  1282.                             try{
  1283.                                 if(file!=null){
  1284.                                     file.close();
  1285.                                 }
  1286.                             }catch(Exception eClose){
  1287.                                 // close
  1288.                             }
  1289.                         }  
  1290.                     }
  1291.                 }
  1292.                 else{
  1293.                     throw new Exception("File ["+documento+"] non esistente");
  1294.                 }
  1295.             }
  1296.             bout.flush();
  1297.             bout.close();
  1298.             if(bout.size()>0){
  1299.                 return bout.toByteArray();
  1300.             }  
  1301.         }
  1302.         return null;
  1303.     }
  1304.    
  1305.    
  1306.     private void initializeWSDLBytes(AccordoServizioParteComune as) throws DriverRegistroServiziException{
  1307.        
  1308.         String uriAS = this.idAccordoFactory.getUriFromAccordo(as);
  1309.    
  1310.         if(as.getWsdlDefinitorio()!=null){
  1311.             try{
  1312.                 as.setByteWsdlDefinitorio(gestioneBytesDocumenti_Wsdl_Wsbl(as.getWsdlDefinitorio()));
  1313.             }catch(Exception e){
  1314.                 this.log.warn("Accordo di Servizio "+uriAS+", lettura wsdl definitorio ["+as.getWsdlDefinitorio()+"] non riuscita:",e);
  1315.             }  
  1316.         }
  1317.         if(as.getWsdlConcettuale()!=null){
  1318.             try{
  1319.                 as.setByteWsdlConcettuale(gestioneBytesDocumenti_Wsdl_Wsbl(as.getWsdlConcettuale()));
  1320.             }catch(Exception e){
  1321.                 this.log.warn("Accordo di Servizio "+uriAS+", lettura wsdl concettuale ["+as.getWsdlConcettuale()+"] non riuscita:",e);
  1322.             }  
  1323.         }
  1324.         if(as.getWsdlLogicoErogatore()!=null){
  1325.             try{
  1326.                 as.setByteWsdlLogicoErogatore(gestioneBytesDocumenti_Wsdl_Wsbl(as.getWsdlLogicoErogatore()));
  1327.             }catch(Exception e){
  1328.                 this.log.warn("Accordo di Servizio "+uriAS+", lettura wsdl logico erogatore ["+as.getWsdlLogicoErogatore()+"] non riuscita:",e);
  1329.             }  
  1330.         }
  1331.         if(as.getWsdlLogicoFruitore()!=null){
  1332.             try{
  1333.                 as.setByteWsdlLogicoFruitore(gestioneBytesDocumenti_Wsdl_Wsbl(as.getWsdlLogicoFruitore()));
  1334.             }catch(Exception e){
  1335.                 this.log.warn("Accordo di Servizio "+uriAS+", lettura wsdl logico fruitore ["+as.getWsdlLogicoFruitore()+"] non riuscita:",e);
  1336.             }  
  1337.         }
  1338.        
  1339.         if(as.getSpecificaConversazioneConcettuale()!=null){
  1340.             try{
  1341.                 as.setByteSpecificaConversazioneConcettuale(gestioneBytesDocumenti_Wsdl_Wsbl(as.getSpecificaConversazioneConcettuale()));
  1342.             }catch(Exception e){
  1343.                 this.log.warn("Accordo di Servizio "+uriAS+", lettura specifica conversazione concettuale ["+as.getSpecificaConversazioneConcettuale()+"] non riuscita:",e);
  1344.             }  
  1345.         }
  1346.         if(as.getSpecificaConversazioneErogatore()!=null){
  1347.             try{
  1348.                 as.setByteSpecificaConversazioneErogatore(gestioneBytesDocumenti_Wsdl_Wsbl(as.getSpecificaConversazioneErogatore()));
  1349.             }catch(Exception e){
  1350.                 this.log.warn("Accordo di Servizio "+uriAS+", lettura specifica conversazione erogatore ["+as.getSpecificaConversazioneErogatore()+"] non riuscita:",e);
  1351.             }  
  1352.         }
  1353.         if(as.getSpecificaConversazioneFruitore()!=null){
  1354.             try{
  1355.                 as.setByteSpecificaConversazioneFruitore(gestioneBytesDocumenti_Wsdl_Wsbl(as.getSpecificaConversazioneFruitore()));
  1356.             }catch(Exception e){
  1357.                 this.log.warn("Accordo di Servizio "+uriAS+", lettura specifica conversazione fruitore ["+as.getSpecificaConversazioneFruitore()+"] non riuscita:",e);
  1358.             }  
  1359.         }
  1360.     }
  1361.    
  1362.    
  1363.     private void initializeWSDLBytes(AccordoServizioParteSpecifica s){
  1364.         if(s.getWsdlImplementativoErogatore()!=null){
  1365.             try{
  1366.                 s.setByteWsdlImplementativoErogatore(gestioneBytesDocumenti_Wsdl_Wsbl(s.getWsdlImplementativoErogatore()));
  1367.             }catch(Exception e){
  1368.                 String uri = null;
  1369.                 try{
  1370.                     uri = this.idServizioFactory.getUriFromAccordo(s);
  1371.                 }catch(Exception eInternal){
  1372.                     throw new RuntimeException(eInternal);
  1373.                 }
  1374.                 this.log.warn("Servizio "+uri+", lettura wsdl implementativo erogatore ["+s.getWsdlImplementativoErogatore()+"] non riuscita:",e);
  1375.             }
  1376.         }
  1377.         if(s.getWsdlImplementativoFruitore()!=null){
  1378.             try{
  1379.                 s.setByteWsdlImplementativoFruitore(gestioneBytesDocumenti_Wsdl_Wsbl(s.getWsdlImplementativoFruitore()));
  1380.             }catch(Exception e){
  1381.                 String uri = null;
  1382.                 try{
  1383.                     uri = this.idServizioFactory.getUriFromAccordo(s);
  1384.                 }catch(Exception eInternal){
  1385.                     throw new RuntimeException(eInternal);
  1386.                 }
  1387.                 this.log.warn("Servizio "+uri+", lettura wsdl implementativo fruitore ["+s.getWsdlImplementativoFruitore()+"] non riuscita:",e);
  1388.             }  
  1389.         }
  1390.     }

  1391.    
  1392.     private byte[] readDocumento(String fileName) throws DriverRegistroServiziException{
  1393.        
  1394.         ByteArrayOutputStream bout = new ByteArrayOutputStream();
  1395.         try{
  1396.             if(fileName.startsWith("http://") || fileName.startsWith("file://")){
  1397.                 byte[] file = HttpUtilities.requestHTTPFile(fileName);
  1398.                 if(file==null)
  1399.                     throw new Exception("byte[] is null");
  1400.                 else
  1401.                     bout.write(file);
  1402.             }else{
  1403.                 File f = new File(fileName);
  1404.                 if(f.exists()){
  1405.                     FileInputStream file = null;
  1406.                     try{
  1407.                         file = new FileInputStream(f);
  1408. //                      byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  1409. //                      int letti = 0;
  1410. //                      while( (letti=file.read(reads)) >=0 ){
  1411. //                          bout.write(reads,0,letti);
  1412. //                      }
  1413.                         CopyStream.copy(file, bout);
  1414.                     }finally{
  1415.                         try{
  1416.                             if(file!=null){
  1417.                                 file.close();
  1418.                             }
  1419.                         }catch(Exception eClose){
  1420.                             // close
  1421.                         }
  1422.                     }      
  1423.                 }
  1424.                 else if(this.parentFile!=null){
  1425.                     File fWithParent = new File(this.parentFile,fileName);
  1426.                     if(fWithParent.exists()){
  1427.                         FileInputStream file = null;
  1428.                         try{
  1429.                             file = new FileInputStream(fWithParent);
  1430. //                          byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  1431. //                          int letti = 0;
  1432. //                          while( (letti=file.read(reads)) >=0 ){
  1433. //                              bout.write(reads,0,letti);
  1434. //                          }
  1435.                             CopyStream.copy(file, bout);
  1436.                         }finally{
  1437.                             try{
  1438.                                 if(file!=null){
  1439.                                     file.close();
  1440.                                 }
  1441.                             }catch(Exception eClose){
  1442.                                 // close
  1443.                             }
  1444.                         }  
  1445.                     }
  1446.                 }
  1447.                 else{
  1448.                     throw new Exception("File ["+fileName+"] non esistente");
  1449.                 }
  1450.             }
  1451.             bout.flush();
  1452.             bout.close();
  1453.             if(bout.size()>0){
  1454.                 return bout.toByteArray();
  1455.             }
  1456.            
  1457.         }catch(Exception e){
  1458.             this.log.warn("File "+fileName+", lettura documento non riuscita:",e);
  1459.         }  
  1460.        
  1461.         throw new DriverRegistroServiziException("Contenuto non letto?? File ["+fileName+"]");
  1462.     }
  1463.    
  1464.     private String getNomeFile(String fileName){
  1465.         String name = null;
  1466.         if(fileName.startsWith("http://")){
  1467.             int index = fileName.lastIndexOf("/");
  1468.             name = fileName.substring(index+1, fileName.length());
  1469.         }
  1470.         else {
  1471.             File f = new File(fileName);
  1472.             name = f.getName();
  1473.         }
  1474.         return name;
  1475.     }
  1476.    
  1477.     private static void gestioneDefaultConnettoreHTTP(Connettore connettore){
  1478.         if(connettore.getProperties()!=null){
  1479.             if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_TYPE)==false){
  1480.                 Property cp = new Property();
  1481.                 cp.setNome(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_TYPE);
  1482.                 cp.setValore(KeystoreType.JKS.getNome()); // default
  1483.                 connettore.addProperty(cp);
  1484.             }
  1485.             if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_TRUST_MANAGEMENT_ALGORITM)==false){
  1486.                 Property cp = new Property();
  1487.                 cp.setNome(CostantiDB.CONNETTORE_HTTPS_TRUST_MANAGEMENT_ALGORITM);
  1488.                 cp.setValore(TrustManagerFactory.getDefaultAlgorithm()); // default
  1489.                 connettore.addProperty(cp);
  1490.             }
  1491.             if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_LOCATION)){
  1492.                 if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_TYPE)==false){
  1493.                     Property cp = new Property();
  1494.                     cp.setNome(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_TYPE);
  1495.                     cp.setValore(KeystoreType.JKS.getNome()); // default
  1496.                     connettore.addProperty(cp);
  1497.                 }
  1498.                 if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_KEY_MANAGEMENT_ALGORITM)==false){
  1499.                     Property cp = new Property();
  1500.                     cp.setNome(CostantiDB.CONNETTORE_HTTPS_KEY_MANAGEMENT_ALGORITM);
  1501.                     cp.setValore(KeyManagerFactory.getDefaultAlgorithm()); // default
  1502.                     connettore.addProperty(cp);
  1503.                 }
  1504.             }  
  1505.         }
  1506.     }
  1507.    
  1508.     public static void impostaInformazioniRegistroDB_Soggetto(Soggetto soggetto,String pddOperativaCtrlstatSinglePdd) throws DriverRegistroServiziException{
  1509.         if(soggetto.getConnettore()!=null){
  1510.             // I nomi vengono autogenerati dal driver
  1511.             soggetto.getConnettore().setNome(null);
  1512.             // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1513.             String tipoConnettore = soggetto.getConnettore().getTipo();
  1514.             if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1515.                  !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1516.                  !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1517.                 soggetto.getConnettore().setCustom(true);
  1518.             }
  1519.             // Gestione default per connettore https
  1520.             if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1521.                 gestioneDefaultConnettoreHTTP(soggetto.getConnettore());
  1522.             }
  1523.         }
  1524.         IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  1525.         if( (soggetto.getIdentificativoPorta()==null) || ("".equals(soggetto.getIdentificativoPorta())) ) {
  1526.             try {
  1527.                 soggetto.setIdentificativoPorta(ProtocolFactoryReflectionUtils.getIdentificativoPortaDefault(idSoggetto));
  1528.             }catch(Exception e) {
  1529.                 throw new DriverRegistroServiziException(e.getMessage(),e);
  1530.             }
  1531.         }
  1532.         if( (soggetto.getCodiceIpa() == null) || ("".equals(soggetto.getCodiceIpa())) ){
  1533.             try {
  1534.                 soggetto.setCodiceIpa(ProtocolFactoryReflectionUtils.getCodiceIPADefault(idSoggetto));
  1535.             }catch(Exception e) {
  1536.                 throw new DriverRegistroServiziException(e.getMessage(),e);
  1537.             }
  1538.         }
  1539.            
  1540.         if(pddOperativaCtrlstatSinglePdd!=null && soggetto.getPortaDominio()==null){
  1541.             soggetto.setPortaDominio(pddOperativaCtrlstatSinglePdd);
  1542.         }
  1543.     }
  1544.     public static void impostaInformazioniRegistroDB_Soggetto_update(Soggetto soggetto,Soggetto old){
  1545.         soggetto.setId(old.getId());
  1546.         if(soggetto.getConnettore()==null){
  1547.             soggetto.setConnettore(old.getConnettore());
  1548.         }else{
  1549.             soggetto.getConnettore().setId(old.getConnettore().getId());
  1550.             soggetto.getConnettore().setNome(old.getConnettore().getNome());
  1551.         }
  1552.     }
  1553.    
  1554.     private void gestioneSoggetto(Soggetto soggetto,boolean reset,boolean aggiornamentoSoggetti,String pddOperativaCtrlstatSinglePdd, boolean updateEnabled) throws Exception{
  1555.         soggetto.setSuperUser(this.superUser);
  1556.         IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  1557.        
  1558.         if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  1559.             impostaInformazioniRegistroDB_Soggetto(soggetto,pddOperativaCtrlstatSinglePdd);
  1560.         }
  1561.        
  1562.         // protocol properties: bytes
  1563.         if(soggetto.sizeProtocolPropertyList()>0) {
  1564.             for (ProtocolProperty pp : soggetto.getProtocolPropertyList()) {
  1565.                 if(pp.getFile()!=null) {
  1566.                     pp.setByteFile(this.readDocumento(pp.getFile()));
  1567.                 }
  1568.             }
  1569.         }
  1570.        
  1571.         if( (reset==false) && this.gestoreCRUD.existsSoggetto(idSoggetto)){
  1572.             if(aggiornamentoSoggetti){
  1573.                 if(updateEnabled) {
  1574.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornamento in corso...");
  1575.                     Soggetto old = ((IDriverRegistroServiziGet)this.gestoreCRUD).getSoggetto(idSoggetto);
  1576.                     impostaInformazioniRegistroDB_Soggetto_update(soggetto, old);
  1577.                     this.gestoreCRUD.updateSoggetto(soggetto);
  1578.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornato.");
  1579.                 }
  1580.                 else {
  1581.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" non aggiornato (aggiornamento disabilitato).");
  1582.                 }
  1583.             }
  1584.         }else{
  1585.             this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creazione in corso...");
  1586.             this.gestoreCRUD.createSoggetto(soggetto);
  1587.             this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creato.");
  1588.         }
  1589.     }
  1590.    
  1591.     private void gestioneAccordoCooperazione(AccordoCooperazione ac,boolean reset, boolean updateEnabled) throws Exception {
  1592.         ac.setSuperUser(this.superUser);
  1593.         // bytes
  1594.         for(int k=0; k<ac.sizeAllegatoList();k++){
  1595.             String fileName = ac.getAllegato(k).getFile();
  1596.             String name = getNomeFile(fileName);
  1597.            
  1598.             ac.getAllegato(k).setByteContenuto(this.readDocumento(fileName));
  1599.             ac.getAllegato(k).setFile(name);
  1600.             ac.getAllegato(k).setRuolo(RuoliDocumento.allegato.toString());
  1601.             ac.getAllegato(k).setTipoProprietarioDocumento(ProprietariDocumento.accordoCooperazione.toString());
  1602.         }
  1603.         for(int k=0; k<ac.sizeSpecificaSemiformaleList();k++){
  1604.             String fileName = ac.getSpecificaSemiformale(k).getFile();
  1605.             String name = getNomeFile(fileName);
  1606.            
  1607.             ac.getSpecificaSemiformale(k).setByteContenuto(this.readDocumento(fileName));
  1608.             ac.getSpecificaSemiformale(k).setFile(name);
  1609.             ac.getSpecificaSemiformale(k).setRuolo(RuoliDocumento.specificaSemiformale.toString());
  1610.             ac.getSpecificaSemiformale(k).setTipoProprietarioDocumento(ProprietariDocumento.accordoCooperazione.toString());
  1611.         }
  1612.         // protocol properties: bytes
  1613.         if(ac.sizeProtocolPropertyList()>0) {
  1614.             for (ProtocolProperty pp : ac.getProtocolPropertyList()) {
  1615.                 if(pp.getFile()!=null) {
  1616.                     pp.setByteFile(this.readDocumento(pp.getFile()));
  1617.                 }
  1618.             }
  1619.         }
  1620.         IDAccordoCooperazione idAccordo = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(ac);
  1621.         String uriAC = this.idAccordoCooperazioneFactory.getUriFromIDAccordo(idAccordo);
  1622.         if( (reset==false) && this.gestoreCRUD.existsAccordoCooperazione(idAccordo)){
  1623.             if(updateEnabled) {
  1624.                 this.log.info("Accordo di Cooperazione "+uriAC+" aggiornamento in corso...");
  1625.                 this.gestoreCRUD.updateAccordoCooperazione(ac);
  1626.                 this.log.info("Accordo di Cooperazione "+uriAC+" aggiornato.");
  1627.             }
  1628.             else {
  1629.                 this.log.info("Accordo di Cooperazione "+uriAC+" non aggiornato (aggiornamento disabilitato).");
  1630.             }
  1631.         }else{
  1632.             this.log.info("Accordo di Cooperazione "+uriAC+" creazione in corso...");
  1633.             this.gestoreCRUD.createAccordoCooperazione(ac);
  1634.             this.log.info("Accordo di Cooperazione "+uriAC+" creato.");
  1635.         }
  1636.     }
  1637.    
  1638.     public static boolean equals(StatoFunzionalita arg1, StatoFunzionalita arg2) {
  1639.         if(arg1==null) {
  1640.             return arg2==null;
  1641.         }
  1642.         else {
  1643.             return arg1.equals(arg2);
  1644.         }
  1645.     }
  1646.    
  1647.     public static void impostaInformazioniRegistroDB_AccordoServizioParteComune(AccordoServizioParteComune as){
  1648.        
  1649.         // Devono essere impostati i comportamenti per la ridefinizione delle azioni
  1650.         for(int k=0; k<as.sizeAzioneList();k++){
  1651.             if(
  1652.                     (as.getAzione(k).getProfiloCollaborazione()!=null && !as.getAzione(k).getProfiloCollaborazione().equals(as.getProfiloCollaborazione())) ||
  1653.                     !equals(as.getAzione(k).getConfermaRicezione(),as.getConfermaRicezione()) ||
  1654.                     !equals(as.getAzione(k).getConsegnaInOrdine(),as.getConsegnaInOrdine()) ||
  1655.                     !equals(as.getAzione(k).getFiltroDuplicati(),as.getFiltroDuplicati()) ||
  1656.                     !equals(as.getAzione(k).getIdCollaborazione(),as.getIdCollaborazione()) ||
  1657.                     !equals(as.getAzione(k).getIdRiferimentoRichiesta(),as.getIdRiferimentoRichiesta()) ||
  1658.                     (as.getAzione(k).getScadenza()!=null && !as.getAzione(k).getScadenza().equals(as.getScadenza()))
  1659.                     ) {
  1660.                 as.getAzione(k).setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO);
  1661.             }else{
  1662.                 as.getAzione(k).setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT);
  1663.                 as.getAzione(k).setProfiloCollaborazione(as.getProfiloCollaborazione());
  1664.                 as.getAzione(k).setConfermaRicezione(as.getConfermaRicezione());
  1665.                 as.getAzione(k).setConsegnaInOrdine(as.getConsegnaInOrdine());
  1666.                 as.getAzione(k).setFiltroDuplicati(as.getFiltroDuplicati());
  1667.                 as.getAzione(k).setIdCollaborazione(as.getIdCollaborazione());
  1668.                 as.getAzione(k).setIdRiferimentoRichiesta(as.getIdRiferimentoRichiesta());
  1669.                 as.getAzione(k).setScadenza(as.getScadenza());
  1670.             }
  1671.         }
  1672.         // Devono essere impostati i comportamenti per la ridefinizione dei port-types e delle azioni dei port-types
  1673.         for(int k=0; k<as.sizePortTypeList();k++){
  1674.             PortType pt = as.getPortType(k);
  1675.             if(
  1676.                     (pt.getProfiloCollaborazione()!=null && !pt.getProfiloCollaborazione().equals(as.getProfiloCollaborazione())) ||
  1677.                     !equals(pt.getConfermaRicezione(),as.getConfermaRicezione()) ||
  1678.                     !equals(pt.getConsegnaInOrdine(),as.getConsegnaInOrdine()) ||
  1679.                     !equals(pt.getFiltroDuplicati(),as.getFiltroDuplicati()) ||
  1680.                     !equals(pt.getIdCollaborazione(),as.getIdCollaborazione()) ||
  1681.                     !equals(pt.getIdRiferimentoRichiesta(),as.getIdRiferimentoRichiesta()) ||
  1682.                     (pt.getScadenza()!=null && !pt.getScadenza().equals(as.getScadenza()))
  1683.                     ) {
  1684.                 pt.setProfiloPT(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO);
  1685.             }else{
  1686.                 pt.setProfiloPT(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT);
  1687.                 pt.setProfiloCollaborazione(as.getProfiloCollaborazione());
  1688.                 pt.setConfermaRicezione(as.getConfermaRicezione());
  1689.                 pt.setConsegnaInOrdine(as.getConsegnaInOrdine());
  1690.                 pt.setFiltroDuplicati(as.getFiltroDuplicati());
  1691.                 pt.setIdCollaborazione(as.getIdCollaborazione());
  1692.                 pt.setIdRiferimentoRichiesta(as.getIdRiferimentoRichiesta());
  1693.                 pt.setScadenza(as.getScadenza());
  1694.             }
  1695.            
  1696.             for(int l=0; l<pt.sizeAzioneList();l++){
  1697.                 Operation op = pt.getAzione(l);
  1698.                
  1699.                 boolean ridefinitoProfiloAzioneParametri = false;
  1700.                 ProfiloCollaborazione profiloDefault = null;
  1701.                 String scadenzaDefault = null;
  1702.                 if(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO.equals(pt.getProfiloPT())) {
  1703.                     ridefinitoProfiloAzioneParametri =
  1704.                             !equals(op.getConfermaRicezione(),pt.getConfermaRicezione()) ||
  1705.                             !equals(op.getConsegnaInOrdine(),pt.getConsegnaInOrdine()) ||
  1706.                             !equals(op.getFiltroDuplicati(),pt.getFiltroDuplicati()) ||
  1707.                             !equals(op.getIdCollaborazione(),pt.getIdCollaborazione()) ||
  1708.                             !equals(op.getIdRiferimentoRichiesta(),pt.getIdRiferimentoRichiesta());
  1709.                     profiloDefault = pt.getProfiloCollaborazione();
  1710.                     scadenzaDefault = pt.getScadenza();
  1711.                 }
  1712.                 else {
  1713.                     ridefinitoProfiloAzioneParametri =
  1714.                             !equals(op.getConfermaRicezione(),as.getConfermaRicezione()) ||
  1715.                             !equals(op.getConsegnaInOrdine(),as.getConsegnaInOrdine()) ||
  1716.                             !equals(op.getFiltroDuplicati(),as.getFiltroDuplicati()) ||
  1717.                             !equals(op.getIdCollaborazione(),as.getIdCollaborazione()) ||
  1718.                             !equals(op.getIdRiferimentoRichiesta(),as.getIdRiferimentoRichiesta());
  1719.                     profiloDefault = as.getProfiloCollaborazione();
  1720.                     scadenzaDefault = as.getScadenza();
  1721.                 }
  1722.                
  1723.                 if( (op.getProfiloCollaborazione()!=null && !op.getProfiloCollaborazione().equals(profiloDefault)) ||
  1724.                         ridefinitoProfiloAzioneParametri ||
  1725.                         (op.getScadenza()!=null && !op.getScadenza().equals(scadenzaDefault))
  1726.                         ) {
  1727.                     op.setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO);
  1728.                 }else{
  1729.                     op.setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT);
  1730.                    
  1731.                     if(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO.equals(pt.getProfiloPT())) {
  1732.                         op.setProfiloCollaborazione(pt.getProfiloCollaborazione());
  1733.                         op.setConfermaRicezione(pt.getConfermaRicezione());
  1734.                         op.setConsegnaInOrdine(pt.getConsegnaInOrdine());
  1735.                         op.setFiltroDuplicati(pt.getFiltroDuplicati());
  1736.                         op.setIdCollaborazione(pt.getIdCollaborazione());
  1737.                         op.setIdRiferimentoRichiesta(pt.getIdRiferimentoRichiesta());
  1738.                         op.setScadenza(pt.getScadenza());
  1739.                     }
  1740.                     else {
  1741.                         op.setProfiloCollaborazione(as.getProfiloCollaborazione());
  1742.                         op.setConfermaRicezione(as.getConfermaRicezione());
  1743.                         op.setConsegnaInOrdine(as.getConsegnaInOrdine());
  1744.                         op.setFiltroDuplicati(as.getFiltroDuplicati());
  1745.                         op.setIdCollaborazione(as.getIdCollaborazione());
  1746.                         op.setIdRiferimentoRichiesta(as.getIdRiferimentoRichiesta());
  1747.                         op.setScadenza(as.getScadenza());
  1748.                     }
  1749.                 }
  1750.                

  1751.             }
  1752.         }
  1753.         // Devono essere impostati i comportamenti per la ridefinizione delle azioni
  1754.         for(int k=0; k<as.sizeResourceList();k++){
  1755.             if(
  1756.                     //(as.getResource(k).getProfiloCollaborazione()!=null && !as.getResource(k).getProfiloCollaborazione().equals(as.getProfiloCollaborazione())) ||
  1757.                     !equals(as.getResource(k).getConfermaRicezione(),as.getConfermaRicezione()) ||
  1758.                     !equals(as.getResource(k).getConsegnaInOrdine(),as.getConsegnaInOrdine()) ||
  1759.                     !equals(as.getResource(k).getFiltroDuplicati(),as.getFiltroDuplicati()) ||
  1760.                     !equals(as.getResource(k).getIdCollaborazione(),as.getIdCollaborazione()) ||
  1761.                     !equals(as.getResource(k).getIdRiferimentoRichiesta(),as.getIdRiferimentoRichiesta()) ||
  1762.                     (as.getResource(k).getScadenza()!=null && !as.getResource(k).getScadenza().equals(as.getScadenza()))
  1763.                     ) {
  1764.                 as.getResource(k).setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO);
  1765.             }else{
  1766.                 as.getResource(k).setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT);
  1767.                 //as.getResource(k).setProfiloCollaborazione(as.getProfiloCollaborazione());
  1768.                 as.getResource(k).setConfermaRicezione(as.getConfermaRicezione());
  1769.                 as.getResource(k).setConsegnaInOrdine(as.getConsegnaInOrdine());
  1770.                 as.getResource(k).setFiltroDuplicati(as.getFiltroDuplicati());
  1771.                 as.getResource(k).setIdCollaborazione(as.getIdCollaborazione());
  1772.                 as.getResource(k).setIdRiferimentoRichiesta(as.getIdRiferimentoRichiesta());
  1773.                 as.getResource(k).setScadenza(as.getScadenza());
  1774.             }          
  1775.         }
  1776.     }
  1777.    
  1778.     private void gestioneAccordoServizioParteComune(AccordoServizioParteComune as,boolean reset, boolean updateEnabled) throws Exception{
  1779.         as.setSuperUser(this.superUser);
  1780.         if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  1781.             impostaInformazioniRegistroDB_AccordoServizioParteComune(as);
  1782.         }
  1783.         // bytes
  1784.         this.initializeWSDLBytes(as);
  1785.         for(int k=0; k<as.sizeAllegatoList();k++){
  1786.             String fileName = as.getAllegato(k).getFile();
  1787.             String name = getNomeFile(fileName);
  1788.            
  1789.             as.getAllegato(k).setByteContenuto(this.readDocumento(fileName));
  1790.             as.getAllegato(k).setFile(name);
  1791.             as.getAllegato(k).setRuolo(RuoliDocumento.allegato.toString());
  1792.             as.getAllegato(k).setTipoProprietarioDocumento(ProprietariDocumento.accordoServizio.toString());
  1793.         }
  1794.         for(int k=0; k<as.sizeSpecificaSemiformaleList();k++){
  1795.             String fileName = as.getSpecificaSemiformale(k).getFile();
  1796.             String name = getNomeFile(fileName);
  1797.            
  1798.             as.getSpecificaSemiformale(k).setByteContenuto(this.readDocumento(fileName));
  1799.             as.getSpecificaSemiformale(k).setFile(name);
  1800.             as.getSpecificaSemiformale(k).setRuolo(RuoliDocumento.specificaSemiformale.toString());
  1801.             as.getSpecificaSemiformale(k).setTipoProprietarioDocumento(ProprietariDocumento.accordoServizio.toString());
  1802.         }
  1803.         if(as.getServizioComposto()!=null){
  1804.             for(int k=0; k<as.getServizioComposto().sizeSpecificaCoordinamentoList();k++){
  1805.                 String fileName = as.getServizioComposto().getSpecificaCoordinamento(k).getFile();
  1806.                 String name = getNomeFile(fileName);
  1807.                
  1808.                 as.getServizioComposto().getSpecificaCoordinamento(k).setByteContenuto(this.readDocumento(fileName));
  1809.                 as.getServizioComposto().getSpecificaCoordinamento(k).setFile(name);
  1810.                 as.getServizioComposto().getSpecificaCoordinamento(k).setRuolo(RuoliDocumento.specificaCoordinamento.toString());
  1811.                 as.getServizioComposto().getSpecificaCoordinamento(k).setTipoProprietarioDocumento(ProprietariDocumento.accordoServizio.toString());
  1812.             }
  1813.         }
  1814.         // protocol properties: bytes
  1815.         if(as.sizeProtocolPropertyList()>0) {
  1816.             for (ProtocolProperty pp : as.getProtocolPropertyList()) {
  1817.                 if(pp.getFile()!=null) {
  1818.                     pp.setByteFile(this.readDocumento(pp.getFile()));
  1819.                 }
  1820.             }
  1821.             if(as.sizeAzioneList()>0) {
  1822.                 for (Azione azione : as.getAzioneList()) {
  1823.                     for (ProtocolProperty pp : azione.getProtocolPropertyList()) {
  1824.                         if(pp.getFile()!=null) {
  1825.                             pp.setByteFile(this.readDocumento(pp.getFile()));
  1826.                         }
  1827.                     }
  1828.                 }
  1829.             }
  1830.             if(as.sizePortTypeList()>0) {
  1831.                 for (PortType pt : as.getPortTypeList()) {
  1832.                     for (ProtocolProperty pp : pt.getProtocolPropertyList()) {
  1833.                         if(pp.getFile()!=null) {
  1834.                             pp.setByteFile(this.readDocumento(pp.getFile()));
  1835.                         }
  1836.                     }
  1837.                     if(pt.sizeAzioneList()>0) {
  1838.                         for (Operation azione : pt.getAzioneList()) {
  1839.                             for (ProtocolProperty pp : azione.getProtocolPropertyList()) {
  1840.                                 if(pp.getFile()!=null) {
  1841.                                     pp.setByteFile(this.readDocumento(pp.getFile()));
  1842.                                 }
  1843.                             }
  1844.                         }
  1845.                     }
  1846.                 }
  1847.             }
  1848.             if(as.sizeResourceList()>0) {
  1849.                 for (Resource resource : as.getResourceList()) {
  1850.                     if(resource.getPath()!=null && !"".equals(resource.getPath())) {
  1851.                         String pathNormalizzato = null;
  1852.                         pathNormalizzato = resource.getPath().trim();
  1853.                         if(!pathNormalizzato.startsWith("/"))
  1854.                             pathNormalizzato = "/" + pathNormalizzato;
  1855.                         resource.setPath(pathNormalizzato);
  1856.                     }
  1857.                     for (ProtocolProperty pp : resource.getProtocolPropertyList()) {
  1858.                         if(pp.getFile()!=null) {
  1859.                             pp.setByteFile(this.readDocumento(pp.getFile()));
  1860.                         }
  1861.                     }
  1862.                 }
  1863.             }
  1864.         }
  1865.         if(ServiceBinding.SOAP.equals(as.getServiceBinding())) {
  1866.             if(as.getFormatoSpecifica()==null) {
  1867.                 as.setFormatoSpecifica(CostantiRegistroServizi.DEFAULT_VALUE_INTERFACE_TYPE_SOAP);
  1868.             }
  1869.         }else {
  1870.             if(as.getFormatoSpecifica()==null) {
  1871.                 as.setFormatoSpecifica(CostantiRegistroServizi.DEFAULT_VALUE_INTERFACE_TYPE_REST);
  1872.             }
  1873.         }
  1874.    
  1875.         IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromValues(as.getNome(),BeanUtilities.getSoggettoReferenteID(as.getSoggettoReferente()),as.getVersione());
  1876.         String uriAS = this.idAccordoFactory.getUriFromIDAccordo(idAccordo);
  1877.         if( (reset==false) && this.gestoreCRUD.existsAccordoServizioParteComune(idAccordo)){
  1878.             if(updateEnabled) {
  1879.                 this.log.info("Accordo di Servizio "+uriAS+" aggiornamento in corso...");
  1880.                 this.gestoreCRUD.updateAccordoServizioParteComune(as);
  1881.                 this.log.info("Accordo di Servizio "+uriAS+" aggiornato.");
  1882.             }
  1883.             else {
  1884.                 this.log.info("Accordo di Servizio "+uriAS+" non aggiornato (aggiornamento disabilitato).");
  1885.             }
  1886.         }else{
  1887.             this.log.info("Accordo di Servizio "+uriAS+" creazione in corso...");
  1888.             this.gestoreCRUD.createAccordoServizioParteComune(as);
  1889.             this.log.info("Accordo di Servizio "+uriAS+" creato.");
  1890.         }
  1891.     }
  1892.    
  1893.     public static void impostaInformazioniRegistroDB_AccordoServizioParteSpecifica_Fruitore(Fruitore fruitore){
  1894.         if(fruitore.getConnettore()!=null){
  1895.             // I nomi vengono autogenerati dal driver
  1896.             fruitore.getConnettore().setNome(null);
  1897.             // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1898.             String tipoConnettore = fruitore.getConnettore().getTipo();
  1899.             if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1900.                  !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1901.                  !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1902.                 fruitore.getConnettore().setCustom(true);
  1903.             }
  1904.             // Gestione default per connettore https
  1905.             if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1906.                 gestioneDefaultConnettoreHTTP(fruitore.getConnettore());
  1907.             }
  1908.         }
  1909.         if(fruitore.getConfigurazioneAzioneList()!=null && fruitore.sizeConfigurazioneAzioneList()>0) {
  1910.             for (int i = 0; i < fruitore.sizeConfigurazioneAzioneList(); i++) {
  1911.                 if(fruitore.getConfigurazioneAzione(i).getConnettore()!=null) {
  1912.                     // I nomi vengono autogenerati dal driver
  1913.                     fruitore.getConfigurazioneAzione(i).getConnettore().setNome(null);
  1914.                     // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1915.                     String tipoConnettore = fruitore.getConfigurazioneAzione(i).getConnettore().getTipo();
  1916.                     if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1917.                          !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1918.                          !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1919.                         fruitore.getConfigurazioneAzione(i).getConnettore().setCustom(true);
  1920.                     }
  1921.                     // Gestione default per connettore https
  1922.                     if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1923.                         gestioneDefaultConnettoreHTTP(fruitore.getConfigurazioneAzione(i).getConnettore());
  1924.                     }
  1925.                 }
  1926.             }
  1927.         }
  1928.     }
  1929.     public static void impostaInformazioniRegistroDB_AccordoServizioParteSpecifica(AccordoServizioParteSpecifica servizio){
  1930.         if(servizio.getConfigurazioneServizio()!=null && servizio.getConfigurazioneServizio().getConnettore()!=null){
  1931.             // I nomi vengono autogenerati dal driver
  1932.             servizio.getConfigurazioneServizio().getConnettore().setNome(null);
  1933.             // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1934.             String tipoConnettore = servizio.getConfigurazioneServizio().getConnettore().getTipo();
  1935.             if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1936.                  !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1937.                  !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1938.                 servizio.getConfigurazioneServizio().getConnettore().setCustom(true);
  1939.             }
  1940.             // Gestione default per connettore https
  1941.             if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1942.                 gestioneDefaultConnettoreHTTP(servizio.getConfigurazioneServizio().getConnettore());
  1943.             }
  1944.         }
  1945.         for(int k=0; k< servizio.sizeFruitoreList();k++){
  1946.             if(servizio.getFruitore(k).getConnettore()!=null){
  1947.                 impostaInformazioniRegistroDB_AccordoServizioParteSpecifica_Fruitore(servizio.getFruitore(k));
  1948.             }
  1949.         }
  1950.         if(servizio.getConfigurazioneServizio()!=null){
  1951.             for(int k=0; k< servizio.getConfigurazioneServizio().sizeConfigurazioneAzioneList();k++){
  1952.                 if(servizio.getConfigurazioneServizio().getConfigurazioneAzione(k).getConnettore()!=null){
  1953.                     // I nomi vengono autogenerati dal driver
  1954.                     servizio.getConfigurazioneServizio().getConfigurazioneAzione(k).getConnettore().setNome(null);
  1955.                     // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1956.                     String tipoConnettore = servizio.getConfigurazioneServizio().getConfigurazioneAzione(k).getConnettore().getTipo();
  1957.                     if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1958.                          !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1959.                          !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1960.                         servizio.getConfigurazioneServizio().getConfigurazioneAzione(k).getConnettore().setCustom(true);
  1961.                     }
  1962.                     // Gestione default per connettore https
  1963.                     if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1964.                         gestioneDefaultConnettoreHTTP(servizio.getConfigurazioneServizio().getConfigurazioneAzione(k).getConnettore());
  1965.                     }
  1966.                 }
  1967.             }
  1968.         }
  1969.     }
  1970.    
  1971.     public static void impostaInformazioniRegistro_AccordoServizioParteSpecifica_update(AccordoServizioParteSpecifica servizio,AccordoServizioParteSpecifica old,
  1972.             boolean mantieniFruitoriEsistenti){
  1973.         if(old.getConfigurazioneServizio()!=null && old.getConfigurazioneServizio().getConnettore()!=null){
  1974.             if(servizio.getConfigurazioneServizio()==null || servizio.getConfigurazioneServizio().getConnettore()==null){
  1975.                 if(servizio.getConfigurazioneServizio()==null){
  1976.                     servizio.setConfigurazioneServizio(new ConfigurazioneServizio());
  1977.                 }
  1978.                 servizio.getConfigurazioneServizio().setConnettore(old.getConfigurazioneServizio().getConnettore());
  1979.             }else{
  1980.                 servizio.getConfigurazioneServizio().getConnettore().setId(old.getConfigurazioneServizio().getConnettore().getId());
  1981.                 servizio.getConfigurazioneServizio().getConnettore().setNome(old.getConfigurazioneServizio().getConnettore().getNome());
  1982.             }
  1983.         }
  1984.         if(mantieniFruitoriEsistenti){
  1985.             mantieniFruitori(old, servizio);
  1986.         }
  1987.         if(servizio.sizeFruitoreList()>0){
  1988.             for (int i = 0; i < servizio.sizeFruitoreList(); i++) {
  1989.                 Fruitore fruitore = servizio.getFruitore(i);
  1990.                 // cerco fruitore nella vecchia immagine
  1991.                 for (int j = 0; j < old.sizeFruitoreList(); j++) {
  1992.                     Fruitore oldFruitore = old.getFruitore(j);
  1993.                     if(oldFruitore.getTipo().equals(fruitore.getTipo()) &&
  1994.                             oldFruitore.getNome().equals(fruitore.getNome())){
  1995.                         if(fruitore.getConnettore()==null){
  1996.                             fruitore.setConnettore(oldFruitore.getConnettore());
  1997.                         }else{
  1998.                             fruitore.getConnettore().setId(oldFruitore.getConnettore().getId());
  1999.                             fruitore.getConnettore().setNome(oldFruitore.getConnettore().getNome());
  2000.                         }      
  2001.                     }
  2002.                 }
  2003.             }
  2004.         }
  2005.     }
  2006.    
  2007.     private void gestioneServizio(AccordoServizioParteSpecifica servizio,Soggetto soggetto,boolean reset,
  2008.             boolean mantieniFruitoriEsistenti,StatiAccordo statoAccordo, boolean updateEnabled) throws Exception{
  2009.         servizio.setSuperUser(this.superUser);
  2010.         servizio.setTipoSoggettoErogatore(soggetto.getTipo());
  2011.         servizio.setNomeSoggettoErogatore(soggetto.getNome());
  2012.         if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  2013.             impostaInformazioniRegistroDB_AccordoServizioParteSpecifica(servizio);
  2014.         }
  2015.         // bytes
  2016.         this.initializeWSDLBytes(servizio);
  2017.         for(int k=0; k<servizio.sizeAllegatoList();k++){
  2018.             String fileName = servizio.getAllegato(k).getFile();
  2019.             String name = getNomeFile(fileName);
  2020.            
  2021.             servizio.getAllegato(k).setByteContenuto(this.readDocumento(fileName));
  2022.             servizio.getAllegato(k).setFile(name);
  2023.             servizio.getAllegato(k).setRuolo(RuoliDocumento.allegato.toString());
  2024.             servizio.getAllegato(k).setTipoProprietarioDocumento(ProprietariDocumento.servizio.toString());
  2025.         }
  2026.         for(int k=0; k<servizio.sizeSpecificaSemiformaleList();k++){
  2027.             String fileName = servizio.getSpecificaSemiformale(k).getFile();
  2028.             String name = getNomeFile(fileName);
  2029.            
  2030.             servizio.getSpecificaSemiformale(k).setByteContenuto(this.readDocumento(fileName));
  2031.             servizio.getSpecificaSemiformale(k).setFile(name);
  2032.             servizio.getSpecificaSemiformale(k).setRuolo(RuoliDocumento.specificaSemiformale.toString());
  2033.             servizio.getSpecificaSemiformale(k).setTipoProprietarioDocumento(ProprietariDocumento.servizio.toString());
  2034.         }
  2035.         for(int k=0; k<servizio.sizeSpecificaLivelloServizioList();k++){
  2036.             String fileName = servizio.getSpecificaLivelloServizio(k).getFile();
  2037.             String name = getNomeFile(fileName);
  2038.            
  2039.             servizio.getSpecificaLivelloServizio(k).setByteContenuto(this.readDocumento(fileName));
  2040.             servizio.getSpecificaLivelloServizio(k).setFile(name);
  2041.             servizio.getSpecificaLivelloServizio(k).setRuolo(RuoliDocumento.specificaLivelloServizio.toString());
  2042.             servizio.getSpecificaLivelloServizio(k).setTipoProprietarioDocumento(ProprietariDocumento.servizio.toString());
  2043.         }
  2044.         for(int k=0; k<servizio.sizeSpecificaSicurezzaList();k++){
  2045.             String fileName = servizio.getSpecificaSicurezza(k).getFile();
  2046.             String name = getNomeFile(fileName);
  2047.            
  2048.             servizio.getSpecificaSicurezza(k).setByteContenuto(this.readDocumento(fileName));
  2049.             servizio.getSpecificaSicurezza(k).setFile(name);
  2050.             servizio.getSpecificaSicurezza(k).setRuolo(RuoliDocumento.specificaSicurezza.toString());
  2051.             servizio.getSpecificaSicurezza(k).setTipoProprietarioDocumento(ProprietariDocumento.servizio.toString());
  2052.         }
  2053.         // protocol properties: bytes
  2054.         if(servizio.sizeProtocolPropertyList()>0) {
  2055.             for (ProtocolProperty pp : servizio.getProtocolPropertyList()) {
  2056.                 if(pp.getFile()!=null) {
  2057.                     pp.setByteFile(this.readDocumento(pp.getFile()));
  2058.                 }
  2059.             }
  2060.             if(servizio.sizeFruitoreList()>0) {
  2061.                 for (Fruitore fruitore : servizio.getFruitoreList()) {
  2062.                     if(fruitore.sizeProtocolPropertyList()>0) {
  2063.                         for (ProtocolProperty pp : fruitore.getProtocolPropertyList()) {
  2064.                             if(pp.getFile()!=null) {
  2065.                                 pp.setByteFile(this.readDocumento(pp.getFile()));
  2066.                             }
  2067.                         }
  2068.                     }
  2069.                 }
  2070.             }
  2071.         }
  2072.        
  2073.         IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  2074.         IDServizio idServizio = this.idServizioFactory.getIDServizioFromValues(servizio.getTipo(), servizio.getNome(), idSoggetto, servizio.getVersione());
  2075.         String uri = this.idServizioFactory.getUriFromIDServizio(idServizio);
  2076.         if( (reset==false) && (this.gestoreCRUD.existsAccordoServizioParteSpecifica(idServizio)) ){
  2077.             if(updateEnabled) {
  2078.                 this.log.info("Servizio "+uri+" aggiornamento in corso...");
  2079.                
  2080.                 AccordoServizioParteSpecifica old = ((IDriverRegistroServiziGet)this.gestoreCRUD).getAccordoServizioParteSpecifica(idServizio);
  2081.                 impostaInformazioniRegistro_AccordoServizioParteSpecifica_update(servizio, old, mantieniFruitoriEsistenti);
  2082.                
  2083.                 // stato package
  2084.                 if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  2085.                     aggiornatoStatoFruitori(servizio, statoAccordo);
  2086.                 }
  2087.                 this.gestoreCRUD.updateAccordoServizioParteSpecifica(servizio);
  2088.                
  2089.                 this.log.info("Servizio "+uri+" aggiornato.");
  2090.             }
  2091.             else {
  2092.                 this.log.info("Servizio "+uri+" non aggiornato (aggiornamento disabilitato).");
  2093.             }
  2094.         }else{
  2095.             this.log.info("Servizio "+uri+" creazione in corso...");
  2096.             // stato package
  2097.             if(CostantiConfigurazione.REGISTRO_DB.equals(this.tipoBEDestinazione)){
  2098.                 aggiornatoStatoFruitori(servizio, statoAccordo);
  2099.             }
  2100.             this.gestoreCRUD.createAccordoServizioParteSpecifica(servizio);
  2101.             this.log.info("Servizio "+uri+" creato.");
  2102.         }
  2103.     }
  2104.    
  2105.    

  2106. }