PreLoadingConfig.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.pdd.config;

  21. import java.io.ByteArrayOutputStream;
  22. import java.io.File;
  23. import java.io.IOException;
  24. import java.io.InputStream;
  25. import java.sql.Connection;
  26. import java.util.ArrayList;
  27. import java.util.HashMap;
  28. import java.util.Iterator;
  29. import java.util.List;
  30. import java.util.zip.ZipEntry;
  31. import java.util.zip.ZipFile;

  32. import org.apache.commons.lang.StringUtils;
  33. import org.openspcoop2.core.config.AccessoRegistro;
  34. import org.openspcoop2.core.config.AccessoRegistroRegistro;
  35. import org.openspcoop2.core.config.Configurazione;
  36. import org.openspcoop2.core.config.GenericProperties;
  37. import org.openspcoop2.core.config.InoltroBusteNonRiscontrate;
  38. import org.openspcoop2.core.config.MessaggiDiagnostici;
  39. import org.openspcoop2.core.config.Openspcoop2;
  40. import org.openspcoop2.core.config.PortaApplicativa;
  41. import org.openspcoop2.core.config.PortaDelegata;
  42. import org.openspcoop2.core.config.ServizioApplicativo;
  43. import org.openspcoop2.core.config.Soggetto;
  44. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  45. import org.openspcoop2.core.config.constants.RegistroTipo;
  46. import org.openspcoop2.core.config.constants.Severita;
  47. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  48. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  49. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  50. import org.openspcoop2.core.config.utils.CleanerOpenSPCoop2Extensions;
  51. import org.openspcoop2.core.controllo_traffico.IdActivePolicy;
  52. import org.openspcoop2.core.controllo_traffico.IdPolicy;
  53. import org.openspcoop2.core.id.IDSoggetto;
  54. import org.openspcoop2.core.plugins.IdPlugin;
  55. import org.openspcoop2.core.registry.RegistroServizi;
  56. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  57. import org.openspcoop2.core.registry.constants.StatiAccordo;
  58. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  59. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  60. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  61. import org.openspcoop2.generic_project.exception.NotImplementedException;
  62. import org.openspcoop2.generic_project.exception.ServiceException;
  63. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  64. import org.openspcoop2.message.xml.MessageXMLUtils;
  65. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  66. import org.openspcoop2.protocol.engine.constants.Costanti;
  67. import org.openspcoop2.protocol.registry.RegistroServiziReader;
  68. import org.openspcoop2.protocol.sdk.ProtocolException;
  69. import org.openspcoop2.protocol.utils.ModIUtils;
  70. import org.openspcoop2.utils.Utilities;
  71. import org.openspcoop2.utils.UtilsException;
  72. import org.openspcoop2.utils.beans.WriteToSerializerType;
  73. import org.openspcoop2.utils.io.ZipUtilities;
  74. import org.openspcoop2.utils.regexp.RegExpException;
  75. import org.openspcoop2.utils.regexp.RegExpNotFoundException;
  76. import org.openspcoop2.utils.regexp.RegExpNotValidException;
  77. import org.openspcoop2.utils.regexp.RegularExpressionEngine;
  78. import org.openspcoop2.utils.resources.FileSystemUtilities;
  79. import org.slf4j.Logger;
  80. import org.w3c.dom.Element;

  81. /**
  82.  *  ZipConfigurationReader
  83.  *
  84.  * @author Poli Andrea (apoli@link.it)
  85.  * @author $Author$
  86.  * @version $Rev$, $Date$
  87.  */
  88. public class PreLoadingConfig  {

  89.     private static final String SOGGETTO_LOCALE = "@SOGGETTO_LOCALE@";
  90.     private static final String GOVWAY_ENTITY_NAME = "GOVWAY_DEFAULT_ENTITY_NAME";
  91.     private static final String VARIABLE_GOVWAY_ENTITY_NAME = "${"+GOVWAY_ENTITY_NAME+"}";
  92.    
  93.     private Logger log;
  94.     private Logger logDriver;
  95.     private String protocolloDefault;
  96.     private IDSoggetto dominio;
  97.     public PreLoadingConfig(Logger log, Logger logDriver, String protocolloDefault, IDSoggetto dominio) {
  98.         this.log = log;
  99.         this.logDriver = logDriver;
  100.         this.protocolloDefault = protocolloDefault;
  101.         this.dominio = dominio;
  102.     }

  103.     public Logger getLogDriver() {
  104.         return this.logDriver;
  105.     }
  106.     private void logInfo(String msg) {
  107.         if(this.log!=null) {
  108.             this.log.info(msg);
  109.         }
  110.     }
  111.     private void logError(String msg, Exception e) {
  112.         if(this.log!=null) {
  113.             this.log.error(msg,e);
  114.         }
  115.     }
  116.    
  117.     public void loadConfig(List<PreloadingConfiguration> zipContent) throws UtilsException, IOException, DriverConfigurazioneException, ServiceException, NotImplementedException, ProtocolException {
  118.         if(zipContent!=null && !zipContent.isEmpty()) {
  119.             for (PreloadingConfiguration bs : zipContent) {
  120.                 boolean load = true;
  121.                 if(bs.getName().contains("signalHubPDND") &&
  122.                     (
  123.                             !ProtocolFactoryManager.getInstance().existsProtocolFactory(Costanti.MODIPA_PROTOCOL_NAME)
  124.                             ||
  125.                             !ModIUtils.isSignalHubEnabled())
  126.                         ){
  127.                     logInfo("Pacchetto '"+bs.getName()+"' non caricato; funzionalità 'Signal Hub' non attiva");
  128.                     load = false;
  129.                 }
  130.                 else if(bs.getName().contains("tracingPDND") &&
  131.                     (
  132.                             !ProtocolFactoryManager.getInstance().existsProtocolFactory(Costanti.MODIPA_PROTOCOL_NAME)
  133.                             ||
  134.                             !ModIUtils.isTracingPDNDEnabled())
  135.                         ){
  136.                     logInfo("Pacchetto '"+bs.getName()+"' non caricato; funzionalità 'Tracing PDND' non attiva");
  137.                     load = false;
  138.                 }
  139.                 if(load) {
  140.                     this.loadConfig(bs.getResource());
  141.                 }
  142.             }
  143.         }
  144.     }
  145.     private void loadConfig(byte[] zipContent) throws UtilsException, IOException, DriverConfigurazioneException, ServiceException, NotImplementedException {
  146.        
  147.         List<String> pluginNameList = new ArrayList<>();
  148.         List<byte[]> pluginList = new ArrayList<>();
  149.        
  150.         List<String> configNameList = new ArrayList<>();
  151.         List<byte[]> configList = new ArrayList<>();
  152.        
  153.         List<String> registryNameList = new ArrayList<>();
  154.         List<byte[]> registryList = new ArrayList<>();
  155.        
  156.         List<String> controllaTrafficoConfigPolicyNameList = new ArrayList<>();
  157.         List<byte[]> controllaTrafficoConfigPolicyList = new ArrayList<>();
  158.        
  159.         List<String> controllaTrafficoActivePolicyNameList = new ArrayList<>();
  160.         List<byte[]> controllaTrafficoActivePolicyList = new ArrayList<>();
  161.        
  162.         HashMap<String, Document> contentList = new HashMap<>();
  163.        
  164.         File fTmp = FileSystemUtilities.createTempFile("preLoadConfiguration", ".zip");
  165.         /**System.out.println("TMP: "+fTmp.getAbsolutePath());*/
  166.         try {
  167.             FileSystemUtilities.writeFile(fTmp, zipContent);
  168.             ZipFile zip = new ZipFile(fTmp);
  169.             Iterator<ZipEntry> itZip = ZipUtilities.entries(zip, true);
  170.             while (itZip.hasNext()) {
  171.                 ZipEntry zipEntry = itZip.next();
  172.                 if(!zipEntry.isDirectory()) {
  173.                     InputStream isZip = zip.getInputStream(zipEntry);
  174.                     try {
  175.                         /**System.out.println("LEGGO ["+zipEntry.getName()+"]");*/
  176.                         byte [] bytes = Utilities.getAsByteArray(isZip);
  177.                         String sBytes = new String(bytes);
  178.                         if(sBytes.contains(SOGGETTO_LOCALE)) {
  179.                             while(sBytes.contains(SOGGETTO_LOCALE)) {
  180.                                 sBytes = sBytes.replace(SOGGETTO_LOCALE, this.dominio.getNome());
  181.                             }
  182.                             bytes = sBytes.getBytes();
  183.                         }
  184.                         if(sBytes.contains(VARIABLE_GOVWAY_ENTITY_NAME)) {
  185.                             String valueSystemProperty = convertVariabile(GOVWAY_ENTITY_NAME);
  186.                             if(valueSystemProperty==null || StringUtils.isEmpty(valueSystemProperty)) {
  187.                                 throw new ServiceException("Una configurazione creata con la variabile '"+VARIABLE_GOVWAY_ENTITY_NAME+"' richiede la sua definizione come variabile di sistema o java");
  188.                             }
  189.                         }
  190.                         String afterVariable = null;
  191.                         try {
  192.                             afterVariable = convertVariable(sBytes);
  193.                         }catch(Exception e) {
  194.                             throw new UtilsException(e.getMessage(),e);
  195.                         }
  196.                         if(afterVariable!=null && !afterVariable.equals(sBytes)) {
  197.                             bytes = afterVariable.getBytes();
  198.                         }
  199.                         try {
  200.                            
  201.                             String entryName = zipEntry.getName();
  202.                             int indexOfWsdl = -1;
  203.                             String name = null;
  204.                             if(entryName.endsWith(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL) ) {
  205.                                 indexOfWsdl = entryName.indexOf(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL);
  206.                                 name = CostantiRegistroServizi.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL;
  207.                             }
  208.                             else if(entryName.endsWith(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL) ) {
  209.                                 indexOfWsdl = entryName.indexOf(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL);
  210.                                 name = CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL;
  211.                             }
  212.                             else if(entryName.endsWith(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL) ) {
  213.                                 indexOfWsdl = entryName.indexOf(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL);
  214.                                 name = CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL;
  215.                             }
  216.                             if(indexOfWsdl>0) {
  217.                                 String prefixEntryName = entryName.substring(0, indexOfWsdl-1);
  218.                                 int posizione = 0; // default
  219.                                 if(prefixEntryName.contains(".") && !prefixEntryName.endsWith(".")) {
  220.                                     String posizioneEntry = prefixEntryName.substring(prefixEntryName.lastIndexOf(".")+1, prefixEntryName.length());
  221.                                     posizione = converPosizione(posizioneEntry);
  222.                                     prefixEntryName = prefixEntryName.substring(0, prefixEntryName.lastIndexOf("."));
  223.                                 }
  224.                                 Document d = new Document();
  225.                                 d.content = bytes;
  226.                                 d.index = posizione;
  227.                                 d.name = name;
  228.                                 contentList.put(prefixEntryName, d);
  229.                             }
  230.                             else {
  231.                            
  232.                                 Element element = MessageXMLUtils.DEFAULT.newElement(bytes);
  233.                                 if(org.openspcoop2.core.plugins.utils.XMLUtils.isPlugin(element)) {
  234.                                     pluginNameList.add(entryName);
  235.                                     pluginList.add(bytes);
  236.                                 }
  237.                                 else if(org.openspcoop2.core.config.utils.XMLUtils.isConfigurazione(element)) {
  238.                                     configNameList.add(entryName);
  239.                                     configList.add(bytes);
  240.                                 }
  241.                                 else if(org.openspcoop2.core.registry.utils.XMLUtils.isRegistroServizi(element)) {
  242.                                     registryNameList.add(entryName);
  243.                                     registryList.add(bytes);
  244.                                 }
  245.                                 else if(org.openspcoop2.core.controllo_traffico.utils.XMLUtils.isConfigurazionePolicy(element)) {
  246.                                     controllaTrafficoConfigPolicyNameList.add(entryName);
  247.                                     controllaTrafficoConfigPolicyList.add(bytes);
  248.                                 }
  249.                                 else if(org.openspcoop2.core.controllo_traffico.utils.XMLUtils.isAttivazionePolicy(element)) {
  250.                                     controllaTrafficoActivePolicyNameList.add(entryName);
  251.                                     controllaTrafficoActivePolicyList.add(bytes);
  252.                                 }
  253.                                 else {
  254.                                     throw new UtilsException("unknown type");
  255.                                 }
  256.                                
  257.                             }
  258.                         }catch(Exception e) {
  259.                             this.logError("PreLoading entry ["+zipEntry.getName()+"] error: "+e.getMessage(),e);
  260.                         }
  261.                     }finally {
  262.                         try {
  263.                             if(isZip!=null) {
  264.                                 isZip.close();
  265.                             }
  266.                         }catch(Exception e) {
  267.                             // close
  268.                         }
  269.                     }
  270.                 }
  271.             }
  272.         }finally {
  273.             try {
  274.                 java.nio.file.Files.delete(fTmp.toPath());
  275.             }catch(Exception e) {
  276.                 // ignore
  277.             }
  278.         }

  279.         if(!pluginNameList.isEmpty()) {
  280.            
  281.             org.openspcoop2.core.plugins.utils.serializer.JaxbDeserializer deserializerCT = new  org.openspcoop2.core.plugins.utils.serializer.JaxbDeserializer ();
  282.             DriverConfigurazioneDB driverConfigurazione = (DriverConfigurazioneDB) ConfigurazionePdDReader.getDriverConfigurazionePdD();
  283.             Connection con = null;
  284.             try {
  285.                 con = driverConfigurazione.getConnection("preloading plugins");
  286.                 ServiceManagerProperties jdbcProperties = new ServiceManagerProperties();
  287.                 jdbcProperties.setDatabaseType(driverConfigurazione.getTipoDB());
  288.                 jdbcProperties.setShowSql(true);
  289.                 org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager serviceManager =
  290.                         new org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager(con, jdbcProperties, this.log);
  291.                 org.openspcoop2.core.plugins.dao.IPluginService service = serviceManager.getPluginService();
  292.                
  293.                 org.openspcoop2.core.plugins.utils.CleanerOpenSPCoop2Extensions cleaner = new org.openspcoop2.core.plugins.utils.CleanerOpenSPCoop2Extensions();
  294.                
  295.                 for (int i = 0; i < pluginNameList.size(); i++) {
  296.                     String name = pluginNameList.get(i);
  297.                     byte [] content = pluginList.get(i);
  298.                    
  299.                     try {
  300.                         this.logInfo(getMessageInCorso(ID_PLUGIN, name));
  301.                         org.openspcoop2.core.plugins.Plugin plugin = deserializerCT.readPlugin(content);
  302.                         IdPlugin id = new IdPlugin();
  303.                         id.setClassName(plugin.getClassName());
  304.                         id.setLabel(plugin.getLabel());
  305.                         id.setTipo(plugin.getTipo());
  306.                         id.setTipoPlugin(plugin.getTipoPlugin());
  307.                         if(!service.exists(id)) {
  308.                             cleaner.clean(plugin);
  309.                             service.create(plugin);
  310.                         }
  311.                         this.logInfo(getMessageEffettuataConSuccesso(ID_PLUGIN, name));
  312.        
  313.                     }catch(Exception e) {
  314.                         this.logError(getMessageError(ID_PLUGIN, name, e),e);
  315.                     }
  316.                 }
  317.             }finally {
  318.                 driverConfigurazione.releaseConnection(con);
  319.             }
  320.         }
  321.        
  322.         if(!registryNameList.isEmpty()) {
  323.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializerRegistry = new  org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer ();
  324.             java.util.Map<String, IDriverRegistroServiziGet> mapRegistri = RegistroServiziReader.getDriverRegistroServizi();
  325.             DriverRegistroServiziDB driverRegistroServizi = (DriverRegistroServiziDB) mapRegistri.values().iterator().next();
  326.            
  327.             for (int i = 0; i < registryNameList.size(); i++) {
  328.                 String name = registryNameList.get(i);
  329.                 byte [] content = registryList.get(i);
  330.                
  331.                 convert(contentList, content, name, deserializerRegistry, driverRegistroServizi);
  332.             }
  333.         }
  334.        
  335.         if(!configNameList.isEmpty()) {
  336.             org.openspcoop2.core.config.utils.serializer.JaxbDeserializer deserializerConfig = new  org.openspcoop2.core.config.utils.serializer.JaxbDeserializer ();
  337.             DriverConfigurazioneDB driverConfigurazione = (DriverConfigurazioneDB) ConfigurazionePdDReader.getDriverConfigurazionePdD();
  338.            
  339.             for (int i = 0; i < configNameList.size(); i++) {
  340.                 String name = configNameList.get(i);
  341.                 byte [] content = configList.get(i);
  342.                
  343.                 try {
  344.                     this.logInfo(getMessageInCorso(ID_CONFIG, name));
  345.                     Openspcoop2 op2 = deserializerConfig.readOpenspcoop2(content);
  346.                    
  347.                     Configurazione config = op2.getConfigurazione();
  348.                     if(config!=null &&
  349.                         config.getGenericPropertiesList()!=null && !config.getGenericPropertiesList().isEmpty()) {
  350.                         for (GenericProperties genericProperties : config.getGenericPropertiesList()) {
  351.                             boolean exists = existsGenericProperties(driverConfigurazione, genericProperties);
  352.                             if(!exists) {
  353.                                 driverConfigurazione.createGenericProperties(genericProperties);
  354.                             }
  355.                         }
  356.                     }
  357.                    
  358.                     if(op2.sizeSoggettoList()>0) {
  359.                         convert(driverConfigurazione, content, config, op2);
  360.                     }
  361.                    
  362.                     this.logInfo(getMessageEffettuataConSuccesso(ID_CONFIG, name));
  363.    
  364.                 }catch(Exception e) {
  365.                     this.logError(getMessageError(ID_CONFIG, name, e),e);
  366.                 }
  367.             }
  368.         }
  369.        
  370.        
  371.        
  372.         if(!controllaTrafficoConfigPolicyNameList.isEmpty()) {
  373.             org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer deserializerCT = new  org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer ();
  374.             DriverConfigurazioneDB driverConfigurazione = (DriverConfigurazioneDB) ConfigurazionePdDReader.getDriverConfigurazionePdD();
  375.             Connection con = null;
  376.             try {
  377.                 con = driverConfigurazione.getConnection("preloading controllaTrafficoConfigPolicies");
  378.                 ServiceManagerProperties jdbcProperties = new ServiceManagerProperties();
  379.                 jdbcProperties.setDatabaseType(driverConfigurazione.getTipoDB());
  380.                 jdbcProperties.setShowSql(true);
  381.                 org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager serviceManager =
  382.                         new org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager(con, jdbcProperties, this.log);
  383.                 org.openspcoop2.core.controllo_traffico.dao.IConfigurazionePolicyService service = serviceManager.getConfigurazionePolicyService();
  384.                
  385.                 org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions cleaner = new org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions();
  386.                
  387.                 for (int i = 0; i < controllaTrafficoConfigPolicyNameList.size(); i++) {
  388.                     String name = controllaTrafficoConfigPolicyNameList.get(i);
  389.                     byte [] content = controllaTrafficoConfigPolicyList.get(i);
  390.                    
  391.                     try {
  392.                         this.logInfo(getMessageInCorso(ID_CONTROLLO_TRAFFICO_CONFIG_POLICY, name));
  393.                         org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy policy = deserializerCT.readConfigurazionePolicy(content);
  394.                         IdPolicy id = new IdPolicy();
  395.                         id.setNome(policy.getIdPolicy());
  396.                         if(!service.exists(id)) {
  397.                             cleaner.clean(policy);
  398.                             service.create(policy);
  399.                         }
  400.                         this.logInfo(getMessageEffettuataConSuccesso(ID_CONTROLLO_TRAFFICO_CONFIG_POLICY, name));
  401.        
  402.                     }catch(Exception e) {
  403.                         this.logError(getMessageError(ID_CONTROLLO_TRAFFICO_CONFIG_POLICY, name, e),e);
  404.                     }
  405.                 }
  406.             }finally {
  407.                 driverConfigurazione.releaseConnection(con);
  408.             }
  409.         }
  410.        
  411.         if(!controllaTrafficoActivePolicyNameList.isEmpty()) {
  412.             org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer deserializerCT = new  org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer ();
  413.             DriverConfigurazioneDB driverConfigurazione = (DriverConfigurazioneDB) ConfigurazionePdDReader.getDriverConfigurazionePdD();
  414.             Connection con = null;
  415.             try {
  416.                 con = driverConfigurazione.getConnection("preloading controllaTrafficoActivePolicies");
  417.                 ServiceManagerProperties jdbcProperties = new ServiceManagerProperties();
  418.                 jdbcProperties.setDatabaseType(driverConfigurazione.getTipoDB());
  419.                 jdbcProperties.setShowSql(true);
  420.                 org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager serviceManager =
  421.                         new org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager(con, jdbcProperties, this.log);
  422.                 org.openspcoop2.core.controllo_traffico.dao.IAttivazionePolicyService service = serviceManager.getAttivazionePolicyService();
  423.                
  424.                 org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions cleaner = new org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions();
  425.                
  426.                 for (int i = 0; i < controllaTrafficoActivePolicyNameList.size(); i++) {
  427.                     String name = controllaTrafficoActivePolicyNameList.get(i);
  428.                     byte [] content = controllaTrafficoActivePolicyList.get(i);
  429.                    
  430.                     try {
  431.                         this.logInfo(getMessageInCorso(ID_CONTROLLO_TRAFFICO_ACTIVE_POLICY, name));
  432.                         org.openspcoop2.core.controllo_traffico.AttivazionePolicy policy = deserializerCT.readAttivazionePolicy(content);
  433.                         IdActivePolicy id = new IdActivePolicy();
  434.                         id.setNome(policy.getIdActivePolicy());
  435.                         if(!service.exists(id)) {
  436.                             cleaner.clean(policy);
  437.                             service.create(policy);
  438.                         }
  439.                         this.logInfo(getMessageEffettuataConSuccesso(ID_CONTROLLO_TRAFFICO_ACTIVE_POLICY, name));
  440.        
  441.                     }catch(Exception e) {
  442.                         this.logError(getMessageError(ID_CONTROLLO_TRAFFICO_ACTIVE_POLICY, name, e),e);
  443.                     }
  444.                 }
  445.             }finally {
  446.                 driverConfigurazione.releaseConnection(con);
  447.             }
  448.         }

  449.     }
  450.    
  451.     private int converPosizione(String posizioneEntry) throws UtilsException {
  452.         try {
  453.             return Integer.valueOf(posizioneEntry);
  454.         }catch(Exception e) {
  455.             throw new UtilsException("Nome file 'wsdl' con posizione non intera '"+posizioneEntry+"': "+e.getMessage());
  456.         }
  457.     }
  458.    
  459.     private String convertVariable(String tmp) throws RegExpException, RegExpNotValidException {
  460.         String pattern = "\\$\\{([A-Za-z0-9_]+)\\}";
  461.         List<String> l = null;
  462.         try {
  463.             l = RegularExpressionEngine.getAllStringFindPattern(tmp, pattern);
  464.         }catch(RegExpNotFoundException notFound) {
  465.             // ignore
  466.         }
  467.         return convertVariable(l, tmp);
  468.     }
  469.     private String convertVariable(List<String> l, String tmp) {
  470.         if(l!=null && !l.isEmpty()) {
  471.             for (String varName : l) {
  472.                 String valueSystemProperty = convertVariabile(varName);
  473.                 if(valueSystemProperty!=null) {
  474.                     String expr = "${"+varName+"}";
  475.                     int i = 0;
  476.                     int max = 1000;
  477.                     while(tmp.contains(expr) && i<max) {
  478.                         tmp = tmp.replace(expr, valueSystemProperty);
  479.                         i++;
  480.                     }
  481.                 }
  482.             }
  483.         }
  484.         return tmp;
  485.     }
  486.     private String convertVariabile(String varName) {
  487.         String valueSystemProperty = System.getenv(varName); // sistema
  488.         if(valueSystemProperty==null) {
  489.             valueSystemProperty = System.getProperty(varName); // java
  490.         }
  491.         return valueSystemProperty;
  492.     }
  493.        
  494.     private static final String PRELOADING_PREFIX = "PreLoading ";
  495.     private String getMessageInCorso(String type, String name) {
  496.         return PRELOADING_PREFIX+type+" ["+name+"] ...";
  497.     }
  498.     private String getMessageEffettuataConSuccesso(String type, String name) {
  499.         return PRELOADING_PREFIX+type+" ["+name+"] effettuato con successo";
  500.     }
  501.     private String getMessageError(String type, String name, Exception e) {
  502.         return PRELOADING_PREFIX+type+" ["+name+"] failed: "+e.getMessage();
  503.     }
  504.     private static final String ID_PLUGIN= "Plugin";
  505.     private static final String ID_REGISTRY = "Registry";
  506.     private static final String ID_CONFIG = "Config";
  507.     private static final String ID_CONTROLLO_TRAFFICO_CONFIG_POLICY = "ControlloTraffico ConfigPolicy";
  508.     private static final String ID_CONTROLLO_TRAFFICO_ACTIVE_POLICY = "ControlloTraffico ActivePolicy";
  509.    
  510.     private UtilsException getUtilsExceptionDocumentoNonAssociabileApi(Document d, RegistroServizi registry) {
  511.         return new UtilsException("Documento '"+d.name+"' non associabile all'Api; la posizione indicata '"+d.index+"' è maggiore delle api disponibili '"+registry.sizeAccordoServizioParteComuneList()+"'");
  512.     }
  513.    
  514.     private void convert(HashMap<String, Document> contentList, byte[] content, String name, org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializerRegistry,
  515.             DriverRegistroServiziDB driverRegistroServizi) {
  516.         try {
  517.             this.logInfo(getMessageInCorso(ID_REGISTRY, name));
  518.             RegistroServizi registry = deserializerRegistry.readRegistroServizi(content); // verifico file
  519.            
  520.             setContent(contentList, name, registry);
  521.            
  522.             convert(registry, driverRegistroServizi);
  523.            
  524.             this.logInfo(getMessageEffettuataConSuccesso(ID_REGISTRY, name));

  525.         }catch(Exception e) {
  526.             this.logError(getMessageError(ID_REGISTRY, name, e),e);
  527.         }
  528.     }
  529.     private void setContent(HashMap<String, Document> contentList, String name, RegistroServizi registry) throws UtilsException {
  530.         if(contentList!=null && contentList.containsKey(name)) {
  531.             Document d = contentList.get(name);
  532.             if(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL.equals(d.name)) {
  533.                 if(registry.sizeAccordoServizioParteComuneList()<=d.index) {
  534.                     throw getUtilsExceptionDocumentoNonAssociabileApi(d,  registry);
  535.                 }
  536.                 registry.getAccordoServizioParteComune(d.index).setByteWsdlConcettuale(d.content);
  537.             }
  538.             else if(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL.equals(d.name)) {
  539.                 if(registry.sizeAccordoServizioParteComuneList()<=d.index) {
  540.                     throw getUtilsExceptionDocumentoNonAssociabileApi(d,  registry);
  541.                 }
  542.                 registry.getAccordoServizioParteComune(d.index).setByteWsdlLogicoErogatore(d.content);
  543.             }
  544.             else if(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL.equals(d.name)) {
  545.                 if(registry.sizeAccordoServizioParteComuneList()<=d.index) {
  546.                     throw getUtilsExceptionDocumentoNonAssociabileApi(d,  registry);
  547.                 }
  548.                 registry.getAccordoServizioParteComune(d.index).setByteWsdlLogicoFruitore(d.content);
  549.             }
  550.         }
  551.     }
  552.     private void convert(RegistroServizi registry, DriverRegistroServiziDB driverRegistroServizi) throws DriverRegistroServiziException {
  553.         try {
  554.             String superUser = null;
  555.            
  556.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter xmlDataConverter =
  557.                     new org.openspcoop2.core.registry.driver.utils.XMLDataConverter(registry,driverRegistroServizi,CostantiConfigurazione.REGISTRO_DB.getValue(),
  558.                             superUser,this.protocolloDefault,
  559.                             this.log,this.log);
  560.             boolean reset = false;
  561.             boolean mantieniFruitoriEsistenti = true;
  562.             boolean aggiornamentoSoggetti = false;
  563.             boolean updateEnabled = false; // per non modificare eventuali configurazioni gia' caricate, che possono essere state modificate
  564.             xmlDataConverter.convertXML(reset, mantieniFruitoriEsistenti,aggiornamentoSoggetti,StatiAccordo.operativo, updateEnabled);
  565.         }
  566.         finally {
  567.             // nop
  568.         }
  569.     }
  570.    
  571.     private boolean existsGenericProperties(DriverConfigurazioneDB driverConfigurazione, GenericProperties genericProperties) throws DriverConfigurazioneException {
  572.         try {
  573.             return driverConfigurazione.getGenericProperties(genericProperties.getTipologia(), genericProperties.getNome()) != null;
  574.         }catch(DriverConfigurazioneNotFound notFound) {
  575.             // ignore
  576.         }
  577.         return false;
  578.     }
  579.    
  580.     private void convert(DriverConfigurazioneDB driverConfigurazione, byte[] content, Configurazione config, Openspcoop2 op2) throws UtilsException, DriverConfigurazioneException {
  581.         byte [] contentXml = content;

  582.         if(config==null) {
  583.             op2.setConfigurazione(new Configurazione());
  584.             // ne carico una dummy, tanto non la uso
  585.             op2.getConfigurazione().setAccessoRegistro(new AccessoRegistro());
  586.             AccessoRegistroRegistro registro = new AccessoRegistroRegistro();
  587.             registro.setTipo(RegistroTipo.DB);
  588.             registro.setNome("dummy");
  589.             registro.setLocation("dummy");
  590.             op2.getConfigurazione().getAccessoRegistro().addRegistro(registro);
  591.             op2.getConfigurazione().setInoltroBusteNonRiscontrate(new InoltroBusteNonRiscontrate());
  592.             op2.getConfigurazione().getInoltroBusteNonRiscontrate().setCadenza("1");
  593.             op2.getConfigurazione().setMessaggiDiagnostici(new MessaggiDiagnostici());
  594.             op2.getConfigurazione().getMessaggiDiagnostici().setSeverita(Severita.INFO_INTEGRATION);
  595.             op2.getConfigurazione().getMessaggiDiagnostici().setSeveritaLog4j(Severita.INFO_INTEGRATION);
  596.            
  597.             CleanerOpenSPCoop2Extensions cleaner = new CleanerOpenSPCoop2Extensions();
  598.             cleaner.clean(op2.getConfigurazione());
  599.             for (Soggetto soggettoConfig : op2.getSoggettoList()) {
  600.                 cleaner.clean(soggettoConfig);
  601.                
  602.                 for (PortaDelegata pdConfig : soggettoConfig.getPortaDelegataList()) {
  603.                     cleaner.clean(pdConfig);
  604.                 }
  605.                 for (PortaApplicativa paConfig : soggettoConfig.getPortaApplicativaList()) {
  606.                     cleaner.clean(paConfig);
  607.                 }
  608.                 for (ServizioApplicativo saConfig : soggettoConfig.getServizioApplicativoList()) {
  609.                     cleaner.clean(saConfig);
  610.                 }
  611.             }
  612.            
  613.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  614.             op2.writeTo(bout, WriteToSerializerType.XML_JAXB);
  615.             contentXml = bout.toByteArray();
  616.            
  617.         }
  618.        
  619.         boolean udpateConfigurazioneDisabled = false;
  620.         boolean tabellaSoggettiCondivisaPddRegserv = true;
  621.         String superUser = null;
  622.         org.openspcoop2.core.config.driver.utils.XMLDataConverter xmlDataConverter =
  623.                 new org.openspcoop2.core.config.driver.utils.XMLDataConverter(contentXml,driverConfigurazione,CostantiConfigurazione.CONFIGURAZIONE_DB,
  624.                         udpateConfigurazioneDisabled,tabellaSoggettiCondivisaPddRegserv,superUser,this.protocolloDefault,
  625.                         this.log,this.log);
  626.         boolean reset = false;
  627.         boolean aggiornamentoSoggetti = false;
  628.         boolean createMappingErogazioneFruizione = true; // serve per creare il mapping ad es. sulle fruizioni ed erogazioni
  629.         boolean updateEnabled = false; // per non modificare eventuali configurazioni gia' caricate, che possono essere state modificate
  630.         xmlDataConverter.convertXML(reset, aggiornamentoSoggetti, createMappingErogazioneFruizione, updateEnabled);
  631.     }
  632. }

  633. class Document{
  634.    
  635.     byte[] content;
  636.     int index;
  637.     String name;
  638.    
  639. }