ValidazioneSemanticaMainProcessor.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.File;
  22. import java.io.FileInputStream;
  23. import java.net.URL;
  24. import java.sql.Connection;
  25. import java.sql.DriverManager;

  26. import org.apache.logging.log4j.Level;
  27. import org.openspcoop2.core.config.driver.ValidazioneSemantica;
  28. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  29. import org.openspcoop2.core.config.driver.xml.DriverConfigurazioneXML;
  30. import org.openspcoop2.utils.LoggerWrapperFactory;
  31. import org.openspcoop2.utils.Utilities;
  32. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  33. import org.openspcoop2.utils.resources.FileSystemUtilities;
  34. import org.openspcoop2.utils.resources.Loader;
  35. import org.slf4j.Logger;

  36. /**
  37.  * Validazione Semantica
  38.  *
  39.  * @author Sandra Giangrandi (sandra@link.it)
  40.  * @author $Author$
  41.  * @version $Rev$, $Date$
  42.  */
  43. public class ValidazioneSemanticaMainProcessor {

  44.         /**
  45.      * @param args
  46.      */
  47.     public static void main(String[] args) throws Exception  {
  48.         // TODO Auto-generated method stub
  49.        
  50.         if (args.length  < 4) {
  51.             String errorMsg = "ERROR, Usage:  java ValidazioneSemanticaMainProcessor commonProperties tipoConfigurazione proprietaConfigurazione validazioneConfigurazione";
  52.             System.err.println(errorMsg);
  53.             throw new Exception(errorMsg);
  54.         }

  55.         // Inizializzo logger
  56. //      System.out.println("LUNGHEZZA: "+args.length);
  57. //      for (int i = 0; i < args.length; i++) {
  58. //          System.out.println("ARG["+i+"]=["+args[i]+"]");
  59. //      }
  60.         try{
  61.             if(args.length==5){
  62.                 LoggerWrapperFactory.setLogConfiguration(args[4]);
  63.             }else{
  64.                 URL url = ValidazioneSemanticaMainProcessor.class.getResource("/validator.log4j2.properties");
  65.                 if(url!=null){
  66.                     LoggerWrapperFactory.setLogConfiguration(url);
  67.                 }
  68.                 else{
  69.                     File logFile = FileSystemUtilities.createTempFile("testValidazioneSemanticaConfigurazione_", ".log");
  70.                     System.out.println("LogMessages write in "+logFile.getAbsolutePath());
  71.                     LoggerWrapperFactory.setDefaultLogConfiguration(Level.ALL, false, null, logFile, "%p <%d{dd-MM-yyyy HH:mm:ss}> %C.%M(%L): %m %n %n");
  72.                 }
  73.             }
  74.         }catch(Exception e) {
  75.             String errorMsg = "Errore durante il caricamento del file di log: "+e.getMessage();
  76.             System.err.println(errorMsg);
  77.             System.out.println("Args.length: "+args.length);
  78.             for (int i = 0; i < args.length; i++) {
  79.                 System.out.println("Arg["+i+"]=["+args[i]+"]");
  80.             }
  81.             throw new Exception(errorMsg,e);
  82.         }  
  83.         Logger log = LoggerWrapperFactory.getLogger("validatoreDatiConfigurazione");
  84.        
  85.        
  86.         java.util.Properties commonProperties = new java.util.Properties();
  87.         try{
  88.             try(FileInputStream fin = new FileInputStream(args[0])){
  89.                 commonProperties.load(fin);
  90.             }
  91.         }catch(java.io.IOException e) {
  92.             String errorMsg = "Errore durante il caricamento del file di properties ["+args[0]+"] : "+e.getMessage();
  93.             log.error(errorMsg,e);
  94.             throw new Exception(errorMsg,e);
  95.         }
  96.        
  97.         java.util.Properties reader = new java.util.Properties();
  98.         try{
  99.             try(FileInputStream fin = new FileInputStream(args[2])){
  100.                 reader.load(fin);
  101.             }
  102.         }catch(java.io.IOException e) {
  103.             String errorMsg = "Errore durante il caricamento del file di properties ["+args[2]+"] : "+e.getMessage();
  104.             log.error(errorMsg,e);
  105.             throw new Exception(errorMsg,e);
  106.         }
  107.        
  108.                
  109.         // Lettura configurazione
  110.         org.openspcoop2.core.config.Openspcoop2 configurazione = null;
  111.         Connection connectionDB = null;
  112.         String tipoConfigurazione = args[1];
  113.         boolean validaSezioneConfigurazione = Boolean.parseBoolean(args[2]);
  114.        
  115.         if("xml".equals(tipoConfigurazione)){
  116.            
  117.             // Configurazione XML
  118.             String path = reader.getProperty("openspcoop2.configurazione.xml");
  119.             if(path==null){
  120.                 throw new Exception("Non e' stato definito il path dove localizzare la configurazione xml");
  121.             }else{
  122.                 path = path.trim();
  123.             }
  124.            
  125.             DriverConfigurazioneXML driver = new DriverConfigurazioneXML(path,log);
  126.             if(driver.create)
  127.                 log.info("Inizializzata Configurazione PdD XML");
  128.             else
  129.                 throw new Exception("ConfigurazionePdD XML non inizializzata");
  130.            
  131.             configurazione = driver.getImmagineCompletaConfigurazionePdD();

  132.         }
  133.         else if("db".equals(tipoConfigurazione)){
  134.            
  135.             // Configurazione DB
  136.            
  137.             // Database
  138.             String tipoDatabase = reader.getProperty("openspcoop2.configurazione.db.tipo");
  139.             if(tipoDatabase==null){
  140.                 throw new Exception("Non e' stato definito il tipo di database");
  141.             }else{
  142.                 tipoDatabase = tipoDatabase.trim();
  143.             }
  144.            
  145.             String dataSource = reader.getProperty("openspcoop2.configurazione.db.dataSource");
  146.             if(dataSource!=null){
  147.                 dataSource = dataSource.trim();
  148.                 java.util.Properties context = Utilities.readProperties("openspcoop2.configurazione.db.context.",reader);
  149.                
  150.                 DriverConfigurazioneDB driver = new DriverConfigurazioneDB(dataSource,context,log,tipoDatabase);
  151.                 if(driver.create)
  152.                     log.info("Inizializzata Configurazione DB");
  153.                 else
  154.                     throw new Exception("Configurazione DB non inizializzata");
  155.                
  156.                 configurazione = driver.getImmagineCompletaConfigurazionePdD();
  157.                
  158.             }else{
  159.                 String connection = reader.getProperty("openspcoop2.configurazione.db.url");
  160.                 if(connection==null){
  161.                     throw new Exception("Non e' stata definita una destinazione ne attraverso un datasource, ne attraverso una connessione diretta");
  162.                 }
  163.                 connection = connection.trim();
  164.                 String driverJDBC = reader.getProperty("openspcoop2.configurazione.db.driver");
  165.                 if(driverJDBC==null){
  166.                     throw new Exception("Connessione diretta: non e' stato definito il Driver");
  167.                 }
  168.                 driverJDBC =driverJDBC.trim();
  169.                 String username = reader.getProperty("openspcoop2.configurazione.db.user");
  170.                 String password = reader.getProperty("openspcoop2.configurazione.db.password");
  171.                 if(username!=null){
  172.                     username = username.trim();
  173.                 }
  174.                 if(password!=null){
  175.                     password = password.trim();
  176.                 }
  177.                
  178.                 // Carico driver JDBC
  179.                 Loader.getInstance().newInstance(driverJDBC);
  180.                
  181.                 try{
  182.                     if(username!=null){
  183.                         connectionDB = DriverManager.getConnection(connection, username, password);
  184.                     }else{
  185.                         connectionDB = DriverManager.getConnection(connection);
  186.                     }
  187.                    
  188.                     DriverConfigurazioneDB driver = new DriverConfigurazioneDB(connectionDB,log,tipoDatabase);
  189.                     if(driver.create)
  190.                         log.info("Inizializzata Configurazione DB");
  191.                     else
  192.                         throw new Exception("Configurazione DB non inizializzata");
  193.                    
  194.                     configurazione = driver.getImmagineCompletaConfigurazionePdD();
  195.                    
  196.                 }finally{
  197.                     try{
  198.                         JDBCUtilities.closeConnection(DriverConfigurazioneDB.getCheckLogger(), connectionDB, DriverConfigurazioneDB.isCheckAutocommit(), DriverConfigurazioneDB.isCheckIsClosed());
  199.                     }catch(Exception e){
  200.                         // close
  201.                     }
  202.                 }
  203.             }  
  204.            
  205.         }
  206.         else{
  207.             throw new Exception("Tipo di configurazione ["+tipoConfigurazione+"] non gestita");
  208.         }
  209.        

  210.         // VALIDAZIONE SEMANTICA
  211.         try{
  212.             String tipiConnettori = commonProperties.getProperty("openspcoop2.tipiConnettori");
  213.             if(tipiConnettori==null){
  214.                 throw new Exception("Non sono stati definiti i tipi di connettori supportati");
  215.             }else{
  216.                 tipiConnettori = tipiConnettori.trim();
  217.             }
  218.             String [] tipoConnettoriArray = tipiConnettori.split(",");
  219.             for (int i = 0; i < tipoConnettoriArray.length; i++) {
  220.                 tipoConnettoriArray[i]=tipoConnettoriArray[i].trim();
  221.             }
  222.            
  223.             String tipiSoggetti = commonProperties.getProperty("openspcoop2.tipiSoggetti");
  224.             if(tipiSoggetti==null){
  225.                 throw new Exception("Non sono stati definiti i tipi di soggetti supportati");
  226.             }else{
  227.                 tipiSoggetti = tipiSoggetti.trim();
  228.             }
  229.             String [] tipoSoggettiArray = tipiSoggetti.split(",");
  230.             for (int i = 0; i < tipoSoggettiArray.length; i++) {
  231.                 tipoSoggettiArray[i]=tipoSoggettiArray[i].trim();
  232.             }
  233.            
  234.             String tipiServiziSoap = commonProperties.getProperty("openspcoop2.tipiServizi.soap");
  235.             if(tipiServiziSoap==null){
  236.                 throw new Exception("Non sono stati definiti i tipi di Servizi supportati");
  237.             }else{
  238.                 tipiServiziSoap = tipiServiziSoap.trim();
  239.             }
  240.             String [] tipoServiziSoapArray = tipiServiziSoap.split(",");
  241.             for (int i = 0; i < tipoServiziSoapArray.length; i++) {
  242.                 tipoServiziSoapArray[i]=tipoServiziSoapArray[i].trim();
  243.             }
  244.            
  245.             String tipiServiziRest = commonProperties.getProperty("openspcoop2.tipiServizi.rest");
  246.             if(tipiServiziRest==null){
  247.                 throw new Exception("Non sono stati definiti i tipi di Servizi supportati");
  248.             }else{
  249.                 tipiServiziRest = tipiServiziRest.trim();
  250.             }
  251.             String [] tipoServiziRestArray = tipiServiziRest.split(",");
  252.             for (int i = 0; i < tipoServiziRestArray.length; i++) {
  253.                 tipoServiziRestArray[i]=tipoServiziRestArray[i].trim();
  254.             }
  255.            
  256.             String tipiDiagnosticiAppender = commonProperties.getProperty("openspcoop2.diagnostici.appender");
  257.             if(tipiDiagnosticiAppender==null){
  258.                 throw new Exception("Non sono stati definiti i tipi di appender supportati (diagnostici)");
  259.             }else{
  260.                 tipiDiagnosticiAppender = tipiDiagnosticiAppender.trim();
  261.             }
  262.             String [] tipiDiagnosticiAppenderArray = tipiDiagnosticiAppender.split(",");
  263.             for (int i = 0; i < tipiDiagnosticiAppenderArray.length; i++) {
  264.                 tipiDiagnosticiAppenderArray[i]=tipiDiagnosticiAppenderArray[i].trim();
  265.             }
  266.            
  267.             String tipiTracceAppender = commonProperties.getProperty("openspcoop2.tracce.appender");
  268.             if(tipiTracceAppender==null){
  269.                 throw new Exception("Non sono stati definiti i tipi di appender supportati (tracce)");
  270.             }else{
  271.                 tipiTracceAppender = tipiTracceAppender.trim();
  272.             }
  273.             String [] tipiTracceAppenderArray = tipiTracceAppender.split(",");
  274.             for (int i = 0; i < tipiTracceAppenderArray.length; i++) {
  275.                 tipiTracceAppenderArray[i]=tipiTracceAppenderArray[i].trim();
  276.             }
  277.            
  278.             String tipiDumpAppender = commonProperties.getProperty("openspcoop2.dump.appender");
  279.             if(tipiDumpAppender==null){
  280.                 throw new Exception("Non sono stati definiti i tipi di appender supportati (dump)");
  281.             }else{
  282.                 tipiDumpAppender = tipiDumpAppender.trim();
  283.             }
  284.             String [] tipiDumpAppenderArray = tipiDumpAppender.split(",");
  285.             for (int i = 0; i < tipiDumpAppenderArray.length; i++) {
  286.                 tipiDumpAppenderArray[i]=tipiDumpAppenderArray[i].trim();
  287.             }
  288.            
  289.             String tipiAutenticazionePortaDelegata = commonProperties.getProperty("openspcoop2.autenticazione.pd");
  290.             if(tipiAutenticazionePortaDelegata==null){
  291.                 throw new Exception("Non sono stati definiti i tipi di autenticazione per la porta delegata supportati");
  292.             }else{
  293.                 tipiAutenticazionePortaDelegata = tipiAutenticazionePortaDelegata.trim();
  294.             }
  295.             String [] tipiAutenticazionePortaDelegataArray = tipiAutenticazionePortaDelegata.split(",");
  296.             for (int i = 0; i < tipiAutenticazionePortaDelegataArray.length; i++) {
  297.                 tipiAutenticazionePortaDelegataArray[i]=tipiAutenticazionePortaDelegataArray[i].trim();
  298.             }
  299.            
  300.             String tipiAutenticazionePortaApplicativa = commonProperties.getProperty("openspcoop2.autenticazione.pa");
  301.             if(tipiAutenticazionePortaApplicativa==null){
  302.                 throw new Exception("Non sono stati definiti i tipi di autenticazione per la porta applicativa supportati");
  303.             }else{
  304.                 tipiAutenticazionePortaApplicativa = tipiAutenticazionePortaApplicativa.trim();
  305.             }
  306.             String [] tipiAutenticazionePortaApplicativaArray = tipiAutenticazionePortaApplicativa.split(",");
  307.             for (int i = 0; i < tipiAutenticazionePortaApplicativaArray.length; i++) {
  308.                 tipiAutenticazionePortaApplicativaArray[i]=tipiAutenticazionePortaApplicativaArray[i].trim();
  309.             }
  310.            
  311.             String tipiAutorizzazionePortaDelegata = commonProperties.getProperty("openspcoop2.autorizzazione.pd");
  312.             if(tipiAutorizzazionePortaDelegata==null){
  313.                 throw new Exception("Non sono stati definiti i tipi di autorizzazione per la porta delegata supportati");
  314.             }else{
  315.                 tipiAutorizzazionePortaDelegata = tipiAutorizzazionePortaDelegata.trim();
  316.             }
  317.             String [] tipiAutorizzazionePortaDelegataArray = tipiAutorizzazionePortaDelegata.split(",");
  318.             for (int i = 0; i < tipiAutorizzazionePortaDelegataArray.length; i++) {
  319.                 tipiAutorizzazionePortaDelegataArray[i]=tipiAutorizzazionePortaDelegataArray[i].trim();
  320.             }
  321.            
  322.             String tipiAutorizzazionePortaApplicativa = commonProperties.getProperty("openspcoop2.autorizzazione.pa");
  323.             if(tipiAutorizzazionePortaApplicativa==null){
  324.                 throw new Exception("Non sono stati definiti i tipi di autorizzazione per la porta applicativa supportati");
  325.             }else{
  326.                 tipiAutorizzazionePortaApplicativa = tipiAutorizzazionePortaApplicativa.trim();
  327.             }
  328.             String [] tipiAutorizzazionePortaApplicativaArray = tipiAutorizzazionePortaApplicativa.split(",");
  329.             for (int i = 0; i < tipiAutorizzazionePortaApplicativaArray.length; i++) {
  330.                 tipiAutorizzazionePortaApplicativaArray[i]=tipiAutorizzazionePortaApplicativaArray[i].trim();
  331.             }
  332.            
  333.             String tipiAutorizzazioneContenutiPortaDelegata = commonProperties.getProperty("openspcoop2.autorizzazioneContenuto.pd");
  334.             if(tipiAutorizzazioneContenutiPortaDelegata==null){
  335.                 throw new Exception("Non sono stati definiti i tipi di autorizzazione contenuti per la porta delegata supportati");
  336.             }else{
  337.                 tipiAutorizzazioneContenutiPortaDelegata = tipiAutorizzazioneContenutiPortaDelegata.trim();
  338.             }
  339.             String [] tipiAutorizzazioneContenutiPortaDelegataArray = tipiAutorizzazioneContenutiPortaDelegata.split(",");
  340.             for (int i = 0; i < tipiAutorizzazioneContenutiPortaDelegataArray.length; i++) {
  341.                 tipiAutorizzazioneContenutiPortaDelegataArray[i]=tipiAutorizzazioneContenutiPortaDelegataArray[i].trim();
  342.             }
  343.            
  344.             String tipiAutorizzazioneContenutiPortaApplicativa = commonProperties.getProperty("openspcoop2.autorizzazioneContenuto.pa");
  345.             if(tipiAutorizzazioneContenutiPortaApplicativa==null){
  346.                 throw new Exception("Non sono stati definiti i tipi di autorizzazione contenuti per la porta applicativa supportati");
  347.             }else{
  348.                 tipiAutorizzazioneContenutiPortaApplicativa = tipiAutorizzazioneContenutiPortaApplicativa.trim();
  349.             }
  350.             String [] tipiAutorizzazioneContenutiPortaApplicativaArray = tipiAutorizzazioneContenutiPortaApplicativa.split(",");
  351.             for (int i = 0; i < tipiAutorizzazioneContenutiPortaApplicativaArray.length; i++) {
  352.                 tipiAutorizzazioneContenutiPortaApplicativaArray[i]=tipiAutorizzazioneContenutiPortaApplicativaArray[i].trim();
  353.             }
  354.            
  355.             String tipiIntegrazionePD = commonProperties.getProperty("openspcoop2.integrazione.pd");
  356.             if(tipiIntegrazionePD==null){
  357.                 throw new Exception("Non sono stati definiti i tipi di Integrazione supportati (PD)");
  358.             }else{
  359.                 tipiIntegrazionePD = tipiIntegrazionePD.trim();
  360.             }
  361.             String [] tipiIntegrazionePDArray = tipiIntegrazionePD.split(",");
  362.             for (int i = 0; i < tipiIntegrazionePDArray.length; i++) {
  363.                 tipiIntegrazionePDArray[i]=tipiIntegrazionePDArray[i].trim();
  364.             }
  365.            
  366.             String tipiIntegrazionePA = commonProperties.getProperty("openspcoop2.integrazione.pa");
  367.             if(tipiIntegrazionePA==null){
  368.                 throw new Exception("Non sono stati definiti i tipi di Integrazione supportati (PA)");
  369.             }else{
  370.                 tipiIntegrazionePA = tipiIntegrazionePA.trim();
  371.             }
  372.             String [] tipiIntegrazionePAArray = tipiIntegrazionePA.split(",");
  373.             for (int i = 0; i < tipiIntegrazionePAArray.length; i++) {
  374.                 tipiIntegrazionePAArray[i]=tipiIntegrazionePAArray[i].trim();
  375.             }
  376.                        
  377.             ValidazioneSemantica validatore = new ValidazioneSemantica(configurazione,tipoConnettoriArray,
  378.                     tipoSoggettiArray,tipoServiziSoapArray,tipoServiziRestArray,
  379.                     tipiDiagnosticiAppenderArray,tipiTracceAppenderArray,tipiDumpAppenderArray,
  380.                     tipiAutenticazionePortaDelegataArray,tipiAutenticazionePortaApplicativaArray,
  381.                     tipiAutorizzazionePortaDelegataArray,tipiAutorizzazionePortaApplicativaArray,
  382.                     tipiAutorizzazioneContenutiPortaDelegataArray,tipiAutorizzazioneContenutiPortaApplicativaArray,
  383.                     tipiIntegrazionePDArray,tipiIntegrazionePAArray,
  384.                     validaSezioneConfigurazione,log);
  385.            
  386.             validatore.validazioneSemantica(true);
  387.         }catch(Exception e){
  388.             log.error("Errore: "+e.getMessage());
  389.             throw e;
  390.             //e.printStackTrace(System.out);
  391.         }
  392.        
  393.     }

  394.    
  395. }