OpenSPCoop2DBConfigurationUtility.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.pdd.config;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.ServizioApplicativo;
import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDPortaApplicativa;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDServizioApplicativo;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.mapping.DBMappingUtils;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.IdSoggetto;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
import org.openspcoop2.utils.LoggerWrapperFactory;
import org.openspcoop2.utils.Utilities;
import org.openspcoop2.utils.resources.GestoreJNDI;
import org.openspcoop2.utils.resources.Loader;
import org.slf4j.Logger;
/**
* Inizializza una configurazione
*
* @author Andrea Poli (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class OpenSPCoop2DBConfigurationUtility {
private static final String TIPOLOGIA_ELIMINAZIONE_FRUIZIONE = "fruizione";
private static final String TIPOLOGIA_ELIMINAZIONE_EROGAZIONE = "erogazione";
public static void main(String[] args) throws Exception {
if (args.length < 4) {
String errorMsg = "ERROR, Usage: java OpenSPCoop2DBConfigurationUtility proprietaAccessoDatabase tipologiaEliminazione(fruzione/erogazione) servizio(tipo/nome) soggettoErogatoreServizio(tipo/nome o *) fruitore(SOLO se tipologia=fruizione) [Logger]";
System.err.println(errorMsg);
throw new Exception(errorMsg);
}
// proprietaAccessoDatabase
if(args[0]==null){
throw new Exception("Proprieta' per la configurazione dell'accesso al database non fornite");
}
String proprietaAccessoDatabase = args[0].trim();
// tipologiaEliminazione
if(args[1]==null){
throw new Exception("Tipo di eliminazione non indicata");
}
String tipologiaEliminazione = args[1].trim();
if( !OpenSPCoop2DBConfigurationUtility.TIPOLOGIA_ELIMINAZIONE_EROGAZIONE.equals(tipologiaEliminazione) && !OpenSPCoop2DBConfigurationUtility.TIPOLOGIA_ELIMINAZIONE_FRUIZIONE.equals(tipologiaEliminazione) ){
throw new Exception("Tipo di eliminazione non gestito");
}
// dati del servizio
if(args[2]==null){
throw new Exception("Servizio da eliminare non indicato");
}
String tipoNomeServizio = args[2].trim();
if(tipoNomeServizio.contains("/")==false){
throw new Exception("Servizio da eliminare non indicato correttamente, atteso: tipo/nome");
}
String tipoServizio = null;
String nomeServizio = null;
try{
tipoServizio = tipoNomeServizio.split("/")[0].trim();
nomeServizio = tipoNomeServizio.split("/")[1].trim();
}catch(Exception e){
throw new Exception("Servizio da eliminare non indicato correttamente, atteso: tipo/nome , errore: "+e.getMessage(),e);
}
// dati del soggetto erogatore
if(args[3]==null){
throw new Exception("Soggetto da eliminare non indicato");
}
String tipoNomeSoggetto = args[3].trim();
String tipoSoggettoErogatore = null;
String nomeSoggettoErogatore = null;
if("*".equals(tipoNomeSoggetto)){
// voglio qualsiasi servizio
}
else if(tipoNomeSoggetto.contains("/")==false){
throw new Exception("Soggetto erogatore del servizio da eliminare non indicato correttamente, atteso: tipo/nome");
}
else{
try{
tipoSoggettoErogatore = tipoNomeSoggetto.split("/")[0].trim();
nomeSoggettoErogatore = tipoNomeSoggetto.split("/")[1].trim();
}catch(Exception e){
throw new Exception("Soggetto erogatore del servizio da eliminare non indicato correttamente, atteso: tipo/nome , errore: "+e.getMessage(),e);
}
}
int logIndex = 4;
// dati del fruitore se tipologia = fruizione
String tipoSoggettoFruitore = null;
String nomeSoggettoFruitore = null;
if(OpenSPCoop2DBConfigurationUtility.TIPOLOGIA_ELIMINAZIONE_FRUIZIONE.equals(tipologiaEliminazione)){
logIndex++;
String tipoNomeSoggettoFruitore = args[4].trim();
if(tipoNomeSoggettoFruitore==null){
throw new Exception("Soggetto fruitore da eliminare non indicato");
}
else if(tipoNomeSoggettoFruitore.contains("/")==false){
throw new Exception("Soggetto fruitore da eliminare non indicato correttamente, atteso: tipo/nome");
}
try{
tipoSoggettoFruitore = tipoNomeSoggettoFruitore.split("/")[0].trim();
nomeSoggettoFruitore = tipoNomeSoggettoFruitore.split("/")[1].trim();
}catch(Exception e){
throw new Exception("Soggetto fruitore da eliminare non indicato correttamente, atteso: tipo/nome , errore: "+e.getMessage(),e);
}
}
// Inizializzo logger
try{
if(args.length==(logIndex+1)){
LoggerWrapperFactory.setLogConfiguration(args[logIndex]);
}else{
LoggerWrapperFactory.setLogConfiguration(OpenSPCoop2DBConfigurationUtility.class.getResource("/console.log4j2.properties"));
}
}catch(Exception e) {
String errorMsg = "Errore durante il caricamento del file di log args"+logIndex+"["+args[logIndex]+"] : "+e.getMessage();
System.err.println(errorMsg);
throw new Exception(errorMsg);
}
Logger log = LoggerWrapperFactory.getLogger("gestoreEliminazioneServizio");
// Inizializzo file di properties contenente le configurazioni per l'accesso al database
java.util.Properties reader = new java.util.Properties();
try{
try(FileInputStream fin = new FileInputStream(proprietaAccessoDatabase)){
reader.load(fin);
}
}catch(java.io.IOException e) {
String errorMsg = "Errore durante il caricamento del file di properties ["+proprietaAccessoDatabase+"] : "+e.getMessage();
log.error(errorMsg,e);
throw new Exception(errorMsg,e);
}
// Indicazione se siamo in un caso di ControlStation
String govwayConsole = reader.getProperty("openspcoop2.govwayConsole");
String tipoDatabase = null;
boolean govwayConsoleMode = false;
if(govwayConsole!=null){
govwayConsoleMode = Boolean.parseBoolean(govwayConsole.trim());
}
// **** Raccolta proprieta' per accesso a configurazione *******
Connection connectionConfigurazione = null;
DriverConfigurazioneDB driverConfigurazione = null;
try{
String connection = null;
String username = null;
String password = null;
String driver = null;
boolean condivisioneDBRegservPddValue = false;
// Database
tipoDatabase = reader.getProperty("openspcoop2.configurazione.db.tipo");
if(tipoDatabase==null){
throw new Exception("Non e' stato definito il tipo di database per la configurazione");
}else{
tipoDatabase = tipoDatabase.trim();
}
String condivisioneDBRegservPdd = reader.getProperty("openspcoop2.configurazione.db.condivisioneDBRegserv");
try{
condivisioneDBRegservPddValue = Boolean.parseBoolean(condivisioneDBRegservPdd.trim());
}catch(Exception e){
throw new Exception("Non e' stato definita o e' definita non correttamente la proprieta' [openspcoop2.configurazione.db.condivisioneDBRegserv]: "+e.getMessage());
}
String dataSource = reader.getProperty("openspcoop2.configurazione.db.dataSource");
if(dataSource!=null){
dataSource = dataSource.trim();
java.util.Properties context = Utilities.readProperties("openspcoop2.configurazione.db.context.",reader);
GestoreJNDI gestoreJNDI = new GestoreJNDI(context);
javax.sql.DataSource ds = (javax.sql.DataSource) gestoreJNDI.lookup(dataSource);
connectionConfigurazione = ds.getConnection();
}else{
connection = reader.getProperty("openspcoop2.configurazione.db.url");
if(connection==null){
throw new Exception("Non e' stata definita una destinazione ne attraverso un datasource, ne attraverso una connessione diretta");
}
connection = connection.trim();
driver = reader.getProperty("openspcoop2.configurazione.db.driver");
if(driver==null){
throw new Exception("Connessione diretta: non e' stato definito il Driver");
}
driver = driver.trim();
username = reader.getProperty("openspcoop2.configurazione.db.user");
password = reader.getProperty("openspcoop2.configurazione.db.password");
if(username!=null){
username = username.trim();
}
if(password!=null){
password = password.trim();
}
Loader.getInstance().newInstance(driver);
if(username!=null && password!=null){
connectionConfigurazione = DriverManager.getConnection(connection,username,password);
}else{
connectionConfigurazione = DriverManager.getConnection(connection);
}
}
driverConfigurazione = new DriverConfigurazioneDB(connectionConfigurazione, null, tipoDatabase, condivisioneDBRegservPddValue);
}catch(Exception e) {
String errorMsg = "Errore durante la lettura del file di properties ["+args[1]+"] : "+e.getMessage();
log.error(errorMsg,e);
throw new Exception(errorMsg,e);
}
// **** Raccolta proprieta' per accesso a registroServizi *******
Connection connectionRegistroServizi = null;
DriverRegistroServiziDB driverRegistroServizi = null;
try{
String connection = null;
String username = null;
String password = null;
String driver = null;
// Database
tipoDatabase = reader.getProperty("openspcoop2.registroServizi.db.tipo");
if(tipoDatabase==null){
throw new Exception("Non e' stato definito il tipo di database per la configurazione");
}else{
tipoDatabase = tipoDatabase.trim();
}
String dataSource = reader.getProperty("openspcoop2.registroServizi.db.dataSource");
if(dataSource!=null){
dataSource = dataSource.trim();
java.util.Properties context = Utilities.readProperties("openspcoop2.registroServizi.db.context.",reader);
// NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
if(!govwayConsoleMode){
GestoreJNDI gestoreJNDI = new GestoreJNDI(context);
javax.sql.DataSource ds = (javax.sql.DataSource) gestoreJNDI.lookup(dataSource);
connectionRegistroServizi = ds.getConnection();
}
}else{
connection = reader.getProperty("openspcoop2.registroServizi.db.url");
if(connection==null){
throw new Exception("Non e' stata definita una destinazione ne attraverso un datasource, ne attraverso una connessione diretta");
}
connection = connection.trim();
driver = reader.getProperty("openspcoop2.registroServizi.db.driver");
if(driver==null){
throw new Exception("Connessione diretta: non e' stato definito il Driver");
}
driver = driver.trim();
username = reader.getProperty("openspcoop2.registroServizi.db.user");
password = reader.getProperty("openspcoop2.registroServizi.db.password");
if(username!=null){
username = username.trim();
}
if(password!=null){
password = password.trim();
}
// NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
if(!govwayConsoleMode){
Loader.getInstance().newInstance(driver);
if(username!=null && password!=null){
connectionRegistroServizi = DriverManager.getConnection(connection,username,password);
}else{
connectionRegistroServizi = DriverManager.getConnection(connection);
}
}
}
if(govwayConsoleMode){
driverRegistroServizi = new DriverRegistroServiziDB(connectionConfigurazione, null, tipoDatabase);
}else{
driverRegistroServizi = new DriverRegistroServiziDB(connectionRegistroServizi, null, tipoDatabase);
}
}catch(Exception e) {
String errorMsg = "Errore durante la lettura del file di properties ["+args[1]+"] : "+e.getMessage();
log.error(errorMsg,e);
throw new Exception(errorMsg,e);
}
try{
log.debug("Imposto auto-commit a false");
connectionConfigurazione.setAutoCommit(false);
// NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
if(!govwayConsoleMode){
connectionRegistroServizi.setAutoCommit(false);
}else{
connectionRegistroServizi = connectionConfigurazione;
}
// Ricerca id Servizi da eliminare.
FiltroRicercaServizi filtroRicercaServizio = new FiltroRicercaServizi();
filtroRicercaServizio.setTipo(tipoServizio);
filtroRicercaServizio.setNome(nomeServizio);
if(tipoSoggettoErogatore!=null && nomeSoggettoErogatore!=null){
filtroRicercaServizio.setTipoSoggettoErogatore(tipoSoggettoErogatore);
filtroRicercaServizio.setNomeSoggettoErogatore(nomeSoggettoErogatore);
}
List<IDServizio> idServizi = new ArrayList<IDServizio>();
try{
List<IDServizio> idServizio = driverRegistroServizi.getAllIdServizi(filtroRicercaServizio);
if(idServizio!=null){
for (int i = 0; i < idServizio.size(); i++) {
idServizi.add(idServizio.get(i));
}
}
}catch(DriverRegistroServiziNotFound notFound){
log.debug("Ricerca di servizi con filtro ["+filtroRicercaServizio.toString()+"] non ha prodotto risultati: "+notFound.getMessage());
}
log.debug("Totale servizi da eliminare con tipologia ["+tipologiaEliminazione+"] : "+idServizi.size());
// Scorro tutti i servizi trovati
while(idServizi.size()!=0){
IDServizio idServizio = idServizi.remove(0);
log.debug("Gestione eliminazione servizio ["+idServizio.toString()+"] ...");
AccordoServizioParteSpecifica asps = driverRegistroServizi.getAccordoServizioParteSpecifica(idServizio);
@SuppressWarnings("unused")
IDSoggetto soggettoErogatore = new IDSoggetto(asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
log.debug("\t dati servizio SoggettoErogatore["+asps.getTipoSoggettoErogatore()+"/"+asps.getNomeSoggettoErogatore()+"] Tipologia["+asps.getTipologiaServizio().toString()+"] ...");
if(OpenSPCoop2DBConfigurationUtility.TIPOLOGIA_ELIMINAZIONE_FRUIZIONE.equals(tipologiaEliminazione)){
log.debug("\t dati Fruitore da eliminare ["+tipoSoggettoFruitore+"/"+nomeSoggettoFruitore+"]");
IDSoggetto soggettoFruitore = new IDSoggetto(tipoSoggettoFruitore,nomeSoggettoFruitore);
//org.openspcoop2.core.config.Soggetto soggettoConfig = driverConfigurazione.getSoggetto(soggettoFruitore);
// FRUITORE DAL SERVIZIO (+ mapping fruizioni)
if(govwayConsoleMode){
log.debug("\t- eliminazione mapping fruizioni ...");
DBMappingUtils.deleteMappingFruizione(idServizio, soggettoFruitore, connectionConfigurazione, tipoDatabase);
log.debug("\t- eliminazione mapping fruizioni effettuata");
}
log.debug("\t- eliminazione fruizione dal servizio ...");
for (int i = 0; i < asps.sizeFruitoreList(); i++) {
Fruitore fr = asps.getFruitore(i);
if(fr.getTipo().equals(tipoSoggettoFruitore) && fr.getNome().equals(nomeSoggettoFruitore)){
asps.removeFruitore(i);
break;
}
}
driverRegistroServizi.updateAccordoServizioParteSpecifica(asps);
log.debug("\t- eliminazione fruizione dal servizio effettuata");
// PORTE DELEGATE CON TALE SERVIZIO e con tale fruitore
List<String> nomiServiziApplicativi = new ArrayList<>();
List<PortaDelegata> listaPorteDelegate =
driverConfigurazione.getPorteDelegateWithServizio(asps.getId(), asps.getTipo(), asps.getNome(), asps.getVersione(),
asps.getIdSoggetto(), asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
List<PortaDelegata> listaPorteDelegateFruitoreDaEliminare = new ArrayList<PortaDelegata>();
while(listaPorteDelegate.size()>0){
PortaDelegata pd = listaPorteDelegate.remove(0);
if(pd.getTipoSoggettoProprietario().equals(tipoSoggettoFruitore) && pd.getNomeSoggettoProprietario().equals(nomeSoggettoFruitore)){
listaPorteDelegateFruitoreDaEliminare.add(pd);
}
}
log.debug("\t- eliminazione porte delegate ("+listaPorteDelegateFruitoreDaEliminare.size()+") ...");
while(listaPorteDelegateFruitoreDaEliminare.size()>0){
PortaDelegata pd = listaPorteDelegateFruitoreDaEliminare.remove(0);
log.debug("\t\t. porta delegata ("+pd.getNome()+") ...");
for (int i = 0; i < pd.sizeServizioApplicativoList(); i++) {
String sa = pd.getServizioApplicativo(i).getNome();
if(!nomiServiziApplicativi.contains(sa)){
nomiServiziApplicativi.add(sa);
}
}
driverConfigurazione.deletePortaDelegata(pd);
log.debug("\t\t. porta delegata ("+pd.getNome()+") eliminata");
}
log.debug("\t- eliminazione porte delegate effettuata");
// SERVIZI APPLICATIVI
log.debug("\t- eliminazione servizi applicativi ("+nomiServiziApplicativi.size()+") ...");
while(nomiServiziApplicativi.size()>0){
String nomeSA = nomiServiziApplicativi.remove(0);
log.debug("\t\t. servizio applicativo ("+nomeSA+") ...");
IDServizioApplicativo idSA = new IDServizioApplicativo();
idSA.setIdSoggettoProprietario(soggettoFruitore);
idSA.setNome(nomeSA);
ServizioApplicativo sa = driverConfigurazione.getServizioApplicativo(idSA);
driverConfigurazione.deleteServizioApplicativo(sa);
log.debug("\t\t. servizio applicativo ("+nomeSA+") eliminato");
}
log.debug("\t- eliminazione servizi applicativi effettuata");
}
else{
// FRUITORI (+ mapping fruizioni)
if(govwayConsoleMode){
for (int i = 0; i < asps.sizeFruitoreList(); i++) {
Fruitore fr = asps.getFruitore(i);
IDSoggetto soggettoFruitore = new IDSoggetto(fr.getTipo(),fr.getNome());
log.debug("\t- eliminazione mapping fruizioni ...");
DBMappingUtils.deleteMappingFruizione(idServizio, soggettoFruitore, connectionConfigurazione, tipoDatabase);
log.debug("\t- eliminazione mapping fruizioni effettuata");
}
}
// PORTE DELEGATE
List<IDServizioApplicativo> nomiServiziApplicativi = new ArrayList<IDServizioApplicativo>();
List<PortaDelegata> listaPorteDelegate =
driverConfigurazione.getPorteDelegateWithServizio(asps.getId(), asps.getTipo(), asps.getNome(), asps.getVersione(),
asps.getIdSoggetto(), asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
log.debug("\t- eliminazione porte delegate ("+listaPorteDelegate.size()+") ...");
while(listaPorteDelegate.size()>0){
PortaDelegata pd = listaPorteDelegate.remove(0);
log.debug("\t\t. porta delegata ("+pd.getNome()+") ...");
for (int i = 0; i < pd.sizeServizioApplicativoList(); i++) {
String sa = pd.getServizioApplicativo(i).getNome();
IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
idServizioApplicativo.setNome(sa);
idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario()));
if(!nomiServiziApplicativi.contains(idServizioApplicativo)){
nomiServiziApplicativi.add(idServizioApplicativo);
}
}
driverConfigurazione.deletePortaDelegata(pd);
log.debug("\t\t. porta delegata ("+pd.getNome()+") eliminata");
}
log.debug("\t- eliminazione porte delegate effettuata");
// PORTE APPLICATIVE
List<PortaApplicativa> listaPorteApplicative =
driverConfigurazione.getPorteApplicativeWithServizio(asps.getId(), asps.getTipo(), asps.getNome(), asps.getVersione(),
asps.getIdSoggetto(), asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
log.debug("\t- eliminazione porte applicative ("+listaPorteApplicative.size()+") ...");
while(listaPorteApplicative.size()>0){
PortaApplicativa pa = listaPorteApplicative.remove(0);
IDPortaApplicativa idpa = new IDPortaApplicativa();
idpa.setNome(pa.getNome());
pa = driverConfigurazione.getPortaApplicativa(idpa); // Leggo tutti i valori (Bug del metodo getPorteApplicativeWithServizio)
log.debug("\t\t. porta applicativa ("+pa.getNome()+") ...");
for (int i = 0; i < pa.sizeServizioApplicativoList(); i++) {
String sa = pa.getServizioApplicativo(i).getNome();
IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
idServizioApplicativo.setNome(sa);
idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario()));
if(!nomiServiziApplicativi.contains(idServizioApplicativo)){
nomiServiziApplicativi.add(idServizioApplicativo);
}
}
driverConfigurazione.deletePortaApplicativa(pa);
log.debug("\t\t. porta applicativa ("+pa.getNome()+") eliminata");
}
log.debug("\t- eliminazione porte applicative effettuata");
// SERVIZI APPLICATIVI
log.debug("\t- eliminazione servizi applicativi ("+nomiServiziApplicativi.size()+") ...");
while(nomiServiziApplicativi.size()>0){
IDServizioApplicativo idSA = nomiServiziApplicativi.remove(0);
log.debug("\t\t. servizio applicativo ("+idSA.toString()+") ...");
try{
ServizioApplicativo sa = driverConfigurazione.getServizioApplicativo(idSA);
driverConfigurazione.deleteServizioApplicativo(sa);
log.debug("\t\t. servizio applicativo ("+idSA.toString()+") eliminato");
}catch(DriverConfigurazioneNotFound notFound){
log.debug("\t\t. servizio applicativo ("+idSA.toString()+") non esiste (puo' darsi che veniva riferito da piu' oggetti, e sia gia' stato eliminato)");
}
}
log.debug("\t- eliminazione servizi applicativi effettuata");
// SERVIZI (mapping erogazioni)
if(govwayConsoleMode){
log.debug("\t- eliminazione mapping erogazione ...");
DBMappingUtils.deleteMappingErogazione(idServizio, connectionConfigurazione, tipoDatabase);
log.debug("\t- eliminazione mapping erogazione effettuata");
}
// SERVIZI
log.debug("\t- eliminazione servizio ...");
driverRegistroServizi.deleteAccordoServizioParteSpecifica(asps);
log.debug("\t- eliminazione servizio effettuata");
// ACCORDI (SE NON VI SONO ALTRI SERVIZI CHE LO IMPLEMENTANO)
log.debug("\t- eliminazione accordo parte comune ...");
FiltroRicercaServizi filtroAltriServizi = new FiltroRicercaServizi();
IDAccordo idAccordoParteComune = IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
filtroAltriServizi.setIdAccordoServizioParteComune(idAccordoParteComune);
boolean existsAltriServizi = false;
StringBuilder bfAltriServizi = new StringBuilder();
try{
List<IDServizio> others = driverRegistroServizi.getAllIdServizi(filtroAltriServizi);
if(others!=null && others.size()>0){
existsAltriServizi = true;
for (int i = 0; i < others.size(); i++) {
if(bfAltriServizi.length()>0){
bfAltriServizi.append(",");
}
bfAltriServizi.append(others.get(i).toString());
}
}
}catch(DriverRegistroServiziNotFound notFound){}
if(!existsAltriServizi){
AccordoServizioParteComune as = new AccordoServizioParteComune();
as.setNome(idAccordoParteComune.getNome());
as.setVersione(idAccordoParteComune.getVersione());
if(idAccordoParteComune.getSoggettoReferente()!=null){
IdSoggetto asr = new IdSoggetto();
asr.setTipo(idAccordoParteComune.getSoggettoReferente().getTipo());
asr.setNome(idAccordoParteComune.getSoggettoReferente().getNome());
as.setSoggettoReferente(asr);
}
driverRegistroServizi.deleteAccordoServizioParteComune(as);
log.debug("\t- eliminazione accordo parte comune effettuata");
}
else{
log.debug("\t- eliminazione accordo parte comune non effettuata poiche' implementato da altri servizi: "+bfAltriServizi.toString());
}
}
log.debug("Gestione eliminazione servizio ["+idServizio.toString()+"] completata");
}
log.debug("Commit...");
connectionConfigurazione.commit();
// NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
if(!govwayConsoleMode){
connectionRegistroServizi.commit();
}
log.debug("Commit effettuato");
}catch(Exception e){
try{
connectionConfigurazione.rollback();
}catch(Exception eRollback){}
try{
// NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
if(!govwayConsoleMode){
connectionRegistroServizi.rollback();
}
}catch(Exception eRollback){}
String errorMsg = "Errore avvenuto durante l'eliminazione: "+e.getMessage();
log.error(errorMsg,e);
throw new Exception(errorMsg,e);
}finally{
try{
connectionConfigurazione.setAutoCommit(true);
}catch(Exception e){}
try{
// NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
if(!govwayConsoleMode){
connectionRegistroServizi.setAutoCommit(true);
}
}catch(Exception e){}
try{
connectionConfigurazione.close();
}catch(Exception e){}
try{
// NOTA: Se sono in govwayConsoleMode devo usare SOLO 1 connessione (uso quella della configurazione)
if(!govwayConsoleMode){
connectionRegistroServizi.close();
}
}catch(Exception e){}
}
}
}