DBOggettiInUsoUtils_accordiSoap.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.protocol.engine.utils;

  21. import java.sql.Connection;
  22. import java.sql.PreparedStatement;
  23. import java.sql.ResultSet;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. import java.util.Map;
  27. import java.util.Set;

  28. import org.openspcoop2.core.commons.CoreException;
  29. import org.openspcoop2.core.commons.DBUtils;
  30. import org.openspcoop2.core.commons.ErrorsHandlerCostant;
  31. import org.openspcoop2.core.constants.CostantiDB;
  32. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  33. import org.openspcoop2.core.id.IDAccordo;
  34. import org.openspcoop2.core.id.IDPortType;
  35. import org.openspcoop2.core.id.IDPortTypeAzione;
  36. import org.openspcoop2.core.id.IDPortaApplicativa;
  37. import org.openspcoop2.core.id.IDServizio;
  38. import org.openspcoop2.core.id.IDSoggetto;
  39. import org.openspcoop2.core.mapping.DBMappingUtils;
  40. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  41. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  42. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  43. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  44. import org.openspcoop2.protocol.engine.constants.Costanti;
  45. import org.openspcoop2.protocol.engine.constants.ModalitaIdentificazioneAzione;
  46. import org.openspcoop2.utils.UtilsException;
  47. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  48. import org.openspcoop2.utils.sql.ISQLQueryObject;
  49. import org.openspcoop2.utils.sql.LikeConfig;
  50. import org.openspcoop2.utils.sql.SQLObjectFactory;

  51. /**
  52.  * DBOggettiInUsoUtils_accordiSoap
  53.  *
  54.  * @author Andrea Poli (apoli@link.it)
  55.  * @author $Author$
  56.  * @version $Rev$, $Date$
  57.  *
  58.  */
  59. public class DBOggettiInUsoUtils_accordiSoap {
  60.    
  61.     private DBOggettiInUsoUtils_accordiSoap() {}

  62.     protected static boolean isPortTypeConfigInUso(Connection con, String tipoDB, IDPortType idPT, Map<ErrorsHandlerCostant,
  63.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  64.         return isPortTypeInUsoInternal(con,tipoDB,idPT,false,true,whereIsInUso,normalizeObjectIds);
  65.     }
  66.     protected static boolean isPortTypeRegistryInUso(Connection con, String tipoDB, IDPortType idPT, Map<ErrorsHandlerCostant,
  67.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  68.         return isPortTypeInUsoInternal(con,tipoDB,idPT,true,false,whereIsInUso,normalizeObjectIds);
  69.     }
  70.     protected static boolean isPortTypeInUso(Connection con, String tipoDB, IDPortType idPT, Map<ErrorsHandlerCostant,
  71.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  72.         return isPortTypeInUsoInternal(con,tipoDB,idPT,true,true,whereIsInUso,normalizeObjectIds);
  73.     }
  74.     private static boolean isPortTypeInUsoInternal(Connection con, String tipoDB, IDPortType idPT,
  75.             boolean registry, boolean config, Map<ErrorsHandlerCostant,
  76.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  77.         String nomeMetodo = "_isPortTypeInUso";

  78.         PreparedStatement stmt = null;
  79.         ResultSet risultato = null;
  80.         String queryString;

  81.         try {
  82.        
  83.             if(registry) {
  84.                 // nop
  85.             }
  86.            
  87.             boolean isInUso = false;
  88.            
  89.             List<String> correlazioneList = whereIsInUso.get(ErrorsHandlerCostant.IS_CORRELATA);
  90.            
  91.             List<String> porteApplicativeList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE);
  92.             List<String> porteDelegateList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE);
  93.             List<String> mappingErogazionePAList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA);
  94.             List<String> mappingFruizionePDList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD);
  95.                        
  96.             if (correlazioneList == null) {
  97.                 correlazioneList = new ArrayList<>();
  98.                 whereIsInUso.put(ErrorsHandlerCostant.IS_CORRELATA, correlazioneList);
  99.             }
  100.            
  101.             if (porteApplicativeList == null) {
  102.                 porteApplicativeList = new ArrayList<>();
  103.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE, porteApplicativeList);
  104.             }
  105.             if (porteDelegateList == null) {
  106.                 porteDelegateList = new ArrayList<>();
  107.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE, porteDelegateList);
  108.             }
  109.             if (mappingErogazionePAList == null) {
  110.                 mappingErogazionePAList = new ArrayList<>();
  111.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA, mappingErogazionePAList);
  112.             }
  113.             if (mappingFruizionePDList == null) {
  114.                 mappingFruizionePDList = new ArrayList<>();
  115.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD, mappingFruizionePDList);
  116.             }
  117.            
  118.            
  119.            
  120.             // recupero id
  121.            
  122.             long idAccordo = DBUtils.getIdAccordoServizioParteComune(idPT.getIdAccordo(), con, tipoDB);
  123.             if(idAccordo<=0) {
  124.                 throw new UtilsException("Accordo non trovato");
  125.             }
  126.                        
  127.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  128.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  129.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  130.             sqlQueryObject.addSelectField("nome_servizio");
  131.             sqlQueryObject.addSelectField("tipo_servizio");
  132.             sqlQueryObject.addSelectField("versione_servizio");
  133.             sqlQueryObject.addSelectField("nome_soggetto");
  134.             sqlQueryObject.addSelectField("tipo_soggetto");
  135.             sqlQueryObject.setANDLogicOperator(true);
  136.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo=?");
  137.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  138.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".port_type=?"); // condizione per soap
  139.             queryString = sqlQueryObject.createSQLQuery();
  140.             stmt = con.prepareStatement(queryString);
  141.             stmt.setLong(1, idAccordo);
  142.             stmt.setString(2, idPT.getNome());
  143.             risultato = stmt.executeQuery();
  144.             List<IDServizio> idServiziWithAccordo = new ArrayList<>();
  145.             while (risultato.next()) {
  146.                 IDSoggetto soggettoErogatore = new IDSoggetto(risultato.getString("tipo_soggetto"), risultato.getString("nome_soggetto"));
  147.                 IDServizio idServizio =
  148.                         IDServizioFactory.getInstance().getIDServizioFromValues(risultato.getString("tipo_servizio"),
  149.                                 risultato.getString("nome_servizio"), soggettoErogatore, risultato.getInt("versione_servizio"));
  150.                 idServiziWithAccordo.add(idServizio);
  151.             }
  152.             risultato.close();
  153.             stmt.close();
  154.            

  155.            
  156.            
  157.            
  158.            
  159.            
  160.             // Controllo il servizio non sia stata correlato da un'altra azione
  161.            
  162.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  163.             sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
  164.             sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  165.             sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE_AZIONI,"nome","nomeAzioneCorrelata");
  166.             sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE,"nome","nomePTCorrelato");
  167.             sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE + ".id_accordo = ?");
  168.             sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id_port_type = " + CostantiDB.PORT_TYPE + ".id");
  169.             sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".correlata_servizio = ?");
  170.             sqlQueryObject.setANDLogicOperator(true);
  171.             sqlQueryObject.addOrderBy("nomePTCorrelato");
  172.             sqlQueryObject.addOrderBy("nomeAzioneCorrelata");
  173.             sqlQueryObject.setSortType(true);
  174.             queryString = sqlQueryObject.createSQLQuery();
  175.             stmt = con.prepareStatement(queryString);
  176.             stmt.setLong(1, idAccordo);
  177.             stmt.setString(2, idPT.getNome());
  178.             risultato = stmt.executeQuery();
  179.             while (risultato.next()){
  180.                 String nomeAzioneCorrelata = risultato.getString("nomeAzioneCorrelata");
  181.                 String nomePTCorrelato = risultato.getString("nomePTCorrelato");
  182.                 correlazioneList.add("Azione "+nomeAzioneCorrelata+" del Servizio "+nomePTCorrelato);
  183.                 isInUso = true;
  184.             }
  185.             risultato.close();
  186.             stmt.close();
  187.            
  188.            
  189.            
  190.            
  191.            
  192.             // Controllo che l'azione non sia stata correlata da un'altra azione tramite ModI
  193.             if(Costanti.MODIPA_PROTOCOL_NAME.equals(idPT.getIdAccordo().getSoggettoReferente().getTipo())) {
  194.            
  195.                 ISQLQueryObject sqlQueryObjectApiExists = SQLObjectFactory.createSQLQueryObject(tipoDB);
  196.                 sqlQueryObjectApiExists.setANDLogicOperator(true);
  197.                 sqlQueryObjectApiExists.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  198.                 sqlQueryObjectApiExists.addSelectField(CostantiDB.PROTOCOL_PROPERTIES, "name");
  199.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  200.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  201.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  202.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  203.                
  204.                 ISQLQueryObject sqlQueryObjectPortTypeExists = SQLObjectFactory.createSQLQueryObject(tipoDB);
  205.                 sqlQueryObjectPortTypeExists.setANDLogicOperator(true);
  206.                 sqlQueryObjectPortTypeExists.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  207.                 sqlQueryObjectPortTypeExists.addSelectField(CostantiDB.PROTOCOL_PROPERTIES, "name");
  208.                 sqlQueryObjectPortTypeExists.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  209.                 sqlQueryObjectPortTypeExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  210.                 sqlQueryObjectPortTypeExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  211.                 sqlQueryObjectPortTypeExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  212.                
  213.                                
  214.                 // Verifico correlazione PUSH
  215.                
  216.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  217.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  218.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  219.                 sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
  220.                 sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  221.                 sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE_AZIONI,"nome","nomeAzioneCorrelata");
  222.                 sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE,"nome","nomePTCorrelato");
  223.                 sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI,"nome","nomeApi");
  224.                 sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI,"versione","versioneApi");
  225.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"tipo_soggetto","tipoReferenteApi");
  226.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"nome_soggetto","nomeReferenteApi");
  227.                 sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE + ".id_accordo = " + CostantiDB.ACCORDI + ".id");
  228.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".id = " + CostantiDB.ACCORDI + ".id_referente");
  229.                 sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id_port_type = " + CostantiDB.PORT_TYPE + ".id");
  230.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectApiExists);
  231.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectPortTypeExists);
  232.                 sqlQueryObject.setANDLogicOperator(true);
  233.                 sqlQueryObject.addOrderBy("nomeApi");
  234.                 sqlQueryObject.addOrderBy("versioneApi");
  235.                 sqlQueryObject.addOrderBy("nomeReferenteApi");
  236.                 sqlQueryObject.addOrderBy("tipoReferenteApi");
  237.                 sqlQueryObject.addOrderBy("nomePTCorrelato");
  238.                 sqlQueryObject.addOrderBy("nomeAzioneCorrelata");
  239.                 sqlQueryObject.setSortType(true);
  240.                 queryString = sqlQueryObject.createSQLQuery();
  241.                 stmt = con.prepareStatement(queryString);
  242.                 int index = 1;
  243.                 // sqlQueryObjectApiExists
  244.                 stmt.setString(index++, ProprietariProtocolProperty.OPERATION.name());
  245.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA);
  246.                 stmt.setString(index++, IDAccordoFactory.getInstance().getUriFromIDAccordo(idPT.getIdAccordo()));
  247.                 // sqlQueryObjectPortTypeExists
  248.                 stmt.setString(index++, ProprietariProtocolProperty.OPERATION.name());
  249.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_SERVIZIO_RICHIESTA_CORRELATA);
  250.                 stmt.setString(index++, idPT.getNome());
  251.                 risultato = stmt.executeQuery();
  252.                 IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  253.                 while (risultato.next()){
  254.                     String nomeAzioneCorrelata = risultato.getString("nomeAzioneCorrelata");
  255.                     String nomePTCorrelato = risultato.getString("nomePTCorrelato");
  256.                     String nomeApi = risultato.getString("nomeApi");
  257.                     int versioneApi = risultato.getInt("versioneApi");
  258.                     String tipoReferenteApi = risultato.getString("tipoReferenteApi");
  259.                     String nomeReferenteApi = risultato.getString("nomeReferenteApi");
  260.                     IDAccordo idAPI = idAccordoFactory.getIDAccordoFromValues(nomeApi, tipoReferenteApi, nomeReferenteApi, versioneApi);
  261.                     correlazioneList.add("Azione "+nomeAzioneCorrelata+" del Servizio "+nomePTCorrelato+" dell'API '"+idAccordoFactory.getUriFromIDAccordo(idAPI)+"' (interazione: NonBloccante-Push)");
  262.                     isInUso = true;
  263.                 }
  264.                 risultato.close();
  265.                 stmt.close();
  266.                
  267.             }
  268.            
  269.            
  270.            
  271.            
  272.            
  273.            
  274.            
  275.             // Porte delegate, mapping
  276.             if(config &&
  277.                 idServiziWithAccordo!=null && !idServiziWithAccordo.isEmpty()) {
  278.                 for (IDServizio idServizio : idServiziWithAccordo) {
  279.                    
  280.                     long idS = DBUtils.getIdServizio(idServizio.getNome(), idServizio.getTipo(), idServizio.getVersione(),
  281.                             idServizio.getSoggettoErogatore().getNome(), idServizio.getSoggettoErogatore().getTipo(),
  282.                             con, tipoDB);
  283.                     if(idS<=0) {
  284.                         throw new CoreException("Servizio '"+idServizio+"' non esistente");
  285.                     }
  286.                    
  287.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  288.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  289.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  290.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_FRUITORI,"id","idFruitore");
  291.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  292.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  293.                     sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_servizio");
  294.                     sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto");
  295.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".id");
  296.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  297.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  298.                     sqlQueryObject.setANDLogicOperator(true);
  299.                     sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".tipo_soggetto");
  300.                     sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".nome_soggetto");
  301.                     sqlQueryObject.setSortType(true);
  302.                     queryString = sqlQueryObject.createSQLQuery();
  303.                     stmt = con.prepareStatement(queryString);
  304.                     stmt.setLong(1, idS);
  305.                     risultato = stmt.executeQuery();
  306.                     List<IDSoggetto> listFruitori = new ArrayList<>();
  307.                     while (risultato.next()){
  308.                         listFruitori.add(new IDSoggetto(risultato.getString("tipo_soggetto"),risultato.getString("nome_soggetto")));
  309.                     }
  310.                     risultato.close();
  311.                     stmt.close();
  312.                    
  313.                    
  314.                     if(listFruitori!=null && !listFruitori.isEmpty()) {
  315.                    
  316.                         for (IDSoggetto idSoggettoFruitore : listFruitori) {
  317.                             List<MappingFruizionePortaDelegata> lPD = DBMappingUtils.mappingFruizionePortaDelegataList(con, tipoDB, idSoggettoFruitore, idServizio, true);
  318.                             if(lPD!=null && !lPD.isEmpty()) {
  319.                                 for (MappingFruizionePortaDelegata mapping : lPD) {
  320.                                     if(!mapping.isDefault()) {
  321.                                         // segnalo solo quelle di default, non ha senso segnalarte tutte
  322.                                         continue;
  323.                                     }
  324.                                     String nome = mapping.getIdPortaDelegata().getNome();
  325.                                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  326.                                     if(resultPorta.mapping) {
  327.                                         mappingFruizionePDList.add(resultPorta.label);
  328.                                     }
  329.                                     else {
  330.                                         porteDelegateList.add(resultPorta.label);
  331.                                     }
  332.                                     isInUso = true;
  333.                                 }
  334.                             }
  335.                         }
  336.                        
  337.                     }
  338.                 }
  339.             }
  340.                
  341.            
  342.                
  343.                
  344.             // Porte applicative, mapping
  345.             if(config &&
  346.                 idServiziWithAccordo!=null && !idServiziWithAccordo.isEmpty()) {
  347.                 for (IDServizio idServizio : idServiziWithAccordo) {
  348.                     List<MappingErogazionePortaApplicativa> lPA = DBMappingUtils.mappingErogazionePortaApplicativaList(con, tipoDB, idServizio, true);
  349.                     if(lPA!=null && !lPA.isEmpty()) {
  350.                         for (MappingErogazionePortaApplicativa mapping : lPA) {
  351.                             if(!mapping.isDefault()) {
  352.                                 // segnalo solo quelle di default, non ha senso segnalarte tutte
  353.                                 continue;
  354.                             }
  355.                             String nome = mapping.getIdPortaApplicativa().getNome();
  356.                             ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  357.                             if(resultPorta.mapping) {
  358.                                 mappingErogazionePAList.add(resultPorta.label);
  359.                             }
  360.                             else {
  361.                                 porteApplicativeList.add(resultPorta.label);
  362.                             }
  363.                             isInUso = true;
  364.                         }
  365.                     }
  366.                 }
  367.             }
  368.                
  369.            
  370.             return isInUso;

  371.         } catch (Exception se) {
  372.             throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  373.         } finally {
  374.             // Chiudo statement and resultset
  375.             JDBCUtilities.closeResources(risultato, stmt);
  376.         }
  377.     }


  378.     protected static String toString(IDPortType idPT, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator){
  379.         return toString(idPT, whereIsInUso, prefix, separator," non eliminabile perch&egrave; :");
  380.     }
  381.     protected static String toString(IDPortType idPT, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator, String intestazione){
  382.         Set<ErrorsHandlerCostant> keys = whereIsInUso.keySet();
  383.         StringBuilder msgBuilder = new StringBuilder("Servizio '"+(idPT.getNome())+"'" + intestazione+separator);
  384.         if(!prefix){
  385.             msgBuilder = new StringBuilder("");
  386.         }
  387.         String separatorCategorie = "";
  388.         if(whereIsInUso.size()>1) {
  389.             separatorCategorie = separator;
  390.         }
  391.         for (ErrorsHandlerCostant key : keys) {
  392.             List<String> messages = whereIsInUso.get(key);

  393.             if ( messages!=null && !messages.isEmpty()) {
  394.                 msgBuilder.append(separatorCategorie);
  395.             }
  396.            
  397.             switch (key) {

  398.             case IS_CORRELATA:
  399.                 if ( messages!=null && !messages.isEmpty()) {
  400.                     msgBuilder.append("correlato verso altre azioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  401.                 }
  402.                 break;
  403.            
  404.             case IN_USO_IN_PORTE_APPLICATIVE:
  405.                 if ( messages!=null && !messages.isEmpty()) {
  406.                     msgBuilder.append("utilizzato nelle Porte Inbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  407.                 }
  408.                 break;
  409.             case IN_USO_IN_PORTE_DELEGATE:
  410.                 if ( messages!=null && !messages.isEmpty()) {
  411.                     msgBuilder.append("utilizzato nelle Porte Outbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  412.                 }
  413.                 break;          
  414.             case IN_USO_IN_MAPPING_EROGAZIONE_PA:
  415.                 if ( messages!=null && !messages.isEmpty()) {
  416.                     msgBuilder.append("utilizzato nelle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  417.                 }
  418.                 break;
  419.             case IN_USO_IN_MAPPING_FRUIZIONE_PD:
  420.                 if ( messages!=null && !messages.isEmpty()) {
  421.                     msgBuilder.append("utilizzato nelle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  422.                 }
  423.                 break;
  424.                
  425.             default:
  426.                 msgBuilder.append("utilizzata in oggetto non codificato ("+key+")"+separator);
  427.                 break;
  428.             }
  429.            
  430.         }// chiudo for

  431.         return msgBuilder.toString();
  432.     }
  433.    
  434.    
  435.    
  436.    
  437.    
  438.    
  439.    
  440.    
  441.    
  442.    
  443.    
  444.    
  445.    
  446.    
  447.    
  448.     // ***** OPERATION ******

  449.     protected static boolean isOperazioneConfigInUso(Connection con, String tipoDB, IDPortTypeAzione idOperazione, Map<ErrorsHandlerCostant,
  450.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  451.         return isOperazioneInUsoInternal(con,tipoDB,idOperazione,false,true,whereIsInUso,normalizeObjectIds);
  452.     }
  453.     protected static boolean isOperazioneRegistryInUso(Connection con, String tipoDB, IDPortTypeAzione idOperazione, Map<ErrorsHandlerCostant,
  454.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  455.         return isOperazioneInUsoInternal(con,tipoDB,idOperazione,true,false,whereIsInUso,normalizeObjectIds);
  456.     }
  457.     protected static boolean isOperazioneInUso(Connection con, String tipoDB, IDPortTypeAzione idOperazione, Map<ErrorsHandlerCostant,
  458.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  459.         return isOperazioneInUsoInternal(con,tipoDB,idOperazione,true,true,whereIsInUso,normalizeObjectIds);
  460.     }
  461.     private static boolean isOperazioneInUsoInternal(Connection con, String tipoDB, IDPortTypeAzione idOperazione,
  462.             boolean registry, boolean config, Map<ErrorsHandlerCostant,
  463.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  464.         String nomeMetodo = "_isOperazioneInUso";

  465.         PreparedStatement stmt = null;
  466.         ResultSet risultato = null;
  467.         String queryString;

  468.         try {
  469.        
  470.             boolean isInUso = false;
  471.            
  472.             List<String> correlazioneList = whereIsInUso.get(ErrorsHandlerCostant.IS_CORRELATA);
  473.            
  474.             List<String> porteApplicativeList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE);
  475.             List<String> porteDelegateList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE);
  476.             List<String> mappingErogazionePAList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA);
  477.             List<String> mappingFruizionePDList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD);
  478.            
  479.             List<String> trasformazionePDMappingList = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PD);
  480.             List<String> trasformazionePDList = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_PD);
  481.             List<String> trasformazionePAMappingLis = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PA);
  482.             List<String> trasformazionePAList = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_PA);
  483.            
  484.             List<String> urlInvocazionePDMappingList = whereIsInUso.get(ErrorsHandlerCostant.URLINVOCAZIONE_MAPPING_PD);
  485.             List<String> urlInvocazionePDList = whereIsInUso.get(ErrorsHandlerCostant.URLINVOCAZIONE_PD);
  486.             List<String> urlInvocazionePAMappingList = whereIsInUso.get(ErrorsHandlerCostant.URLINVOCAZIONE_MAPPING_PA);
  487.             List<String> urlInvocazionePAList = whereIsInUso.get(ErrorsHandlerCostant.URLINVOCAZIONE_PA);
  488.            
  489.             List<String> ctList = whereIsInUso.get(ErrorsHandlerCostant.CONTROLLO_TRAFFICO);
  490.             List<String> allarmeList = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI);
  491.            
  492.             List<String> modiSignalHubList = whereIsInUso.get(ErrorsHandlerCostant.IS_RIFERITA_MODI_SIGNAL_HUB);
  493.            
  494.             if (correlazioneList == null) {
  495.                 correlazioneList = new ArrayList<>();
  496.                 whereIsInUso.put(ErrorsHandlerCostant.IS_CORRELATA, correlazioneList);
  497.             }
  498.            
  499.             if (porteApplicativeList == null) {
  500.                 porteApplicativeList = new ArrayList<>();
  501.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE, porteApplicativeList);
  502.             }
  503.             if (porteDelegateList == null) {
  504.                 porteDelegateList = new ArrayList<>();
  505.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE, porteDelegateList);
  506.             }
  507.             if (mappingErogazionePAList == null) {
  508.                 mappingErogazionePAList = new ArrayList<>();
  509.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA, mappingErogazionePAList);
  510.             }
  511.             if (mappingFruizionePDList == null) {
  512.                 mappingFruizionePDList = new ArrayList<>();
  513.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD, mappingFruizionePDList);
  514.             }
  515.            
  516.             if (trasformazionePDMappingList == null) {
  517.                 trasformazionePDMappingList = new ArrayList<>();
  518.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PD, trasformazionePDMappingList);
  519.             }
  520.             if (trasformazionePDList == null) {
  521.                 trasformazionePDList = new ArrayList<>();
  522.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_PD, trasformazionePDList);
  523.             }
  524.             if (trasformazionePAMappingLis == null) {
  525.                 trasformazionePAMappingLis = new ArrayList<>();
  526.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PA, trasformazionePAMappingLis);
  527.             }
  528.             if (trasformazionePAList == null) {
  529.                 trasformazionePAList = new ArrayList<>();
  530.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_PA, trasformazionePAList);
  531.             }
  532.            
  533.             if (urlInvocazionePDMappingList == null) {
  534.                 urlInvocazionePDMappingList = new ArrayList<>();
  535.                 whereIsInUso.put(ErrorsHandlerCostant.URLINVOCAZIONE_MAPPING_PD, urlInvocazionePDMappingList);
  536.             }
  537.             if (urlInvocazionePDList == null) {
  538.                 urlInvocazionePDList = new ArrayList<>();
  539.                 whereIsInUso.put(ErrorsHandlerCostant.URLINVOCAZIONE_PD, urlInvocazionePDList);
  540.             }
  541.             if (urlInvocazionePAMappingList == null) {
  542.                 urlInvocazionePAMappingList = new ArrayList<>();
  543.                 whereIsInUso.put(ErrorsHandlerCostant.URLINVOCAZIONE_MAPPING_PA, urlInvocazionePAMappingList);
  544.             }
  545.             if (urlInvocazionePAList == null) {
  546.                 urlInvocazionePAList = new ArrayList<>();
  547.                 whereIsInUso.put(ErrorsHandlerCostant.URLINVOCAZIONE_PA, urlInvocazionePAList);
  548.             }
  549.            
  550.             if (ctList == null) {
  551.                 ctList = new ArrayList<>();
  552.                 whereIsInUso.put(ErrorsHandlerCostant.CONTROLLO_TRAFFICO, ctList);
  553.             }
  554.             if (allarmeList == null) {
  555.                 allarmeList = new ArrayList<>();
  556.                 whereIsInUso.put(ErrorsHandlerCostant.ALLARMI, allarmeList);
  557.             }
  558.            
  559.             if (modiSignalHubList == null) {
  560.                 modiSignalHubList = new ArrayList<>();
  561.                 whereIsInUso.put(ErrorsHandlerCostant.IS_RIFERITA_MODI_SIGNAL_HUB, modiSignalHubList);
  562.             }
  563.            
  564.            
  565.            
  566.             // recupero id
  567.            
  568.             long idAccordo = DBUtils.getIdAccordoServizioParteComune(idOperazione.getIdPortType().getIdAccordo(), con, tipoDB);
  569.             if(idAccordo<=0) {
  570.                 throw new UtilsException("Accordo non trovato");
  571.             }
  572.            
  573.            
  574.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  575.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  576.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  577.             sqlQueryObject.addSelectField("nome_servizio");
  578.             sqlQueryObject.addSelectField("tipo_servizio");
  579.             sqlQueryObject.addSelectField("versione_servizio");
  580.             sqlQueryObject.addSelectField("nome_soggetto");
  581.             sqlQueryObject.addSelectField("tipo_soggetto");
  582.             sqlQueryObject.setANDLogicOperator(true);
  583.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo=?");
  584.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  585.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".port_type=?"); // condizione per soap
  586.             queryString = sqlQueryObject.createSQLQuery();
  587.             stmt = con.prepareStatement(queryString);
  588.             stmt.setLong(1, idAccordo);
  589.             stmt.setString(2, idOperazione.getIdPortType().getNome());
  590.             risultato = stmt.executeQuery();
  591.             List<IDServizio> idServiziWithAccordo = new ArrayList<>();
  592.             while (risultato.next()) {
  593.                 IDSoggetto soggettoErogatore = new IDSoggetto(risultato.getString("tipo_soggetto"), risultato.getString("nome_soggetto"));
  594.                 IDServizio idServizio =
  595.                         IDServizioFactory.getInstance().getIDServizioFromValues(risultato.getString("tipo_servizio"),
  596.                                 risultato.getString("nome_servizio"), soggettoErogatore, risultato.getInt("versione_servizio"));
  597.                 idServiziWithAccordo.add(idServizio);
  598.             }
  599.             risultato.close();
  600.             stmt.close();
  601.            
  602.            
  603.            
  604.            
  605.            
  606.             // Controllo che l'azione non sia stata correlata da un'altra azione
  607.            
  608.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  609.             sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
  610.             sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  611.             sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE_AZIONI,"nome","nomeAzioneCorrelata");
  612.             sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE,"nome","nomePTCorrelato");
  613.             sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE_AZIONI,"correlata_servizio","correlataServizio");
  614.             sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE + ".id_accordo = ?");
  615.             sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id_port_type = " + CostantiDB.PORT_TYPE + ".id");
  616.            
  617.             ISQLQueryObject sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  618.             sqlQueryObjectOr.setANDLogicOperator(false);
  619.             // asincrono asimmetrico
  620.             sqlQueryObjectOr.addWhereCondition(true,
  621.                     CostantiDB.PORT_TYPE_AZIONI + ".correlata = ?",
  622.                     (CostantiDB.PORT_TYPE_AZIONI + ".correlata_servizio is null OR "+CostantiDB.PORT_TYPE_AZIONI + ".correlata_servizio = ?"),
  623.                     CostantiDB.PORT_TYPE + ".nome = ?");
  624.             // asincrono simmetrico
  625.             sqlQueryObjectOr.addWhereCondition(true,
  626.                     CostantiDB.PORT_TYPE_AZIONI + ".correlata = ?",
  627.                     CostantiDB.PORT_TYPE_AZIONI + ".correlata_servizio = ?",
  628.                     CostantiDB.PORT_TYPE + ".nome <> ?");
  629.             sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  630.            
  631.             sqlQueryObject.setANDLogicOperator(true);
  632.             sqlQueryObject.addOrderBy("nomePTCorrelato");
  633.             sqlQueryObject.addOrderBy("nomeAzioneCorrelata");
  634.             sqlQueryObject.setSortType(true);
  635.             queryString = sqlQueryObject.createSQLQuery();
  636.             stmt = con.prepareStatement(queryString);
  637.             int index = 1;
  638.             stmt.setLong(index++, idAccordo);
  639.             // asincrono asimmetrico
  640.             stmt.setString(index++, idOperazione.getNome());
  641.             stmt.setString(index++, "");
  642.             stmt.setString(index++, idOperazione.getIdPortType().getNome());
  643.             // asincrono simmetrico
  644.             stmt.setString(index++, idOperazione.getNome());
  645.             stmt.setString(index++, idOperazione.getIdPortType().getNome());
  646.             stmt.setString(index++, idOperazione.getIdPortType().getNome());
  647.             risultato = stmt.executeQuery();
  648.             while (risultato.next()){
  649.                 String nomeAzioneCorrelata = risultato.getString("nomeAzioneCorrelata");
  650.                 String nomePTCorrelato = risultato.getString("nomePTCorrelato");
  651.                 String correlataServizio = risultato.getString("correlataServizio");
  652.                 if(correlataServizio!=null && !"".equals(correlataServizio)) {
  653.                     correlazioneList.add("Azione "+nomeAzioneCorrelata+" del Servizio "+nomePTCorrelato);
  654.                 }
  655.                 else {
  656.                     correlazioneList.add("Azione "+nomeAzioneCorrelata);
  657.                 }
  658.                 isInUso = true;
  659.             }
  660.             risultato.close();
  661.             stmt.close();
  662.            
  663.            
  664.            
  665.            
  666.            
  667.             // Controllo che l'azione non sia stata correlata da un'altra azione tramite ModI
  668.             if(Costanti.MODIPA_PROTOCOL_NAME.equals(idOperazione.getIdPortType().getIdAccordo().getSoggettoReferente().getTipo())) {
  669.            
  670.                 ISQLQueryObject sqlQueryObjectApiExists = SQLObjectFactory.createSQLQueryObject(tipoDB);
  671.                 sqlQueryObjectApiExists.setANDLogicOperator(true);
  672.                 sqlQueryObjectApiExists.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  673.                 sqlQueryObjectApiExists.addSelectField(CostantiDB.PROTOCOL_PROPERTIES, "name");
  674.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  675.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  676.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  677.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  678.                
  679.                 ISQLQueryObject sqlQueryObjectPortTypeExists = SQLObjectFactory.createSQLQueryObject(tipoDB);
  680.                 sqlQueryObjectPortTypeExists.setANDLogicOperator(true);
  681.                 sqlQueryObjectPortTypeExists.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  682.                 sqlQueryObjectPortTypeExists.addSelectField(CostantiDB.PROTOCOL_PROPERTIES, "name");
  683.                 sqlQueryObjectPortTypeExists.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  684.                 sqlQueryObjectPortTypeExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  685.                 sqlQueryObjectPortTypeExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  686.                 sqlQueryObjectPortTypeExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  687.                
  688.                 ISQLQueryObject sqlQueryObjectOperationExists = SQLObjectFactory.createSQLQueryObject(tipoDB);
  689.                 sqlQueryObjectOperationExists.setANDLogicOperator(true);
  690.                 sqlQueryObjectOperationExists.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  691.                 sqlQueryObjectOperationExists.addSelectField(CostantiDB.PROTOCOL_PROPERTIES, "name");
  692.                 sqlQueryObjectOperationExists.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  693.                 sqlQueryObjectOperationExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  694.                 sqlQueryObjectOperationExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  695.                 sqlQueryObjectOperationExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  696.                
  697.                
  698.                 // Verifico correlazione PULL (all'interno del solito accordo)
  699.                
  700.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  701.                 sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
  702.                 sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  703.                 sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE_AZIONI,"nome","nomeAzioneCorrelata");
  704.                 sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE + ".id_accordo = ?");
  705.                 sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE + ".nome = ?");
  706.                 sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id_port_type = " + CostantiDB.PORT_TYPE + ".id");
  707.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectApiExists);
  708.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectPortTypeExists);
  709.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectOperationExists);
  710.                 sqlQueryObject.setANDLogicOperator(true);
  711.                 sqlQueryObject.addOrderBy("nomeAzioneCorrelata");
  712.                 sqlQueryObject.setSortType(true);
  713.                 queryString = sqlQueryObject.createSQLQuery();
  714.                 stmt = con.prepareStatement(queryString);
  715.                 index = 1;
  716.                 stmt.setLong(index++, idAccordo);
  717.                 stmt.setString(index++, idOperazione.getIdPortType().getNome());
  718.                 // sqlQueryObjectApiExists
  719.                 stmt.setString(index++, ProprietariProtocolProperty.OPERATION.name());
  720.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA);
  721.                 stmt.setString(index++, Costanti.MODIPA_VALUE_UNDEFINED);
  722.                 // sqlQueryObjectPortTypeExists
  723.                 stmt.setString(index++, ProprietariProtocolProperty.OPERATION.name());
  724.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_SERVIZIO_RICHIESTA_CORRELATA);
  725.                 stmt.setString(index++, Costanti.MODIPA_VALUE_UNDEFINED);
  726.                 // sqlQueryObjectOperationExists
  727.                 stmt.setString(index++, ProprietariProtocolProperty.OPERATION.name());
  728.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_AZIONE_RICHIESTA_CORRELATA);
  729.                 stmt.setString(index++, idOperazione.getNome());
  730.                 risultato = stmt.executeQuery();
  731.                 while (risultato.next()){
  732.                     String nomeAzioneCorrelata = risultato.getString("nomeAzioneCorrelata");
  733.                     correlazioneList.add("Azione "+nomeAzioneCorrelata+" (interazione: NonBloccante-Pull)");
  734.                     isInUso = true;
  735.                 }
  736.                 risultato.close();
  737.                 stmt.close();
  738.                
  739.                 // Verifico correlazione PUSH
  740.                
  741.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  742.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  743.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  744.                 sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
  745.                 sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  746.                 sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE_AZIONI,"nome","nomeAzioneCorrelata");
  747.                 sqlQueryObject.addSelectAliasField(CostantiDB.PORT_TYPE,"nome","nomePTCorrelato");
  748.                 sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI,"nome","nomeApi");
  749.                 sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI,"versione","versioneApi");
  750.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"tipo_soggetto","tipoReferenteApi");
  751.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"nome_soggetto","nomeReferenteApi");
  752.                 sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE + ".id_accordo = " + CostantiDB.ACCORDI + ".id");
  753.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".id = " + CostantiDB.ACCORDI + ".id_referente");
  754.                 sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI + ".id_port_type = " + CostantiDB.PORT_TYPE + ".id");
  755.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectApiExists);
  756.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectPortTypeExists);
  757.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectOperationExists);
  758.                 sqlQueryObject.setANDLogicOperator(true);
  759.                 sqlQueryObject.addOrderBy("nomeApi");
  760.                 sqlQueryObject.addOrderBy("versioneApi");
  761.                 sqlQueryObject.addOrderBy("nomeReferenteApi");
  762.                 sqlQueryObject.addOrderBy("tipoReferenteApi");
  763.                 sqlQueryObject.addOrderBy("nomePTCorrelato");
  764.                 sqlQueryObject.addOrderBy("nomeAzioneCorrelata");
  765.                 sqlQueryObject.setSortType(true);
  766.                 queryString = sqlQueryObject.createSQLQuery();
  767.                 stmt = con.prepareStatement(queryString);
  768.                 index = 1;
  769.                 // sqlQueryObjectApiExists
  770.                 stmt.setString(index++, ProprietariProtocolProperty.OPERATION.name());
  771.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA);
  772.                 stmt.setString(index++, IDAccordoFactory.getInstance().getUriFromIDAccordo(idOperazione.getIdPortType().getIdAccordo()));
  773.                 // sqlQueryObjectPortTypeExists
  774.                 stmt.setString(index++, ProprietariProtocolProperty.OPERATION.name());
  775.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_SERVIZIO_RICHIESTA_CORRELATA);
  776.                 stmt.setString(index++, idOperazione.getIdPortType().getNome());
  777.                 // sqlQueryObjectOperationExists
  778.                 stmt.setString(index++, ProprietariProtocolProperty.OPERATION.name());
  779.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_AZIONE_RICHIESTA_CORRELATA);
  780.                 stmt.setString(index++, idOperazione.getNome());
  781.                 risultato = stmt.executeQuery();
  782.                 IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  783.                 while (risultato.next()){
  784.                     String nomeAzioneCorrelata = risultato.getString("nomeAzioneCorrelata");
  785.                     String nomePTCorrelato = risultato.getString("nomePTCorrelato");
  786.                     String nomeApi = risultato.getString("nomeApi");
  787.                     int versioneApi = risultato.getInt("versioneApi");
  788.                     String tipoReferenteApi = risultato.getString("tipoReferenteApi");
  789.                     String nomeReferenteApi = risultato.getString("nomeReferenteApi");
  790.                     IDAccordo idAPI = idAccordoFactory.getIDAccordoFromValues(nomeApi, tipoReferenteApi, nomeReferenteApi, versioneApi);
  791.                     correlazioneList.add("Azione "+nomeAzioneCorrelata+" del Servizio "+nomePTCorrelato+" dell'API '"+idAccordoFactory.getUriFromIDAccordo(idAPI)+"' (interazione: NonBloccante-Push)");
  792.                     isInUso = true;
  793.                 }
  794.                 risultato.close();
  795.                 stmt.close();
  796.                
  797.             }
  798.            
  799.            
  800.            

  801.            
  802.             // Porte delegate
  803.             if(config &&
  804.                 idServiziWithAccordo!=null && !idServiziWithAccordo.isEmpty()) {
  805.                 for (IDServizio idServizio : idServiziWithAccordo) {
  806.                    
  807.                     long idS = DBUtils.getIdServizio(idServizio.getNome(), idServizio.getTipo(), idServizio.getVersione(),
  808.                             idServizio.getSoggettoErogatore().getNome(), idServizio.getSoggettoErogatore().getTipo(),
  809.                             con, tipoDB);
  810.                     if(idS<=0) {
  811.                         throw new CoreException("Servizio '"+idServizio+"' non esistente");
  812.                     }
  813.                    
  814.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  815.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  816.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  817.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_FRUITORI,"id","idFruitore");
  818.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  819.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  820.                     sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_servizio");
  821.                     sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto");
  822.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".id");
  823.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  824.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  825.                     sqlQueryObject.setANDLogicOperator(true);
  826.                     sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".tipo_soggetto");
  827.                     sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".nome_soggetto");
  828.                     sqlQueryObject.setSortType(true);
  829.                     queryString = sqlQueryObject.createSQLQuery();
  830.                     stmt = con.prepareStatement(queryString);
  831.                     stmt.setLong(1, idS);
  832.                     risultato = stmt.executeQuery();
  833.                     List<IDSoggetto> listFruitori = new ArrayList<>();
  834.                     while (risultato.next()){
  835.                         listFruitori.add(new IDSoggetto(risultato.getString("tipo_soggetto"),risultato.getString("nome_soggetto")));
  836.                     }
  837.                     risultato.close();
  838.                     stmt.close();
  839.                    
  840.                    
  841.                     if(listFruitori!=null && !listFruitori.isEmpty()) {
  842.                    
  843.                         for (IDSoggetto idSoggettoFruitore : listFruitori) {
  844.                             List<MappingFruizionePortaDelegata> lPD = DBMappingUtils.mappingFruizionePortaDelegataList(con, tipoDB, idSoggettoFruitore, idServizio, true);
  845.                             if(lPD!=null && !lPD.isEmpty()) {
  846.                                 for (MappingFruizionePortaDelegata mapping : lPD) {
  847.                                    
  848.                                     // ** mapping **
  849.                                    
  850.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  851.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  852.                                     sqlQueryObject.addFromTable(CostantiDB.MAPPING_FRUIZIONE_PD);
  853.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE_AZIONI);
  854.                                     sqlQueryObject.addSelectField("nome_porta");
  855.                                     sqlQueryObject.setANDLogicOperator(true);
  856.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".nome_porta=?");
  857.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".id="+CostantiDB.MAPPING_FRUIZIONE_PD+".id_porta");
  858.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_AZIONI+".id_porta="+CostantiDB.PORTE_DELEGATE+".id");
  859.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_AZIONI+".azione=?");
  860.                                     queryString = sqlQueryObject.createSQLQuery();
  861.                                     stmt = con.prepareStatement(queryString);
  862.                                     stmt.setString(1, mapping.getIdPortaDelegata().getNome());
  863.                                     stmt.setString(2, idOperazione.getNome());
  864.                                     risultato = stmt.executeQuery();
  865.                                     while (risultato.next()){
  866.                                         String nome = risultato.getString("nome_porta");
  867.                                         ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  868.                                         if(resultPorta.mapping) {
  869.                                             mappingFruizionePDList.add(resultPorta.label);
  870.                                         }
  871.                                         else {
  872.                                             porteDelegateList.add(resultPorta.label);
  873.                                         }
  874.                                         isInUso = true;
  875.                                     }
  876.                                     risultato.close();
  877.                                     stmt.close();
  878.                                    
  879.                                    
  880.                                     // ** trasformazioni **
  881.                                    
  882.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  883.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI);
  884.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  885.                                     sqlQueryObject.addSelectField("nome_porta");
  886.                                     sqlQueryObject.setANDLogicOperator(true);
  887.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".nome_porta=?");
  888.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".id_porta="+CostantiDB.PORTE_DELEGATE+".id");
  889.                                     // condizione di controllo
  890.                                     sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  891.                                     sqlQueryObjectOr.setANDLogicOperator(false);
  892.                                     // (applicabilita_azioni == 'NOME') OR (applicabilita_azioni like 'NOME,%') OR (applicabilita_azioni like '%,NOME') OR (applicabilita_azioni like '%,applicabilita_azioni,%')
  893.                                     /** CLOB sqlQueryObjectOr.addWhereCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni = ?");*/
  894.                                     sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni", idOperazione.getNome(), false , false);
  895.                                     sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni", idOperazione.getNome()+",", LikeConfig.startsWith(false));
  896.                                     sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni", ","+idOperazione.getNome(), LikeConfig.endsWith(false));
  897.                                     sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni", ","+idOperazione.getNome()+",", true , false);
  898.                                     sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  899.                                     queryString = sqlQueryObject.createSQLQuery();
  900.                                     stmt = con.prepareStatement(queryString);
  901.                                     stmt.setString(1, mapping.getIdPortaDelegata().getNome());
  902.                                     /** CLOB stmt.setString(2, idRisorsa.getNome());*/
  903.                                     risultato = stmt.executeQuery();
  904.                                     while (risultato.next()){
  905.                                         String nome = risultato.getString("nome_porta");
  906.                                         ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  907.                                         if(resultPorta.mapping) {
  908.                                             trasformazionePDMappingList.add(resultPorta.label);
  909.                                         }
  910.                                         else {
  911.                                             trasformazionePDList.add(resultPorta.label);
  912.                                         }
  913.                                         isInUso = true;
  914.                                     }
  915.                                     risultato.close();
  916.                                     stmt.close();
  917.                                    
  918.                                    
  919.                                     // ** url di invocazione **
  920.                                    
  921.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  922.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  923.                                     sqlQueryObject.addSelectField("nome_porta");
  924.                                     sqlQueryObject.setANDLogicOperator(true);
  925.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".nome_porta=?");
  926.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".tipo_soggetto_erogatore=?");
  927.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".nome_soggetto_erogatore=?");
  928.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".tipo_servizio=?");
  929.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".nome_servizio=?");
  930.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".versione_servizio=?");
  931.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".nome_azione=?");
  932.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".mode_azione=?");
  933.                                     queryString = sqlQueryObject.createSQLQuery();
  934.                                     stmt = con.prepareStatement(queryString);
  935.                                     index = 1;
  936.                                     stmt.setString(index++, mapping.getIdPortaDelegata().getNome());
  937.                                     stmt.setString(index++, idServizio.getSoggettoErogatore().getTipo());
  938.                                     stmt.setString(index++, idServizio.getSoggettoErogatore().getNome());
  939.                                     stmt.setString(index++, idServizio.getTipo());
  940.                                     stmt.setString(index++, idServizio.getNome());
  941.                                     stmt.setInt(index++, idServizio.getVersione());
  942.                                     stmt.setString(index++, idOperazione.getNome());
  943.                                     stmt.setString(index++, ModalitaIdentificazioneAzione.STATIC.getValue());
  944.                                     risultato = stmt.executeQuery();
  945.                                     while (risultato.next()){
  946.                                         String nome = risultato.getString("nome_porta");
  947.                                         ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  948.                                         if(resultPorta.mapping) {
  949.                                             urlInvocazionePDMappingList.add(resultPorta.label);
  950.                                         }
  951.                                         else {
  952.                                             urlInvocazionePDList.add(resultPorta.label);
  953.                                         }
  954.                                         isInUso = true;
  955.                                     }
  956.                                     risultato.close();
  957.                                     stmt.close();
  958.                                    
  959.                                    
  960.                                     // ** Controllo che non sia associato a policy di controllo del traffico o allarmi **
  961.                                    
  962.                                     int max = 2;
  963.                                     if(!CostantiDB.isAllarmiEnabled()) {
  964.                                         max=1;
  965.                                     }
  966.                                     for (int i = 0; i < max; i++) {
  967.                                        
  968.                                         String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  969.                                         String identificativoColumn = "active_policy_id";
  970.                                         String aliasColumn = "policy_alias";
  971.                                         List<String> list = ctList;
  972.                                         String oggetto = "Policy";
  973.                                         if(i==1) {
  974.                                             tabella = CostantiDB.ALLARMI;
  975.                                             identificativoColumn = "nome";
  976.                                             aliasColumn = "alias";
  977.                                             list = allarmeList;
  978.                                             oggetto = "Allarme";
  979.                                         }
  980.                                    
  981.                                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  982.                                         sqlQueryObject.addFromTable(tabella);
  983.                                         sqlQueryObject.addSelectField(identificativoColumn);
  984.                                         sqlQueryObject.addSelectField(aliasColumn);
  985.                                         sqlQueryObject.addSelectField("filtro_ruolo");
  986.                                         sqlQueryObject.addSelectField("filtro_porta");
  987.                                         sqlQueryObject.setANDLogicOperator(true);
  988.                                         sqlQueryObject.addWhereCondition(tabella+".filtro_ruolo=?");
  989.                                         sqlQueryObject.addWhereCondition(tabella+".filtro_porta=?");
  990.                                        
  991.                                         // condizione di controllo
  992.                                         sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  993.                                         sqlQueryObjectOr.setANDLogicOperator(false);
  994.                                         // (filtro_azione == 'NOME') OR (filtro_azione like 'NOME,%') OR (filtro_azione like '%,NOME') OR (filtro_azione like '%,applicabilita_azioni,%')
  995.                                         /** CLOB sqlQueryObjectOr.addWhereCondition(tabella+".filtro_azione = ?");*/
  996.                                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idOperazione.getNome(), false , false);
  997.                                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idOperazione.getNome()+",", LikeConfig.startsWith(false));
  998.                                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idOperazione.getNome(), LikeConfig.endsWith(false));
  999.                                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idOperazione.getNome()+",", true , false);
  1000.                                         sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  1001.                                        
  1002.                                         sqlQueryObject.addOrderBy("filtro_ruolo");
  1003.                                         sqlQueryObject.addOrderBy("filtro_porta");
  1004.                                         queryString = sqlQueryObject.createSQLQuery();
  1005.                                         stmt = con.prepareStatement(queryString);
  1006.                                         stmt.setString(1, "delegata");
  1007.                                         stmt.setString(2, mapping.getIdPortaDelegata().getNome());
  1008.                                         /** CLOB stmt.setString(3, idRisorsa.getNome());*/
  1009.                                         risultato = stmt.executeQuery();
  1010.                                         while (risultato.next()) {
  1011.                                            
  1012.                                             String alias = risultato.getString(aliasColumn);
  1013.                                             if(alias== null || "".equals(alias)) {
  1014.                                                 alias = risultato.getString(identificativoColumn);
  1015.                                             }
  1016.                                            
  1017.                                             String nomePorta = risultato.getString("filtro_porta");
  1018.                                             String filtroRuolo = risultato.getString("filtro_ruolo");
  1019.                                             if(nomePorta!=null) {
  1020.                                                 String tipo = null;
  1021.                                                 String label = null;
  1022.                                                 if("delegata".equals(filtroRuolo)) {
  1023.                                                     try {
  1024.                                                         ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nomePorta, tipoDB, con, normalizeObjectIds);
  1025.                                                         if(resultPorta.mapping) {
  1026.                                                             label = "Fruizione di Servizio "+ resultPorta.label;
  1027.                                                         }
  1028.                                                     }catch(Exception e) {
  1029.                                                         tipo = "Outbound";
  1030.                                                     }
  1031.                                                 }
  1032.                                                 else {
  1033.                                                     tipo = filtroRuolo;
  1034.                                                 }
  1035.                                                 if(label==null) {
  1036.                                                     list.add(oggetto+" '"+alias+"' attiva nella porta '"+tipo+"' '"+nomePorta+"' ");
  1037.                                                 }
  1038.                                                 else {
  1039.                                                     list.add(oggetto+" '"+alias+"' attiva nella "+label);
  1040.                                                 }
  1041.                                             }
  1042.                                             else {
  1043.                                                 list.add(oggetto+" '"+alias+"'");
  1044.                                             }
  1045.                            
  1046.                                             isInUso = true;
  1047.                                         }
  1048.                                         risultato.close();
  1049.                                         stmt.close();
  1050.                                     }
  1051.                                 }
  1052.                             }
  1053.                         }
  1054.                        
  1055.                     }
  1056.                 }
  1057.             }
  1058.                
  1059.            
  1060.                
  1061.                
  1062.             // Porte applicative
  1063.             if(config &&
  1064.                 idServiziWithAccordo!=null && !idServiziWithAccordo.isEmpty()) {
  1065.                 for (IDServizio idServizio : idServiziWithAccordo) {
  1066.                     List<MappingErogazionePortaApplicativa> lPA = DBMappingUtils.mappingErogazionePortaApplicativaList(con, tipoDB, idServizio, true);
  1067.                     if(lPA!=null && !lPA.isEmpty()) {
  1068.                         for (MappingErogazionePortaApplicativa mapping : lPA) {
  1069.                            
  1070.                             // ** mapping **
  1071.                            
  1072.                             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1073.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  1074.                             sqlQueryObject.addFromTable(CostantiDB.MAPPING_EROGAZIONE_PA);
  1075.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_AZIONI);
  1076.                             sqlQueryObject.addSelectField("nome_porta");
  1077.                             sqlQueryObject.setANDLogicOperator(true);
  1078.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".nome_porta=?");
  1079.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id="+CostantiDB.MAPPING_EROGAZIONE_PA+".id_porta");
  1080.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_AZIONI+".id_porta="+CostantiDB.PORTE_APPLICATIVE+".id");
  1081.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_AZIONI+".azione=?");
  1082.                             queryString = sqlQueryObject.createSQLQuery();
  1083.                             stmt = con.prepareStatement(queryString);
  1084.                             stmt.setString(1, mapping.getIdPortaApplicativa().getNome());
  1085.                             stmt.setString(2, idOperazione.getNome());
  1086.                             risultato = stmt.executeQuery();
  1087.                             while (risultato.next()){
  1088.                                 String nome = risultato.getString("nome_porta");
  1089.                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  1090.                                 if(resultPorta.mapping) {
  1091.                                     mappingErogazionePAList.add(resultPorta.label);
  1092.                                 }
  1093.                                 else {
  1094.                                     porteApplicativeList.add(resultPorta.label);
  1095.                                 }
  1096.                                 isInUso = true;
  1097.                             }
  1098.                             risultato.close();
  1099.                             stmt.close();
  1100.                            
  1101.                            
  1102.                             // ** trasformazioni **
  1103.                            
  1104.                             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1105.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI);
  1106.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  1107.                             sqlQueryObject.addSelectField("nome_porta");
  1108.                             sqlQueryObject.setANDLogicOperator(true);
  1109.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".nome_porta=?");
  1110.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".id_porta="+CostantiDB.PORTE_APPLICATIVE+".id");
  1111.                             // condizione di controllo
  1112.                             sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1113.                             sqlQueryObjectOr.setANDLogicOperator(false);
  1114.                             // (applicabilita_azioni == 'NOME') OR (applicabilita_azioni like 'NOME,%') OR (applicabilita_azioni like '%,NOME') OR (applicabilita_azioni like '%,applicabilita_azioni,%')
  1115.                             /** CLOB sqlQueryObjectOr.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni = ?");*/
  1116.                             sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni", idOperazione.getNome(), false , false);
  1117.                             sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni", idOperazione.getNome()+",", LikeConfig.startsWith(false));
  1118.                             sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni", ","+idOperazione.getNome(), LikeConfig.endsWith(false));
  1119.                             sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni", ","+idOperazione.getNome()+",", true , false);
  1120.                             sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  1121.                             queryString = sqlQueryObject.createSQLQuery();
  1122.                             stmt = con.prepareStatement(queryString);
  1123.                             stmt.setString(1, mapping.getIdPortaApplicativa().getNome());
  1124.                             /** CLOB stmt.setString(2, idRisorsa.getNome());*/
  1125.                             risultato = stmt.executeQuery();
  1126.                             while (risultato.next()){
  1127.                                 String nome = risultato.getString("nome_porta");
  1128.                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  1129.                                 if(resultPorta.mapping) {
  1130.                                     trasformazionePAMappingLis.add(resultPorta.label);
  1131.                                 }
  1132.                                 else {
  1133.                                     trasformazionePAList.add(resultPorta.label);
  1134.                                 }
  1135.                                 isInUso = true;
  1136.                             }
  1137.                             risultato.close();
  1138.                             stmt.close();
  1139.                            
  1140.                            
  1141.                             // ** url di invocazione **
  1142.                            
  1143.                             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1144.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  1145.                             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1146.                             sqlQueryObject.addSelectField("nome_porta");
  1147.                             sqlQueryObject.setANDLogicOperator(true);
  1148.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".nome_porta=?");
  1149.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  1150.                             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto=?");
  1151.                             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto=?");
  1152.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".tipo_servizio=?");
  1153.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".servizio=?");
  1154.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".versione_servizio=?");
  1155.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".azione=?");
  1156.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".mode_azione=?");
  1157.                             queryString = sqlQueryObject.createSQLQuery();
  1158.                             stmt = con.prepareStatement(queryString);
  1159.                             index = 1;
  1160.                             stmt.setString(index++, mapping.getIdPortaApplicativa().getNome());
  1161.                             stmt.setString(index++, idServizio.getSoggettoErogatore().getTipo());
  1162.                             stmt.setString(index++, idServizio.getSoggettoErogatore().getNome());
  1163.                             stmt.setString(index++, idServizio.getTipo());
  1164.                             stmt.setString(index++, idServizio.getNome());
  1165.                             stmt.setInt(index++, idServizio.getVersione());
  1166.                             stmt.setString(index++, idOperazione.getNome());
  1167.                             stmt.setString(index++, ModalitaIdentificazioneAzione.STATIC.getValue());
  1168.                             risultato = stmt.executeQuery();
  1169.                             while (risultato.next()){
  1170.                                 String nome = risultato.getString("nome_porta");
  1171.                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  1172.                                 if(resultPorta.mapping) {
  1173.                                     urlInvocazionePAMappingList.add(resultPorta.label);
  1174.                                 }
  1175.                                 else {
  1176.                                     urlInvocazionePAList.add(resultPorta.label);
  1177.                                 }
  1178.                                 isInUso = true;
  1179.                             }
  1180.                             risultato.close();
  1181.                             stmt.close();
  1182.                            
  1183.                            
  1184.                             // ** Controllo che non sia associato a policy di controllo del traffico o allarmi **
  1185.                            
  1186.                             int max = 2;
  1187.                             if(!CostantiDB.isAllarmiEnabled()) {
  1188.                                 max=1;
  1189.                             }
  1190.                             for (int i = 0; i < max; i++) {
  1191.                                
  1192.                                 String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  1193.                                 String identificativoColumn = "active_policy_id";
  1194.                                 String aliasColumn = "policy_alias";
  1195.                                 List<String> list = ctList;
  1196.                                 String oggetto = "Policy";
  1197.                                 if(i==1) {
  1198.                                     tabella = CostantiDB.ALLARMI;
  1199.                                     identificativoColumn = "nome";
  1200.                                     aliasColumn = "alias";
  1201.                                     list = allarmeList;
  1202.                                     oggetto = "Allarme";
  1203.                                 }
  1204.                            
  1205.                                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1206.                                 sqlQueryObject.addFromTable(tabella);
  1207.                                 sqlQueryObject.addSelectField(identificativoColumn);
  1208.                                 sqlQueryObject.addSelectField(aliasColumn);
  1209.                                 sqlQueryObject.addSelectField("filtro_ruolo");
  1210.                                 sqlQueryObject.addSelectField("filtro_porta");
  1211.                                 sqlQueryObject.setANDLogicOperator(true);
  1212.                                 sqlQueryObject.addWhereCondition(tabella+".filtro_ruolo=?");
  1213.                                 sqlQueryObject.addWhereCondition(tabella+".filtro_porta=?");
  1214.                                
  1215.                                 // condizione di controllo
  1216.                                 sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1217.                                 sqlQueryObjectOr.setANDLogicOperator(false);
  1218.                                 // (filtro_azione == 'NOME') OR (filtro_azione like 'NOME,%') OR (filtro_azione like '%,NOME') OR (filtro_azione like '%,applicabilita_azioni,%')
  1219.                                 /** CLOB sqlQueryObjectOr.addWhereCondition(tabella+".filtro_azione = ?");*/
  1220.                                 sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idOperazione.getNome(), false , false);
  1221.                                 sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idOperazione.getNome()+",", LikeConfig.startsWith(false));
  1222.                                 sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idOperazione.getNome(), LikeConfig.endsWith(false));
  1223.                                 sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idOperazione.getNome()+",", true , false);
  1224.                                 sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  1225.                                
  1226.                                 sqlQueryObject.addOrderBy("filtro_ruolo");
  1227.                                 sqlQueryObject.addOrderBy("filtro_porta");
  1228.                                 queryString = sqlQueryObject.createSQLQuery();
  1229.                                 stmt = con.prepareStatement(queryString);
  1230.                                 stmt.setString(1, "applicativa");
  1231.                                 stmt.setString(2, mapping.getIdPortaApplicativa().getNome());
  1232.                                 /** CLOB stmt.setString(3, idRisorsa.getNome());*/
  1233.                                 risultato = stmt.executeQuery();
  1234.                                 while (risultato.next()) {
  1235.                                    
  1236.                                     String alias = risultato.getString(aliasColumn);
  1237.                                     if(alias== null || "".equals(alias)) {
  1238.                                         alias = risultato.getString(identificativoColumn);
  1239.                                     }
  1240.                                    
  1241.                                     String nomePorta = risultato.getString("filtro_porta");
  1242.                                     String filtroRuolo = risultato.getString("filtro_ruolo");
  1243.                                     if(nomePorta!=null) {
  1244.                                         String tipo = null;
  1245.                                         String label = null;
  1246.                                         if("applicativa".equals(filtroRuolo)) {
  1247.                                             try {
  1248.                                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nomePorta, tipoDB, con, normalizeObjectIds);
  1249.                                                 if(resultPorta.mapping) {
  1250.                                                     label = "Erogazione di Servizio "+ resultPorta.label;
  1251.                                                 }
  1252.                                             }catch(Exception e) {
  1253.                                                 tipo = "Inbound";
  1254.                                             }
  1255.                                         }
  1256.                                         else {
  1257.                                             tipo = filtroRuolo;
  1258.                                         }
  1259.                                         if(label==null) {
  1260.                                             list.add(oggetto+" '"+alias+"' attiva nella porta '"+tipo+"' '"+nomePorta+"' ");
  1261.                                         }
  1262.                                         else {
  1263.                                             list.add(oggetto+" '"+alias+"' attiva nella "+label);
  1264.                                         }
  1265.                                     }
  1266.                                     else {
  1267.                                         list.add(oggetto+" '"+alias+"'");
  1268.                                     }
  1269.                    
  1270.                                     isInUso = true;
  1271.                                 }
  1272.                                 risultato.close();
  1273.                                 stmt.close();
  1274.                             }
  1275.                         }
  1276.                     }
  1277.                 }
  1278.             }
  1279.            
  1280.                        
  1281.            
  1282.            
  1283.            
  1284.             // ** Controllo che non sia associato a policy di controllo del traffico o allarmi generali **
  1285.            
  1286.             long idAccordoServizioParteComune = DBUtils.getIdAccordoServizioParteComune(idOperazione.getIdPortType().getIdAccordo(), con, tipoDB);
  1287.             if(idAccordoServizioParteComune<=0){
  1288.                 throw new UtilsException("Accordi di Servizio Parte Comune con id ["+idOperazione.getIdPortType().getIdAccordo().toString()+"] non trovato");
  1289.             }
  1290.            
  1291.             // Recupero servizi che implementano l'accordo
  1292.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1293.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  1294.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1295.             sqlQueryObject.addSelectField("*");
  1296.             sqlQueryObject.addWhereCondition("id_accordo = ?");
  1297.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  1298.             sqlQueryObject.setANDLogicOperator(true);
  1299.             queryString = sqlQueryObject.createSQLQuery();
  1300.             stmt = con.prepareStatement(queryString);
  1301.             stmt.setLong(1, idAccordoServizioParteComune);
  1302.             risultato = stmt.executeQuery();
  1303.             List<IDServizio> listIDServizio = new ArrayList<>();
  1304.             while (risultato.next()){
  1305.                 String tipoSoggettoErogatore = risultato.getString("tipo_soggetto");
  1306.                 String nomeSoggettoErogatore = risultato.getString("nome_soggetto");
  1307.                 String tipoServizio = risultato.getString("tipo_servizio");
  1308.                 String nomeServizio = risultato.getString("nome_servizio");
  1309.                 int versioneServizio = risultato.getInt("versione_servizio");
  1310.                 IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tipoServizio, nomeServizio,
  1311.                         tipoSoggettoErogatore, nomeSoggettoErogatore, versioneServizio);
  1312.                 listIDServizio.add(idServizio);
  1313.             }
  1314.             risultato.close();
  1315.             stmt.close();
  1316.            
  1317.             if(!listIDServizio.isEmpty()) {
  1318.            
  1319.                 for (IDServizio idServizio : listIDServizio) {
  1320.            
  1321.                     int max = 2;
  1322.                     if(!CostantiDB.isAllarmiEnabled()) {
  1323.                         max=1;
  1324.                     }
  1325.                     for (int i = 0; i < max; i++) {
  1326.                        
  1327.                         String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  1328.                         String identificativoColumn = "active_policy_id";
  1329.                         String aliasColumn = "policy_alias";
  1330.                         List<String> list = ctList;
  1331.                         String oggetto = "Policy";
  1332.                         if(i==1) {
  1333.                             tabella = CostantiDB.ALLARMI;
  1334.                             identificativoColumn = "nome";
  1335.                             aliasColumn = "alias";
  1336.                             list = allarmeList;
  1337.                             oggetto = "Allarme";
  1338.                         }
  1339.                    
  1340.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1341.                         sqlQueryObject.addFromTable(tabella);
  1342.                         sqlQueryObject.setSelectDistinct(true);
  1343.                         sqlQueryObject.addSelectField(identificativoColumn);
  1344.                         sqlQueryObject.addSelectField(aliasColumn);
  1345.                         sqlQueryObject.addSelectField("filtro_ruolo");
  1346.                         sqlQueryObject.addSelectField("filtro_porta");
  1347.                         sqlQueryObject.setANDLogicOperator(true);
  1348.                         sqlQueryObject.addWhereIsNullCondition(tabella+".filtro_porta");
  1349.                        
  1350.                         ISQLQueryObject sqlQueryObjectServizioCompleto = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1351.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_tipo_erogatore=?");
  1352.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_nome_erogatore=?");
  1353.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_tipo_servizio=?");
  1354.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_nome_servizio=?");
  1355.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_versione_servizio=?");
  1356.                        
  1357.                         ISQLQueryObject sqlQueryObjectServizioParziale = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1358.                         sqlQueryObjectServizioParziale.addWhereIsNullCondition(tabella+".filtro_tipo_erogatore");
  1359.                         sqlQueryObjectServizioParziale.addWhereIsNullCondition(tabella+".filtro_nome_erogatore");
  1360.                         sqlQueryObjectServizioParziale.addWhereCondition(tabella+".filtro_tipo_servizio=?");
  1361.                         sqlQueryObjectServizioParziale.addWhereCondition(tabella+".filtro_nome_servizio=?");
  1362.                         sqlQueryObjectServizioParziale.addWhereCondition(tabella+".filtro_versione_servizio=?");
  1363.                        
  1364.                         sqlQueryObject.addWhereCondition(false,false, sqlQueryObjectServizioCompleto.createSQLConditions(), sqlQueryObjectServizioParziale.createSQLConditions());
  1365.                        
  1366.                         // condizione di controllo
  1367.                         sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1368.                         sqlQueryObjectOr.setANDLogicOperator(false);
  1369.                         // (filtro_azione == 'NOME') OR (filtro_azione like 'NOME,%') OR (filtro_azione like '%,NOME') OR (filtro_azione like '%,applicabilita_azioni,%')
  1370.                         /** CLOB sqlQueryObjectOr.addWhereCondition(tabella+".filtro_azione = ?");*/
  1371.                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idOperazione.getNome(), false , false);
  1372.                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idOperazione.getNome()+",", LikeConfig.startsWith(false));
  1373.                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idOperazione.getNome(), LikeConfig.endsWith(false));
  1374.                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idOperazione.getNome()+",", true , false);
  1375.                         sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  1376.                        
  1377.                         sqlQueryObject.addOrderBy("filtro_ruolo");
  1378.                         sqlQueryObject.addOrderBy("filtro_porta");
  1379.                         queryString = sqlQueryObject.createSQLQuery();
  1380.                         stmt = con.prepareStatement(queryString);
  1381.                         index = 1;
  1382.                         stmt.setString(index++, idServizio.getSoggettoErogatore().getTipo());
  1383.                         stmt.setString(index++, idServizio.getSoggettoErogatore().getNome());
  1384.                         stmt.setString(index++, idServizio.getTipo());
  1385.                         stmt.setString(index++, idServizio.getNome());
  1386.                         stmt.setInt(index++, idServizio.getVersione());
  1387.                         stmt.setString(index++, idServizio.getTipo());
  1388.                         stmt.setString(index++, idServizio.getNome());
  1389.                         stmt.setInt(index++, idServizio.getVersione());
  1390.                         /** CLOB stmt.setString(index++, idRisorsa.getNome());*/
  1391.                         risultato = stmt.executeQuery();
  1392.                         while (risultato.next()) {
  1393.                            
  1394.                             String alias = risultato.getString(aliasColumn);
  1395.                             if(alias== null || "".equals(alias)) {
  1396.                                 alias = risultato.getString(identificativoColumn);
  1397.                             }
  1398.                            
  1399.                             String oggettoTrovato = oggetto+" '"+alias+"'";
  1400.                             if(!list.contains(oggettoTrovato)) {
  1401.                                 list.add(oggettoTrovato);
  1402.                             }
  1403.                                
  1404.                             isInUso = true;
  1405.                         }
  1406.                         risultato.close();
  1407.                         stmt.close();
  1408.                     }
  1409.                 }
  1410.             }
  1411.            
  1412.            
  1413.            
  1414.            
  1415.            
  1416.            
  1417.            
  1418.             // ** Controllo che non sia riferito dalla configurazione SignalHub **
  1419.             if(registry && Costanti.MODIPA_PROTOCOL_NAME.equals(idOperazione.getIdPortType().getIdAccordo().getSoggettoReferente().getTipo()) &&
  1420.                 idServiziWithAccordo!=null && !idServiziWithAccordo.isEmpty()) {
  1421.                 for (IDServizio idServizio : idServiziWithAccordo) {
  1422.                                    
  1423.                     long idS = DBUtils.getIdServizio(idServizio.getNome(), idServizio.getTipo(), idServizio.getVersione(),
  1424.                             idServizio.getSoggettoErogatore().getNome(), idServizio.getSoggettoErogatore().getTipo(),
  1425.                             con, tipoDB);
  1426.                     if(idS<=0) {
  1427.                         throw new CoreException("Servizio '"+idServizio+"' non esistente");
  1428.                     }
  1429.                        
  1430.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1431.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  1432.                     sqlQueryObject.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  1433.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI,"id","idServizio");
  1434.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id = ?");
  1435.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  1436.                     sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  1437.                     sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  1438.                     sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  1439.                     sqlQueryObject.setANDLogicOperator(true);
  1440.                     queryString = sqlQueryObject.createSQLQuery();
  1441.                     stmt = con.prepareStatement(queryString);
  1442.                     index = 1;
  1443.                     stmt.setLong(index++, idS);
  1444.                     stmt.setString(index++, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA.name());
  1445.                     stmt.setString(index++, Costanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_OPERATION_ID);
  1446.                     stmt.setString(index++, idOperazione.getNome());
  1447.                     risultato = stmt.executeQuery();
  1448.                     if(risultato.next()) {
  1449.                        
  1450.                         // trovata
  1451.                         IDPortaApplicativa idPA = DBMappingUtils.getIDPortaApplicativaAssociataDefault(idServizio, con, tipoDB);
  1452.                         if(idPA!=null) {
  1453.                             ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(idPA.getNome(), tipoDB, con, normalizeObjectIds);
  1454.                             modiSignalHubList.add(resultPorta.label);
  1455.                         }
  1456.                         else {
  1457.                             modiSignalHubList.add(idServizio.toString());
  1458.                         }
  1459.                        
  1460.                         isInUso = true;
  1461.                        
  1462.                     }
  1463.                 }
  1464.             }
  1465.            
  1466.            
  1467.            
  1468.            
  1469.            
  1470.             return isInUso;

  1471.         } catch (Exception se) {
  1472.             throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  1473.         } finally {
  1474.             // Chiudo statement and resultset
  1475.             try {
  1476.                 if (risultato != null) {
  1477.                     risultato.close();
  1478.                 }
  1479.             } catch (Exception e) {
  1480.                 // ignore
  1481.             }
  1482.             try {
  1483.                 if (stmt != null) {
  1484.                     stmt.close();
  1485.                 }
  1486.             } catch (Exception e) {
  1487.                 // ignore
  1488.             }
  1489.         }
  1490.     }


  1491.     protected static String toString(IDPortTypeAzione idOperazione, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator){
  1492.         return toString(idOperazione, whereIsInUso, prefix, separator," non eliminabile perch&egrave; :");
  1493.     }
  1494.     protected static String toString(IDPortTypeAzione idOperazione, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator, String intestazione){
  1495.         Set<ErrorsHandlerCostant> keys = whereIsInUso.keySet();
  1496.         StringBuilder msgBuilder = new StringBuilder("Azione '"+idOperazione.getNome()+"'" + intestazione+separator);
  1497.         if(!prefix){
  1498.             msgBuilder = new StringBuilder("");
  1499.         }
  1500.         String separatorCategorie = "";
  1501.         if(whereIsInUso.size()>1) {
  1502.             separatorCategorie = separator;
  1503.         }
  1504.         for (ErrorsHandlerCostant key : keys) {
  1505.             List<String> messages = whereIsInUso.get(key);

  1506.             if ( messages!=null && !messages.isEmpty()) {
  1507.                 msgBuilder.append(separatorCategorie);
  1508.             }
  1509.            
  1510.             switch (key) {

  1511.             case IS_CORRELATA:
  1512.                 if ( messages!=null && !messages.isEmpty()) {
  1513.                     msgBuilder.append("correlata ad altre azioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1514.                 }
  1515.                 break;
  1516.            
  1517.             case IN_USO_IN_PORTE_APPLICATIVE:
  1518.                 if ( messages!=null && !messages.isEmpty()) {
  1519.                     msgBuilder.append("appartenente ad un gruppo differente da quello predefinito nelle Porte Inbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1520.                 }
  1521.                 break;
  1522.             case IN_USO_IN_PORTE_DELEGATE:
  1523.                 if ( messages!=null && !messages.isEmpty()) {
  1524.                     msgBuilder.append("appartenente ad un gruppo differente da quello predefinito nelle Porte Outbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1525.                 }
  1526.                 break;
  1527.             case IN_USO_IN_MAPPING_EROGAZIONE_PA:
  1528.                 if ( messages!=null && !messages.isEmpty()) {
  1529.                     msgBuilder.append("appartenente ad un gruppo differente da quello predefinito nelle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1530.                 }
  1531.                 break;
  1532.             case IN_USO_IN_MAPPING_FRUIZIONE_PD:
  1533.                 if ( messages!=null && !messages.isEmpty()) {
  1534.                     msgBuilder.append("appartenente ad un gruppo differente da quello predefinito nelle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1535.                 }
  1536.                 break;
  1537.                
  1538.             case TRASFORMAZIONE_MAPPING_PD:
  1539.                 if ( messages!=null && !messages.isEmpty()) {
  1540.                     msgBuilder.append("utilizzata nel criterio di applicabilità della Trasformazione (Risorse) per le Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1541.                 }
  1542.                 break;
  1543.             case TRASFORMAZIONE_PD:
  1544.                 if ( messages!=null && !messages.isEmpty()) {
  1545.                     msgBuilder.append("utilizzata nelle Porte Outbound (Criterio di applicabilità della Trasformazione - Risorse): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1546.                 }
  1547.                 break;
  1548.             case TRASFORMAZIONE_MAPPING_PA:
  1549.                 if ( messages!=null && !messages.isEmpty()) {
  1550.                     msgBuilder.append("utilizzata nel criterio di applicabilità della Trasformazione (Risorse) per le Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1551.                 }
  1552.                 break;
  1553.             case TRASFORMAZIONE_PA:
  1554.                 if ( messages!=null && !messages.isEmpty()) {
  1555.                     msgBuilder.append("utilizzata nelle Porte Inbound (Criterio di applicabilità della Trasformazione - Risorse): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1556.                 }
  1557.                 break;
  1558.                
  1559.             case URLINVOCAZIONE_MAPPING_PD:
  1560.                 if ( messages!=null && !messages.isEmpty()) {
  1561.                     msgBuilder.append("utilizzata nella configurazione dell'Url di Invocazione per le Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1562.                 }
  1563.                 break;
  1564.             case URLINVOCAZIONE_PD:
  1565.                 if ( messages!=null && !messages.isEmpty()) {
  1566.                     msgBuilder.append("utilizzata nelle Porte Outbound (Azione statica): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1567.                 }
  1568.                 break;
  1569.             case URLINVOCAZIONE_MAPPING_PA:
  1570.                 if ( messages!=null && !messages.isEmpty()) {
  1571.                     msgBuilder.append("utilizzata nella configurazione dell'Url di Invocazione per le Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1572.                 }
  1573.                 break;
  1574.             case URLINVOCAZIONE_PA:
  1575.                 if ( messages!=null && !messages.isEmpty()) {
  1576.                     msgBuilder.append("utilizzata nelle Porte Inbound (Azione statica): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1577.                 }
  1578.                 break;
  1579.                
  1580.             case CONTROLLO_TRAFFICO:
  1581.                 if ( messages!=null && !messages.isEmpty() ) {
  1582.                     msgBuilder.append("utilizzata in Policy di Rate Limiting: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1583.                 }
  1584.                 break;
  1585.             case ALLARMI:
  1586.                 if ( messages!=null && !messages.isEmpty() ) {
  1587.                     msgBuilder.append("utilizzato in Allarmi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1588.                 }
  1589.                 break;
  1590.                
  1591.             case IS_RIFERITA_MODI_SIGNAL_HUB:
  1592.                 if ( messages!=null && !messages.isEmpty() ) {
  1593.                     msgBuilder.append("riferito nella configurazione 'SignalHub' dell'erogazione: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1594.                 }
  1595.                 break;              
  1596.                
  1597.             default:
  1598.                 msgBuilder.append("utilizzata in oggetto non codificato ("+key+")"+separator);
  1599.                 break;
  1600.             }
  1601.            
  1602.         }// chiudo for

  1603.         return msgBuilder.toString();
  1604.     }
  1605.    
  1606. }