OpenSPCoop2DBConfigurationUtility.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.FileInputStream;
  22. import java.sql.Connection;
  23. import java.sql.DriverManager;
  24. import java.util.ArrayList;
  25. import java.util.List;

  26. import org.openspcoop2.core.commons.CoreException;
  27. import org.openspcoop2.core.config.PortaApplicativa;
  28. import org.openspcoop2.core.config.PortaDelegata;
  29. import org.openspcoop2.core.config.ServizioApplicativo;
  30. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  31. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  32. import org.openspcoop2.core.id.IDAccordo;
  33. import org.openspcoop2.core.id.IDPortaApplicativa;
  34. import org.openspcoop2.core.id.IDServizio;
  35. import org.openspcoop2.core.id.IDServizioApplicativo;
  36. import org.openspcoop2.core.id.IDSoggetto;
  37. import org.openspcoop2.core.mapping.DBMappingUtils;
  38. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  39. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  40. import org.openspcoop2.core.registry.Fruitore;
  41. import org.openspcoop2.core.registry.IdSoggetto;
  42. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  43. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  44. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  45. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  46. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  47. import org.openspcoop2.utils.LoggerWrapperFactory;
  48. import org.openspcoop2.utils.Utilities;
  49. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  50. import org.openspcoop2.utils.resources.GestoreJNDI;
  51. import org.openspcoop2.utils.resources.Loader;
  52. import org.slf4j.Logger;

  53. /**
  54.  * Inizializza una configurazione
  55.  *
  56.  * @author Andrea Poli (apoli@link.it)
  57.  * @author $Author$
  58.  * @version $Rev$, $Date$
  59.  */

  60. public class OpenSPCoop2DBConfigurationUtility {

  61.     private static final String TIPOLOGIA_ELIMINAZIONE_FRUIZIONE = "fruizione";
  62.     private static final String TIPOLOGIA_ELIMINAZIONE_EROGAZIONE = "erogazione";

  63.     private static void logError(Logger log,String msg, Exception e) {
  64.         if(log!=null) {
  65.             log.error(msg, e);
  66.         }
  67.     }
  68.     private static void logDebug(Logger log,String msg) {
  69.         if(log!=null) {
  70.             log.debug(msg);
  71.         }
  72.     }
  73.    
  74.     public static void main(String[] args) throws Exception {

  75.        
  76.                                        
  77.         if (args.length  < 4) {
  78.             String errorMsg = "ERROR, Usage:  java OpenSPCoop2DBConfigurationUtility proprietaAccessoDatabase tipologiaEliminazione(fruzione/erogazione) servizio(tipo/nome) soggettoErogatoreServizio(tipo/nome o *) fruitore(SOLO se tipologia=fruizione) [Logger]";
  79.             System.err.println(errorMsg);
  80.             throw new CoreException(errorMsg);
  81.         }

  82.         // proprietaAccessoDatabase
  83.         if(args[0]==null){
  84.             throw new CoreException("Proprieta' per la configurazione dell'accesso al database non fornite");
  85.         }
  86.         String proprietaAccessoDatabase = args[0].trim();
  87.        
  88.         // tipologiaEliminazione
  89.         if(args[1]==null){
  90.             throw new CoreException("Tipo di eliminazione non indicata");
  91.         }
  92.         String tipologiaEliminazione = args[1].trim();
  93.         if( !OpenSPCoop2DBConfigurationUtility.TIPOLOGIA_ELIMINAZIONE_EROGAZIONE.equals(tipologiaEliminazione) && !OpenSPCoop2DBConfigurationUtility.TIPOLOGIA_ELIMINAZIONE_FRUIZIONE.equals(tipologiaEliminazione) ){
  94.             throw new CoreException("Tipo di eliminazione non gestito");
  95.         }
  96.        
  97.         // dati del servizio
  98.         if(args[2]==null){
  99.             throw new Exception("Servizio da eliminare non indicato");
  100.         }
  101.         String tipoNomeServizio = args[2].trim();
  102.         if(tipoNomeServizio.contains("/")==false){
  103.             throw new Exception("Servizio da eliminare non indicato correttamente, atteso: tipo/nome");
  104.         }
  105.         String tipoServizio = null;
  106.         String nomeServizio = null;
  107.         try{
  108.             tipoServizio = tipoNomeServizio.split("/")[0].trim();
  109.             nomeServizio = tipoNomeServizio.split("/")[1].trim();
  110.         }catch(Exception e){
  111.             throw new CoreException("Servizio da eliminare non indicato correttamente, atteso: tipo/nome , errore: "+e.getMessage(),e);
  112.         }
  113.        
  114.         // dati del soggetto erogatore
  115.         if(args[3]==null){
  116.             throw new CoreException("Soggetto da eliminare non indicato");
  117.         }
  118.         String tipoNomeSoggetto = args[3].trim();
  119.         String tipoSoggettoErogatore = null;
  120.         String nomeSoggettoErogatore = null;
  121.         if("*".equals(tipoNomeSoggetto)){
  122.             // voglio qualsiasi servizio
  123.         }
  124.         else if(!tipoNomeSoggetto.contains("/")){
  125.             throw new CoreException("Soggetto erogatore del servizio da eliminare non indicato correttamente, atteso: tipo/nome");
  126.         }
  127.         else{
  128.             try{
  129.                 tipoSoggettoErogatore = tipoNomeSoggetto.split("/")[0].trim();
  130.                 nomeSoggettoErogatore = tipoNomeSoggetto.split("/")[1].trim();
  131.             }catch(Exception e){
  132.                 throw new CoreException("Soggetto erogatore del servizio da eliminare non indicato correttamente, atteso: tipo/nome , errore: "+e.getMessage(),e);
  133.             }
  134.         }
  135.        
  136.         int logIndex = 4;
  137.        
  138.         // dati del fruitore se tipologia = fruizione
  139.         String tipoSoggettoFruitore = null;
  140.         String nomeSoggettoFruitore = null;
  141.         if(OpenSPCoop2DBConfigurationUtility.TIPOLOGIA_ELIMINAZIONE_FRUIZIONE.equals(tipologiaEliminazione)){
  142.             logIndex++;
  143.             String tipoNomeSoggettoFruitore = args[4].trim();
  144.             if(tipoNomeSoggettoFruitore==null){
  145.                 throw new CoreException("Soggetto fruitore da eliminare non indicato");
  146.             }
  147.             else if(tipoNomeSoggettoFruitore.contains("/")==false){
  148.                 throw new CoreException("Soggetto fruitore da eliminare non indicato correttamente, atteso: tipo/nome");
  149.             }
  150.             try{
  151.                 tipoSoggettoFruitore = tipoNomeSoggettoFruitore.split("/")[0].trim();
  152.                 nomeSoggettoFruitore = tipoNomeSoggettoFruitore.split("/")[1].trim();
  153.             }catch(Exception e){
  154.                 throw new CoreException("Soggetto fruitore da eliminare non indicato correttamente, atteso: tipo/nome , errore: "+e.getMessage(),e);
  155.             }
  156.         }
  157.        
  158.         // Inizializzo logger
  159.         try{
  160.             if(args.length==(logIndex+1)){
  161.                 LoggerWrapperFactory.setLogConfiguration(args[logIndex]);
  162.             }else{
  163.                 LoggerWrapperFactory.setLogConfiguration(OpenSPCoop2DBConfigurationUtility.class.getResource("/console.log4j2.properties"));
  164.             }
  165.         }catch(Exception e) {
  166.             String errorMsg = "Errore durante il caricamento del file di log args"+logIndex+"["+args[logIndex]+"] : "+e.getMessage();
  167.             System.err.println(errorMsg);
  168.             throw new CoreException(errorMsg);
  169.         }  
  170.         Logger log = LoggerWrapperFactory.getLogger("gestoreEliminazioneServizio");
  171.        
  172.         // Inizializzo file di properties contenente le configurazioni per l'accesso al database
  173.         java.util.Properties reader = new java.util.Properties();
  174.         try{
  175.             try(FileInputStream fin = new FileInputStream(proprietaAccessoDatabase)){
  176.                 reader.load(fin);
  177.             }
  178.         }catch(java.io.IOException e) {
  179.             String errorMsg = "Errore durante il caricamento del file di properties ["+proprietaAccessoDatabase+"] : "+e.getMessage();
  180.             logError(log,errorMsg,e);
  181.             throw new CoreException(errorMsg,e);
  182.         }
  183.        
  184.        
  185.         // Indicazione se siamo in un caso di ControlStation
  186.         String govwayConsole = reader.getProperty("openspcoop2.govwayConsole");
  187.         String tipoDatabase = null;
  188.         boolean govwayConsoleMode = false;
  189.         if(govwayConsole!=null){
  190.             govwayConsoleMode = Boolean.parseBoolean(govwayConsole.trim());
  191.         }
  192.        
  193.        
  194.        

  195.        
  196.         // **** Raccolta proprieta' per accesso a configurazione *******
  197.        
  198.         Connection connectionConfigurazione = null;
  199.         DriverConfigurazioneDB driverConfigurazione = null;
  200.         try{
  201.            
  202.            
  203.             String connection = null;
  204.             String username = null;
  205.             String password = null;
  206.             String driver =  null;
  207.             boolean condivisioneDBRegservPddValue = false;
  208.                        
  209.             // Database
  210.             tipoDatabase = reader.getProperty("openspcoop2.configurazione.db.tipo");
  211.             if(tipoDatabase==null){
  212.                 throw new CoreException("Non e' stato definito il tipo di database per la configurazione");
  213.             }else{
  214.                 tipoDatabase = tipoDatabase.trim();
  215.             }
  216.            
  217.             String condivisioneDBRegservPdd = reader.getProperty("openspcoop2.configurazione.db.condivisioneDBRegserv");
  218.             try{
  219.                 condivisioneDBRegservPddValue = Boolean.parseBoolean(condivisioneDBRegservPdd.trim());
  220.             }catch(Exception e){
  221.                 throw new CoreException("Non e' stato definita o e' definita non correttamente la proprieta' [openspcoop2.configurazione.db.condivisioneDBRegserv]: "+e.getMessage());
  222.             }
  223.            
  224.             String dataSource = reader.getProperty("openspcoop2.configurazione.db.dataSource");
  225.            
  226.             if(dataSource!=null){
  227.                 dataSource = dataSource.trim();
  228.                 java.util.Properties context = Utilities.readProperties("openspcoop2.configurazione.db.context.",reader);
  229.                
  230.                 GestoreJNDI gestoreJNDI = new GestoreJNDI(context);
  231.                 javax.sql.DataSource ds = (javax.sql.DataSource) gestoreJNDI.lookup(dataSource);
  232.                 connectionConfigurazione = ds.getConnection();
  233.                        
  234.             }else{
  235.                 connection = reader.getProperty("openspcoop2.configurazione.db.url");
  236.                 if(connection==null){
  237.                     throw new CoreException("Non e' stata definita una destinazione ne attraverso un datasource, ne attraverso una connessione diretta");
  238.                 }
  239.                 connection = connection.trim();
  240.                 driver = reader.getProperty("openspcoop2.configurazione.db.driver");
  241.                 if(driver==null){
  242.                     throw new CoreException("Connessione diretta: non e' stato definito il Driver");
  243.                 }
  244.                 driver = driver.trim();
  245.                 username = reader.getProperty("openspcoop2.configurazione.db.user");
  246.                 password = reader.getProperty("openspcoop2.configurazione.db.password");
  247.                 if(username!=null){
  248.                     username = username.trim();
  249.                 }
  250.                 if(password!=null){
  251.                     password = password.trim();
  252.                 }
  253.                
  254.                 Loader.getInstance().newInstance(driver);
  255.                 if(username!=null && password!=null){
  256.                     connectionConfigurazione = DriverManager.getConnection(connection,username,password);
  257.                 }else{
  258.                     connectionConfigurazione = DriverManager.getConnection(connection);
  259.                 }
  260.             }

  261.             driverConfigurazione = new DriverConfigurazioneDB(connectionConfigurazione, null, tipoDatabase, condivisioneDBRegservPddValue);
  262.            
  263.         }catch(Exception e) {
  264.             String errorMsg = "Errore durante la lettura del file di properties ["+args[1]+"] : "+e.getMessage();
  265.             logError(log,errorMsg,e);
  266.             throw new CoreException(errorMsg,e);
  267.         }
  268.        
  269.        
  270.        
  271.         // **** Raccolta proprieta' per accesso a registroServizi *******
  272.        
  273.         Connection connectionRegistroServizi = null;
  274.         DriverRegistroServiziDB driverRegistroServizi = null;
  275.         try{
  276.            
  277.            
  278.             String connection = null;
  279.             String username = null;
  280.             String password = null;
  281.             String driver =  null;
  282.                        
  283.             // Database
  284.             tipoDatabase = reader.getProperty("openspcoop2.registroServizi.db.tipo");
  285.             if(tipoDatabase==null){
  286.                 throw new CoreException("Non e' stato definito il tipo di database per la configurazione");
  287.             }else{
  288.                 tipoDatabase = tipoDatabase.trim();
  289.             }
  290.            
  291.             String dataSource = reader.getProperty("openspcoop2.registroServizi.db.dataSource");
  292.            
  293.             if(dataSource!=null){
  294.                 dataSource = dataSource.trim();
  295.                 java.util.Properties context = Utilities.readProperties("openspcoop2.registroServizi.db.context.",reader);
  296.                
  297.                 // NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
  298.                 if(!govwayConsoleMode){
  299.                     GestoreJNDI gestoreJNDI = new GestoreJNDI(context);
  300.                     javax.sql.DataSource ds = (javax.sql.DataSource) gestoreJNDI.lookup(dataSource);
  301.                     connectionRegistroServizi = ds.getConnection();
  302.                 }
  303.                        
  304.             }else{
  305.                 connection = reader.getProperty("openspcoop2.registroServizi.db.url");
  306.                 if(connection==null){
  307.                     throw new CoreException("Non e' stata definita una destinazione ne attraverso un datasource, ne attraverso una connessione diretta");
  308.                 }
  309.                 connection = connection.trim();
  310.                 driver = reader.getProperty("openspcoop2.registroServizi.db.driver");
  311.                 if(driver==null){
  312.                     throw new CoreException("Connessione diretta: non e' stato definito il Driver");
  313.                 }
  314.                 driver = driver.trim();
  315.                 username = reader.getProperty("openspcoop2.registroServizi.db.user");
  316.                 password = reader.getProperty("openspcoop2.registroServizi.db.password");
  317.                 if(username!=null){
  318.                     username = username.trim();
  319.                 }
  320.                 if(password!=null){
  321.                     password = password.trim();
  322.                 }
  323.                
  324.                 // NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
  325.                 if(!govwayConsoleMode){
  326.                     Loader.getInstance().newInstance(driver);
  327.                     if(username!=null && password!=null){
  328.                         connectionRegistroServizi = DriverManager.getConnection(connection,username,password);
  329.                     }else{
  330.                         connectionRegistroServizi = DriverManager.getConnection(connection);
  331.                     }
  332.                 }
  333.             }

  334.             if(govwayConsoleMode){
  335.                 driverRegistroServizi = new DriverRegistroServiziDB(connectionConfigurazione, null, tipoDatabase);
  336.             }else{
  337.                 driverRegistroServizi = new DriverRegistroServiziDB(connectionRegistroServizi, null, tipoDatabase);
  338.             }
  339.            
  340.         }catch(Exception e) {
  341.             String errorMsg = "Errore durante la lettura del file di properties ["+args[1]+"] : "+e.getMessage();
  342.             logError(log,errorMsg,e);
  343.             throw new CoreException(errorMsg,e);
  344.         }
  345.        
  346.        
  347.        
  348.        
  349.        
  350.        
  351.        
  352.         try{
  353.            
  354.             logDebug(log,"Imposto auto-commit a false");
  355.             connectionConfigurazione.setAutoCommit(false);
  356.             // NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
  357.             if(!govwayConsoleMode){
  358.                 connectionRegistroServizi.setAutoCommit(false);
  359.             }else{
  360.                 connectionRegistroServizi = connectionConfigurazione;
  361.             }
  362.            
  363.            
  364.             // Ricerca id Servizi da eliminare.
  365.             FiltroRicercaServizi filtroRicercaServizio = new FiltroRicercaServizi();
  366.             filtroRicercaServizio.setTipo(tipoServizio);
  367.             filtroRicercaServizio.setNome(nomeServizio);
  368.             if(tipoSoggettoErogatore!=null && nomeSoggettoErogatore!=null){
  369.                 filtroRicercaServizio.setTipoSoggettoErogatore(tipoSoggettoErogatore);
  370.                 filtroRicercaServizio.setNomeSoggettoErogatore(nomeSoggettoErogatore);
  371.             }
  372.             List<IDServizio> idServizi = new ArrayList<>();
  373.             try{
  374.                 List<IDServizio> idServizio = driverRegistroServizi.getAllIdServizi(filtroRicercaServizio);
  375.                 if(idServizio!=null){
  376.                     for (int i = 0; i < idServizio.size(); i++) {
  377.                         idServizi.add(idServizio.get(i));
  378.                     }
  379.                 }
  380.             }catch(DriverRegistroServiziNotFound notFound){
  381.                 logDebug(log,"Ricerca di servizi con filtro ["+filtroRicercaServizio.toString()+"] non ha prodotto risultati: "+notFound.getMessage());
  382.             }
  383.            
  384.             logDebug(log,"Totale servizi da eliminare con tipologia ["+tipologiaEliminazione+"] : "+idServizi.size());
  385.            
  386.            
  387.             // Scorro tutti i servizi trovati
  388.             while(!idServizi.isEmpty()){
  389.                
  390.                 IDServizio idServizio = idServizi.remove(0);
  391.                 logDebug(log,"Gestione eliminazione servizio ["+idServizio.toString()+"] ...");
  392.                 AccordoServizioParteSpecifica asps = driverRegistroServizi.getAccordoServizioParteSpecifica(idServizio);
  393.                 @SuppressWarnings("unused")
  394.                 IDSoggetto soggettoErogatore = new IDSoggetto(asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
  395.                 logDebug(log,"\t dati servizio SoggettoErogatore["+asps.getTipoSoggettoErogatore()+"/"+asps.getNomeSoggettoErogatore()+"] Tipologia["+asps.getTipologiaServizio().toString()+"] ...");
  396.                                
  397.                 if(OpenSPCoop2DBConfigurationUtility.TIPOLOGIA_ELIMINAZIONE_FRUIZIONE.equals(tipologiaEliminazione)){
  398.                    
  399.                     logDebug(log,"\t dati Fruitore da eliminare ["+tipoSoggettoFruitore+"/"+nomeSoggettoFruitore+"]");
  400.                     IDSoggetto soggettoFruitore = new IDSoggetto(tipoSoggettoFruitore,nomeSoggettoFruitore);
  401.                     /**org.openspcoop2.core.config.Soggetto soggettoConfig = driverConfigurazione.getSoggetto(soggettoFruitore);*/
  402.                    
  403.                     // FRUITORE DAL SERVIZIO (+ mapping fruizioni)
  404.                     if(govwayConsoleMode){
  405.                         logDebug(log,"\t- eliminazione mapping fruizioni ...");
  406.                         DBMappingUtils.deleteMappingFruizione(idServizio, soggettoFruitore, connectionConfigurazione, tipoDatabase);
  407.                         logDebug(log,"\t- eliminazione mapping fruizioni effettuata");
  408.                     }
  409.                    
  410.                     logDebug(log,"\t- eliminazione fruizione dal servizio ...");
  411.                     for (int i = 0; i < asps.sizeFruitoreList(); i++) {
  412.                         Fruitore fr = asps.getFruitore(i);
  413.                         if(fr.getTipo().equals(tipoSoggettoFruitore) && fr.getNome().equals(nomeSoggettoFruitore)){
  414.                             asps.removeFruitore(i);
  415.                             break;
  416.                         }
  417.                     }
  418.                     driverRegistroServizi.updateAccordoServizioParteSpecifica(asps);
  419.                     logDebug(log,"\t- eliminazione fruizione dal servizio effettuata");
  420.                    
  421.                    
  422.                     // PORTE DELEGATE CON TALE SERVIZIO e con tale fruitore
  423.                     List<String> nomiServiziApplicativi = new ArrayList<>();
  424.                     List<PortaDelegata> listaPorteDelegate =
  425.                         driverConfigurazione.getPorteDelegateWithServizio(asps.getId(), asps.getTipo(), asps.getNome(), asps.getVersione(),
  426.                                 asps.getIdSoggetto(), asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
  427.                     List<PortaDelegata> listaPorteDelegateFruitoreDaEliminare = new ArrayList<>();
  428.                     while(!listaPorteDelegate.isEmpty()){
  429.                         PortaDelegata pd = listaPorteDelegate.remove(0);
  430.                         if(pd.getTipoSoggettoProprietario().equals(tipoSoggettoFruitore) && pd.getNomeSoggettoProprietario().equals(nomeSoggettoFruitore)){
  431.                             listaPorteDelegateFruitoreDaEliminare.add(pd);
  432.                         }
  433.                     }
  434.                     logDebug(log,"\t- eliminazione porte delegate ("+listaPorteDelegateFruitoreDaEliminare.size()+") ...");
  435.                     while(!listaPorteDelegateFruitoreDaEliminare.isEmpty()){
  436.                         PortaDelegata pd = listaPorteDelegateFruitoreDaEliminare.remove(0);
  437.                         logDebug(log,"\t\t. porta delegata ("+pd.getNome()+") ...");
  438.                         for (int i = 0; i < pd.sizeServizioApplicativoList(); i++) {
  439.                             String sa = pd.getServizioApplicativo(i).getNome();
  440.                             if(!nomiServiziApplicativi.contains(sa)){
  441.                                 nomiServiziApplicativi.add(sa);
  442.                             }
  443.                         }
  444.                         driverConfigurazione.deletePortaDelegata(pd);
  445.                         logDebug(log,"\t\t. porta delegata ("+pd.getNome()+") eliminata");
  446.                     }
  447.                     logDebug(log,"\t- eliminazione porte delegate effettuata");
  448.                    
  449.                    
  450.                     // SERVIZI APPLICATIVI
  451.                     logDebug(log,"\t- eliminazione servizi applicativi ("+nomiServiziApplicativi.size()+") ...");
  452.                     while(!nomiServiziApplicativi.isEmpty()){
  453.                         String nomeSA = nomiServiziApplicativi.remove(0);
  454.                         logDebug(log,"\t\t. servizio applicativo ("+nomeSA+") ...");
  455.                         IDServizioApplicativo idSA = new IDServizioApplicativo();
  456.                         idSA.setIdSoggettoProprietario(soggettoFruitore);
  457.                         idSA.setNome(nomeSA);
  458.                         ServizioApplicativo sa = driverConfigurazione.getServizioApplicativo(idSA);
  459.                         driverConfigurazione.deleteServizioApplicativo(sa);
  460.                         logDebug(log,"\t\t. servizio applicativo ("+nomeSA+") eliminato");
  461.                     }
  462.                     logDebug(log,"\t- eliminazione servizi applicativi effettuata");
  463.                    
  464.                 }
  465.                 else{
  466.                    
  467.                     // FRUITORI (+ mapping fruizioni)
  468.                     if(govwayConsoleMode){
  469.                         for (int i = 0; i < asps.sizeFruitoreList(); i++) {
  470.                             Fruitore fr = asps.getFruitore(i);
  471.                             IDSoggetto soggettoFruitore = new IDSoggetto(fr.getTipo(),fr.getNome());
  472.                             logDebug(log,"\t- eliminazione mapping fruizioni ...");
  473.                             DBMappingUtils.deleteMappingFruizione(idServizio, soggettoFruitore, connectionConfigurazione, tipoDatabase);
  474.                             logDebug(log,"\t- eliminazione mapping fruizioni effettuata");
  475.                         }
  476.                     }
  477.                        
  478.                                                    
  479.                     // PORTE DELEGATE
  480.                     List<IDServizioApplicativo> nomiServiziApplicativi = new ArrayList<>();
  481.                     List<PortaDelegata> listaPorteDelegate =
  482.                         driverConfigurazione.getPorteDelegateWithServizio(asps.getId(), asps.getTipo(), asps.getNome(), asps.getVersione(),
  483.                                 asps.getIdSoggetto(), asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
  484.                     logDebug(log,"\t- eliminazione porte delegate ("+listaPorteDelegate.size()+") ...");
  485.                     while(!listaPorteDelegate.isEmpty()){
  486.                         PortaDelegata pd = listaPorteDelegate.remove(0);
  487.                         logDebug(log,"\t\t. porta delegata ("+pd.getNome()+") ...");
  488.                         for (int i = 0; i < pd.sizeServizioApplicativoList(); i++) {
  489.                             String sa = pd.getServizioApplicativo(i).getNome();
  490.                             IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  491.                             idServizioApplicativo.setNome(sa);
  492.                             idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario()));
  493.                             if(!nomiServiziApplicativi.contains(idServizioApplicativo)){
  494.                                 nomiServiziApplicativi.add(idServizioApplicativo);
  495.                             }
  496.                         }
  497.                         driverConfigurazione.deletePortaDelegata(pd);
  498.                         logDebug(log,"\t\t. porta delegata ("+pd.getNome()+") eliminata");
  499.                     }
  500.                     logDebug(log,"\t- eliminazione porte delegate effettuata");
  501.                    
  502.                    
  503.                     // PORTE APPLICATIVE
  504.                     List<PortaApplicativa> listaPorteApplicative =
  505.                         driverConfigurazione.getPorteApplicativeWithServizio(asps.getId(), asps.getTipo(), asps.getNome(), asps.getVersione(),
  506.                                 asps.getIdSoggetto(), asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
  507.                     logDebug(log,"\t- eliminazione porte applicative ("+listaPorteApplicative.size()+") ...");
  508.                     while(!listaPorteApplicative.isEmpty()){
  509.                         PortaApplicativa pa = listaPorteApplicative.remove(0);
  510.                         IDPortaApplicativa idpa = new IDPortaApplicativa();
  511.                         idpa.setNome(pa.getNome());
  512.                         pa = driverConfigurazione.getPortaApplicativa(idpa); // Leggo tutti i valori (Bug del metodo getPorteApplicativeWithServizio)
  513.                         logDebug(log,"\t\t. porta applicativa ("+pa.getNome()+") ...");
  514.                         for (int i = 0; i < pa.sizeServizioApplicativoList(); i++) {
  515.                             String sa = pa.getServizioApplicativo(i).getNome();
  516.                             IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  517.                             idServizioApplicativo.setNome(sa);
  518.                             idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario()));
  519.                             if(!nomiServiziApplicativi.contains(idServizioApplicativo)){
  520.                                 nomiServiziApplicativi.add(idServizioApplicativo);
  521.                             }
  522.                         }
  523.                         driverConfigurazione.deletePortaApplicativa(pa);
  524.                         logDebug(log,"\t\t. porta applicativa ("+pa.getNome()+") eliminata");
  525.                     }
  526.                     logDebug(log,"\t- eliminazione porte applicative effettuata");
  527.                    
  528.                    
  529.                     // SERVIZI APPLICATIVI
  530.                     logDebug(log,"\t- eliminazione servizi applicativi ("+nomiServiziApplicativi.size()+") ...");
  531.                     while(!nomiServiziApplicativi.isEmpty()){
  532.                         IDServizioApplicativo idSA = nomiServiziApplicativi.remove(0);
  533.                         logDebug(log,"\t\t. servizio applicativo ("+idSA.toString()+") ...");
  534.                         try{
  535.                             ServizioApplicativo sa = driverConfigurazione.getServizioApplicativo(idSA);
  536.                             driverConfigurazione.deleteServizioApplicativo(sa);
  537.                             logDebug(log,"\t\t. servizio applicativo ("+idSA.toString()+") eliminato");
  538.                         }catch(DriverConfigurazioneNotFound notFound){
  539.                             logDebug(log,"\t\t. servizio applicativo ("+idSA.toString()+") non esiste (puo' darsi che veniva riferito da piu' oggetti, e sia gia' stato eliminato)");
  540.                         }
  541.                     }
  542.                     logDebug(log,"\t- eliminazione servizi applicativi effettuata");

  543.                    
  544.                    
  545.                     // SERVIZI (mapping erogazioni)
  546.                     if(govwayConsoleMode){
  547.                         logDebug(log,"\t- eliminazione mapping erogazione ...");
  548.                         DBMappingUtils.deleteMappingErogazione(idServizio, connectionConfigurazione, tipoDatabase);
  549.                         logDebug(log,"\t- eliminazione mapping erogazione effettuata");
  550.                     }
  551.                    
  552.                    
  553.                     // SERVIZI
  554.                     logDebug(log,"\t- eliminazione servizio ...");
  555.                     driverRegistroServizi.deleteAccordoServizioParteSpecifica(asps);
  556.                     logDebug(log,"\t- eliminazione servizio effettuata");
  557.                    
  558.                    
  559.                     // ACCORDI (SE NON VI SONO ALTRI SERVIZI CHE LO IMPLEMENTANO)
  560.                     logDebug(log,"\t- eliminazione accordo parte comune ...");
  561.                     FiltroRicercaServizi filtroAltriServizi = new FiltroRicercaServizi();
  562.                     IDAccordo idAccordoParteComune = IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
  563.                     filtroAltriServizi.setIdAccordoServizioParteComune(idAccordoParteComune);
  564.                     boolean existsAltriServizi = false;
  565.                     StringBuilder bfAltriServizi = new StringBuilder();
  566.                     try{
  567.                         List<IDServizio> others = driverRegistroServizi.getAllIdServizi(filtroAltriServizi);
  568.                         if(others!=null && !others.isEmpty()){
  569.                             existsAltriServizi = true;
  570.                             for (int i = 0; i < others.size(); i++) {
  571.                                 if(bfAltriServizi.length()>0){
  572.                                     bfAltriServizi.append(",");
  573.                                 }
  574.                                 bfAltriServizi.append(others.get(i).toString());
  575.                             }
  576.                         }
  577.                     }catch(DriverRegistroServiziNotFound notFound){}
  578.                     if(!existsAltriServizi){
  579.                         AccordoServizioParteComune as = new AccordoServizioParteComune();
  580.                         as.setNome(idAccordoParteComune.getNome());
  581.                         as.setVersione(idAccordoParteComune.getVersione());
  582.                         if(idAccordoParteComune.getSoggettoReferente()!=null){
  583.                             IdSoggetto asr = new IdSoggetto();
  584.                             asr.setTipo(idAccordoParteComune.getSoggettoReferente().getTipo());
  585.                             asr.setNome(idAccordoParteComune.getSoggettoReferente().getNome());
  586.                             as.setSoggettoReferente(asr);
  587.                         }
  588.                         driverRegistroServizi.deleteAccordoServizioParteComune(as);
  589.                         logDebug(log,"\t- eliminazione accordo parte comune effettuata");
  590.                     }
  591.                     else{
  592.                         logDebug(log,"\t- eliminazione accordo parte comune non effettuata poiche' implementato da altri servizi: "+bfAltriServizi.toString());
  593.                     }
  594.                    
  595.                 }
  596.                
  597.                 logDebug(log,"Gestione eliminazione servizio ["+idServizio.toString()+"] completata");
  598.             }
  599.            
  600.        
  601.            
  602.            
  603.             logDebug(log,"Commit...");
  604.             connectionConfigurazione.commit();
  605.             // NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
  606.             if(!govwayConsoleMode){
  607.                 connectionRegistroServizi.commit();
  608.             }
  609.             logDebug(log,"Commit effettuato");
  610.            
  611.         }catch(Exception e){
  612.             try{
  613.                 connectionConfigurazione.rollback();
  614.             }catch(Exception eRollback){}
  615.             try{
  616.                 // NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
  617.                 if(!govwayConsoleMode){
  618.                     connectionRegistroServizi.rollback();
  619.                 }
  620.             }catch(Exception eRollback){}
  621.             String errorMsg = "Errore avvenuto durante l'eliminazione: "+e.getMessage();
  622.             logError(log,errorMsg,e);
  623.             throw new CoreException(errorMsg,e);
  624.         }finally{
  625.             try{
  626.                 connectionConfigurazione.setAutoCommit(true);
  627.             }catch(Exception e){
  628.                 // ignore
  629.             }
  630.             try{
  631.                 // NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
  632.                 if(!govwayConsoleMode){
  633.                     connectionRegistroServizi.setAutoCommit(true);
  634.                 }
  635.             }catch(Exception e){
  636.                 // ignore
  637.             }
  638.             try{
  639.                 Logger logR = OpenSPCoop2Logger.getLoggerOpenSPCoopResources()!=null ? OpenSPCoop2Logger.getLoggerOpenSPCoopResources() : LoggerWrapperFactory.getLogger(DBConsegnePreseInCaricoManager.class);
  640.                 boolean checkAutocommit = (OpenSPCoop2Properties.getInstance()==null) || OpenSPCoop2Properties.getInstance().isJdbcCloseConnectionCheckAutocommit();
  641.                 boolean checkIsClosed = (OpenSPCoop2Properties.getInstance()==null) || OpenSPCoop2Properties.getInstance().isJdbcCloseConnectionCheckIsClosed();
  642.                 JDBCUtilities.closeConnection(logR, connectionConfigurazione, checkAutocommit, checkIsClosed);
  643.             }catch(Exception e){
  644.                 // ignore
  645.             }
  646.             try{
  647.                 // NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
  648.                 if(!govwayConsoleMode){
  649.                     Logger logR = OpenSPCoop2Logger.getLoggerOpenSPCoopResources()!=null ? OpenSPCoop2Logger.getLoggerOpenSPCoopResources() : LoggerWrapperFactory.getLogger(DBConsegnePreseInCaricoManager.class);
  650.                     boolean checkAutocommit = (OpenSPCoop2Properties.getInstance()==null) || OpenSPCoop2Properties.getInstance().isJdbcCloseConnectionCheckAutocommit();
  651.                     boolean checkIsClosed = (OpenSPCoop2Properties.getInstance()==null) || OpenSPCoop2Properties.getInstance().isJdbcCloseConnectionCheckIsClosed();
  652.                     JDBCUtilities.closeConnection(logR, connectionRegistroServizi, checkAutocommit, checkIsClosed);
  653.                 }
  654.             }catch(Exception e){
  655.                 // ignore
  656.             }
  657.         }
  658.        
  659.     }
  660.    

  661. }