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.config.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.sql.PreparedStatement;
  31. import java.sql.ResultSet;
  32. import java.sql.SQLException;
  33. import java.util.HashMap;

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

  36. import org.openspcoop2.core.commons.DBUtils;
  37. import org.openspcoop2.core.commons.ProtocolFactoryReflectionUtils;
  38. import org.openspcoop2.core.config.AccessoConfigurazionePdD;
  39. import org.openspcoop2.core.config.Connettore;
  40. import org.openspcoop2.core.config.Credenziali;
  41. import org.openspcoop2.core.config.InvocazionePorta;
  42. import org.openspcoop2.core.config.InvocazionePortaGestioneErrore;
  43. import org.openspcoop2.core.config.InvocazioneServizio;
  44. import org.openspcoop2.core.config.PortaApplicativa;
  45. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  46. import org.openspcoop2.core.config.PortaDelegata;
  47. import org.openspcoop2.core.config.Property;
  48. import org.openspcoop2.core.config.RispostaAsincrona;
  49. import org.openspcoop2.core.config.ServizioApplicativo;
  50. import org.openspcoop2.core.config.Soggetto;
  51. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  52. import org.openspcoop2.core.config.constants.CredenzialeTipo;
  53. import org.openspcoop2.core.config.constants.InvocazioneServizioTipoAutenticazione;
  54. import org.openspcoop2.core.config.constants.PortaApplicativaAzioneIdentificazione;
  55. import org.openspcoop2.core.config.constants.PortaDelegataAzioneIdentificazione;
  56. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  57. import org.openspcoop2.core.config.constants.TipologiaErogazione;
  58. import org.openspcoop2.core.config.constants.TipologiaFruizione;
  59. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  60. import org.openspcoop2.core.config.driver.IDriverConfigurazioneCRUD;
  61. import org.openspcoop2.core.config.driver.IDriverConfigurazioneGet;
  62. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  63. import org.openspcoop2.core.config.driver.xml.DriverConfigurazioneXML;
  64. import org.openspcoop2.core.constants.Costanti;
  65. import org.openspcoop2.core.constants.CostantiDB;
  66. import org.openspcoop2.core.constants.TipiConnettore;
  67. import org.openspcoop2.core.id.IDPortaApplicativa;
  68. import org.openspcoop2.core.id.IDPortaDelegata;
  69. import org.openspcoop2.core.id.IDServizio;
  70. import org.openspcoop2.core.id.IDServizioApplicativo;
  71. import org.openspcoop2.core.id.IDSoggetto;
  72. import org.openspcoop2.core.mapping.DBMappingUtils;
  73. import org.openspcoop2.core.mapping.Implementation;
  74. import org.openspcoop2.core.mapping.ImplementationUtils;
  75. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  76. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  77. import org.openspcoop2.core.mapping.Subscription;
  78. import org.openspcoop2.core.mapping.SubscriptionUtils;
  79. import org.openspcoop2.core.registry.constants.ServiceBinding;
  80. import org.openspcoop2.core.registry.utils.RegistroServiziUtils;
  81. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  82. import org.openspcoop2.message.xml.ValidatoreXSD;
  83. import org.openspcoop2.message.xml.MessageXMLUtils;
  84. import org.openspcoop2.utils.CopyStream;
  85. import org.openspcoop2.utils.LoggerWrapperFactory;
  86. import org.openspcoop2.utils.certificate.KeystoreType;
  87. import org.openspcoop2.utils.sql.ISQLQueryObject;
  88. import org.openspcoop2.utils.sql.SQLObjectFactory;
  89. import org.openspcoop2.utils.xml.AbstractXMLUtils;
  90. import org.slf4j.Logger;
  91. import org.w3c.dom.Document;

  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 IDriverConfigurazioneCRUD gestoreCRUD = null;
  102.     /** 'Root' della configurazione di  OpenSPCoop. */
  103.     private org.openspcoop2.core.config.Openspcoop2 sorgenteConfigurazione;
  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.     /** Indicazione se deve essere convertita anche la configurazione */
  111.     private boolean gestioneConfigurazione;
  112.     /** Tipo del backend di destinazione */
  113.     private String tipoBEDestinazione;
  114.    
  115.     private AbstractXMLUtils xmlUtils = null;
  116.    
  117.     public XMLDataConverter(String sorgente,AccessoConfigurazionePdD destinazione,
  118.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  119.         XMLDataConverterSetup(sorgente,destinazione,
  120.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  121.                 null,null);
  122.     }
  123.     public XMLDataConverter(String sorgente,AccessoConfigurazionePdD destinazione,
  124.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  125.             Logger log) throws DriverConfigurazioneException{
  126.         XMLDataConverterSetup(sorgente,destinazione,
  127.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  128.                 log,null);
  129.     }
  130.     public XMLDataConverter(String sorgente,AccessoConfigurazionePdD destinazione,
  131.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  132.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  133.         XMLDataConverterSetup(sorgente,destinazione,
  134.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  135.                 log,logDriver);
  136.     }
  137.    
  138.     public XMLDataConverter(byte[] sorgente,AccessoConfigurazionePdD destinazione,
  139.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  140.         XMLDataConverterSetup(sorgente,destinazione,
  141.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  142.                 null,null);
  143.     }
  144.     public XMLDataConverter(byte[] sorgente,AccessoConfigurazionePdD destinazione,
  145.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  146.             Logger log) throws DriverConfigurazioneException{
  147.         XMLDataConverterSetup(sorgente,destinazione,
  148.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  149.                 log,null);
  150.     }
  151.     public XMLDataConverter(byte[] sorgente,AccessoConfigurazionePdD destinazione,
  152.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  153.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  154.         XMLDataConverterSetup(sorgente,destinazione,
  155.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  156.                 log,logDriver);
  157.     }
  158.    
  159.     public XMLDataConverter(InputStream sorgente,AccessoConfigurazionePdD destinazione,
  160.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  161.         XMLDataConverterSetup(sorgente,destinazione,
  162.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  163.                 null,null);
  164.     }
  165.     public XMLDataConverter(InputStream sorgente,AccessoConfigurazionePdD destinazione,
  166.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  167.             Logger log) throws DriverConfigurazioneException{
  168.         XMLDataConverterSetup(sorgente,destinazione,
  169.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  170.                 log,null);
  171.     }
  172.     public XMLDataConverter(InputStream sorgente,AccessoConfigurazionePdD destinazione,
  173.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  174.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  175.         XMLDataConverterSetup(sorgente,destinazione,
  176.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  177.                 log,logDriver);
  178.     }
  179.    
  180.     public XMLDataConverter(File sorgente,AccessoConfigurazionePdD destinazione,
  181.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  182.         XMLDataConverterSetup(sorgente,destinazione,
  183.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  184.                 null,null);
  185.     }
  186.     public XMLDataConverter(File sorgente,AccessoConfigurazionePdD destinazione,
  187.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  188.             Logger log) throws DriverConfigurazioneException{
  189.         XMLDataConverterSetup(sorgente,destinazione,
  190.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  191.                 log,null);
  192.     }
  193.     public XMLDataConverter(File sorgente,AccessoConfigurazionePdD destinazione,
  194.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  195.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  196.         XMLDataConverterSetup(sorgente,destinazione,
  197.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  198.                 log,logDriver);
  199.     }
  200.    
  201.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,AccessoConfigurazionePdD destinazione,
  202.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  203.         XMLDataConverterSetup(sorgente,destinazione,
  204.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  205.                 null,null);
  206.     }
  207.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,AccessoConfigurazionePdD destinazione,
  208.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  209.             Logger log) throws DriverConfigurazioneException{
  210.         XMLDataConverterSetup(sorgente,destinazione,
  211.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  212.                 log,null);
  213.     }
  214.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,AccessoConfigurazionePdD destinazione,
  215.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  216.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  217.         XMLDataConverterSetup(sorgente,destinazione,
  218.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  219.                 log,logDriver);
  220.     }
  221.    
  222.     private void XMLDataConverterSetup(Object sorgente,AccessoConfigurazionePdD destinazione,
  223.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  224.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  225.    
  226.         if(log == null)
  227.             this.log = LoggerWrapperFactory.getLogger(XMLDataConverter.class);
  228.         else
  229.             this.log = log;
  230.         this.logDriver = logDriver;
  231.        
  232.         this.gestioneConfigurazione = configurazione;
  233.         if(destinazione==null)
  234.             throw new DriverConfigurazioneException("GestoreCRUD non definito");
  235.         this.tipoBEDestinazione = destinazione.getTipo();
  236.         this.superUser = superUser;
  237.        
  238.         // Istanziazione sorgente
  239.         try{
  240.             if(sorgente instanceof org.openspcoop2.core.config.Openspcoop2){
  241.                 this.sorgenteConfigurazione = (org.openspcoop2.core.config.Openspcoop2) sorgente;
  242.             }
  243.             else if(sorgente instanceof String){
  244.                 createSorgente((String)sorgente);
  245.             }
  246.             else if (sorgente instanceof byte[]){
  247.                 createSorgente((byte[])sorgente);
  248.             }else if (sorgente instanceof InputStream){
  249.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  250.                 InputStream is = (InputStream) sorgente;
  251. //              int letti = 0;
  252. //              byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  253. //              while( (letti=is.read(reads)) != -1 ){
  254. //                  bout.write(reads,0,letti);  
  255. //              }
  256.                 CopyStream.copy(is, bout);
  257.                 bout.flush();
  258.                 bout.close();
  259.                 createSorgente(bout.toByteArray());
  260.             }else if (sorgente instanceof File){
  261.                 createSorgente(((File)sorgente).getAbsolutePath());
  262.             }
  263.         }catch(DriverConfigurazioneException d){
  264.             throw d;
  265.         }catch(Exception e){
  266.             throw new DriverConfigurazioneException("Creazione sorgente ["+sorgente.getClass().getName()+"] non riuscita: "+e.getMessage(),e);
  267.         }
  268.        
  269.         // Istanziazione CRUD
  270.         try{
  271.             if(CostantiConfigurazione.REGISTRO_DB.equals(destinazione.getTipo())){
  272.                 if(destinazione.getLocation()==null)
  273.                     throw new Exception("Location (DataSource) non definita");
  274.                 if(destinazione.getContext()==null)
  275.                     throw new Exception("Contesto di localizzazione del datasource non definito in GenericProperties");
  276.                 if(destinazione.getTipoDatabase()==null)
  277.                     throw new Exception("TipoDatabase (DataSource) non definita");
  278.                
  279.                 this.gestoreCRUD = new DriverConfigurazioneDB(destinazione.getLocation(),destinazione.getContext(),this.logDriver,
  280.                         destinazione.getTipoDatabase(),tabellaSoggettiCondivisaPddRegserv);
  281.                 if(((DriverConfigurazioneDB)this.gestoreCRUD).create)
  282.                     this.log.info("Inizializzato Configurazione DB");
  283.                 else
  284.                     throw new Exception("Configurazione DB non inizializzato");
  285.             }
  286.             else{
  287.                 throw new Exception("Tipo di configurazione CRUD non gestita: "+destinazione.getTipo());
  288.             }
  289.         }catch(Exception e){
  290.             throw new DriverConfigurazioneException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  291.         }
  292.         this.xmlUtils = MessageXMLUtils.DEFAULT;
  293.        
  294.         // Protocol initialize
  295.         try {
  296.             ProtocolFactoryReflectionUtils.initializeProtocolManager(protocolloDefault, this.log);
  297.         }catch(Exception e){
  298.             throw new DriverConfigurazioneException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  299.         }
  300.     }
  301.    
  302.    
  303.     public XMLDataConverter(String sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  304.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  305.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  306.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  307.                 null,null);
  308.     }
  309.     public XMLDataConverter(String sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  310.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  311.             Logger log) throws DriverConfigurazioneException{
  312.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  313.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  314.                 log,null);
  315.     }
  316.     public XMLDataConverter(String sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  317.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  318.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  319.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  320.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  321.                 log,logDriver);
  322.     }
  323.    
  324.     public XMLDataConverter(byte[] sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  325.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  326.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  327.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  328.                 null,null);
  329.     }
  330.     public XMLDataConverter(byte[] sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  331.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  332.             Logger log) throws DriverConfigurazioneException{
  333.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  334.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  335.                 log,null);
  336.     }
  337.     public XMLDataConverter(byte[] sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  338.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  339.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  340.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  341.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  342.                 log,logDriver);
  343.     }
  344.    
  345.     public XMLDataConverter(InputStream sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  346.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  347.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  348.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  349.                 null,null);
  350.     }
  351.     public XMLDataConverter(InputStream sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  352.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  353.             Logger log) throws DriverConfigurazioneException{
  354.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  355.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  356.                 log,null);
  357.     }
  358.     public XMLDataConverter(InputStream sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  359.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  360.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  361.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  362.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  363.                 log,logDriver);
  364.     }
  365.    
  366.     public XMLDataConverter(File sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  367.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  368.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  369.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  370.                 null,null);
  371.     }
  372.     public XMLDataConverter(File sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  373.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  374.             Logger log) throws DriverConfigurazioneException{
  375.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  376.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  377.                 log,null);
  378.     }
  379.     public XMLDataConverter(File sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  380.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  381.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  382.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  383.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  384.                 log,logDriver);
  385.     }
  386.    
  387.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  388.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  389.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  390.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  391.                 null,null);
  392.     }
  393.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  394.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  395.             Logger log) throws DriverConfigurazioneException{
  396.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  397.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  398.                 log,null);
  399.     }
  400.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  401.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  402.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  403.         XMLDataConverterSetup(sorgente,gestoreCRUD, tipoDestinazione,
  404.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  405.                 log,logDriver);
  406.     }
  407.    
  408.     private void XMLDataConverterSetup(Object sorgente,IDriverConfigurazioneCRUD gestoreCRUD,String tipoDestinazione,
  409.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  410.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  411.    
  412.         if(log == null)
  413.             this.log = LoggerWrapperFactory.getLogger(XMLDataConverter.class);
  414.         else
  415.             this.log = log;
  416.         this.logDriver = logDriver;
  417.        
  418.         this.gestioneConfigurazione = configurazione;
  419.         if(gestoreCRUD==null)
  420.             throw new DriverConfigurazioneException("GestoreCRUD non definito");
  421.         this.tipoBEDestinazione = tipoDestinazione;
  422.         this.superUser = superUser;
  423.        
  424.         // Istanziazione sorgente
  425.         try{
  426.             if(sorgente instanceof org.openspcoop2.core.config.Openspcoop2){
  427.                 this.sorgenteConfigurazione = (org.openspcoop2.core.config.Openspcoop2) sorgente;
  428.             }
  429.             else if(sorgente instanceof String){
  430.                 createSorgente((String)sorgente);
  431.             }
  432.             else if (sorgente instanceof byte[]){
  433.                 createSorgente((byte[])sorgente);
  434.             }else if (sorgente instanceof InputStream){
  435.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  436.                 InputStream is = (InputStream) sorgente;
  437. //              int letti = 0;
  438. //              byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  439. //              while( (letti=is.read(reads)) != -1 ){
  440. //                  bout.write(reads,0,letti);  
  441. //              }
  442.                 CopyStream.copy(is, bout);
  443.                 bout.flush();
  444.                 bout.close();
  445.                 createSorgente(bout.toByteArray());
  446.             }else if (sorgente instanceof File){
  447.                 createSorgente(((File)sorgente).getAbsolutePath());
  448.             }
  449.         }catch(DriverConfigurazioneException d){
  450.             throw d;
  451.         }catch(Exception e){
  452.             throw new DriverConfigurazioneException("Creazione sorgente ["+sorgente.getClass().getName()+"] non riuscita: "+e.getMessage(),e);
  453.         }
  454.        
  455.         // Istanziazione CRUD
  456.         this.gestoreCRUD = gestoreCRUD;
  457.         this.xmlUtils = MessageXMLUtils.DEFAULT;
  458.        
  459.         // Protocol initialize
  460.         try {
  461.             ProtocolFactoryReflectionUtils.initializeProtocolManager(protocolloDefault, this.log);
  462.         }catch(Exception e){
  463.             throw new DriverConfigurazioneException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  464.         }
  465.     }
  466.    
  467.    
  468.     public XMLDataConverter(String sorgente,Connection connection,String tipoDatabase,
  469.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  470.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  471.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  472.                 null,null);
  473.     }
  474.     public XMLDataConverter(String sorgente,Connection connection,String tipoDatabase,
  475.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  476.             Logger log) throws DriverConfigurazioneException{
  477.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  478.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  479.                 log,null);
  480.     }
  481.     public XMLDataConverter(String sorgente,Connection connection,String tipoDatabase,
  482.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  483.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  484.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  485.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  486.                 log,logDriver);
  487.     }
  488.    
  489.     public XMLDataConverter(byte[] sorgente,Connection connection,String tipoDatabase,
  490.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  491.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  492.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  493.                 null,null);
  494.     }
  495.     public XMLDataConverter(byte[] sorgente,Connection connection,String tipoDatabase,
  496.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  497.             Logger log) throws DriverConfigurazioneException{
  498.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  499.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  500.                 log,null);
  501.     }
  502.     public XMLDataConverter(byte[] sorgente,Connection connection,String tipoDatabase,
  503.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  504.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  505.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  506.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  507.                 log,logDriver);
  508.     }
  509.    
  510.     public XMLDataConverter(InputStream sorgente,Connection connection,String tipoDatabase,
  511.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  512.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  513.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  514.                 null,null);
  515.     }
  516.     public XMLDataConverter(InputStream sorgente,Connection connection,String tipoDatabase,
  517.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  518.             Logger log) throws DriverConfigurazioneException{
  519.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  520.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  521.                 log,null);
  522.     }
  523.     public XMLDataConverter(InputStream sorgente,Connection connection,String tipoDatabase,
  524.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  525.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  526.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  527.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  528.                 log,logDriver);
  529.     }
  530.    
  531.     public XMLDataConverter(File sorgente,Connection connection,String tipoDatabase,
  532.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  533.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  534.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  535.                 null,null);
  536.     }
  537.     public XMLDataConverter(File sorgente,Connection connection,String tipoDatabase,
  538.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  539.             Logger log) throws DriverConfigurazioneException{
  540.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  541.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  542.                 log,null);
  543.     }
  544.     public XMLDataConverter(File sorgente,Connection connection,String tipoDatabase,
  545.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  546.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  547.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  548.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  549.                 log,logDriver);
  550.     }
  551.    
  552.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,Connection connection,String tipoDatabase,
  553.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault) throws DriverConfigurazioneException{
  554.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  555.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  556.                 null,null);
  557.     }
  558.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,Connection connection,String tipoDatabase,
  559.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  560.             Logger log) throws DriverConfigurazioneException{
  561.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  562.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  563.                 log,null);
  564.     }
  565.     public XMLDataConverter(org.openspcoop2.core.config.Openspcoop2 sorgente,Connection connection,String tipoDatabase,
  566.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  567.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  568.         XMLDataConverterSetup(sorgente,connection,tipoDatabase,
  569.                 configurazione,tabellaSoggettiCondivisaPddRegserv,superUser,protocolloDefault,
  570.                 log,logDriver);
  571.     }
  572.    
  573.     private void XMLDataConverterSetup(Object sorgente,Connection connection,String tipoDatabase,
  574.             boolean configurazione,boolean tabellaSoggettiCondivisaPddRegserv,String superUser,String protocolloDefault,
  575.             Logger log,Logger logDriver) throws DriverConfigurazioneException{
  576.    
  577.         if(log == null)
  578.             this.log = LoggerWrapperFactory.getLogger(XMLDataConverter.class);
  579.         else
  580.             this.log = log;
  581.         this.logDriver = logDriver;
  582.        
  583.         this.gestioneConfigurazione = configurazione;
  584.         this.tipoBEDestinazione = CostantiConfigurazione.REGISTRO_DB.toString();
  585.         this.superUser = superUser;
  586.        
  587.         // Istanziazione sorgente
  588.         try{
  589.             if(sorgente instanceof org.openspcoop2.core.config.Openspcoop2){
  590.                 this.sorgenteConfigurazione = (org.openspcoop2.core.config.Openspcoop2) sorgente;
  591.             }
  592.             else if(sorgente instanceof String){
  593.                 createSorgente((String)sorgente);
  594.             }
  595.             else if (sorgente instanceof byte[]){
  596.                 createSorgente((byte[])sorgente);
  597.             }else if (sorgente instanceof InputStream){
  598.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  599.                 InputStream is = (InputStream) sorgente;
  600. //              int letti = 0;
  601. //              byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
  602. //              while( (letti=is.read(reads)) != -1 ){
  603. //                  bout.write(reads,0,letti);  
  604. //              }
  605.                 CopyStream.copy(is, bout);
  606.                 bout.flush();
  607.                 bout.close();
  608.                 createSorgente(bout.toByteArray());
  609.             }else if (sorgente instanceof File){
  610.                 createSorgente(((File)sorgente).getAbsolutePath());
  611.             }
  612.         }catch(DriverConfigurazioneException d){
  613.             throw d;
  614.         }catch(Exception e){
  615.             throw new DriverConfigurazioneException("Creazione sorgente ["+sorgente.getClass().getName()+"] non riuscita: "+e.getMessage(),e);
  616.         }
  617.        
  618.         // Istanziazione CRUD in version DB
  619.         try{
  620.             this.gestoreCRUD = new DriverConfigurazioneDB(connection,this.logDriver,tipoDatabase,tabellaSoggettiCondivisaPddRegserv);
  621.             if(((DriverConfigurazioneDB)this.gestoreCRUD).create)
  622.                 this.log.info("Inizializzato Configurazione DB");
  623.             else
  624.                 throw new Exception("Configurazione DB non inizializzato");
  625.         }catch(Exception e){
  626.             throw new DriverConfigurazioneException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  627.         }
  628.         this.xmlUtils = MessageXMLUtils.DEFAULT;
  629.        
  630.         // Protocol initialize
  631.         try {
  632.             ProtocolFactoryReflectionUtils.initializeProtocolManager(protocolloDefault, this.log);
  633.         }catch(Exception e){
  634.             throw new DriverConfigurazioneException("Errore durante l'istanziazione del driver di CRUD: "+e.getMessage(),e);
  635.         }
  636.     }
  637.    
  638.     private static Implementation getImplementationDefault(ServiceBinding serviceBinding, IDServizio idServizio) throws DriverConfigurazioneException{
  639.         // Protocol initialize
  640.         try{
  641.             Class<?> cProtocolFactoryManager = Class.forName("org.openspcoop2.protocol.engine.ProtocolFactoryManager");
  642.             Object protocolFactoryManager = cProtocolFactoryManager.getMethod("getInstance").invoke(null);
  643.            
  644.             String protocollo = (String) cProtocolFactoryManager.getMethod("getProtocolByOrganizationType",String.class).invoke(protocolFactoryManager,idServizio.getSoggettoErogatore().getTipo());
  645.            
  646.             Class<?> cProtocolFactory = Class.forName("org.openspcoop2.protocol.sdk.IProtocolFactory");
  647.             Object protocolFactory = cProtocolFactoryManager.getMethod("getProtocolFactoryByName",String.class).invoke(protocolFactoryManager, protocollo);
  648.            
  649.             Class<?> cProtocolIntegrationConfiguration = Class.forName("org.openspcoop2.protocol.sdk.config.IProtocolIntegrationConfiguration");
  650.             Object protocolIntegrationConfiguration = cProtocolFactory.getMethod("createProtocolIntegrationConfiguration").invoke(protocolFactory);
  651.            
  652.             org.openspcoop2.message.constants.ServiceBinding serviceBindingMessage = RegistroServiziUtils.convertToMessage(serviceBinding);
  653.            
  654.             return (Implementation) cProtocolIntegrationConfiguration.getMethod("createDefaultImplementation", org.openspcoop2.message.constants.ServiceBinding.class, IDServizio.class).
  655.                     invoke(protocolIntegrationConfiguration, serviceBindingMessage, idServizio);
  656.                        
  657.         }catch(Exception e){
  658.             throw new DriverConfigurazioneException("Errore durante l'utilizzo della protocolFactory (getImplementationDefault): "+e.getMessage(),e);
  659.         }
  660.     }
  661.     private static Subscription getSubscriptionDefault(ServiceBinding serviceBinding, IDSoggetto idFruitore, IDServizio idServizio) throws DriverConfigurazioneException{
  662.         // Protocol initialize
  663.         try{
  664.             Class<?> cProtocolFactoryManager = Class.forName("org.openspcoop2.protocol.engine.ProtocolFactoryManager");
  665.             Object protocolFactoryManager = cProtocolFactoryManager.getMethod("getInstance").invoke(null);
  666.            
  667.             String protocollo = (String) cProtocolFactoryManager.getMethod("getProtocolByOrganizationType",String.class).invoke(protocolFactoryManager,idServizio.getSoggettoErogatore().getTipo());
  668.            
  669.             Class<?> cProtocolFactory = Class.forName("org.openspcoop2.protocol.sdk.IProtocolFactory");
  670.             Object protocolFactory = cProtocolFactoryManager.getMethod("getProtocolFactoryByName",String.class).invoke(protocolFactoryManager, protocollo);
  671.            
  672.             Class<?> cProtocolIntegrationConfiguration = Class.forName("org.openspcoop2.protocol.sdk.config.IProtocolIntegrationConfiguration");
  673.             Object protocolIntegrationConfiguration = cProtocolFactory.getMethod("createProtocolIntegrationConfiguration").invoke(protocolFactory);
  674.            
  675.             org.openspcoop2.message.constants.ServiceBinding serviceBindingMessage = RegistroServiziUtils.convertToMessage(serviceBinding);
  676.            
  677.             return (Subscription) cProtocolIntegrationConfiguration.getMethod("createDefaultSubscription", org.openspcoop2.message.constants.ServiceBinding.class, IDSoggetto.class, IDServizio.class).
  678.                     invoke(protocolIntegrationConfiguration, serviceBindingMessage, idFruitore, idServizio);
  679.                        
  680.         }catch(Exception e){
  681.             throw new DriverConfigurazioneException("Errore durante l'utilizzo della protocolFactory (getSubscriptionDefault): "+e.getMessage(),e);
  682.         }
  683.     }
  684.    
  685.     private void createSorgente(String sorgente)throws DriverConfigurazioneException{
  686.         // Istanziazione Sorgente
  687.         if(sorgente==null)
  688.             throw new DriverConfigurazioneException("Sorgente non definita");
  689.        
  690.         // ValidatoreXSD
  691.         ValidatoreXSD validatoreRegistro = null;
  692.         try{
  693.             validatoreRegistro = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), this.log,DriverConfigurazioneXML.class.getResourceAsStream("/config.xsd"));
  694.         }catch (Exception e) {
  695.             throw new DriverConfigurazioneException("Riscontrato errore durante l'inizializzazione dello schema della Configurazione XML di OpenSPCoop: "+e.getMessage());
  696.         }
  697.         FileInputStream fXML = null;
  698.         try{
  699.             if(sorgente.startsWith("http://") || sorgente.startsWith("file://")){
  700.                 validatoreRegistro.valida(sorgente);  
  701.             }else{
  702.                 fXML = new FileInputStream(sorgente);
  703.                 validatoreRegistro.valida(fXML);
  704.             }
  705.         }catch (Exception e) {
  706.             throw new DriverConfigurazioneException("Riscontrato errore durante la validazione XSD del Configurazione XML di OpenSPCoop: "+e.getMessage());
  707.         }finally{
  708.             if(fXML!=null){
  709.                 try{
  710.                     fXML.close();
  711.                 }catch(Exception e){}
  712.             }
  713.         }
  714.        
  715.         try{
  716.             InputStream iStream = null;
  717.             HttpURLConnection httpConn = null;
  718.             if(sorgente.startsWith("http://") || sorgente.startsWith("file://")){
  719.                 try{
  720.                     URL url = new URL(sorgente);
  721.                     URLConnection connection = url.openConnection();
  722.                     httpConn = (HttpURLConnection) connection;
  723.                     httpConn.setRequestMethod("GET");
  724.                     httpConn.setDoOutput(true);
  725.                     httpConn.setDoInput(true);
  726.                     iStream = httpConn.getInputStream();
  727.                     if(sorgente.startsWith("http://")) {
  728.                         /**System.out.println("HTTP");*/
  729.                     }
  730.                 }catch(Exception e) {
  731.                     try{  
  732.                         if(iStream!=null)
  733.                             iStream.close();
  734.                         if(httpConn !=null)
  735.                             httpConn.disconnect();
  736.                     } catch(Exception ef) {
  737.                         // ignore
  738.                     }
  739.                     throw new DriverConfigurazioneException("Riscontrato errore durante la creazione dell'inputStream del Configurazione (HTTP) : \n\n"+e.getMessage());
  740.                 }
  741.             }else{
  742.                 try{  
  743.                     iStream = new FileInputStream(sorgente);
  744.                 }catch(java.io.FileNotFoundException e) {
  745.                     throw new DriverConfigurazioneException("Riscontrato errore durante la creazione dell'inputStream del Configurazione (FILE) : \n\n"+e.getMessage());
  746.                 }
  747.             }

  748.            
  749.             /* ---- Unmarshall del file di configurazione ---- */
  750.             try{  
  751.                 org.openspcoop2.core.config.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.config.utils.serializer.JaxbDeserializer();
  752.                 this.sorgenteConfigurazione = deserializer.readOpenspcoop2(readBytes(iStream));
  753.             } catch(Exception e) {
  754.                 try{  
  755.                     if(iStream!=null)
  756.                         iStream.close();
  757.                     if(httpConn !=null)
  758.                         httpConn.disconnect();
  759.                 } catch(Exception ef) {}
  760.                 throw new DriverConfigurazioneException("Riscontrato errore durante l'unmarshall del file di configurazione: "+e.getMessage());
  761.             }

  762.             try{  
  763.                 // Chiusura dello Stream
  764.                 if(iStream!=null)
  765.                     iStream.close();
  766.                 // Chiusura dell'eventuale connessione HTTP
  767.                 if(httpConn !=null)
  768.                     httpConn.disconnect();
  769.             } catch(Exception e) {
  770.                 throw new DriverConfigurazioneException("Riscontrato errore durante la chiusura dell'Input Stream: "+e.getMessage());
  771.             }
  772.            
  773.         } catch(Exception e) {
  774.             throw new DriverConfigurazioneException("Riscontrato errore durante l'istanziazione del registro: "+e.getMessage(),e);
  775.         }
  776.     }
  777.    
  778.     private InputStream readBytes(InputStream is) throws Exception{
  779.         // Leggo il data[] in modo da correggere gli eventuali entity imports
  780.         this.xmlUtils = MessageXMLUtils.DEFAULT;
  781.         byte[] b = new byte[0];
  782.         try {
  783.             Document d = this.xmlUtils.newDocument(is);
  784.             String xml = this.xmlUtils.toString(d, true);
  785.             xml = org.openspcoop2.utils.Utilities.eraserXmlAttribute(xml, "xml:base=");
  786.             b = xml.getBytes();
  787.             return new ByteArrayInputStream(b);
  788.         } catch (Exception e) {
  789.             e.printStackTrace(System.err);
  790.             throw e;
  791.         }
  792.     }
  793.    
  794.     private void createSorgente(byte[] sorgente)throws DriverConfigurazioneException{
  795.         // Istanziazione Sorgente
  796.         if(sorgente==null)
  797.             throw new DriverConfigurazioneException("Sorgente non definita");
  798.        
  799.         // ValidatoreXSD
  800.         ValidatoreXSD validatoreRegistro = null;
  801.         try{
  802.             validatoreRegistro = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), this.log,DriverConfigurazioneXML.class.getResourceAsStream("/config.xsd"));
  803.         }catch (Exception e) {
  804.             throw new DriverConfigurazioneException("Riscontrato errore durante l'inizializzazione dello schema della Configurazione XML di OpenSPCoop: "+e.getMessage());
  805.         }
  806.         try{
  807.             validatoreRegistro.valida(new ByteArrayInputStream(sorgente));
  808.         }catch (Exception e) {
  809.             throw new DriverConfigurazioneException("Riscontrato errore durante la validazione XSD del Configurazione XML di OpenSPCoop: "+e.getMessage());
  810.         }
  811.        
  812.         InputStream iStream = null;        
  813.         try{
  814.             try{  
  815.                 iStream = new ByteArrayInputStream(sorgente);
  816.             }catch(Exception e) {
  817.                 throw new DriverConfigurazioneException("Riscontrato errore durante la creazione dell'inputStreamReader della Configurazione : \n\n"+e.getMessage());
  818.             }
  819.            



  820.             /* ---- Unmarshall del file di configurazione ---- */
  821.             try{  
  822.                 org.openspcoop2.core.config.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.config.utils.serializer.JaxbDeserializer();
  823.                 this.sorgenteConfigurazione = deserializer.readOpenspcoop2(readBytes(iStream));
  824.             } catch(Exception e) {
  825.                 try{  
  826.                     if(iStream!=null)
  827.                         iStream.close();
  828.                 } catch(Exception ef) {
  829.                     // close
  830.                 }
  831.                 throw new DriverConfigurazioneException("Riscontrato errore durante l'unmarshall del file di configurazione: "+e.getMessage());
  832.             }
  833.            
  834.         } catch(Exception e) {
  835.             throw new DriverConfigurazioneException("Riscontrato errore durante l'istanziazione del registro: "+e.getMessage(),e);
  836.         }finally {
  837.             try{  
  838.                 // Chiusura dello Stream
  839.                 if(iStream!=null)
  840.                     iStream.close();
  841.             } catch(Exception e) {
  842.                 // Ignore
  843.             }
  844.         }
  845.     }
  846.    
  847.     // Per motivi di dipendenze di compilazione non e' possibile usare  IDServizioFactory
  848.     @SuppressWarnings("deprecation")
  849.     private IDServizio toIdServizio(PortaDelegata pd) {
  850.         IDServizio idServizio = new IDServizio();
  851.         idServizio.setTipo(pd.getServizio().getTipo());
  852.         idServizio.setNome(pd.getServizio().getNome());
  853.         idServizio.setVersione(pd.getServizio().getVersione());
  854.         idServizio.setSoggettoErogatore(new IDSoggetto(pd.getSoggettoErogatore().getTipo(), pd.getSoggettoErogatore().getNome()));
  855.         return idServizio;
  856.     }
  857.     @SuppressWarnings("deprecation")
  858.     private IDServizio toIdServizio(PortaApplicativa pa) {
  859.         IDServizio idServizio = new IDServizio();
  860.         idServizio.setTipo(pa.getServizio().getTipo());
  861.         idServizio.setNome(pa.getServizio().getNome());
  862.         idServizio.setVersione(pa.getServizio().getVersione());
  863.         idServizio.setSoggettoErogatore(new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario()));
  864.         return idServizio;
  865.     }
  866.    
  867.     public void convertXML(boolean reset,boolean aggiornamentoSoggetti, boolean createMappingErogazioneFruizione) throws DriverConfigurazioneException{
  868.         convertXML(reset, aggiornamentoSoggetti, createMappingErogazioneFruizione, true);
  869.     }
  870.     public void convertXML(boolean reset,boolean aggiornamentoSoggetti, boolean createMappingErogazioneFruizione, boolean updateEnabled) throws DriverConfigurazioneException{
  871.        
  872.         // Reset
  873.         if(reset){
  874.             try{
  875.                 this.log.info("Configurazione, reset in corso (Reset configurazione:"+this.gestioneConfigurazione+")...");
  876.                 this.gestoreCRUD.reset(this.gestioneConfigurazione);
  877.                 this.log.info("Configurazione, reset effettuato.");
  878.             }catch(Exception e){
  879.                 e.printStackTrace(System.err);
  880.                 throw new DriverConfigurazioneException("Reset del Configurazione non riuscita: "+e.getMessage(),e);
  881.             }
  882.         }
  883.        
  884.        
  885.         // Soggetti
  886.         try{
  887.             for(int i=0; i<this.sorgenteConfigurazione.sizeSoggettoList(); i++){
  888.                 Soggetto soggetto = this.sorgenteConfigurazione.getSoggetto(i);
  889.                 soggetto.setSuperUser(this.superUser);
  890.                
  891.                 // TODO GESTIRE TRAMITE FACTORY?        
  892.                 // Non e' possibile farlo in questo punto, non avendo i protocolli
  893.                 // Gestirlo prima o dopo quando si e' in possesso della protocol factory.
  894. //              if(CostantiConfigurazione.CONFIGURAZIONE_DB.equals(this.tipoBEDestinazione)){
  895. //                  if(soggetto.getIdentificativoPorta()==null)
  896. //                      soggetto.setIdentificativoPorta(soggetto.getNome()+"SPCoopIT");
  897. //              }
  898.                
  899.                 IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  900.                 if( (reset==false) && this.gestoreCRUD.existsSoggetto(idSoggetto)){
  901.                     if(aggiornamentoSoggetti){
  902.                         if(updateEnabled) {
  903.                             this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornamento in corso...");
  904.                             this.gestoreCRUD.updateSoggetto(soggetto);
  905.                             this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornato.");
  906.                         }
  907.                         else {
  908.                             this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" non aggiornato (aggiornamento disabilitato).");
  909.                         }
  910.                     }
  911.                 }else{
  912.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creazione in corso...");
  913.                     this.gestoreCRUD.createSoggetto(soggetto);
  914.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creato.");
  915.                 }
  916.             }
  917.         }catch(Exception e){
  918.             e.printStackTrace(System.err);
  919.             throw new DriverConfigurazioneException("Errore durante la conversione XML dei soggetti: "+e.getMessage(),e);
  920.         }
  921.        
  922.         // Servizi Applicativi
  923.         try{
  924.             for(int i=0; i<this.sorgenteConfigurazione.sizeSoggettoList(); i++){
  925.                 Soggetto soggetto = this.sorgenteConfigurazione.getSoggetto(i);
  926.                 for(int j=0;j<soggetto.sizeServizioApplicativoList();j++){
  927.                     ServizioApplicativo servizioApplicativo = soggetto.getServizioApplicativo(j);
  928.                     this.addServizioApplicativo(servizioApplicativo,soggetto,null,reset, updateEnabled);                
  929.                 }
  930.             }
  931.         }catch(Exception e){
  932.             e.printStackTrace(System.err);
  933.             throw new DriverConfigurazioneException("Errore durante la conversione XML dei servizi applicativi: "+e.getMessage(),e);
  934.         }
  935.        
  936.         // Porte Delegate
  937.         try{
  938.             for(int i=0; i<this.sorgenteConfigurazione.sizeSoggettoList(); i++){
  939.                 Soggetto soggetto = this.sorgenteConfigurazione.getSoggetto(i);
  940.                 HashMap<IDPortaDelegata, PortaDelegata> listPDModificare = new  HashMap<>();
  941.                 for(int j=0;j<soggetto.sizePortaDelegataList();j++){
  942.                     PortaDelegata pd = soggetto.getPortaDelegata(j);
  943.                    
  944.                     pd.setTipoSoggettoProprietario(soggetto.getTipo());
  945.                     pd.setNomeSoggettoProprietario(soggetto.getNome());
  946.                    
  947.                     impostaInformazioniConfigurazione_PortaDelegata(pd);
  948.                    
  949.                     IDPortaDelegata idPD = new IDPortaDelegata();
  950.                     idPD.setNome(pd.getNome());        
  951.                     if( (reset==false) && this.gestoreCRUD.existsPortaDelegata(idPD)){
  952.                         if(updateEnabled) {
  953.                             this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornamento in corso...");
  954.                             this.gestoreCRUD.updatePortaDelegata(pd);
  955.                             this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornato.");
  956.                         }
  957.                         else {
  958.                             this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" non aggiornato (aggiornamento disabilitato).");
  959.                         }
  960.                     }else{
  961.                         this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creazione in corso...");
  962.                         this.gestoreCRUD.createPortaDelegata(pd);
  963.                         this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creato.");
  964.                     }
  965.                    
  966.                     if(createMappingErogazioneFruizione && this.gestoreCRUD instanceof DriverConfigurazioneDB) {
  967.                         DriverConfigurazioneDB driver = (DriverConfigurazioneDB) this.gestoreCRUD;
  968.                         Connection con = null;
  969.                         try {
  970.                             con = driver.getConnection("XMLDataConverter.mappingFruizione");
  971.                             IDSoggetto idFruitore = new IDSoggetto(soggetto.getTipo(), soggetto.getNome());
  972.                             IDServizio idServizio = toIdServizio(pd);
  973.                             boolean existsMapping = DBMappingUtils.existsMappingFruizione(idServizio, idFruitore, idPD, con, driver.getTipoDB());
  974.                             if(!existsMapping) {
  975.                                 boolean isDefault = false;
  976.                                 String nomeMapping = null;
  977.                                 boolean create = false;
  978.                                 if(SubscriptionUtils.isPortaDelegataUtilizzabileComeDefault(pd)) {
  979.                                     nomeMapping = SubscriptionUtils.getDefaultMappingName();
  980.                                     isDefault = true;
  981.                                     if(DBMappingUtils.existsIDPortaDelegataAssociataDefault(idServizio, idFruitore, con, driver.getTipoDB())==false) {
  982.                                         create = true;
  983.                                     }
  984.                                 }
  985.                                 else {
  986.                                     if(PortaDelegataAzioneIdentificazione.DELEGATED_BY.equals(pd.getAzione().getIdentificazione())) {
  987.                                         // gia' nel nuovo formato devo solo creare il mapping che per qualche motivo si è perso
  988.                                         if(pd.getAzione().sizeAzioneDelegataList()<=0) {
  989.                                             this.log.error("Trovata porta delegata "+pd.getNome()+"] con un'identificazione dell'azione delegata senza pero' possedere azioni delegate");
  990.                                             create=false;
  991.                                         }
  992.                                         else {
  993.                                             String nomeAzione = pd.getAzione().getAzioneDelegata(0); // utilizzo un'azione a caso.
  994.                                             nomeMapping = nomeAzione;
  995.                                             idServizio.setAzione(nomeAzione);
  996.                                             if(DBMappingUtils.existsIDPortaDelegataAssociataAzione(idServizio, idFruitore, con, driver.getTipoDB())==false) {
  997.                                                 create = true;
  998.                                             }
  999.                                         }
  1000.                                     }
  1001.                                     else {
  1002.                                         nomeMapping = pd.getAzione().getNome();
  1003.                                         if(nomeMapping!=null && !"".equals(nomeMapping)) {
  1004.                                             idServizio.setAzione(pd.getAzione().getNome());
  1005.                                             if(DBMappingUtils.existsIDPortaDelegataAssociataAzione(idServizio, idFruitore, con, driver.getTipoDB())==false) {
  1006.                                                 create = true;
  1007.                                                
  1008.                                                 // modifico porta applicativa adeguandola alla nuova specifica
  1009.                                                 SubscriptionUtils.setAzioneDelegate(pd,
  1010.                                                         null, // nome porta delegante lo imposto dopo aver trovato la porta di default.
  1011.                                                         pd.getAzione().getNome());
  1012.                                                
  1013.                                                 listPDModificare.put(idPD, pd);
  1014.                                             }
  1015.                                         }
  1016.                                     }
  1017.                                 }
  1018.                                 if(create) {
  1019.                                     this.log.info("Creazione mapping di fruizione (nome:"+nomeMapping+" default:"+isDefault+") tra Porta delegata ["+pd.getNome()+"], fruitore ["+idFruitore+"] e servizio ["+idServizio+"] creazione in corso...");
  1020.                                     DBMappingUtils.createMappingFruizione(nomeMapping, isDefault ? Costanti.MAPPING_FRUIZIONE_PD_DESCRIZIONE_DEFAULT : nomeMapping,
  1021.                                             isDefault, idServizio, idFruitore, idPD, con, driver.getTipoDB());
  1022.                                     this.log.info("Creazione mapping di fruizione (nome:"+nomeMapping+" default:"+isDefault+") tra Porta delegata ["+pd.getNome()+"], fruitore ["+idFruitore+"] e servizio ["+idServizio+"] creato.");
  1023.                                 }
  1024.                                
  1025.                             }
  1026.                         }finally {
  1027.                             driver.releaseConnection(con);
  1028.                         }
  1029.                     }
  1030.                 }
  1031.                 if(listPDModificare!=null && listPDModificare.size()>0) {
  1032.                     DriverConfigurazioneDB driver = (DriverConfigurazioneDB) this.gestoreCRUD;
  1033.                     Connection con = null;
  1034.                     try {
  1035.                         con = driver.getConnection("XMLDataConverter.mappingFruizione");
  1036.                         for (IDPortaDelegata idPD : listPDModificare.keySet()) {
  1037.                             PortaDelegata pd = listPDModificare.get(idPD);
  1038.                            
  1039.                             IDSoggetto idFruitore = new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario());
  1040.                             IDServizio idServizio = this.toIdServizio(pd);
  1041.                             IDPortaDelegata idPDDefault = DBMappingUtils.getIDPortaDelegataAssociataDefault(idServizio, idFruitore, con, driver.getTipoDB());
  1042.                            
  1043.                             if(idPDDefault==null) {
  1044.                                 ServiceBinding serviceBinding = readServiceBinding(idServizio, con);
  1045.                                 Subscription subcription = XMLDataConverter.getSubscriptionDefault(serviceBinding, idFruitore, idServizio);
  1046.                                 PortaDelegata pdDefault = subcription.getPortaDelegata();
  1047.                                 MappingFruizionePortaDelegata mapping = subcription.getMapping();
  1048.                                 idPDDefault = mapping.getIdPortaDelegata();
  1049.                                
  1050.                                 if(this.gestoreCRUD.existsPortaDelegata(idPDDefault) == false) {
  1051.                                     // creo porta delegata standard
  1052.                                     this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creazione delegante ["+pdDefault.getNome()+"] in corso...");
  1053.                                     this.gestoreCRUD.createPortaDelegata(pdDefault);
  1054.                                     this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creazione delegante ["+pdDefault.getNome()+"].");
  1055.                                 }
  1056.                                
  1057.                                 this.log.info("Creazione mapping di fruizione di default (nome:"+mapping.getNome()+" default:"+mapping.isDefault()+") tra Porta delegata ["+pdDefault.getNome()+"], fruitore ["+idFruitore+"] e servizio ["+idServizio+"] creazione delegante in corso...");
  1058.                                 DBMappingUtils.createMappingFruizione(mapping.getNome(), mapping.getDescrizione(), mapping.isDefault(), idServizio, idFruitore, idPDDefault, con, driver.getTipoDB());
  1059.                                 this.log.info("Creazione mapping di fruizione di default (nome:"+mapping.getNome()+" default:"+mapping.isDefault()+") tra Porta delegata ["+pdDefault.getNome()+"], fruitore ["+idFruitore+"] e servizio ["+idServizio+"] creato delegante.");
  1060.                             }
  1061.                            
  1062.                             pd.getAzione().setNomePortaDelegante(idPDDefault.getNome());
  1063.                            
  1064.                             // comunque devo aggiornare i dati per delegatedBy
  1065.                             this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornamento per nomeDelegante in corso...");
  1066.                             this.gestoreCRUD.updatePortaDelegata(pd);
  1067.                             this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornato per nomeDelegante.");
  1068.                         }
  1069.                     }finally {
  1070.                         driver.releaseConnection(con);
  1071.                     }
  1072.                 }
  1073.             }
  1074.         }catch(Exception e){
  1075.             e.printStackTrace(System.err);
  1076.             throw new DriverConfigurazioneException("Errore durante la conversione XML delle porte delegate: "+e.getMessage(),e);
  1077.         }
  1078.        
  1079.         // Porte Applicative
  1080.         try{
  1081.             for(int i=0; i<this.sorgenteConfigurazione.sizeSoggettoList(); i++){
  1082.                 Soggetto soggetto = this.sorgenteConfigurazione.getSoggetto(i);
  1083.                 HashMap<IDPortaApplicativa, PortaApplicativa> listPAModificare = new  HashMap<>();
  1084.                 for(int j=0;j<soggetto.sizePortaApplicativaList();j++){
  1085.                     PortaApplicativa pa = soggetto.getPortaApplicativa(j);
  1086.                    
  1087.                     pa.setTipoSoggettoProprietario(soggetto.getTipo());
  1088.                     pa.setNomeSoggettoProprietario(soggetto.getNome());
  1089.                    
  1090.                     impostaInformazioniConfigurazione_PortaApplicativa(pa);
  1091.                    
  1092.                     IDPortaApplicativa idPA = new IDPortaApplicativa();
  1093.                     idPA.setNome(pa.getNome());
  1094.                     if( (reset==false) && this.gestoreCRUD.existsPortaApplicativa(idPA)){
  1095.                         if(updateEnabled) {
  1096.                             this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornamento in corso...");
  1097.                             this.gestoreCRUD.updatePortaApplicativa(pa);
  1098.                             this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornato.");
  1099.                         }
  1100.                         else {
  1101.                             this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" non aggiornato (aggiornamento disabilitato).");
  1102.                         }
  1103.                     }else{
  1104.                         this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creazione in corso...");
  1105.                         this.gestoreCRUD.createPortaApplicativa(pa);
  1106.                         this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creato.");
  1107.                     }
  1108.                    
  1109.                     if(createMappingErogazioneFruizione && this.gestoreCRUD instanceof DriverConfigurazioneDB) {
  1110.                         DriverConfigurazioneDB driver = (DriverConfigurazioneDB) this.gestoreCRUD;
  1111.                         Connection con = null;
  1112.                         try {
  1113.                             con = driver.getConnection("XMLDataConverter.mappingErogazione");
  1114.                             IDServizio idServizio = this.toIdServizio(pa);
  1115.                             boolean existsMapping = DBMappingUtils.existsMappingErogazione(idServizio, idPA, con, driver.getTipoDB());
  1116.                             if(!existsMapping) {
  1117.                                 boolean isDefault = false;
  1118.                                 String nomeMapping = null;
  1119.                                 boolean create = false;
  1120.                                 if(ImplementationUtils.isPortaApplicativaUtilizzabileComeDefault(pa)) {
  1121.                                     nomeMapping = ImplementationUtils.getDefaultMappingName();
  1122.                                     isDefault = true;
  1123.                                     if(DBMappingUtils.existsIDPortaApplicativaAssociataDefault(idServizio, con, driver.getTipoDB())==false) {
  1124.                                         create = true;
  1125.                                     }
  1126.                                 }
  1127.                                 else {
  1128.                                     if(PortaApplicativaAzioneIdentificazione.DELEGATED_BY.equals(pa.getAzione().getIdentificazione())) {
  1129.                                         // gia' nel nuovo formato devo solo creare il mapping che per qualche motivo si è perso
  1130.                                         if(pa.getAzione().sizeAzioneDelegataList()<=0) {
  1131.                                             this.log.error("Trovata porta applicativa "+pa.getNome()+"] con un'identificazione dell'azione delegata senza pero' possedere azioni delegate");
  1132.                                             create=false;
  1133.                                         }
  1134.                                         else {
  1135.                                             String nomeAzione = pa.getAzione().getAzioneDelegata(0); // utilizzo un'azione a caso.
  1136.                                             nomeMapping = nomeAzione;
  1137.                                             idServizio.setAzione(nomeAzione);
  1138.                                             if(DBMappingUtils.existsIDPortaApplicativaAssociataAzione(idServizio, con, driver.getTipoDB())==false) {
  1139.                                                 create = true;
  1140.                                             }
  1141.                                         }
  1142.                                     }
  1143.                                     else {
  1144.                                         nomeMapping = pa.getAzione().getNome();
  1145.                                         if(nomeMapping!=null && !"".equals(nomeMapping)) {
  1146.                                             idServizio.setAzione(pa.getAzione().getNome());
  1147.                                             if(DBMappingUtils.existsIDPortaApplicativaAssociataAzione(idServizio, con, driver.getTipoDB())==false) {
  1148.                                                 create = true;
  1149.                                                
  1150.                                                 // modifico porta applicativa adeguandola alla nuova specifica
  1151.                                                 ImplementationUtils.setAzioneDelegate(pa,
  1152.                                                         null, // nome porta delegante lo imposto dopo aver trovato la porta di default.
  1153.                                                         pa.getAzione().getNome());

  1154.                                                 listPAModificare.put(idPA, pa);
  1155.                                             }
  1156.                                         }
  1157.                                     }
  1158.                                 }
  1159.                                 if(create) {
  1160.                                     this.log.info("Creazione mapping di erogazione (nome:"+nomeMapping+" default:"+isDefault+") tra Porta Applicativa ["+pa.getNome()+"] e servizio ["+idServizio+"] creazione in corso...");
  1161.                                     DBMappingUtils.createMappingErogazione(nomeMapping, isDefault ? Costanti.MAPPING_EROGAZIONE_PA_DESCRIZIONE_DEFAULT : nomeMapping,
  1162.                                             isDefault, idServizio, idPA, con, driver.getTipoDB());
  1163.                                     this.log.info("Creazione mapping di erogazione (nome:"+nomeMapping+" default:"+isDefault+") tra Porta Applicativa ["+pa.getNome()+"] e servizio ["+idServizio+"] creato.");
  1164.                                 }
  1165.                                
  1166.                             }
  1167.                         }finally {
  1168.                             driver.releaseConnection(con);
  1169.                         }
  1170.                     }
  1171.                 }
  1172.                 if(listPAModificare!=null && listPAModificare.size()>0) {
  1173.                     DriverConfigurazioneDB driver = (DriverConfigurazioneDB) this.gestoreCRUD;
  1174.                     Connection con = null;
  1175.                     try {
  1176.                         con = driver.getConnection("XMLDataConverter.mappingErogazione");
  1177.                         for (IDPortaApplicativa idPA : listPAModificare.keySet()) {
  1178.                             PortaApplicativa pa = listPAModificare.get(idPA);
  1179.                            
  1180.                             IDServizio idServizio = this.toIdServizio(pa);
  1181.                             IDPortaApplicativa idPADefault = DBMappingUtils.getIDPortaApplicativaAssociataDefault(idServizio, con, driver.getTipoDB());
  1182.                            
  1183.                             if(idPADefault==null) {
  1184.                                 // Creo una porta applicativa automaticamente simile a quella delegatedBy
  1185.                                
  1186.                                 ServiceBinding serviceBinding = readServiceBinding(idServizio, con);
  1187.                                 Implementation implementation = XMLDataConverter.getImplementationDefault(serviceBinding, idServizio);
  1188.                                 PortaApplicativa paDefault = implementation.getPortaApplicativa();
  1189.                                
  1190.                                 // associo sa erogatore della pa di partenza
  1191.                                 if(pa.sizeServizioApplicativoList()>0) {
  1192.                                     for (PortaApplicativaServizioApplicativo paSA : pa.getServizioApplicativoList()) {
  1193.                                         paDefault.addServizioApplicativo(paSA);
  1194.                                     }
  1195.                                 }
  1196.                                
  1197.                                 MappingErogazionePortaApplicativa mapping = implementation.getMapping();
  1198.                                 idPADefault = mapping.getIdPortaApplicativa();
  1199.                                 if(this.gestoreCRUD.existsPortaApplicativa(idPADefault) == false) {
  1200.                                     // creo porta applicativa standard
  1201.                                     this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creazione delegante ["+paDefault.getNome()+"] in corso...");
  1202.                                     this.gestoreCRUD.createPortaApplicativa(paDefault);
  1203.                                     this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" creazione delegante ["+paDefault.getNome()+"].");
  1204.                                 }
  1205.                                
  1206.                                 this.log.info("Creazione mapping di erogazione di default (nome:"+mapping.getNome()+" default:"+mapping.isDefault()+") tra Porta Applicativa ["+paDefault.getNome()+"] e servizio ["+idServizio+"] creazione delegante in corso...");
  1207.                                 DBMappingUtils.createMappingErogazione(mapping.getNome(), mapping.getDescrizione(), mapping.isDefault(), idServizio, idPADefault, con, driver.getTipoDB());
  1208.                                 this.log.info("Creazione mapping di erogazione di default (nome:"+mapping.getNome()+" default:"+mapping.isDefault()+") tra Porta Applicativa ["+paDefault.getNome()+"] e servizio ["+idServizio+"] creato delegante.");
  1209.                        
  1210.                             }
  1211.                            
  1212.                             pa.getAzione().setNomePortaDelegante(idPADefault.getNome());
  1213.                            
  1214.                             // comunque devo aggiornare i dati per delegatedBy
  1215.                             this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornamento per nomeDelegante in corso...");
  1216.                             this.gestoreCRUD.updatePortaApplicativa(pa);
  1217.                             this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" aggiornato per nomeDelegante.");
  1218.                         }
  1219.                     }finally {
  1220.                         driver.releaseConnection(con);
  1221.                     }
  1222.                 }
  1223.             }
  1224.         }catch(Exception e){
  1225.             e.printStackTrace(System.err);
  1226.             throw new DriverConfigurazioneException("Errore durante la conversione XML delle porte applicative: "+e.getMessage(),e);
  1227.         }
  1228.        
  1229.        
  1230.         if(this.gestioneConfigurazione){
  1231.             // RoutingTable
  1232.             try{
  1233.                 this.log.info("Routing Table, creazione/aggiornamento in corso...");
  1234.                 if(this.sorgenteConfigurazione.getConfigurazione()!=null &&
  1235.                         this.sorgenteConfigurazione.getConfigurazione().getRoutingTable()!=null ){
  1236.                     if(reset){
  1237.                         this.gestoreCRUD.createRoutingTable(this.sorgenteConfigurazione.getConfigurazione().getRoutingTable());
  1238.                         this.log.info("Routing Table, creazione effettuata.");
  1239.                     }
  1240.                     else{
  1241.                         if(updateEnabled) {
  1242.                             this.gestoreCRUD.updateRoutingTable(this.sorgenteConfigurazione.getConfigurazione().getRoutingTable());
  1243.                             this.log.info("Routing Table, aggiornamento effettuato.");
  1244.                         }
  1245.                         else {
  1246.                             this.log.info("Routing Table, non aggiornato (aggiornamento disabilitato).");
  1247.                         }
  1248.                     }
  1249.                 }
  1250.                
  1251.             }catch(Exception e){
  1252.                 e.printStackTrace(System.err);
  1253.                 throw new DriverConfigurazioneException("Errore durante la conversione XML della routing table: "+e.getMessage(),e);
  1254.             }
  1255.        
  1256.             // AccessoRegistro
  1257.             try{
  1258.                 this.log.info("Accesso registro, creazione in corso...");
  1259.                 if(this.sorgenteConfigurazione.getConfigurazione()!=null &&
  1260.                         this.sorgenteConfigurazione.getConfigurazione().getAccessoRegistro()!=null){
  1261.                     if(reset){
  1262.                         this.gestoreCRUD.createAccessoRegistro(this.sorgenteConfigurazione.getConfigurazione().getAccessoRegistro());
  1263.                         this.log.info("Accesso registro, creazione effettuata.");
  1264.                     }
  1265.                     else{
  1266.                         if(updateEnabled) {
  1267.                             this.gestoreCRUD.updateAccessoRegistro(this.sorgenteConfigurazione.getConfigurazione().getAccessoRegistro());
  1268.                             this.log.info("Accesso registro, aggiornamento effettuato.");
  1269.                         }
  1270.                         else {
  1271.                             this.log.info("Accesso registro, non aggiornato (aggiornamento disabilitato).");
  1272.                         }
  1273.                     }                      
  1274.                 }
  1275.            
  1276.             }catch(Exception e){
  1277.                 e.printStackTrace(System.err);
  1278.                 throw new DriverConfigurazioneException("Errore durante la conversione XML dei dati di accesso al registro: "+e.getMessage(),e);
  1279.             }
  1280.            
  1281.             // GestioneErrore di Cooperazione
  1282.             try{
  1283.                 this.log.info("GestioneErrore, creazione in corso...");
  1284.                 if(this.sorgenteConfigurazione.getConfigurazione()!=null &&
  1285.                         this.sorgenteConfigurazione.getConfigurazione().getGestioneErrore()!=null &&
  1286.                         this.sorgenteConfigurazione.getConfigurazione().getGestioneErrore().getComponenteCooperazione()!=null){
  1287.                    
  1288.                     if(reset){
  1289.                         this.gestoreCRUD.createGestioneErroreComponenteCooperazione(this.sorgenteConfigurazione.getConfigurazione().getGestioneErrore().getComponenteCooperazione());
  1290.                         this.log.info("GestioneErrore, creazione effettuata.");
  1291.                     }
  1292.                     else{
  1293.                         if(updateEnabled) {
  1294.                             this.gestoreCRUD.updateGestioneErroreComponenteCooperazione(this.sorgenteConfigurazione.getConfigurazione().getGestioneErrore().getComponenteCooperazione());
  1295.                             this.log.info("GestioneErrore, aggiornamento effettuato.");
  1296.                         }
  1297.                         else {
  1298.                             this.log.info("GestioneErrore, non aggiornato (aggiornamento disabilitato).");
  1299.                         }
  1300.                     }
  1301.                                
  1302.                 }
  1303.                
  1304.             }catch(Exception e){
  1305.                 e.printStackTrace(System.err);
  1306.                 throw new DriverConfigurazioneException("Errore durante la conversione XML dei dati di gestione dell'errore del connettore per il componente di cooperazione: "+
  1307.                         e.getMessage(),e);
  1308.             }
  1309.            
  1310.             // GestioneErrore di Integrazione
  1311.             try{
  1312.                 this.log.info("GestioneErrore, creazione in corso...");
  1313.                 if(this.sorgenteConfigurazione.getConfigurazione()!=null &&
  1314.                         this.sorgenteConfigurazione.getConfigurazione().getGestioneErrore()!=null &&
  1315.                         this.sorgenteConfigurazione.getConfigurazione().getGestioneErrore().getComponenteIntegrazione()!=null){
  1316.                    
  1317.                     if(reset){
  1318.                         this.gestoreCRUD.createGestioneErroreComponenteIntegrazione(this.sorgenteConfigurazione.getConfigurazione().getGestioneErrore().getComponenteIntegrazione());
  1319.                         this.log.info("GestioneErrore, creazione effettuata.");
  1320.                     }
  1321.                     else{
  1322.                         if(updateEnabled) {
  1323.                             this.gestoreCRUD.updateGestioneErroreComponenteIntegrazione(this.sorgenteConfigurazione.getConfigurazione().getGestioneErrore().getComponenteIntegrazione());
  1324.                             this.log.info("GestioneErrore, aggiornamento effettuato.");
  1325.                         }
  1326.                         else {
  1327.                             this.log.info("GestioneErrore, non aggiornato (aggiornamento disabilitato).");
  1328.                         }
  1329.                     }
  1330.                 }

  1331.             }catch(Exception e){
  1332.                 e.printStackTrace(System.err);
  1333.                 throw new DriverConfigurazioneException("Errore durante la conversione XML dei dati di gestione dell'errore del connettore per il componente di integrazione: "
  1334.                         +e.getMessage(),e);
  1335.             }
  1336.            
  1337.             // Configurazione
  1338.             try{
  1339.                 this.log.info("Configurazione, creazione in corso...");
  1340.                 if(this.sorgenteConfigurazione.getConfigurazione()!=null){
  1341.                    
  1342.                     if(reset){
  1343.                         this.gestoreCRUD.createConfigurazione(this.sorgenteConfigurazione.getConfigurazione());
  1344.                         this.log.info("Configurazione, creazione effettuata.");
  1345.                     }else{
  1346.                         if(updateEnabled) {
  1347.                             this.gestoreCRUD.updateConfigurazione(this.sorgenteConfigurazione.getConfigurazione());
  1348.                             this.log.info("Configurazione, aggiornamento effettuato.");
  1349.                         }
  1350.                         else {
  1351.                             this.log.info("Configurazione, non aggiornato (aggiornamento disabilitato).");
  1352.                         }
  1353.                     }
  1354.                 }
  1355.                
  1356.             }catch(Exception e){
  1357.                 e.printStackTrace(System.err);
  1358.                 throw new DriverConfigurazioneException("Errore durante la conversione XML della Configurazione: "+e.getMessage(),e);
  1359.             }
  1360.         }
  1361.     }
  1362.    
  1363.     private ServiceBinding readServiceBinding(IDServizio idServizio, Connection con) throws DriverConfigurazioneException{
  1364.         DriverConfigurazioneDB driver = (DriverConfigurazioneDB) this.gestoreCRUD;
  1365.         long idServizioAsLong = -1;
  1366.         try {
  1367.             idServizioAsLong = DBUtils.getIdAccordoServizioParteSpecifica(idServizio, con, driver.getTipoDB());
  1368.             if(idServizioAsLong<=0) {
  1369.                 throw new Exception("Non trovato");
  1370.             }
  1371.         }catch(Exception e) {
  1372.             throw new DriverConfigurazioneException("Accordo Parte Specifica non trovato ["+idServizio+"]");
  1373.         }
  1374.        
  1375.         PreparedStatement stm = null;
  1376.         ResultSet rs = null;
  1377.         try
  1378.         {
  1379.            
  1380.             // NOTA: nell'APS, il soggetto e la versione sono obbligatori
  1381.            
  1382.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(driver.getTipoDB());
  1383.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  1384.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  1385.             sqlQueryObject.addSelectField("service_binding");
  1386.             sqlQueryObject.setANDLogicOperator(true);
  1387.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo = "+CostantiDB.ACCORDI+".id");
  1388.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id = ?");
  1389.             String query = sqlQueryObject.createSQLQuery();
  1390.             stm=con.prepareStatement(query);
  1391.             stm.setLong(1, idServizioAsLong);
  1392.            
  1393.             rs=stm.executeQuery();

  1394.             if(rs.next()){
  1395.                 return ServiceBinding.toEnumConstant(rs.getString("service_binding"),true);
  1396.             }

  1397.             throw new DriverConfigurazioneException("Accordo Parte Specifica non trovato ["+idServizio+"] (Lettura ServiceBinding)");

  1398.         }catch (SQLException e) {
  1399.             throw new DriverConfigurazioneException(e);
  1400.         }catch (Exception e) {
  1401.             throw new DriverConfigurazioneException(e);
  1402.         }finally
  1403.         {
  1404.             //Chiudo statement and resultset
  1405.             try{
  1406.                 if(rs!=null)
  1407.                     rs.close();
  1408.             }catch (Exception e) {
  1409.                 //ignore
  1410.             }
  1411.             try{
  1412.                 if(stm!=null)
  1413.                     stm.close();
  1414.             }catch (Exception e) {
  1415.                 //ignore
  1416.             }

  1417.         }
  1418.     }
  1419.    
  1420.    
  1421.    
  1422.     public void delete(boolean deleteSoggetti, boolean deleteMappingErogazioneFruizione) throws DriverConfigurazioneException{
  1423.        
  1424.        
  1425.         // Porte Delegate
  1426.         try{
  1427.             for(int i=0; i<this.sorgenteConfigurazione.sizeSoggettoList(); i++){
  1428.                 Soggetto soggetto = this.sorgenteConfigurazione.getSoggetto(i);
  1429.                 for(int j=0;j<soggetto.sizePortaDelegataList();j++){
  1430.                     PortaDelegata pd = soggetto.getPortaDelegata(j);
  1431.                     pd.setTipoSoggettoProprietario(soggetto.getTipo());
  1432.                     pd.setNomeSoggettoProprietario(soggetto.getNome());
  1433.                     IDPortaDelegata idPD = new IDPortaDelegata();
  1434.                     idPD.setNome(pd.getNome());    
  1435.                    
  1436.                     if(deleteMappingErogazioneFruizione && this.gestoreCRUD instanceof DriverConfigurazioneDB) {
  1437.                         DriverConfigurazioneDB driver = (DriverConfigurazioneDB) this.gestoreCRUD;
  1438.                         Connection con = null;
  1439.                         try {
  1440.                             con = driver.getConnection("XMLDataConverter.mappingFruizione");
  1441.                             IDSoggetto idFruitore = new IDSoggetto(soggetto.getTipo(), soggetto.getNome());
  1442.                             IDServizio idServizio = toIdServizio(pd);
  1443.                             boolean existsMapping = DBMappingUtils.existsMappingFruizione(idServizio, idFruitore, idPD, con, driver.getTipoDB());
  1444.                             if(existsMapping) {
  1445.                                 this.log.info("Eliminazione mapping di fruizione tra Porta delegata ["+pd.getNome()+"], fruitore ["+idFruitore+"] e servizio ["+idServizio+"] eliminazione in corso...");
  1446.                                 DBMappingUtils.deleteMappingFruizione(idServizio, idFruitore, idPD, con, driver.getTipoDB());
  1447.                                 this.log.info("Eliminazione mapping di fruizione tra Porta delegata ["+pd.getNome()+"], fruitore ["+idFruitore+"] e servizio ["+idServizio+"] eliminato.");
  1448.                             }
  1449.                         }finally {
  1450.                             driver.releaseConnection(con);
  1451.                         }
  1452.                     }
  1453.                    
  1454.                     this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" eliminazione in corso...");
  1455.                     if(this.gestoreCRUD.existsPortaDelegata(idPD)){
  1456.                         this.gestoreCRUD.deletePortaDelegata(((IDriverConfigurazioneGet)this.gestoreCRUD).getPortaDelegata(idPD));
  1457.                     }
  1458.                     this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" eliminata.");
  1459.                    
  1460.                 }
  1461.             }
  1462.         }catch(Exception e){
  1463.             e.printStackTrace(System.err);
  1464.             throw new DriverConfigurazioneException("Errore durante l'eliminazione delle porte delegate: "+e.getMessage(),e);
  1465.         }
  1466.        
  1467.         // Porte Applicative
  1468.         try{
  1469.             for(int i=0; i<this.sorgenteConfigurazione.sizeSoggettoList(); i++){
  1470.                 Soggetto soggetto = this.sorgenteConfigurazione.getSoggetto(i);
  1471.                 for(int j=0;j<soggetto.sizePortaApplicativaList();j++){
  1472.                     PortaApplicativa pa = soggetto.getPortaApplicativa(j);                  
  1473.                     pa.setTipoSoggettoProprietario(soggetto.getTipo());
  1474.                     pa.setNomeSoggettoProprietario(soggetto.getNome());            
  1475.                     IDPortaApplicativa idPA = new IDPortaApplicativa();
  1476.                     idPA.setNome(pa.getNome());
  1477.                    
  1478.                     if(deleteMappingErogazioneFruizione && this.gestoreCRUD instanceof DriverConfigurazioneDB) {
  1479.                         DriverConfigurazioneDB driver = (DriverConfigurazioneDB) this.gestoreCRUD;
  1480.                         Connection con = null;
  1481.                         try {
  1482.                             con = driver.getConnection("XMLDataConverter.mappingErogazione");
  1483.                             IDServizio idServizio = this.toIdServizio(pa);
  1484.                             boolean existsMapping = DBMappingUtils.existsMappingErogazione(idServizio, idPA, con, driver.getTipoDB());
  1485.                             if(existsMapping) {
  1486.                                 this.log.info("Eliminazione mapping di erogazione tra Porta Applicativa ["+pa.getNome()+"] e servizio ["+idServizio+"] eliminazione in corso...");
  1487.                                 DBMappingUtils.deleteMappingErogazione(idServizio, idPA, con, driver.getTipoDB());
  1488.                                 this.log.info("Eliminazione mapping di erogazione tra Porta Applicativa ["+pa.getNome()+"] e servizio ["+idServizio+"] eliminato.");
  1489.                             }
  1490.                         }finally {
  1491.                             driver.releaseConnection(con);
  1492.                         }
  1493.                     }
  1494.                    
  1495.                     this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" eliminazione in corso...");
  1496.                     if( this.gestoreCRUD.existsPortaApplicativa(idPA)){
  1497.                         this.gestoreCRUD.deletePortaApplicativa(((IDriverConfigurazioneGet)this.gestoreCRUD).getPortaApplicativa(idPA));
  1498.                     }
  1499.                     this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" eliminata.");
  1500.                    
  1501.                 }
  1502.             }
  1503.         }catch(Exception e){
  1504.             e.printStackTrace(System.err);
  1505.             throw new DriverConfigurazioneException("Errore durante l'eliminazione delle porte applicative: "+e.getMessage(),e);
  1506.         }
  1507.        
  1508.        
  1509.         // Servizi Applicativi
  1510.         try{
  1511.             for(int i=0; i<this.sorgenteConfigurazione.sizeSoggettoList(); i++){
  1512.                 Soggetto soggetto = this.sorgenteConfigurazione.getSoggetto(i);
  1513.                 for(int j=0;j<soggetto.sizeServizioApplicativoList();j++){
  1514.                     ServizioApplicativo servizioApplicativo = soggetto.getServizioApplicativo(j);
  1515.                     IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  1516.                     IDServizioApplicativo idSA = new IDServizioApplicativo();
  1517.                     idSA.setIdSoggettoProprietario(idSoggetto);
  1518.                     idSA.setNome(servizioApplicativo.getNome());
  1519.                     this.log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"] del Soggetto "+idSoggetto.getTipo()+"/"+idSoggetto.getNome()+" eliminazione in corso...");
  1520.                     if( this.gestoreCRUD.existsServizioApplicativo(idSA)){
  1521.                         this.gestoreCRUD.deleteServizioApplicativo(((IDriverConfigurazioneGet)this.gestoreCRUD).getServizioApplicativo(idSA));
  1522.                     }
  1523.                     this.log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"] del Soggetto "+idSoggetto.getTipo()+"/"+idSoggetto.getNome()+" eliminato.");
  1524.                 }
  1525.             }
  1526.         }catch(Exception e){
  1527.             e.printStackTrace(System.err);
  1528.             throw new DriverConfigurazioneException("Errore durante l'eliminazione dei servizi applicativi: "+e.getMessage(),e);
  1529.         }
  1530.        
  1531.        
  1532.         if(deleteSoggetti){
  1533.             // Soggetti
  1534.             try{
  1535.                 for(int i=0; i<this.sorgenteConfigurazione.sizeSoggettoList(); i++){
  1536.                     Soggetto soggetto = this.sorgenteConfigurazione.getSoggetto(i);
  1537.                     IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  1538.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" eliminazione in corso...");
  1539.                     if( this.gestoreCRUD.existsSoggetto(idSoggetto)){
  1540.                         this.gestoreCRUD.deleteSoggetto(((IDriverConfigurazioneGet)this.gestoreCRUD).getSoggetto(idSoggetto));
  1541.                     }
  1542.                     this.log.info("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome()+" eliminato.");
  1543.                 }
  1544.             }catch(Exception e){
  1545.                 e.printStackTrace(System.err);
  1546.                 throw new DriverConfigurazioneException("Errore durante l'eliminazione dei soggetti: "+e.getMessage(),e);
  1547.             }
  1548.         }
  1549.        
  1550.     }

  1551.    
  1552.     private static void gestioneDefaultConnettoreHTTP(Connettore connettore){
  1553.         if(connettore.getProperties()!=null){
  1554.             if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_TYPE)==false){
  1555.                 Property cp = new Property();
  1556.                 cp.setNome(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_TYPE);
  1557.                 cp.setValore(KeystoreType.JKS.getNome()); // default
  1558.                 connettore.addProperty(cp);
  1559.             }
  1560.             if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_TRUST_MANAGEMENT_ALGORITM)==false){
  1561.                 Property cp = new Property();
  1562.                 cp.setNome(CostantiDB.CONNETTORE_HTTPS_TRUST_MANAGEMENT_ALGORITM);
  1563.                 cp.setValore(TrustManagerFactory.getDefaultAlgorithm()); // default
  1564.                 connettore.addProperty(cp);
  1565.             }
  1566.             if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_LOCATION)){
  1567.                 if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_TYPE)==false){
  1568.                     Property cp = new Property();
  1569.                     cp.setNome(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_TYPE);
  1570.                     cp.setValore(KeystoreType.JKS.getNome()); // default
  1571.                     connettore.addProperty(cp);
  1572.                 }
  1573.                 if(connettore.getProperties().containsKey(CostantiDB.CONNETTORE_HTTPS_KEY_MANAGEMENT_ALGORITM)==false){
  1574.                     Property cp = new Property();
  1575.                     cp.setNome(CostantiDB.CONNETTORE_HTTPS_KEY_MANAGEMENT_ALGORITM);
  1576.                     cp.setValore(KeyManagerFactory.getDefaultAlgorithm()); // default
  1577.                     connettore.addProperty(cp);
  1578.                 }
  1579.             }  
  1580.         }
  1581.     }
  1582.    
  1583.     public static void impostaInformazioniConfigurazione_PortaDelegata(PortaDelegata pd){
  1584.         // messageSecurity
  1585.         if(pd.getMessageSecurity()!=null &&
  1586.                 (
  1587.                     (pd.getMessageSecurity().getRequestFlow()!=null && pd.getMessageSecurity().getRequestFlow().sizeParameterList()>0)
  1588.                       ||
  1589.                     (pd.getMessageSecurity().getResponseFlow()!=null && pd.getMessageSecurity().getResponseFlow().sizeParameterList()>0)
  1590.                 )
  1591.         ){
  1592.             pd.setStatoMessageSecurity(CostantiConfigurazione.ABILITATO.toString());
  1593.         }
  1594.     }
  1595.    
  1596.     public static void impostaInformazioniConfigurazione_PortaApplicativa(PortaApplicativa pa){
  1597.         // messageSecurity
  1598.         if(pa.getMessageSecurity()!=null &&
  1599.                 (
  1600.                     (pa.getMessageSecurity().getRequestFlow()!=null && pa.getMessageSecurity().getRequestFlow().sizeParameterList()>0)
  1601.                       ||
  1602.                     (pa.getMessageSecurity().getResponseFlow()!=null && pa.getMessageSecurity().getResponseFlow().sizeParameterList()>0)
  1603.                 )
  1604.         ){
  1605.             pa.setStatoMessageSecurity(CostantiConfigurazione.ABILITATO.toString());
  1606.         }
  1607.     }
  1608.    
  1609.     public static void impostaInformazioniConfigurazione_ServizioApplicativo(ServizioApplicativo servizioApplicativo,Soggetto soggettoProprietario,
  1610.             String posizione,Logger log,String tipoBEDestinazione){
  1611.        
  1612.         // **** InvocazionePorta ****
  1613.         if(servizioApplicativo.getInvocazionePorta()==null){
  1614.             InvocazionePorta saInv = new InvocazionePorta();
  1615.             Credenziali credenziali = new Credenziali();
  1616.             credenziali.setTipo(CredenzialeTipo.toEnumConstant(CostantiConfigurazione.NONE));
  1617.             saInv.addCredenziali(credenziali);
  1618.             InvocazionePortaGestioneErrore ge = new InvocazionePortaGestioneErrore();
  1619.             ge.setFault(CostantiConfigurazione.ERRORE_APPLICATIVO_SOAP);
  1620.             saInv.setGestioneErrore(ge);
  1621.             servizioApplicativo.setInvocazionePorta(saInv);
  1622.         }else{
  1623.             if(servizioApplicativo.getInvocazionePorta().getGestioneErrore()==null){
  1624.                 InvocazionePortaGestioneErrore ge = new InvocazionePortaGestioneErrore();
  1625.                 ge.setFault(CostantiConfigurazione.ERRORE_APPLICATIVO_SOAP);
  1626.                 servizioApplicativo.getInvocazionePorta().setGestioneErrore(ge);
  1627.             }else if(servizioApplicativo.getInvocazionePorta().getGestioneErrore().getFault()==null){
  1628.                 servizioApplicativo.getInvocazionePorta().getGestioneErrore().setFault(CostantiConfigurazione.ERRORE_APPLICATIVO_SOAP);
  1629.             }
  1630.             if(servizioApplicativo.getInvocazionePorta().sizeCredenzialiList()==0){
  1631.                 Credenziali credenziali = new Credenziali();
  1632.                 credenziali.setTipo(CredenzialeTipo.toEnumConstant(CostantiConfigurazione.NONE));
  1633.                 servizioApplicativo.getInvocazionePorta().addCredenziali(credenziali);
  1634.             }
  1635.         }      
  1636.        
  1637.         // **** InvocazioneServizio ****
  1638.         // Check connettori non definit all'interno del servizio
  1639.         if(servizioApplicativo.getInvocazioneServizio()!=null && servizioApplicativo.getInvocazioneServizio().getConnettore()!=null){
  1640.             if(servizioApplicativo.getInvocazioneServizio().getConnettore().getTipo()==null){
  1641.                 // ricavo il connettore dal soggetto
  1642.                 for(int con=0;con<soggettoProprietario.sizeConnettoreList();con++){
  1643.                     if(soggettoProprietario.getConnettore(con).getNome().equals(servizioApplicativo.getInvocazioneServizio().getConnettore().getNome())){
  1644.                         servizioApplicativo.getInvocazioneServizio().setConnettore(soggettoProprietario.getConnettore(con));
  1645.                         break;
  1646.                     }
  1647.                 }
  1648.                 log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+posizione+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" connettore inv servizio di tipo, dopo ricerca ["+servizioApplicativo.getInvocazioneServizio().getConnettore().getTipo()+"]");
  1649.             }else{
  1650.                 log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+posizione+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" connettore inv servizio di tipo ["+servizioApplicativo.getInvocazioneServizio().getConnettore().getTipo()+"]");
  1651.             }
  1652.             if(CostantiConfigurazione.CONFIGURAZIONE_DB.equals(tipoBEDestinazione)){
  1653.                 // I nomi vengono autogenerati dal driver
  1654.                 servizioApplicativo.getInvocazioneServizio().getConnettore().setNome(null);
  1655.                 // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1656.                 String tipoConnettore = servizioApplicativo.getInvocazioneServizio().getConnettore().getTipo();
  1657.                 if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1658.                      !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1659.                      !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1660.                     servizioApplicativo.getInvocazioneServizio().getConnettore().setCustom(true);
  1661.                 }
  1662.                 // Gestione default per connettore https
  1663.                 if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1664.                     gestioneDefaultConnettoreHTTP(servizioApplicativo.getInvocazioneServizio().getConnettore());
  1665.                 }
  1666.             }
  1667.         }else if(servizioApplicativo.getInvocazioneServizio()==null){
  1668.             Credenziali credenziali = new Credenziali();
  1669.             credenziali.setTipo(CredenzialeTipo.toEnumConstant(CostantiConfigurazione.NONE));
  1670.             InvocazioneServizio invServizio = new InvocazioneServizio();
  1671.             invServizio.setAutenticazione(InvocazioneServizioTipoAutenticazione.toEnumConstant(CostantiConfigurazione.NONE));
  1672.             invServizio.setGetMessage(CostantiConfigurazione.DISABILITATO);
  1673.             servizioApplicativo.setInvocazioneServizio(invServizio);
  1674.         }
  1675.         // GetMessage
  1676.         if(servizioApplicativo.getInvocazioneServizio()!=null){
  1677.             if(servizioApplicativo.getInvocazioneServizio().getGetMessage()==null){
  1678.                 servizioApplicativo.getInvocazioneServizio().setGetMessage(CostantiConfigurazione.DISABILITATO);
  1679.             }
  1680.         }
  1681.        
  1682.         // **** RispostaAsincrona ****
  1683.         // Check connettori non definit all'interno del servizio
  1684.         if(servizioApplicativo.getRispostaAsincrona()!=null && servizioApplicativo.getRispostaAsincrona().getConnettore()!=null){
  1685.             if(servizioApplicativo.getRispostaAsincrona().getConnettore().getTipo()==null){
  1686.                 // ricavo il connettore dal soggetto
  1687.                 for(int con=0;con<soggettoProprietario.sizeConnettoreList();con++){
  1688.                     if(soggettoProprietario.getConnettore(con).getNome().equals(servizioApplicativo.getRispostaAsincrona().getConnettore().getNome())){
  1689.                         servizioApplicativo.getRispostaAsincrona().setConnettore(soggettoProprietario.getConnettore(con));
  1690.                         break;
  1691.                     }
  1692.                 }
  1693.                 log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+posizione+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" connettore risposta asincrona di tipo, dopo ricerca ["+servizioApplicativo.getRispostaAsincrona().getConnettore().getTipo()+"]");
  1694.             }else{
  1695.                 log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+posizione+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" connettore risposta asincrona di tipo ["+servizioApplicativo.getRispostaAsincrona().getConnettore().getTipo()+"]");
  1696.             }
  1697.             if(CostantiConfigurazione.CONFIGURAZIONE_DB.equals(tipoBEDestinazione)){
  1698.                 // I nomi vengono autogenerati dal driver
  1699.                 servizioApplicativo.getRispostaAsincrona().getConnettore().setNome(null);
  1700.                 // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1701.                 String tipoConnettore = servizioApplicativo.getRispostaAsincrona().getConnettore().getTipo();
  1702.                 if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1703.                      !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1704.                      !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1705.                     servizioApplicativo.getRispostaAsincrona().getConnettore().setCustom(true);
  1706.                 }
  1707.                 // Gestione default per connettore https
  1708.                 if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1709.                     gestioneDefaultConnettoreHTTP(servizioApplicativo.getRispostaAsincrona().getConnettore());
  1710.                 }
  1711.             }
  1712.         }else if(servizioApplicativo.getRispostaAsincrona()==null){
  1713.             Credenziali credenziali = new Credenziali();
  1714.             credenziali.setTipo(CredenzialeTipo.toEnumConstant(CostantiConfigurazione.NONE));
  1715.             RispostaAsincrona rispostaAsinc = new RispostaAsincrona();
  1716.             rispostaAsinc.setAutenticazione(InvocazioneServizioTipoAutenticazione.toEnumConstant(CostantiConfigurazione.NONE));
  1717.             rispostaAsinc.setGetMessage(CostantiConfigurazione.DISABILITATO);
  1718.             servizioApplicativo.setRispostaAsincrona(rispostaAsinc);
  1719.         }
  1720.         // GetMessage
  1721.         if(servizioApplicativo.getRispostaAsincrona()!=null){
  1722.             if(servizioApplicativo.getRispostaAsincrona().getGetMessage()==null){
  1723.                 servizioApplicativo.getRispostaAsincrona().setGetMessage(CostantiConfigurazione.DISABILITATO);
  1724.             }
  1725.         }
  1726.        
  1727.        
  1728.         // **** altre info per driver DB ***
  1729.         if(CostantiConfigurazione.REGISTRO_DB.equals(tipoBEDestinazione)){
  1730.            
  1731.             boolean isClient = false;
  1732.            
  1733.             if(servizioApplicativo.getInvocazioneServizio()!=null && servizioApplicativo.getInvocazioneServizio().getConnettore()!=null){
  1734.                 // I nomi dei connettorivengono autogenerati dal driver
  1735.                 servizioApplicativo.getInvocazioneServizio().getConnettore().setNome(null);
  1736.                 String tipoConnettore = servizioApplicativo.getInvocazioneServizio().getConnettore().getTipo();
  1737.                 if(!TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore)) {
  1738.                     servizioApplicativo.setTipologiaErogazione(TipologiaErogazione.TRASPARENTE.getValue());
  1739.                 }
  1740.                 // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1741.                 if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1742.                      !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1743.                      !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1744.                     servizioApplicativo.getInvocazioneServizio().getConnettore().setCustom(true);
  1745.                 }
  1746.                 // Gestione default per connettore https
  1747.                 if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1748.                     gestioneDefaultConnettoreHTTP(servizioApplicativo.getInvocazioneServizio().getConnettore());
  1749.                 }
  1750.             }
  1751.             if(servizioApplicativo.getRispostaAsincrona()!=null && servizioApplicativo.getRispostaAsincrona().getConnettore()!=null){
  1752.                 // I nomi dei connettorivengono autogenerati dal driver
  1753.                 servizioApplicativo.getRispostaAsincrona().getConnettore().setNome(null);
  1754.                 String tipoConnettore = servizioApplicativo.getRispostaAsincrona().getConnettore().getTipo();
  1755.                 if(!TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore)) {
  1756.                     servizioApplicativo.setTipologiaErogazione(TipologiaErogazione.ASINCRONA_ASIMMETRICA.getValue());
  1757.                 }
  1758.                 // I tipi diversi da disabilitato,http,jms,null,nullEcho sono custom
  1759.                 if ( !TipiConnettore.JMS.getNome().equals(tipoConnettore) && !TipiConnettore.HTTP.getNome().equals(tipoConnettore) &&
  1760.                      !TipiConnettore.DISABILITATO.getNome().equals(tipoConnettore) && !TipiConnettore.NULL.getNome().equals(tipoConnettore) &&
  1761.                      !TipiConnettore.NULLECHO.getNome().equals(tipoConnettore) ){
  1762.                     servizioApplicativo.getRispostaAsincrona().getConnettore().setCustom(true);
  1763.                 }
  1764.                 // Gestione default per connettore https
  1765.                 if(TipiConnettore.HTTPS.getNome().equals(tipoConnettore)){
  1766.                     gestioneDefaultConnettoreHTTP(servizioApplicativo.getRispostaAsincrona().getConnettore());
  1767.                 }
  1768.             }
  1769.             if(servizioApplicativo.getTipologiaErogazione()==null) {
  1770.                 if(servizioApplicativo.getInvocazioneServizio()!=null && servizioApplicativo.getInvocazioneServizio().getGetMessage()!=null &&
  1771.                         StatoFunzionalita.ABILITATO.equals(servizioApplicativo.getInvocazioneServizio().getGetMessage())) {
  1772.                     servizioApplicativo.setTipologiaErogazione(TipologiaErogazione.MESSAGE_BOX.getValue());
  1773.                 }
  1774.             }
  1775.            
  1776.             boolean isIMenabled = false;
  1777.             if(servizioApplicativo.getInvocazioneServizio()!=null && servizioApplicativo.getInvocazioneServizio().getGetMessage()!=null &&
  1778.                     StatoFunzionalita.ABILITATO.equals(servizioApplicativo.getInvocazioneServizio().getGetMessage())) {
  1779.                 isIMenabled = true;
  1780.             }
  1781.             else if(servizioApplicativo.getRispostaAsincrona()!=null && servizioApplicativo.getRispostaAsincrona().getGetMessage()!=null &&
  1782.                     StatoFunzionalita.ABILITATO.equals(servizioApplicativo.getRispostaAsincrona().getGetMessage())) {
  1783.                 isIMenabled = true;
  1784.             }
  1785.            
  1786.             if(servizioApplicativo.getInvocazionePorta()!=null && servizioApplicativo.getInvocazionePorta().sizeCredenzialiList()>0) {
  1787.                 // Verifico che esista una credenziale buona
  1788.                 boolean found = false;
  1789.                 for (int i = 0; i < servizioApplicativo.getInvocazionePorta().sizeCredenzialiList(); i++) {
  1790.                     Credenziali c = servizioApplicativo.getInvocazionePorta().getCredenziali(i);
  1791.                     if(c!=null && c.getTipo()!=null && (c.getUser()!=null || c.getSubject()!=null)) {
  1792.                         found = true;
  1793.                         break;
  1794.                     }
  1795.                 }
  1796.                 if(found) {
  1797.                     servizioApplicativo.setTipologiaFruizione(TipologiaFruizione.NORMALE.getValue());
  1798.                     isClient = true;
  1799.                 }
  1800.             }
  1801.            
  1802.             // FIX: il server deve esser impostato solamente se si crea un applicativo server, e non se c'è un connettore abilitato.
  1803.             // Se e' stato esportato, il tipo sarà valorizzato.
  1804.             if(isClient) {
  1805.                 if(servizioApplicativo.getTipo()==null) {
  1806.                     if(!isIMenabled) {
  1807.                         servizioApplicativo.setTipo(CostantiConfigurazione.CLIENT);
  1808.                     }
  1809.                     //else {
  1810.                         // si tratta di un servizio applicativo I.M. registrato in una erogazione
  1811.                     //}
  1812.                 }
  1813.                 else {
  1814.                     if(CostantiConfigurazione.SERVER.equals(servizioApplicativo.getTipo())) {
  1815.                         servizioApplicativo.setUseAsClient(true);
  1816.                     }
  1817.                     //else {
  1818.                         // se e' client o clientOrServer va gia' bene
  1819.                     //}
  1820.                 }
  1821.             }
  1822.            
  1823.         }
  1824.     }
  1825.    
  1826.     public static void impostaInformazioniConfigurazione_ServizioApplicativo_update(ServizioApplicativo servizioApplicativo,ServizioApplicativo old){
  1827.         servizioApplicativo.setId(old.getId());
  1828.         if(servizioApplicativo.getInvocazioneServizio()!=null){
  1829.             if(servizioApplicativo.getInvocazioneServizio().getConnettore()==null){
  1830.                 if(old.getInvocazioneServizio()!=null)
  1831.                     servizioApplicativo.getInvocazioneServizio().setConnettore(old.getInvocazioneServizio().getConnettore());
  1832.             }else{
  1833.                 if(old.getInvocazioneServizio()!=null && old.getInvocazioneServizio().getConnettore()!=null){
  1834.                     servizioApplicativo.getInvocazioneServizio().getConnettore().setId(old.getInvocazioneServizio().getConnettore().getId());
  1835.                     servizioApplicativo.getInvocazioneServizio().getConnettore().setNome(old.getInvocazioneServizio().getConnettore().getNome());
  1836.                 }
  1837.             }
  1838.         }
  1839.         if(servizioApplicativo.getRispostaAsincrona()!=null){
  1840.             if(servizioApplicativo.getRispostaAsincrona().getConnettore()==null){
  1841.                 if(old.getRispostaAsincrona()!=null)
  1842.                     servizioApplicativo.getRispostaAsincrona().setConnettore(old.getRispostaAsincrona().getConnettore());
  1843.             }else{
  1844.                 if(old.getRispostaAsincrona()!=null && old.getRispostaAsincrona().getConnettore()!=null){
  1845.                     servizioApplicativo.getRispostaAsincrona().getConnettore().setId(old.getRispostaAsincrona().getConnettore().getId());
  1846.                     servizioApplicativo.getRispostaAsincrona().getConnettore().setNome(old.getRispostaAsincrona().getConnettore().getNome());
  1847.                 }
  1848.             }
  1849.         }
  1850.     }
  1851.    
  1852.     private void addServizioApplicativo(ServizioApplicativo servizioApplicativo,Soggetto soggettoProprietario,String posizione,boolean reset, boolean updateEnabled) throws Exception{
  1853.         servizioApplicativo.setTipoSoggettoProprietario(soggettoProprietario.getTipo());
  1854.         servizioApplicativo.setNomeSoggettoProprietario(soggettoProprietario.getNome());
  1855.         String pos = "";
  1856.         if(posizione!=null){
  1857.             pos = "["+posizione+"]";
  1858.         }
  1859.        
  1860.         impostaInformazioniConfigurazione_ServizioApplicativo(servizioApplicativo, soggettoProprietario,
  1861.                 pos, this.log, this.tipoBEDestinazione);        
  1862.        
  1863.         // *** effettua create/update/delete
  1864.         IDSoggetto idSoggetto = new IDSoggetto(soggettoProprietario.getTipo(),soggettoProprietario.getNome());
  1865.         IDServizioApplicativo idSA = new IDServizioApplicativo();
  1866.         idSA.setIdSoggettoProprietario(idSoggetto);
  1867.         idSA.setNome(servizioApplicativo.getNome());
  1868.         if( (reset==false) && this.gestoreCRUD.existsServizioApplicativo(idSA)){
  1869.             if(updateEnabled) {
  1870.                 this.log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+pos+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" aggiornamento in corso...");
  1871.                
  1872.                 ServizioApplicativo old = ((IDriverConfigurazioneGet) this.gestoreCRUD).getServizioApplicativo(idSA);
  1873.                
  1874.                 impostaInformazioniConfigurazione_ServizioApplicativo_update(servizioApplicativo, old);
  1875.                
  1876.                 this.gestoreCRUD.updateServizioApplicativo(servizioApplicativo);
  1877.                 this.log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+pos+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" aggiornato.");
  1878.             }
  1879.             else {
  1880.                 this.log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+pos+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" non aggiornato (aggiornamento disabilitato).");
  1881.             }
  1882.         }else{
  1883.             this.log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+pos+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" creazione in corso...");
  1884.             this.gestoreCRUD.createServizioApplicativo(servizioApplicativo);
  1885.             this.log.info("Servizio Applicativo ["+servizioApplicativo.getNome()+"]"+pos+" del Soggetto "+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+" creato.");
  1886.         }
  1887.        
  1888.        
  1889.        
  1890.     }
  1891. }