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.registry.RegistroServizi;
  55. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  56. import org.openspcoop2.core.registry.constants.StatiAccordo;
  57. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  58. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  59. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  60. import org.openspcoop2.generic_project.exception.NotImplementedException;
  61. import org.openspcoop2.generic_project.exception.ServiceException;
  62. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  63. import org.openspcoop2.message.xml.MessageXMLUtils;
  64. import org.openspcoop2.protocol.registry.RegistroServiziReader;
  65. import org.openspcoop2.utils.Utilities;
  66. import org.openspcoop2.utils.UtilsException;
  67. import org.openspcoop2.utils.beans.WriteToSerializerType;
  68. import org.openspcoop2.utils.io.ZipUtilities;
  69. import org.openspcoop2.utils.regexp.RegExpException;
  70. import org.openspcoop2.utils.regexp.RegExpNotFoundException;
  71. import org.openspcoop2.utils.regexp.RegExpNotValidException;
  72. import org.openspcoop2.utils.regexp.RegularExpressionEngine;
  73. import org.openspcoop2.utils.resources.FileSystemUtilities;
  74. import org.slf4j.Logger;
  75. import org.w3c.dom.Element;

  76. /**
  77.  *  ZipConfigurationReader
  78.  *
  79.  * @author Poli Andrea (apoli@link.it)
  80.  * @author $Author$
  81.  * @version $Rev$, $Date$
  82.  */
  83. public class PreLoadingConfig  {

  84.     private static final String SOGGETTO_LOCALE = "@SOGGETTO_LOCALE@";
  85.     private static final String GOVWAY_ENTITY_NAME = "GOVWAY_DEFAULT_ENTITY_NAME";
  86.     private static final String VARIABLE_GOVWAY_ENTITY_NAME = "${"+GOVWAY_ENTITY_NAME+"}";
  87.    
  88.     private Logger log;
  89.     private Logger logDriver;
  90.     private String protocolloDefault;
  91.     private IDSoggetto dominio;
  92.     public PreLoadingConfig(Logger log, Logger logDriver, String protocolloDefault, IDSoggetto dominio) {
  93.         this.log = log;
  94.         this.logDriver = logDriver;
  95.         this.protocolloDefault = protocolloDefault;
  96.         this.dominio = dominio;
  97.     }

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

  246.         if(!registryNameList.isEmpty()) {
  247.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializerRegistry = new  org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer ();
  248.             java.util.Map<String, IDriverRegistroServiziGet> mapRegistri = RegistroServiziReader.getDriverRegistroServizi();
  249.             DriverRegistroServiziDB driverRegistroServizi = (DriverRegistroServiziDB) mapRegistri.values().iterator().next();
  250.            
  251.             for (int i = 0; i < registryNameList.size(); i++) {
  252.                 String name = registryNameList.get(i);
  253.                 byte [] content = registryList.get(i);
  254.                
  255.                 convert(contentList, content, name, deserializerRegistry, driverRegistroServizi);
  256.             }
  257.         }
  258.        
  259.         if(!configNameList.isEmpty()) {
  260.             org.openspcoop2.core.config.utils.serializer.JaxbDeserializer deserializerConfig = new  org.openspcoop2.core.config.utils.serializer.JaxbDeserializer ();
  261.             DriverConfigurazioneDB driverConfigurazione = (DriverConfigurazioneDB) ConfigurazionePdDReader.getDriverConfigurazionePdD();
  262.            
  263.             for (int i = 0; i < configNameList.size(); i++) {
  264.                 String name = configNameList.get(i);
  265.                 byte [] content = configList.get(i);
  266.                
  267.                 try {
  268.                     this.logInfo(getMessageInCorso(ID_CONFIG, name));
  269.                     Openspcoop2 op2 = deserializerConfig.readOpenspcoop2(content);
  270.                    
  271.                     Configurazione config = op2.getConfigurazione();
  272.                     if(config!=null &&
  273.                         config.getGenericPropertiesList()!=null && !config.getGenericPropertiesList().isEmpty()) {
  274.                         for (GenericProperties genericProperties : config.getGenericPropertiesList()) {
  275.                             boolean exists = existsGenericProperties(driverConfigurazione, genericProperties);
  276.                             if(!exists) {
  277.                                 driverConfigurazione.createGenericProperties(genericProperties);
  278.                             }
  279.                         }
  280.                     }
  281.                    
  282.                     if(op2.sizeSoggettoList()>0) {
  283.                         convert(driverConfigurazione, content, config, op2);
  284.                     }
  285.                    
  286.                     this.logInfo(getMessageEffettuataConSuccesso(ID_CONFIG, name));
  287.    
  288.                 }catch(Exception e) {
  289.                     this.logError(getMessageError(ID_CONFIG, name, e),e);
  290.                 }
  291.             }
  292.         }
  293.        
  294.        
  295.        
  296.         if(!controllaTrafficoConfigPolicyNameList.isEmpty()) {
  297.             org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer deserializerCT = new  org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer ();
  298.             DriverConfigurazioneDB driverConfigurazione = (DriverConfigurazioneDB) ConfigurazionePdDReader.getDriverConfigurazionePdD();
  299.             Connection con = null;
  300.             try {
  301.                 con = driverConfigurazione.getConnection("preloading controllaTrafficoConfigPolicies");
  302.                 ServiceManagerProperties jdbcProperties = new ServiceManagerProperties();
  303.                 jdbcProperties.setDatabaseType(driverConfigurazione.getTipoDB());
  304.                 jdbcProperties.setShowSql(true);
  305.                 org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager serviceManager =
  306.                         new org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager(con, jdbcProperties, this.log);
  307.                 org.openspcoop2.core.controllo_traffico.dao.IConfigurazionePolicyService service = serviceManager.getConfigurazionePolicyService();
  308.                
  309.                 org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions cleaner = new org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions();
  310.                
  311.                 for (int i = 0; i < controllaTrafficoConfigPolicyNameList.size(); i++) {
  312.                     String name = controllaTrafficoConfigPolicyNameList.get(i);
  313.                     byte [] content = controllaTrafficoConfigPolicyList.get(i);
  314.                    
  315.                     try {
  316.                         this.logInfo(getMessageInCorso(ID_CONTROLLO_TRAFFICO_CONFIG_POLICY, name));
  317.                         org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy policy = deserializerCT.readConfigurazionePolicy(content);
  318.                         IdPolicy id = new IdPolicy();
  319.                         id.setNome(policy.getIdPolicy());
  320.                         if(!service.exists(id)) {
  321.                             cleaner.clean(policy);
  322.                             service.create(policy);
  323.                         }
  324.                         this.logInfo(getMessageEffettuataConSuccesso(ID_CONTROLLO_TRAFFICO_CONFIG_POLICY, name));
  325.        
  326.                     }catch(Exception e) {
  327.                         this.logError(getMessageError(ID_CONTROLLO_TRAFFICO_CONFIG_POLICY, name, e),e);
  328.                     }
  329.                 }
  330.             }finally {
  331.                 driverConfigurazione.releaseConnection(con);
  332.             }
  333.         }
  334.        
  335.         if(!controllaTrafficoActivePolicyNameList.isEmpty()) {
  336.             org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer deserializerCT = new  org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer ();
  337.             DriverConfigurazioneDB driverConfigurazione = (DriverConfigurazioneDB) ConfigurazionePdDReader.getDriverConfigurazionePdD();
  338.             Connection con = null;
  339.             try {
  340.                 con = driverConfigurazione.getConnection("preloading controllaTrafficoActivePolicies");
  341.                 ServiceManagerProperties jdbcProperties = new ServiceManagerProperties();
  342.                 jdbcProperties.setDatabaseType(driverConfigurazione.getTipoDB());
  343.                 jdbcProperties.setShowSql(true);
  344.                 org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager serviceManager =
  345.                         new org.openspcoop2.core.controllo_traffico.dao.jdbc.JDBCServiceManager(con, jdbcProperties, this.log);
  346.                 org.openspcoop2.core.controllo_traffico.dao.IAttivazionePolicyService service = serviceManager.getAttivazionePolicyService();
  347.                
  348.                 org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions cleaner = new org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions();
  349.                
  350.                 for (int i = 0; i < controllaTrafficoActivePolicyNameList.size(); i++) {
  351.                     String name = controllaTrafficoActivePolicyNameList.get(i);
  352.                     byte [] content = controllaTrafficoActivePolicyList.get(i);
  353.                    
  354.                     try {
  355.                         this.logInfo(getMessageInCorso(ID_CONTROLLO_TRAFFICO_ACTIVE_POLICY, name));
  356.                         org.openspcoop2.core.controllo_traffico.AttivazionePolicy policy = deserializerCT.readAttivazionePolicy(content);
  357.                         IdActivePolicy id = new IdActivePolicy();
  358.                         id.setNome(policy.getIdActivePolicy());
  359.                         if(!service.exists(id)) {
  360.                             cleaner.clean(policy);
  361.                             service.create(policy);
  362.                         }
  363.                         this.logInfo(getMessageEffettuataConSuccesso(ID_CONTROLLO_TRAFFICO_ACTIVE_POLICY, name));
  364.        
  365.                     }catch(Exception e) {
  366.                         this.logError(getMessageError(ID_CONTROLLO_TRAFFICO_ACTIVE_POLICY, name, e),e);
  367.                     }
  368.                 }
  369.             }finally {
  370.                 driverConfigurazione.releaseConnection(con);
  371.             }
  372.         }

  373.     }
  374.    
  375.     private int converPosizione(String posizioneEntry) throws UtilsException {
  376.         try {
  377.             return Integer.valueOf(posizioneEntry);
  378.         }catch(Exception e) {
  379.             throw new UtilsException("Nome file 'wsdl' con posizione non intera '"+posizioneEntry+"': "+e.getMessage());
  380.         }
  381.     }
  382.    
  383.     private String convertVariable(String tmp) throws RegExpException, RegExpNotValidException {
  384.         String pattern = "\\$\\{([A-Za-z0-9_]+)\\}";
  385.         List<String> l = null;
  386.         try {
  387.             l = RegularExpressionEngine.getAllStringFindPattern(tmp, pattern);
  388.         }catch(RegExpNotFoundException notFound) {
  389.             // ignore
  390.         }
  391.         return convertVariable(l, tmp);
  392.     }
  393.     private String convertVariable(List<String> l, String tmp) {
  394.         if(l!=null && !l.isEmpty()) {
  395.             for (String varName : l) {
  396.                 String valueSystemProperty = convertVariabile(varName);
  397.                 if(valueSystemProperty!=null) {
  398.                     String expr = "${"+varName+"}";
  399.                     int i = 0;
  400.                     int max = 1000;
  401.                     while(tmp.contains(expr) && i<max) {
  402.                         tmp = tmp.replace(expr, valueSystemProperty);
  403.                         i++;
  404.                     }
  405.                 }
  406.             }
  407.         }
  408.         return tmp;
  409.     }
  410.     private String convertVariabile(String varName) {
  411.         String valueSystemProperty = System.getenv(varName); // sistema
  412.         if(valueSystemProperty==null) {
  413.             valueSystemProperty = System.getProperty(varName); // java
  414.         }
  415.         return valueSystemProperty;
  416.     }
  417.        
  418.     private static final String PRELOADING_PREFIX = "PreLoading ";
  419.     private String getMessageInCorso(String type, String name) {
  420.         return PRELOADING_PREFIX+type+" ["+name+"] ...";
  421.     }
  422.     private String getMessageEffettuataConSuccesso(String type, String name) {
  423.         return PRELOADING_PREFIX+type+" ["+name+"] effettuato con successo";
  424.     }
  425.     private String getMessageError(String type, String name, Exception e) {
  426.         return PRELOADING_PREFIX+type+" ["+name+"] failed: "+e.getMessage();
  427.     }
  428.     private static final String ID_REGISTRY = "Registry";
  429.     private static final String ID_CONFIG = "Config";
  430.     private static final String ID_CONTROLLO_TRAFFICO_CONFIG_POLICY = "ControlloTraffico ConfigPolicy";
  431.     private static final String ID_CONTROLLO_TRAFFICO_ACTIVE_POLICY = "ControlloTraffico ActivePolicy";
  432.    
  433.     private UtilsException getUtilsExceptionDocumentoNonAssociabileApi(Document d, RegistroServizi registry) {
  434.         return new UtilsException("Documento '"+d.name+"' non associabile all'Api; la posizione indicata '"+d.index+"' รจ maggiore delle api disponibili '"+registry.sizeAccordoServizioParteComuneList()+"'");
  435.     }
  436.    
  437.     private void convert(HashMap<String, Document> contentList, byte[] content, String name, org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializerRegistry,
  438.             DriverRegistroServiziDB driverRegistroServizi) {
  439.         try {
  440.             this.logInfo(getMessageInCorso(ID_REGISTRY, name));
  441.             RegistroServizi registry = deserializerRegistry.readRegistroServizi(content); // verifico file
  442.            
  443.             setContent(contentList, name, registry);
  444.            
  445.             convert(registry, driverRegistroServizi);
  446.            
  447.             this.logInfo(getMessageEffettuataConSuccesso(ID_REGISTRY, name));

  448.         }catch(Exception e) {
  449.             this.logError(getMessageError(ID_REGISTRY, name, e),e);
  450.         }
  451.     }
  452.     private void setContent(HashMap<String, Document> contentList, String name, RegistroServizi registry) throws UtilsException {
  453.         if(contentList!=null && contentList.containsKey(name)) {
  454.             Document d = contentList.get(name);
  455.             if(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL.equals(d.name)) {
  456.                 if(registry.sizeAccordoServizioParteComuneList()<=d.index) {
  457.                     throw getUtilsExceptionDocumentoNonAssociabileApi(d,  registry);
  458.                 }
  459.                 registry.getAccordoServizioParteComune(d.index).setByteWsdlConcettuale(d.content);
  460.             }
  461.             else if(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL.equals(d.name)) {
  462.                 if(registry.sizeAccordoServizioParteComuneList()<=d.index) {
  463.                     throw getUtilsExceptionDocumentoNonAssociabileApi(d,  registry);
  464.                 }
  465.                 registry.getAccordoServizioParteComune(d.index).setByteWsdlLogicoErogatore(d.content);
  466.             }
  467.             else if(CostantiRegistroServizi.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL.equals(d.name)) {
  468.                 if(registry.sizeAccordoServizioParteComuneList()<=d.index) {
  469.                     throw getUtilsExceptionDocumentoNonAssociabileApi(d,  registry);
  470.                 }
  471.                 registry.getAccordoServizioParteComune(d.index).setByteWsdlLogicoFruitore(d.content);
  472.             }
  473.         }
  474.     }
  475.     private void convert(RegistroServizi registry, DriverRegistroServiziDB driverRegistroServizi) throws DriverRegistroServiziException {
  476.         try {
  477.             String superUser = null;
  478.            
  479.             org.openspcoop2.core.registry.driver.utils.XMLDataConverter xmlDataConverter =
  480.                     new org.openspcoop2.core.registry.driver.utils.XMLDataConverter(registry,driverRegistroServizi,CostantiConfigurazione.REGISTRO_DB.getValue(),
  481.                             superUser,this.protocolloDefault,
  482.                             this.log,this.log);
  483.             boolean reset = false;
  484.             boolean mantieniFruitoriEsistenti = true;
  485.             boolean aggiornamentoSoggetti = false;
  486.             boolean updateEnabled = false; // per non modificare eventuali configurazioni gia' caricate, che possono essere state modificate
  487.             xmlDataConverter.convertXML(reset, mantieniFruitoriEsistenti,aggiornamentoSoggetti,StatiAccordo.operativo, updateEnabled);
  488.         }
  489.         finally {
  490.             // nop
  491.         }
  492.     }
  493.    
  494.     private boolean existsGenericProperties(DriverConfigurazioneDB driverConfigurazione, GenericProperties genericProperties) throws DriverConfigurazioneException {
  495.         try {
  496.             return driverConfigurazione.getGenericProperties(genericProperties.getTipologia(), genericProperties.getNome()) != null;
  497.         }catch(DriverConfigurazioneNotFound notFound) {
  498.             // ignore
  499.         }
  500.         return false;
  501.     }
  502.    
  503.     private void convert(DriverConfigurazioneDB driverConfigurazione, byte[] content, Configurazione config, Openspcoop2 op2) throws UtilsException, DriverConfigurazioneException {
  504.         byte [] contentXml = content;

  505.         if(config==null) {
  506.             op2.setConfigurazione(new Configurazione());
  507.             // ne carico una dummy, tanto non la uso
  508.             op2.getConfigurazione().setAccessoRegistro(new AccessoRegistro());
  509.             AccessoRegistroRegistro registro = new AccessoRegistroRegistro();
  510.             registro.setTipo(RegistroTipo.DB);
  511.             registro.setNome("dummy");
  512.             registro.setLocation("dummy");
  513.             op2.getConfigurazione().getAccessoRegistro().addRegistro(registro);
  514.             op2.getConfigurazione().setInoltroBusteNonRiscontrate(new InoltroBusteNonRiscontrate());
  515.             op2.getConfigurazione().getInoltroBusteNonRiscontrate().setCadenza("1");
  516.             op2.getConfigurazione().setMessaggiDiagnostici(new MessaggiDiagnostici());
  517.             op2.getConfigurazione().getMessaggiDiagnostici().setSeverita(Severita.INFO_INTEGRATION);
  518.             op2.getConfigurazione().getMessaggiDiagnostici().setSeveritaLog4j(Severita.INFO_INTEGRATION);
  519.            
  520.             CleanerOpenSPCoop2Extensions cleaner = new CleanerOpenSPCoop2Extensions();
  521.             cleaner.clean(op2.getConfigurazione());
  522.             for (Soggetto soggettoConfig : op2.getSoggettoList()) {
  523.                 cleaner.clean(soggettoConfig);
  524.                
  525.                 for (PortaDelegata pdConfig : soggettoConfig.getPortaDelegataList()) {
  526.                     cleaner.clean(pdConfig);
  527.                 }
  528.                 for (PortaApplicativa paConfig : soggettoConfig.getPortaApplicativaList()) {
  529.                     cleaner.clean(paConfig);
  530.                 }
  531.                 for (ServizioApplicativo saConfig : soggettoConfig.getServizioApplicativoList()) {
  532.                     cleaner.clean(saConfig);
  533.                 }
  534.             }
  535.            
  536.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  537.             op2.writeTo(bout, WriteToSerializerType.XML_JAXB);
  538.             contentXml = bout.toByteArray();
  539.            
  540.         }
  541.        
  542.         boolean udpateConfigurazioneDisabled = false;
  543.         boolean tabellaSoggettiCondivisaPddRegserv = true;
  544.         String superUser = null;
  545.         org.openspcoop2.core.config.driver.utils.XMLDataConverter xmlDataConverter =
  546.                 new org.openspcoop2.core.config.driver.utils.XMLDataConverter(contentXml,driverConfigurazione,CostantiConfigurazione.CONFIGURAZIONE_DB,
  547.                         udpateConfigurazioneDisabled,tabellaSoggettiCondivisaPddRegserv,superUser,this.protocolloDefault,
  548.                         this.log,this.log);
  549.         boolean reset = false;
  550.         boolean aggiornamentoSoggetti = false;
  551.         boolean createMappingErogazioneFruizione = true; // serve per creare il mapping ad es. sulle fruizioni ed erogazioni
  552.         boolean updateEnabled = false; // per non modificare eventuali configurazioni gia' caricate, che possono essere state modificate
  553.         xmlDataConverter.convertXML(reset, aggiornamentoSoggetti, createMappingErogazioneFruizione, updateEnabled);
  554.     }
  555. }

  556. class Document{
  557.    
  558.     byte[] content;
  559.     int index;
  560.     String name;
  561.    
  562. }