DBOggettiInUsoUtils_accordiRest.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.IDPortaApplicativa;
  35. import org.openspcoop2.core.id.IDResource;
  36. import org.openspcoop2.core.id.IDServizio;
  37. import org.openspcoop2.core.id.IDSoggetto;
  38. import org.openspcoop2.core.mapping.DBMappingUtils;
  39. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  40. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  41. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  42. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  43. import org.openspcoop2.protocol.engine.constants.Costanti;
  44. import org.openspcoop2.utils.UtilsException;
  45. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  46. import org.openspcoop2.utils.sql.ISQLQueryObject;
  47. import org.openspcoop2.utils.sql.LikeConfig;
  48. import org.openspcoop2.utils.sql.SQLObjectFactory;

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

  60.     protected static boolean isRisorsaConfigInUso(Connection con, String tipoDB, IDResource idRisorsa, Map<ErrorsHandlerCostant,
  61.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  62.         return isRisorsaInUsoInternal(con,tipoDB,idRisorsa,false,true,whereIsInUso,normalizeObjectIds);
  63.     }
  64.     protected static boolean isRisorsaRegistryInUso(Connection con, String tipoDB, IDResource idRisorsa, Map<ErrorsHandlerCostant,
  65.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  66.         return isRisorsaInUsoInternal(con,tipoDB,idRisorsa,true,false,whereIsInUso,normalizeObjectIds);
  67.     }
  68.     protected static boolean isRisorsaInUso(Connection con, String tipoDB, IDResource idRisorsa, Map<ErrorsHandlerCostant,
  69.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  70.         return isRisorsaInUsoInternal(con,tipoDB,idRisorsa,true,true,whereIsInUso,normalizeObjectIds);
  71.     }
  72.     private static boolean isRisorsaInUsoInternal(Connection con, String tipoDB, IDResource idRisorsa,
  73.             boolean registry, boolean config, Map<ErrorsHandlerCostant,
  74.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  75.         String nomeMetodo = "_isRisorsaInUso";

  76.         PreparedStatement stmt = null;
  77.         ResultSet risultato = null;
  78.         String queryString;

  79.         try {
  80.        
  81.             boolean isInUso = false;
  82.            
  83.             List<String> correlazioneList = whereIsInUso.get(ErrorsHandlerCostant.IS_CORRELATA);
  84.            
  85.             List<String> porteApplicativeList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE);
  86.             List<String> porteDelegateList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE);
  87.             List<String> mappingErogazionePAList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA);
  88.             List<String> mappingFruizionePDList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD);
  89.            
  90.             List<String> trasformazionePDMappingList = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PD);
  91.             List<String> trasformazionePDList = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_PD);
  92.             List<String> trasformazionePAMappingList = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PA);
  93.             List<String> trasformazionePAList = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_PA);
  94.            
  95.             List<String> ctList = whereIsInUso.get(ErrorsHandlerCostant.CONTROLLO_TRAFFICO);
  96.             List<String> allarmeList = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI);
  97.            
  98.             List<String> modiSignalHubList = whereIsInUso.get(ErrorsHandlerCostant.IS_RIFERITA_MODI_SIGNAL_HUB);
  99.            
  100.             if (correlazioneList == null) {
  101.                 correlazioneList = new ArrayList<>();
  102.                 whereIsInUso.put(ErrorsHandlerCostant.IS_CORRELATA, correlazioneList);
  103.             }
  104.            
  105.             if (porteApplicativeList == null) {
  106.                 porteApplicativeList = new ArrayList<>();
  107.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE, porteApplicativeList);
  108.             }
  109.             if (porteDelegateList == null) {
  110.                 porteDelegateList = new ArrayList<>();
  111.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE, porteDelegateList);
  112.             }
  113.             if (mappingErogazionePAList == null) {
  114.                 mappingErogazionePAList = new ArrayList<>();
  115.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA, mappingErogazionePAList);
  116.             }
  117.             if (mappingFruizionePDList == null) {
  118.                 mappingFruizionePDList = new ArrayList<>();
  119.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD, mappingFruizionePDList);
  120.             }
  121.            
  122.             if (trasformazionePDMappingList == null) {
  123.                 trasformazionePDMappingList = new ArrayList<>();
  124.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PD, trasformazionePDMappingList);
  125.             }
  126.             if (trasformazionePDList == null) {
  127.                 trasformazionePDList = new ArrayList<>();
  128.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_PD, trasformazionePDList);
  129.             }
  130.             if (trasformazionePAMappingList == null) {
  131.                 trasformazionePAMappingList = new ArrayList<>();
  132.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PA, trasformazionePAMappingList);
  133.             }
  134.             if (trasformazionePAList == null) {
  135.                 trasformazionePAList = new ArrayList<>();
  136.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_PA, trasformazionePAList);
  137.             }
  138.            
  139.             if (ctList == null) {
  140.                 ctList = new ArrayList<>();
  141.                 whereIsInUso.put(ErrorsHandlerCostant.CONTROLLO_TRAFFICO, ctList);
  142.             }
  143.             if (allarmeList == null) {
  144.                 allarmeList = new ArrayList<>();
  145.                 whereIsInUso.put(ErrorsHandlerCostant.ALLARMI, allarmeList);
  146.             }
  147.            
  148.             if (modiSignalHubList == null) {
  149.                 modiSignalHubList = new ArrayList<>();
  150.                 whereIsInUso.put(ErrorsHandlerCostant.IS_RIFERITA_MODI_SIGNAL_HUB, modiSignalHubList);
  151.             }
  152.            
  153.            
  154.            
  155.             // recupero id
  156.            
  157.             long idAccordo = DBUtils.getIdAccordoServizioParteComune(idRisorsa.getIdAccordo(), con, tipoDB);
  158.             if(idAccordo<=0) {
  159.                 throw new UtilsException("Accordo non trovato");
  160.             }
  161.            
  162.             long idR = DBUtils.getIdResource(idAccordo, idRisorsa.getNome(), con);
  163.             if(idR<=0) {
  164.                 throw new UtilsException("Risorsa non trovata");
  165.             }
  166.            
  167.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  168.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  169.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  170.             sqlQueryObject.addSelectField("nome_servizio");
  171.             sqlQueryObject.addSelectField("tipo_servizio");
  172.             sqlQueryObject.addSelectField("versione_servizio");
  173.             sqlQueryObject.addSelectField("nome_soggetto");
  174.             sqlQueryObject.addSelectField("tipo_soggetto");
  175.             sqlQueryObject.setANDLogicOperator(true);
  176.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo=?");
  177.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  178.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".port_type is null"); // condizione per rest
  179.             queryString = sqlQueryObject.createSQLQuery();
  180.             stmt = con.prepareStatement(queryString);
  181.             stmt.setLong(1, idAccordo);
  182.             risultato = stmt.executeQuery();
  183.             List<IDServizio> idServiziWithAccordo = new ArrayList<>();
  184.             while (risultato.next()) {
  185.                 IDSoggetto soggettoErogatore = new IDSoggetto(risultato.getString("tipo_soggetto"), risultato.getString("nome_soggetto"));
  186.                 IDServizio idServizio =
  187.                         IDServizioFactory.getInstance().getIDServizioFromValues(risultato.getString("tipo_servizio"),
  188.                                 risultato.getString("nome_servizio"), soggettoErogatore, risultato.getInt("versione_servizio"));
  189.                 idServiziWithAccordo.add(idServizio);
  190.             }
  191.             risultato.close();
  192.             stmt.close();
  193.            
  194.            
  195.            
  196.            
  197.            
  198.            
  199.             // Controllo che l'azione non sia stata correlata da un'altra azione tramite ModI
  200.             if(Costanti.MODIPA_PROTOCOL_NAME.equals(idRisorsa.getIdAccordo().getSoggettoReferente().getTipo())) {
  201.            
  202.                 ISQLQueryObject sqlQueryObjectApiExists = SQLObjectFactory.createSQLQueryObject(tipoDB);
  203.                 sqlQueryObjectApiExists.setANDLogicOperator(true);
  204.                 sqlQueryObjectApiExists.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  205.                 sqlQueryObjectApiExists.addSelectField(CostantiDB.PROTOCOL_PROPERTIES, "name");
  206.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.API_RESOURCES + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  207.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  208.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  209.                 sqlQueryObjectApiExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");

  210.                 ISQLQueryObject sqlQueryObjectOperationExists = SQLObjectFactory.createSQLQueryObject(tipoDB);
  211.                 sqlQueryObjectOperationExists.setANDLogicOperator(true);
  212.                 sqlQueryObjectOperationExists.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  213.                 sqlQueryObjectOperationExists.addSelectField(CostantiDB.PROTOCOL_PROPERTIES, "name");
  214.                 sqlQueryObjectOperationExists.addWhereCondition(CostantiDB.API_RESOURCES + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  215.                 sqlQueryObjectOperationExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  216.                 sqlQueryObjectOperationExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  217.                 sqlQueryObjectOperationExists.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  218.                
  219.                
  220.                 // Verifico correlazione PULL (all'interno del solito accordo)
  221.                
  222.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  223.                 sqlQueryObject.addFromTable(CostantiDB.API_RESOURCES);
  224.                 sqlQueryObject.addWhereCondition(CostantiDB.API_RESOURCES + ".id_accordo = ?");
  225.                 sqlQueryObject.addSelectAliasField(CostantiDB.API_RESOURCES,"nome","nomeRisorsaCorrelata");
  226.                 sqlQueryObject.addSelectAliasField(CostantiDB.API_RESOURCES,"http_method","httpMethodRisorsaCorrelata");
  227.                 sqlQueryObject.addSelectAliasField(CostantiDB.API_RESOURCES,"path","pathRisorsaCorrelata");
  228.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectApiExists);
  229.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectOperationExists);
  230.                 sqlQueryObject.setANDLogicOperator(true);
  231.                 sqlQueryObject.addOrderBy("pathRisorsaCorrelata");
  232.                 sqlQueryObject.addOrderBy("httpMethodRisorsaCorrelata");
  233.                 sqlQueryObject.setSortType(true);
  234.                 queryString = sqlQueryObject.createSQLQuery();
  235.                 stmt = con.prepareStatement(queryString);
  236.                 int index = 1;
  237.                 stmt.setLong(index++, idAccordo);
  238.                 // sqlQueryObjectApiExists
  239.                 stmt.setString(index++, ProprietariProtocolProperty.RESOURCE.name());
  240.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA);
  241.                 stmt.setString(index++, Costanti.MODIPA_VALUE_UNDEFINED);
  242.                 // sqlQueryObjectOperationExists
  243.                 stmt.setString(index++, ProprietariProtocolProperty.RESOURCE.name());
  244.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_AZIONE_RICHIESTA_CORRELATA);
  245.                 stmt.setString(index++, idRisorsa.getNome());
  246.                 risultato = stmt.executeQuery();
  247.                 while (risultato.next()){
  248.                     @SuppressWarnings("unused")
  249.                     String nomeRisorsaCorrelata = risultato.getString("nomeRisorsaCorrelata");
  250.                     String httpMethodRisorsaCorrelata = risultato.getString("httpMethodRisorsaCorrelata");
  251.                     String pathRisorsaCorrelata = risultato.getString("pathRisorsaCorrelata");
  252.                    
  253.                     String path = null;
  254.                     if(pathRisorsaCorrelata==null || "".equals(pathRisorsaCorrelata)) {
  255.                         path = "*";
  256.                     }
  257.                     else {
  258.                         path = pathRisorsaCorrelata;
  259.                     }
  260.                    
  261.                     String method = null;
  262.                     if(httpMethodRisorsaCorrelata==null || "".equals(httpMethodRisorsaCorrelata)) {
  263.                         method = "Qualsiasi";
  264.                     }
  265.                     else {
  266.                         method = httpMethodRisorsaCorrelata;
  267.                     }
  268.                    
  269.                     correlazioneList.add("Risorsa "+method+" "+path+" (interazione: NonBloccante-Pull)");
  270.                     isInUso = true;
  271.                 }
  272.                 risultato.close();
  273.                 stmt.close();
  274.                
  275.                 // Verifico correlazione PUSH
  276.                
  277.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  278.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  279.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  280.                 sqlQueryObject.addFromTable(CostantiDB.API_RESOURCES);
  281.                 sqlQueryObject.addSelectAliasField(CostantiDB.API_RESOURCES,"nome","nomeRisorsaCorrelata");
  282.                 sqlQueryObject.addSelectAliasField(CostantiDB.API_RESOURCES,"http_method","httpMethodRisorsaCorrelata");
  283.                 sqlQueryObject.addSelectAliasField(CostantiDB.API_RESOURCES,"path","pathRisorsaCorrelata");
  284.                 sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI,"nome","nomeApi");
  285.                 sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI,"versione","versioneApi");
  286.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"tipo_soggetto","tipoReferenteApi");
  287.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"nome_soggetto","nomeReferenteApi");
  288.                 sqlQueryObject.addWhereCondition(CostantiDB.API_RESOURCES + ".id_accordo = " + CostantiDB.ACCORDI + ".id");
  289.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".id = " + CostantiDB.ACCORDI + ".id_referente");
  290.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectApiExists);
  291.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectOperationExists);
  292.                 sqlQueryObject.setANDLogicOperator(true);
  293.                 sqlQueryObject.addOrderBy("nomeApi");
  294.                 sqlQueryObject.addOrderBy("versioneApi");
  295.                 sqlQueryObject.addOrderBy("nomeReferenteApi");
  296.                 sqlQueryObject.addOrderBy("tipoReferenteApi");
  297.                 sqlQueryObject.addOrderBy("pathRisorsaCorrelata");
  298.                 sqlQueryObject.addOrderBy("httpMethodRisorsaCorrelata");
  299.                 sqlQueryObject.setSortType(true);
  300.                 queryString = sqlQueryObject.createSQLQuery();
  301.                 stmt = con.prepareStatement(queryString);
  302.                 index = 1;
  303.                 // sqlQueryObjectApiExists
  304.                 stmt.setString(index++, ProprietariProtocolProperty.RESOURCE.name());
  305.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA);
  306.                 stmt.setString(index++, IDAccordoFactory.getInstance().getUriFromIDAccordo(idRisorsa.getIdAccordo()));
  307.                 // sqlQueryObjectOperationExists
  308.                 stmt.setString(index++, ProprietariProtocolProperty.RESOURCE.name());
  309.                 stmt.setString(index++, Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_AZIONE_RICHIESTA_CORRELATA);
  310.                 stmt.setString(index++, idRisorsa.getNome());
  311.                 risultato = stmt.executeQuery();
  312.                 IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  313.                 while (risultato.next()){
  314.                    
  315.                     String nomeApi = risultato.getString("nomeApi");
  316.                     int versioneApi = risultato.getInt("versioneApi");
  317.                     String tipoReferenteApi = risultato.getString("tipoReferenteApi");
  318.                     String nomeReferenteApi = risultato.getString("nomeReferenteApi");
  319.                     IDAccordo idAPI = idAccordoFactory.getIDAccordoFromValues(nomeApi, tipoReferenteApi, nomeReferenteApi, versioneApi);
  320.                    
  321.                     @SuppressWarnings("unused")
  322.                     String nomeRisorsaCorrelata = risultato.getString("nomeRisorsaCorrelata");
  323.                     String httpMethodRisorsaCorrelata = risultato.getString("httpMethodRisorsaCorrelata");
  324.                     String pathRisorsaCorrelata = risultato.getString("pathRisorsaCorrelata");
  325.                    
  326.                     String path = null;
  327.                     if(pathRisorsaCorrelata==null || "".equals(pathRisorsaCorrelata)) {
  328.                         path = "*";
  329.                     }
  330.                     else {
  331.                         path = pathRisorsaCorrelata;
  332.                     }
  333.                    
  334.                     String method = null;
  335.                     if(httpMethodRisorsaCorrelata==null || "".equals(httpMethodRisorsaCorrelata)) {
  336.                         method = "Qualsiasi";
  337.                     }
  338.                     else {
  339.                         method = httpMethodRisorsaCorrelata;
  340.                     }
  341.                    
  342.                     correlazioneList.add("Risorsa "+method+" "+path+" dell'API '"+idAccordoFactory.getUriFromIDAccordo(idAPI)+"' (interazione: NonBloccante-Push)");
  343.                     isInUso = true;
  344.                 }
  345.                 risultato.close();
  346.                 stmt.close();
  347.                
  348.             }
  349.            
  350.            
  351.            
  352.            

  353.            
  354.             // Porte delegate, mapping
  355.             if(config &&
  356.                 idServiziWithAccordo!=null && !idServiziWithAccordo.isEmpty()) {
  357.                 for (IDServizio idServizio : idServiziWithAccordo) {
  358.                    
  359.                     long idS = DBUtils.getIdServizio(idServizio.getNome(), idServizio.getTipo(), idServizio.getVersione(),
  360.                             idServizio.getSoggettoErogatore().getNome(), idServizio.getSoggettoErogatore().getTipo(),
  361.                             con, tipoDB);
  362.                     if(idS<=0) {
  363.                         throw new CoreException("Servizio '"+idServizio+"' non esistente");
  364.                     }
  365.                    
  366.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  367.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  368.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  369.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_FRUITORI,"id","idFruitore");
  370.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  371.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  372.                     sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_servizio");
  373.                     sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto");
  374.                     sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".id");
  375.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  376.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  377.                     sqlQueryObject.setANDLogicOperator(true);
  378.                     sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".tipo_soggetto");
  379.                     sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".nome_soggetto");
  380.                     sqlQueryObject.setSortType(true);
  381.                     queryString = sqlQueryObject.createSQLQuery();
  382.                     stmt = con.prepareStatement(queryString);
  383.                     stmt.setLong(1, idS);
  384.                     risultato = stmt.executeQuery();
  385.                     List<IDSoggetto> listFruitori = new ArrayList<>();
  386.                     while (risultato.next()){
  387.                         listFruitori.add(new IDSoggetto(risultato.getString("tipo_soggetto"),risultato.getString("nome_soggetto")));
  388.                     }
  389.                     risultato.close();
  390.                     stmt.close();
  391.                    
  392.                    
  393.                     if(listFruitori!=null && !listFruitori.isEmpty()) {
  394.                    
  395.                         for (IDSoggetto idSoggettoFruitore : listFruitori) {
  396.                             List<MappingFruizionePortaDelegata> lPD = DBMappingUtils.mappingFruizionePortaDelegataList(con, tipoDB, idSoggettoFruitore, idServizio, true);
  397.                             if(lPD!=null && !lPD.isEmpty()) {
  398.                                 for (MappingFruizionePortaDelegata mapping : lPD) {
  399.                                    
  400.                                    
  401.                                     // ** mapping **
  402.                                    
  403.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  404.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  405.                                     sqlQueryObject.addFromTable(CostantiDB.MAPPING_FRUIZIONE_PD);
  406.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE_AZIONI);
  407.                                     sqlQueryObject.addSelectField("nome_porta");
  408.                                     sqlQueryObject.setANDLogicOperator(true);
  409.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".nome_porta=?");
  410.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".id="+CostantiDB.MAPPING_FRUIZIONE_PD+".id_porta");
  411.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_AZIONI+".id_porta="+CostantiDB.PORTE_DELEGATE+".id");
  412.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_AZIONI+".azione=?");
  413.                                     queryString = sqlQueryObject.createSQLQuery();
  414.                                     stmt = con.prepareStatement(queryString);
  415.                                     stmt.setString(1, mapping.getIdPortaDelegata().getNome());
  416.                                     stmt.setString(2, idRisorsa.getNome());
  417.                                     risultato = stmt.executeQuery();
  418.                                     while (risultato.next()){
  419.                                         String nome = risultato.getString("nome_porta");
  420.                                         ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  421.                                         if(resultPorta.mapping) {
  422.                                             mappingFruizionePDList.add(resultPorta.label);
  423.                                         }
  424.                                         else {
  425.                                             porteDelegateList.add(resultPorta.label);
  426.                                         }
  427.                                         isInUso = true;
  428.                                     }
  429.                                     risultato.close();
  430.                                     stmt.close();
  431.                                    
  432.                                    
  433.                                     // ** trasformazioni **
  434.                                    
  435.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  436.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI);
  437.                                     sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  438.                                     sqlQueryObject.addSelectField("nome_porta");
  439.                                     sqlQueryObject.setANDLogicOperator(true);
  440.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".nome_porta=?");
  441.                                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".id_porta="+CostantiDB.PORTE_DELEGATE+".id");
  442.                                     // condizione di controllo
  443.                                     ISQLQueryObject sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  444.                                     sqlQueryObjectOr.setANDLogicOperator(false);
  445.                                     // (applicabilita_azioni == 'NOME') OR (applicabilita_azioni like 'NOME,%') OR (applicabilita_azioni like '%,NOME') OR (applicabilita_azioni like '%,applicabilita_azioni,%')
  446.                                     /** CLOB sqlQueryObjectOr.addWhereCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni = ?");*/
  447.                                     sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni", idRisorsa.getNome(), false , false);
  448.                                     sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni", idRisorsa.getNome()+",", LikeConfig.startsWith(false));
  449.                                     sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni", ","+idRisorsa.getNome(), LikeConfig.endsWith(false));
  450.                                     sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_DELEGATE_TRASFORMAZIONI+".applicabilita_azioni", ","+idRisorsa.getNome()+",", true , false);
  451.                                     sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  452.                                     queryString = sqlQueryObject.createSQLQuery();
  453.                                     stmt = con.prepareStatement(queryString);
  454.                                     stmt.setString(1, mapping.getIdPortaDelegata().getNome());
  455.                                     /** CLOB stmt.setString(2, idRisorsa.getNome());*/
  456.                                     risultato = stmt.executeQuery();
  457.                                     while (risultato.next()){
  458.                                         String nome = risultato.getString("nome_porta");
  459.                                         ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  460.                                         if(resultPorta.mapping) {
  461.                                             trasformazionePDMappingList.add(resultPorta.label);
  462.                                         }
  463.                                         else {
  464.                                             trasformazionePDList.add(resultPorta.label);
  465.                                         }
  466.                                         isInUso = true;
  467.                                     }
  468.                                     risultato.close();
  469.                                     stmt.close();
  470.                                    
  471.                                    
  472.                                     // ** Controllo che non sia associato a policy di controllo del traffico o allarmi **
  473.                                    
  474.                                     int max = 2;
  475.                                     if(!CostantiDB.isAllarmiEnabled()) {
  476.                                         max=1;
  477.                                     }
  478.                                     for (int i = 0; i < max; i++) {
  479.                                        
  480.                                         String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  481.                                         String identificativoColumn = "active_policy_id";
  482.                                         String aliasColumn = "policy_alias";
  483.                                         List<String> list = ctList;
  484.                                         String oggetto = "Policy";
  485.                                         if(i==1) {
  486.                                             tabella = CostantiDB.ALLARMI;
  487.                                             identificativoColumn = "nome";
  488.                                             aliasColumn = "alias";
  489.                                             list = allarmeList;
  490.                                             oggetto = "Allarme";
  491.                                         }
  492.                                    
  493.                                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  494.                                         sqlQueryObject.addFromTable(tabella);
  495.                                         sqlQueryObject.addSelectField(identificativoColumn);
  496.                                         sqlQueryObject.addSelectField(aliasColumn);
  497.                                         sqlQueryObject.addSelectField("filtro_ruolo");
  498.                                         sqlQueryObject.addSelectField("filtro_porta");
  499.                                         sqlQueryObject.setANDLogicOperator(true);
  500.                                         sqlQueryObject.addWhereCondition(tabella+".filtro_ruolo=?");
  501.                                         sqlQueryObject.addWhereCondition(tabella+".filtro_porta=?");
  502.                                        
  503.                                         // condizione di controllo
  504.                                         sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  505.                                         sqlQueryObjectOr.setANDLogicOperator(false);
  506.                                         // (filtro_azione == 'NOME') OR (filtro_azione like 'NOME,%') OR (filtro_azione like '%,NOME') OR (filtro_azione like '%,applicabilita_azioni,%')
  507.                                         /** CLOB sqlQueryObjectOr.addWhereCondition(CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".filtro_azione = ?");*/
  508.                                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idRisorsa.getNome(), false , false);
  509.                                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idRisorsa.getNome()+",", LikeConfig.startsWith(false));
  510.                                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idRisorsa.getNome(), LikeConfig.endsWith(false));
  511.                                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idRisorsa.getNome()+",", true , false);
  512.                                         sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  513.                                        
  514.                                         sqlQueryObject.addOrderBy("filtro_ruolo");
  515.                                         sqlQueryObject.addOrderBy("filtro_porta");
  516.                                         queryString = sqlQueryObject.createSQLQuery();
  517.                                         stmt = con.prepareStatement(queryString);
  518.                                         stmt.setString(1, "delegata");
  519.                                         stmt.setString(2, mapping.getIdPortaDelegata().getNome());
  520.                                         /** CLOB stmt.setString(3, idRisorsa.getNome());*/
  521.                                         risultato = stmt.executeQuery();
  522.                                         while (risultato.next()) {
  523.                                            
  524.                                             String alias = risultato.getString(aliasColumn);
  525.                                             if(alias== null || "".equals(alias)) {
  526.                                                 alias = risultato.getString(identificativoColumn);
  527.                                             }
  528.                                            
  529.                                             String nomePorta = risultato.getString("filtro_porta");
  530.                                             String filtroRuolo = risultato.getString("filtro_ruolo");
  531.                                             if(nomePorta!=null) {
  532.                                                 String tipo = null;
  533.                                                 String label = null;
  534.                                                 if("delegata".equals(filtroRuolo)) {
  535.                                                     try {
  536.                                                         ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nomePorta, tipoDB, con, normalizeObjectIds);
  537.                                                         if(resultPorta.mapping) {
  538.                                                             label = "Fruizione di Servizio "+ resultPorta.label;
  539.                                                         }
  540.                                                     }catch(Exception e) {
  541.                                                         tipo = "Outbound";
  542.                                                     }
  543.                                                 }
  544.                                                 else {
  545.                                                     tipo = filtroRuolo;
  546.                                                 }
  547.                                                 if(label==null) {
  548.                                                     list.add(oggetto+" '"+alias+"' attiva nella porta '"+tipo+"' '"+nomePorta+"' ");
  549.                                                 }
  550.                                                 else {
  551.                                                     list.add(oggetto+" '"+alias+"' attiva nella "+label);
  552.                                                 }
  553.                                             }
  554.                                             else {
  555.                                                 list.add(oggetto+" '"+alias+"'");
  556.                                             }
  557.                            
  558.                                             isInUso = true;
  559.                                         }
  560.                                         risultato.close();
  561.                                         stmt.close();
  562.                                     }
  563.                                 }
  564.                             }
  565.                         }
  566.                        
  567.                     }
  568.                 }
  569.             }
  570.                
  571.            
  572.                
  573.                
  574.             // Porte applicative, mapping
  575.             if(config &&
  576.                 idServiziWithAccordo!=null && !idServiziWithAccordo.isEmpty()) {
  577.                 for (IDServizio idServizio : idServiziWithAccordo) {
  578.                     List<MappingErogazionePortaApplicativa> lPA = DBMappingUtils.mappingErogazionePortaApplicativaList(con, tipoDB, idServizio, true);
  579.                     if(lPA!=null && !lPA.isEmpty()) {
  580.                         for (MappingErogazionePortaApplicativa mapping : lPA) {
  581.                            
  582.                            
  583.                             // ** mapping **
  584.                            
  585.                             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  586.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  587.                             sqlQueryObject.addFromTable(CostantiDB.MAPPING_EROGAZIONE_PA);
  588.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_AZIONI);
  589.                             sqlQueryObject.addSelectField("nome_porta");
  590.                             sqlQueryObject.setANDLogicOperator(true);
  591.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".nome_porta=?");
  592.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id="+CostantiDB.MAPPING_EROGAZIONE_PA+".id_porta");
  593.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_AZIONI+".id_porta="+CostantiDB.PORTE_APPLICATIVE+".id");
  594.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_AZIONI+".azione=?");
  595.                             queryString = sqlQueryObject.createSQLQuery();
  596.                             stmt = con.prepareStatement(queryString);
  597.                             stmt.setString(1, mapping.getIdPortaApplicativa().getNome());
  598.                             stmt.setString(2, idRisorsa.getNome());
  599.                             risultato = stmt.executeQuery();
  600.                             while (risultato.next()){
  601.                                 String nome = risultato.getString("nome_porta");
  602.                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  603.                                 if(resultPorta.mapping) {
  604.                                     mappingErogazionePAList.add(resultPorta.label);
  605.                                 }
  606.                                 else {
  607.                                     porteApplicativeList.add(resultPorta.label);
  608.                                 }
  609.                                 isInUso = true;
  610.                             }
  611.                             risultato.close();
  612.                             stmt.close();
  613.                            
  614.                            
  615.                             // ** trasformazioni **
  616.                            
  617.                             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  618.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI);
  619.                             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  620.                             sqlQueryObject.addSelectField("nome_porta");
  621.                             sqlQueryObject.setANDLogicOperator(true);
  622.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".nome_porta=?");
  623.                             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".id_porta="+CostantiDB.PORTE_APPLICATIVE+".id");
  624.                             // condizione di controllo
  625.                             ISQLQueryObject sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  626.                             sqlQueryObjectOr.setANDLogicOperator(false);
  627.                             // (applicabilita_azioni == 'NOME') OR (applicabilita_azioni like 'NOME,%') OR (applicabilita_azioni like '%,NOME') OR (applicabilita_azioni like '%,applicabilita_azioni,%')
  628.                             /** CLOB sqlQueryObjectOr.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni = ?");*/
  629.                             sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni", idRisorsa.getNome(), false , false);
  630.                             sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni", idRisorsa.getNome()+",", LikeConfig.startsWith(false));
  631.                             sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni", ","+idRisorsa.getNome(), LikeConfig.endsWith(false));
  632.                             sqlQueryObjectOr.addWhereLikeCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".applicabilita_azioni", ","+idRisorsa.getNome()+",", true , false);
  633.                             sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  634.                             queryString = sqlQueryObject.createSQLQuery();
  635.                             stmt = con.prepareStatement(queryString);
  636.                             stmt.setString(1, mapping.getIdPortaApplicativa().getNome());
  637.                             /** CLOB stmt.setString(2, idRisorsa.getNome());*/
  638.                             risultato = stmt.executeQuery();
  639.                             while (risultato.next()){
  640.                                 String nome = risultato.getString("nome_porta");
  641.                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  642.                                 if(resultPorta.mapping) {
  643.                                     trasformazionePAMappingList.add(resultPorta.label);
  644.                                 }
  645.                                 else {
  646.                                     trasformazionePAList.add(resultPorta.label);
  647.                                 }
  648.                                 isInUso = true;
  649.                             }
  650.                             risultato.close();
  651.                             stmt.close();
  652.                            
  653.                            
  654.                             // ** Controllo che non sia associato a policy di controllo del traffico o allarmi **
  655.                            
  656.                             int max = 2;
  657.                             if(!CostantiDB.isAllarmiEnabled()) {
  658.                                 max=1;
  659.                             }
  660.                             for (int i = 0; i < max; i++) {
  661.                                
  662.                                 String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  663.                                 String identificativoColumn = "active_policy_id";
  664.                                 String aliasColumn = "policy_alias";
  665.                                 List<String> list = ctList;
  666.                                 String oggetto = "Policy";
  667.                                 if(i==1) {
  668.                                     tabella = CostantiDB.ALLARMI;
  669.                                     identificativoColumn = "nome";
  670.                                     aliasColumn = "alias";
  671.                                     list = allarmeList;
  672.                                     oggetto = "Allarme";
  673.                                 }
  674.                            
  675.                                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  676.                                 sqlQueryObject.addFromTable(tabella);
  677.                                 sqlQueryObject.addSelectField(identificativoColumn);
  678.                                 sqlQueryObject.addSelectField(aliasColumn);
  679.                                 sqlQueryObject.addSelectField("filtro_ruolo");
  680.                                 sqlQueryObject.addSelectField("filtro_porta");
  681.                                 sqlQueryObject.setANDLogicOperator(true);
  682.                                 sqlQueryObject.addWhereCondition(tabella+".filtro_ruolo=?");
  683.                                 sqlQueryObject.addWhereCondition(tabella+".filtro_porta=?");
  684.                                
  685.                                 // condizione di controllo
  686.                                 sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  687.                                 sqlQueryObjectOr.setANDLogicOperator(false);
  688.                                 // (filtro_azione == 'NOME') OR (filtro_azione like 'NOME,%') OR (filtro_azione like '%,NOME') OR (filtro_azione like '%,applicabilita_azioni,%')
  689.                                 /** CLOB sqlQueryObjectOr.addWhereCondition(CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".filtro_azione = ?");*/
  690.                                 sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idRisorsa.getNome(), false , false);
  691.                                 sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idRisorsa.getNome()+",", LikeConfig.startsWith(false));
  692.                                 sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idRisorsa.getNome(), LikeConfig.endsWith(false));
  693.                                 sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idRisorsa.getNome()+",", true , false);
  694.                                 sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  695.                                
  696.                                 sqlQueryObject.addOrderBy("filtro_ruolo");
  697.                                 sqlQueryObject.addOrderBy("filtro_porta");
  698.                                 queryString = sqlQueryObject.createSQLQuery();
  699.                                 stmt = con.prepareStatement(queryString);
  700.                                 stmt.setString(1, "applicativa");
  701.                                 stmt.setString(2, mapping.getIdPortaApplicativa().getNome());
  702.                                 /** CLOB stmt.setString(3, idRisorsa.getNome());*/
  703.                                 risultato = stmt.executeQuery();
  704.                                 while (risultato.next()) {
  705.                                    
  706.                                     String alias = risultato.getString(aliasColumn);
  707.                                     if(alias== null || "".equals(alias)) {
  708.                                         alias = risultato.getString(identificativoColumn);
  709.                                     }
  710.                                    
  711.                                     String nomePorta = risultato.getString("filtro_porta");
  712.                                     String filtroRuolo = risultato.getString("filtro_ruolo");
  713.                                     if(nomePorta!=null) {
  714.                                         String tipo = null;
  715.                                         String label = null;
  716.                                         if("applicativa".equals(filtroRuolo)) {
  717.                                             try {
  718.                                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nomePorta, tipoDB, con, normalizeObjectIds);
  719.                                                 if(resultPorta.mapping) {
  720.                                                     label = "Erogazione di Servizio "+ resultPorta.label;
  721.                                                 }
  722.                                             }catch(Exception e) {
  723.                                                 tipo = "Inbound";
  724.                                             }
  725.                                         }
  726.                                         else {
  727.                                             tipo = filtroRuolo;
  728.                                         }
  729.                                         if(label==null) {
  730.                                             list.add(oggetto+" '"+alias+"' attiva nella porta '"+tipo+"' '"+nomePorta+"' ");
  731.                                         }
  732.                                         else {
  733.                                             list.add(oggetto+" '"+alias+"' attiva nella "+label);
  734.                                         }
  735.                                     }
  736.                                     else {
  737.                                         list.add(oggetto+" '"+alias+"'");
  738.                                     }
  739.                    
  740.                                     isInUso = true;
  741.                                 }
  742.                                 risultato.close();
  743.                                 stmt.close();
  744.                             }
  745.                         }
  746.                     }
  747.                 }
  748.             }
  749.            
  750.            
  751.            
  752.            
  753.            
  754.            
  755.             // ** Controllo che non sia associato a policy di controllo del traffico o allarmi generali **
  756.            
  757.             long idAccordoServizioParteComune = DBUtils.getIdAccordoServizioParteComune(idRisorsa.getIdAccordo(), con, tipoDB);
  758.             if(idAccordoServizioParteComune<=0){
  759.                 throw new UtilsException("Accordi di Servizio Parte Comune con id ["+idRisorsa.getIdAccordo().toString()+"] non trovato");
  760.             }
  761.            
  762.             // Recupero servizi che implementano l'accordo
  763.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  764.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  765.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  766.             sqlQueryObject.addSelectField("*");
  767.             sqlQueryObject.addWhereCondition("id_accordo = ?");
  768.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  769.             sqlQueryObject.setANDLogicOperator(true);
  770.             queryString = sqlQueryObject.createSQLQuery();
  771.             stmt = con.prepareStatement(queryString);
  772.             stmt.setLong(1, idAccordoServizioParteComune);
  773.             risultato = stmt.executeQuery();
  774.             List<IDServizio> listIDServizio = new ArrayList<>();
  775.             while (risultato.next()){
  776.                 String tipoSoggettoErogatore = risultato.getString("tipo_soggetto");
  777.                 String nomeSoggettoErogatore = risultato.getString("nome_soggetto");
  778.                 String tipoServizio = risultato.getString("tipo_servizio");
  779.                 String nomeServizio = risultato.getString("nome_servizio");
  780.                 int versioneServizio = risultato.getInt("versione_servizio");
  781.                 IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tipoServizio, nomeServizio,
  782.                         tipoSoggettoErogatore, nomeSoggettoErogatore, versioneServizio);
  783.                 listIDServizio.add(idServizio);
  784.             }
  785.             risultato.close();
  786.             stmt.close();
  787.            
  788.             if(!listIDServizio.isEmpty()) {
  789.            
  790.                 for (IDServizio idServizio : listIDServizio) {
  791.                    
  792.                     int max = 2;
  793.                     if(!CostantiDB.isAllarmiEnabled()) {
  794.                         max=1;
  795.                     }
  796.                     for (int i = 0; i < max; i++) {
  797.                        
  798.                         String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  799.                         String identificativoColumn = "active_policy_id";
  800.                         String aliasColumn = "policy_alias";
  801.                         List<String> list = ctList;
  802.                         String oggetto = "Policy";
  803.                         if(i==1) {
  804.                             tabella = CostantiDB.ALLARMI;
  805.                             identificativoColumn = "nome";
  806.                             aliasColumn = "alias";
  807.                             list = allarmeList;
  808.                             oggetto = "Allarme";
  809.                         }
  810.                    
  811.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  812.                         sqlQueryObject.addFromTable(tabella);
  813.                         sqlQueryObject.setSelectDistinct(true);
  814.                         sqlQueryObject.addSelectField(identificativoColumn);
  815.                         sqlQueryObject.addSelectField(aliasColumn);
  816.                         sqlQueryObject.setANDLogicOperator(true);
  817.                         sqlQueryObject.addWhereIsNullCondition(tabella+".filtro_porta");
  818.                        
  819.                         ISQLQueryObject sqlQueryObjectServizioCompleto = SQLObjectFactory.createSQLQueryObject(tipoDB);
  820.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_tipo_erogatore=?");
  821.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_nome_erogatore=?");
  822.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_tipo_servizio=?");
  823.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_nome_servizio=?");
  824.                         sqlQueryObjectServizioCompleto.addWhereCondition(tabella+".filtro_versione_servizio=?");
  825.                        
  826.                         ISQLQueryObject sqlQueryObjectServizioParziale = SQLObjectFactory.createSQLQueryObject(tipoDB);
  827.                         sqlQueryObjectServizioParziale.addWhereIsNullCondition(tabella+".filtro_tipo_erogatore");
  828.                         sqlQueryObjectServizioParziale.addWhereIsNullCondition(tabella+".filtro_nome_erogatore");
  829.                         sqlQueryObjectServizioParziale.addWhereCondition(tabella+".filtro_tipo_servizio=?");
  830.                         sqlQueryObjectServizioParziale.addWhereCondition(tabella+".filtro_nome_servizio=?");
  831.                         sqlQueryObjectServizioParziale.addWhereCondition(tabella+".filtro_versione_servizio=?");
  832.                        
  833.                         sqlQueryObject.addWhereCondition(false,false, sqlQueryObjectServizioCompleto.createSQLConditions(), sqlQueryObjectServizioParziale.createSQLConditions());
  834.                        
  835.                         // condizione di controllo
  836.                         ISQLQueryObject sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
  837.                         sqlQueryObjectOr.setANDLogicOperator(false);
  838.                         // (filtro_azione == 'NOME') OR (filtro_azione like 'NOME,%') OR (filtro_azione like '%,NOME') OR (filtro_azione like '%,applicabilita_azioni,%')
  839.                         /** CLOB sqlQueryObjectOr.addWhereCondition(CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".filtro_azione = ?");*/
  840.                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idRisorsa.getNome(), false , false);
  841.                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", idRisorsa.getNome()+",", LikeConfig.startsWith(false));
  842.                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idRisorsa.getNome(), LikeConfig.endsWith(false));
  843.                         sqlQueryObjectOr.addWhereLikeCondition(tabella+".filtro_azione", ","+idRisorsa.getNome()+",", true , false);
  844.                         sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
  845.                        
  846.                         sqlQueryObject.addOrderBy(aliasColumn);
  847.                         sqlQueryObject.addOrderBy(identificativoColumn);
  848.                         queryString = sqlQueryObject.createSQLQuery();
  849.                         stmt = con.prepareStatement(queryString);
  850.                         int index = 1;
  851.                         stmt.setString(index++, idServizio.getSoggettoErogatore().getTipo());
  852.                         stmt.setString(index++, idServizio.getSoggettoErogatore().getNome());
  853.                         stmt.setString(index++, idServizio.getTipo());
  854.                         stmt.setString(index++, idServizio.getNome());
  855.                         stmt.setInt(index++, idServizio.getVersione());
  856.                         stmt.setString(index++, idServizio.getTipo());
  857.                         stmt.setString(index++, idServizio.getNome());
  858.                         stmt.setInt(index++, idServizio.getVersione());
  859.                         /** CLOB stmt.setString(index++, idRisorsa.getNome());*/
  860.                         risultato = stmt.executeQuery();
  861.                         while (risultato.next()) {
  862.                            
  863.                             String alias = risultato.getString(aliasColumn);
  864.                             if(alias== null || "".equals(alias)) {
  865.                                 alias = risultato.getString(identificativoColumn);
  866.                             }
  867.                            
  868.                             String oggettoTrovato = oggetto+" '"+alias+"'";
  869.                             if(!list.contains(oggettoTrovato)) {
  870.                                 list.add(oggettoTrovato);
  871.                             }
  872.            
  873.                             isInUso = true;
  874.                         }
  875.                         risultato.close();
  876.                         stmt.close();
  877.                     }
  878.                 }
  879.             }
  880.            
  881.            
  882.            
  883.            
  884.            
  885.            
  886.            
  887.             // ** Controllo che non sia riferito dalla configurazione SignalHub **
  888.             if(registry && Costanti.MODIPA_PROTOCOL_NAME.equals(idRisorsa.getIdAccordo().getSoggettoReferente().getTipo()) &&
  889.                 idServiziWithAccordo!=null && !idServiziWithAccordo.isEmpty()) {
  890.                 for (IDServizio idServizio : idServiziWithAccordo) {
  891.                                    
  892.                     long idS = DBUtils.getIdServizio(idServizio.getNome(), idServizio.getTipo(), idServizio.getVersione(),
  893.                             idServizio.getSoggettoErogatore().getNome(), idServizio.getSoggettoErogatore().getTipo(),
  894.                             con, tipoDB);
  895.                     if(idS<=0) {
  896.                         throw new CoreException("Servizio '"+idServizio+"' non esistente");
  897.                     }
  898.                        
  899.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  900.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  901.                     sqlQueryObject.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  902.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI,"id","idServizio");
  903.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id = ?");
  904.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  905.                     sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  906.                     sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  907.                     sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  908.                     sqlQueryObject.setANDLogicOperator(true);
  909.                     queryString = sqlQueryObject.createSQLQuery();
  910.                     stmt = con.prepareStatement(queryString);
  911.                     int index = 1;
  912.                     stmt.setLong(index++, idS);
  913.                     stmt.setString(index++, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA.name());
  914.                     stmt.setString(index++, Costanti.MODIPA_API_IMPL_INFO_SIGNAL_HUB_OPERATION_ID);
  915.                     stmt.setString(index++, idRisorsa.getNome());
  916.                     risultato = stmt.executeQuery();
  917.                     if(risultato.next()) {
  918.                        
  919.                         // trovata
  920.                         IDPortaApplicativa idPA = DBMappingUtils.getIDPortaApplicativaAssociataDefault(idServizio, con, tipoDB);
  921.                         if(idPA!=null) {
  922.                             ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(idPA.getNome(), tipoDB, con, normalizeObjectIds);
  923.                             modiSignalHubList.add(resultPorta.label);
  924.                         }
  925.                         else {
  926.                             modiSignalHubList.add(idServizio.toString());
  927.                         }
  928.                        
  929.                         isInUso = true;
  930.                        
  931.                     }
  932.                 }
  933.             }
  934.            
  935.            

  936.             return isInUso;

  937.         } catch (Exception se) {
  938.             throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  939.         } finally {
  940.             // Chiudo statement and resultset
  941.             JDBCUtilities.closeResources(risultato, stmt);
  942.         }
  943.     }


  944.     protected static String toString(IDResource idRisorsa, String methodPath, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator){
  945.         return toString(idRisorsa, methodPath, whereIsInUso, prefix, separator," non eliminabile perch&egrave; :");
  946.     }
  947.     protected static String toString(IDResource idRisorsa, String methodPath, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator, String intestazione){
  948.         Set<ErrorsHandlerCostant> keys = whereIsInUso.keySet();
  949.         StringBuilder msgBuilder = new StringBuilder("Risorsa '"+(methodPath!=null ? methodPath : idRisorsa.getNome())+"'" + intestazione+separator);
  950.         if(!prefix){
  951.             msgBuilder = new StringBuilder("");
  952.         }
  953.         String separatorCategorie = "";
  954.         if(whereIsInUso.size()>1) {
  955.             separatorCategorie = separator;
  956.         }
  957.         for (ErrorsHandlerCostant key : keys) {
  958.             List<String> messages = whereIsInUso.get(key);

  959.             if ( messages!=null && !messages.isEmpty()) {
  960.                 msgBuilder.append(separatorCategorie);
  961.             }
  962.            
  963.             switch (key) {

  964.             case IS_CORRELATA:
  965.                 if ( messages!=null && !messages.isEmpty()) {
  966.                     msgBuilder.append("correlata ad altre risorse: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  967.                 }
  968.                 break;
  969.            
  970.             case IN_USO_IN_PORTE_APPLICATIVE:
  971.                 if ( messages!=null && !messages.isEmpty()) {
  972.                     msgBuilder.append("appartenente ad un gruppo differente da quello predefinito nelle Porte Inbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  973.                 }
  974.                 break;
  975.             case IN_USO_IN_PORTE_DELEGATE:
  976.                 if ( messages!=null && !messages.isEmpty()) {
  977.                     msgBuilder.append("appartenente ad un gruppo differente da quello predefinito nelle Porte Outbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  978.                 }
  979.                 break;
  980.             case IN_USO_IN_MAPPING_EROGAZIONE_PA:
  981.                 if ( messages!=null && !messages.isEmpty()) {
  982.                     msgBuilder.append("appartenente ad un gruppo differente da quello predefinito nelle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  983.                 }
  984.                 break;
  985.             case IN_USO_IN_MAPPING_FRUIZIONE_PD:
  986.                 if ( messages!=null && !messages.isEmpty()) {
  987.                     msgBuilder.append("appartenente ad un gruppo differente da quello predefinito nelle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  988.                 }
  989.                 break;
  990.                
  991.             case TRASFORMAZIONE_MAPPING_PD:
  992.                 if ( messages!=null && !messages.isEmpty()) {
  993.                     msgBuilder.append("utilizzata nel criterio di applicabilità della Trasformazione (Risorse) per le Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  994.                 }
  995.                 break;
  996.             case TRASFORMAZIONE_PD:
  997.                 if ( messages!=null && !messages.isEmpty()) {
  998.                     msgBuilder.append("utilizzata nelle Porte Outbound (Criterio di applicabilità della Trasformazione - Risorse): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  999.                 }
  1000.                 break;
  1001.             case TRASFORMAZIONE_MAPPING_PA:
  1002.                 if ( messages!=null && !messages.isEmpty()) {
  1003.                     msgBuilder.append("utilizzata nel criterio di applicabilità della Trasformazione (Risorse) per le Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1004.                 }
  1005.                 break;
  1006.             case TRASFORMAZIONE_PA:
  1007.                 if ( messages!=null && !messages.isEmpty()) {
  1008.                     msgBuilder.append("utilizzata nelle Porte Inbound (Criterio di applicabilità della Trasformazione - Risorse): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1009.                 }
  1010.                 break;
  1011.                                
  1012.             case CONTROLLO_TRAFFICO:
  1013.                 if ( messages!=null && !messages.isEmpty() ) {
  1014.                     msgBuilder.append("utilizzata in Policy di Rate Limiting: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1015.                 }
  1016.                 break;
  1017.             case ALLARMI:
  1018.                 if ( messages!=null && !messages.isEmpty() ) {
  1019.                     msgBuilder.append("utilizzato in Allarmi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1020.                 }
  1021.                 break;
  1022.                
  1023.             case IS_RIFERITA_MODI_SIGNAL_HUB:
  1024.                 if ( messages!=null && !messages.isEmpty() ) {
  1025.                     msgBuilder.append("riferito nella configurazione 'SignalHub' dell'erogazione: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  1026.                 }
  1027.                 break;
  1028.                
  1029.             default:
  1030.                 msgBuilder.append("utilizzata in oggetto non codificato ("+key+")"+separator);
  1031.                 break;
  1032.             }
  1033.            
  1034.         }// chiudo for

  1035.         return msgBuilder.toString();
  1036.     }
  1037.    
  1038. }