DBOggettiInUsoUtils_ruoli.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.DBUtils;
  29. import org.openspcoop2.core.commons.ErrorsHandlerCostant;
  30. import org.openspcoop2.core.constants.CostantiDB;
  31. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  32. import org.openspcoop2.core.id.IDPortaApplicativa;
  33. import org.openspcoop2.core.id.IDRuolo;
  34. import org.openspcoop2.core.id.IDServizio;
  35. import org.openspcoop2.core.id.IDSoggetto;
  36. import org.openspcoop2.core.mapping.DBMappingUtils;
  37. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  38. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  39. import org.openspcoop2.utils.UtilsException;
  40. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  41. import org.openspcoop2.utils.sql.ISQLQueryObject;
  42. import org.openspcoop2.utils.sql.SQLObjectFactory;

  43. /**
  44.  * DBOggettiInUsoUtils_ruoli
  45.  *
  46.  * @author Andrea Poli (apoli@link.it)
  47.  * @author $Author$
  48.  * @version $Rev$, $Date$
  49.  *
  50.  */
  51. public class DBOggettiInUsoUtils_ruoli {

  52.     protected static boolean isRuoloConfigInUso(Connection con, String tipoDB, IDRuolo idRuolo, Map<ErrorsHandlerCostant,
  53.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  54.         return isRuoloInUsoEngine(con,tipoDB,idRuolo,false,true,whereIsInUso,normalizeObjectIds);
  55.     }
  56.     protected static boolean isRuoloRegistryInUso(Connection con, String tipoDB, IDRuolo idRuolo, Map<ErrorsHandlerCostant,
  57.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  58.         return isRuoloInUsoEngine(con,tipoDB,idRuolo,true,false,whereIsInUso,normalizeObjectIds);
  59.     }
  60.     protected static boolean isRuoloInUso(Connection con, String tipoDB, IDRuolo idRuolo, Map<ErrorsHandlerCostant,
  61.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  62.         return isRuoloInUsoEngine(con,tipoDB,idRuolo,true,true,whereIsInUso,normalizeObjectIds);
  63.     }
  64.     private static boolean isRuoloInUsoEngine(Connection con, String tipoDB, IDRuolo idRuolo, boolean registry, boolean config, Map<ErrorsHandlerCostant,
  65.             List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
  66.         String nomeMetodo = "_isRuoloInUso";

  67.         PreparedStatement stmt = null;
  68.         ResultSet risultato = null;
  69.         String queryString;

  70.         try {

  71.             long idR = DBUtils.getIdRuolo(idRuolo, con, tipoDB);
  72.            
  73.             boolean isInUso = false;
  74.            
  75.             List<String> soggettiList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_SOGGETTI);
  76.             List<String> serviziApplicativiList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_SERVIZI_APPLICATIVI);
  77.             List<String> porteApplicativeList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE);
  78.             List<String> porteApplicativeModiList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE_MODI);
  79.             List<String> porteDelegateList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE);
  80.             List<String> mappingErogazionePAList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA);
  81.             List<String> mappingErogazionePAModiList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA_MODI);
  82.             List<String> mappingFruizionePDList = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD);
  83.             List<String> porteApplicativeTokenList = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_PA);
  84.             List<String> porteApplicativeTokenModiList = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_PA_MODI);
  85.             List<String> porteDelegateTokenList = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_PD);
  86.             List<String> mappingErogazioneTokenPAList = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PA);
  87.             List<String> mappingErogazioneTokenPAModiList = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PA_MODI);
  88.             List<String> mappingFruizioneTokenPDList = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PD);
  89.             List<String> ctList = whereIsInUso.get(ErrorsHandlerCostant.CONTROLLO_TRAFFICO);
  90.             List<String> allarmeList = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI);
  91.             List<String> modiSignalHubList = whereIsInUso.get(ErrorsHandlerCostant.IS_RIFERITA_MODI_SIGNAL_HUB);
  92.            
  93.             if (soggettiList == null) {
  94.                 soggettiList = new ArrayList<>();
  95.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_SOGGETTI, soggettiList);
  96.             }
  97.             if (serviziApplicativiList == null) {
  98.                 serviziApplicativiList = new ArrayList<>();
  99.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_SERVIZI_APPLICATIVI, serviziApplicativiList);
  100.             }
  101.            
  102.             if (porteApplicativeList == null) {
  103.                 porteApplicativeList = new ArrayList<>();
  104.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE, porteApplicativeList);
  105.             }
  106.             if (porteApplicativeModiList == null) {
  107.                 porteApplicativeModiList = new ArrayList<>();
  108.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE_MODI, porteApplicativeModiList);
  109.             }
  110.             if (porteDelegateList == null) {
  111.                 porteDelegateList = new ArrayList<>();
  112.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE, porteDelegateList);
  113.             }
  114.             if (mappingErogazionePAList == null) {
  115.                 mappingErogazionePAList = new ArrayList<>();
  116.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA, mappingErogazionePAList);
  117.             }
  118.             if (mappingErogazionePAModiList == null) {
  119.                 mappingErogazionePAModiList = new ArrayList<>();
  120.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA_MODI, mappingErogazionePAModiList);
  121.             }
  122.             if (mappingFruizionePDList == null) {
  123.                 mappingFruizionePDList = new ArrayList<>();
  124.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD, mappingFruizionePDList);
  125.             }
  126.            
  127.             if (porteApplicativeTokenList == null) {
  128.                 porteApplicativeTokenList = new ArrayList<>();
  129.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_PA, porteApplicativeTokenList);
  130.             }
  131.             if (porteApplicativeTokenModiList == null) {
  132.                 porteApplicativeTokenModiList = new ArrayList<>();
  133.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_PA_MODI, porteApplicativeTokenModiList);
  134.             }
  135.             if (porteDelegateTokenList == null) {
  136.                 porteDelegateTokenList = new ArrayList<>();
  137.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_PD, porteDelegateTokenList);
  138.             }
  139.             if (mappingErogazioneTokenPAList == null) {
  140.                 mappingErogazioneTokenPAList = new ArrayList<>();
  141.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PA, mappingErogazioneTokenPAList);
  142.             }
  143.             if (mappingErogazioneTokenPAModiList == null) {
  144.                 mappingErogazioneTokenPAModiList = new ArrayList<>();
  145.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PA_MODI, mappingErogazioneTokenPAModiList);
  146.             }
  147.             if (mappingFruizioneTokenPDList == null) {
  148.                 mappingFruizioneTokenPDList = new ArrayList<>();
  149.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PD, mappingFruizioneTokenPDList);
  150.             }
  151.            
  152.             if (ctList == null) {
  153.                 ctList = new ArrayList<>();
  154.                 whereIsInUso.put(ErrorsHandlerCostant.CONTROLLO_TRAFFICO, ctList);
  155.             }
  156.             if (allarmeList == null) {
  157.                 allarmeList = new ArrayList<>();
  158.                 whereIsInUso.put(ErrorsHandlerCostant.ALLARMI, allarmeList);
  159.             }
  160.            
  161.             if (modiSignalHubList == null) {
  162.                 modiSignalHubList = new ArrayList<>();
  163.                 whereIsInUso.put(ErrorsHandlerCostant.IS_RIFERITA_MODI_SIGNAL_HUB, modiSignalHubList);
  164.             }
  165.            
  166.            
  167.             // Controllo che il ruolo non sia in uso nei soggetti
  168.             if(registry){
  169.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  170.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  171.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  172.                 sqlQueryObject.addSelectField("tipo_soggetto");
  173.                 sqlQueryObject.addSelectField("nome_soggetto");
  174.                 sqlQueryObject.setANDLogicOperator(true);
  175.                 sqlQueryObject.setSelectDistinct(true);
  176.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI_RUOLI+".id_ruolo = ?");
  177.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI_RUOLI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  178.                 queryString = sqlQueryObject.createSQLQuery();
  179.                 stmt = con.prepareStatement(queryString);
  180.                 stmt.setLong(1, idR);
  181.                 risultato = stmt.executeQuery();
  182.                 while (risultato.next()) {
  183.                     String tipoSoggetto = risultato.getString("tipo_soggetto");
  184.                     String nomeSoggetto = risultato.getString("nome_soggetto");
  185.                     IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto, nomeSoggetto);
  186.                     if(normalizeObjectIds) {
  187.                         String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(tipoSoggetto);
  188.                         soggettiList.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelSoggetto(protocollo, idSoggetto));
  189.                     }
  190.                     else {
  191.                         soggettiList.add(tipoSoggetto + "/" + nomeSoggetto);    
  192.                     }
  193.                     isInUso = true;
  194.                 }
  195.                 risultato.close();
  196.                 stmt.close();

  197.             }
  198.            
  199.             // Controllo che il ruolo non sia in uso nei serviziApplicativi
  200.             if(config){
  201.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  202.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_RUOLI);
  203.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  204.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  205.                 sqlQueryObject.addSelectField("tipo_soggetto");
  206.                 sqlQueryObject.addSelectField("nome_soggetto");
  207.                 sqlQueryObject.addSelectField(CostantiDB.SERVIZI_APPLICATIVI+".nome");
  208.                 sqlQueryObject.setANDLogicOperator(true);
  209.                 sqlQueryObject.setSelectDistinct(true);
  210.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_RUOLI+".ruolo = ?");
  211.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_RUOLI+".id_servizio_applicativo = "+CostantiDB.SERVIZI_APPLICATIVI+".id");
  212.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  213.                 queryString = sqlQueryObject.createSQLQuery();
  214.                 stmt = con.prepareStatement(queryString);
  215.                 stmt.setString(1, idRuolo.getNome());
  216.                 risultato = stmt.executeQuery();
  217.                 while (risultato.next()) {
  218.                     String tipoSoggetto = risultato.getString("tipo_soggetto");
  219.                     String nomeSoggetto = risultato.getString("nome_soggetto");
  220.                     String nome = risultato.getString("nome");
  221.                     IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto, nomeSoggetto);
  222.                     if(normalizeObjectIds) {
  223.                         String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(tipoSoggetto);
  224.                         serviziApplicativiList.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+nome+DBOggettiInUsoUtils.getSubjectSuffix(protocollo, idSoggetto));
  225.                     }
  226.                     else {
  227.                         serviziApplicativiList.add(tipoSoggetto + "/" + nomeSoggetto+"_"+nome);
  228.                     }
  229.                     isInUso = true;
  230.                 }
  231.                 risultato.close();
  232.                 stmt.close();
  233.             }
  234.            
  235.             // Controllo che il ruolo non sia in uso nelle porte applicative
  236.             if(config){
  237.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  238.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_RUOLI);
  239.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  240.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  241.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE+".nome_porta");
  242.                 sqlQueryObject.setANDLogicOperator(true);
  243.                 sqlQueryObject.setSelectDistinct(true);
  244.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_RUOLI+".ruolo = ?");
  245.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_RUOLI+".id_porta = "+CostantiDB.PORTE_APPLICATIVE+".id");
  246.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  247.                 queryString = sqlQueryObject.createSQLQuery();
  248.                 stmt = con.prepareStatement(queryString);
  249.                 stmt.setString(1, idRuolo.getNome());
  250.                 risultato = stmt.executeQuery();
  251.                 while (risultato.next()) {
  252.                     String nome = risultato.getString("nome_porta");
  253.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  254.                     if(resultPorta.mapping) {
  255.                         if(resultPorta.erogazioneModi)
  256.                             mappingErogazionePAModiList.add(resultPorta.label);
  257.                         else
  258.                             mappingErogazionePAList.add(resultPorta.label);
  259.                     }
  260.                     else {
  261.                         if(resultPorta.erogazioneModi)
  262.                             porteApplicativeModiList.add(resultPorta.label);
  263.                         else
  264.                             porteApplicativeList.add(resultPorta.label);
  265.                     }
  266.                     isInUso = true;
  267.                 }
  268.                 risultato.close();
  269.                 stmt.close();
  270.             }
  271.            
  272.             // Controllo che il ruolo non sia in uso nelle porte applicative (token)
  273.             if(config){
  274.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  275.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_TOKEN_RUOLI);
  276.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  277.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  278.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE+".nome_porta");
  279.                 sqlQueryObject.setANDLogicOperator(true);
  280.                 sqlQueryObject.setSelectDistinct(true);
  281.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TOKEN_RUOLI+".ruolo = ?");
  282.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TOKEN_RUOLI+".id_porta = "+CostantiDB.PORTE_APPLICATIVE+".id");
  283.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  284.                 queryString = sqlQueryObject.createSQLQuery();
  285.                 stmt = con.prepareStatement(queryString);
  286.                 stmt.setString(1, idRuolo.getNome());
  287.                 risultato = stmt.executeQuery();
  288.                 while (risultato.next()) {
  289.                     String nome = risultato.getString("nome_porta");
  290.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  291.                     if(resultPorta.mapping) {
  292.                         if(resultPorta.erogazioneModi)
  293.                             mappingErogazioneTokenPAModiList.add(resultPorta.label);
  294.                         else
  295.                             mappingErogazioneTokenPAList.add(resultPorta.label);
  296.                     }
  297.                     else {
  298.                         if(resultPorta.erogazioneModi)
  299.                             porteApplicativeTokenModiList.add(resultPorta.label);
  300.                         else
  301.                             porteApplicativeTokenList.add(resultPorta.label);
  302.                     }
  303.                     isInUso = true;
  304.                 }
  305.                 risultato.close();
  306.                 stmt.close();
  307.             }
  308.            
  309.             // Controllo che il ruolo non sia in uso nelle porte delegate
  310.             if(config){
  311.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  312.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE_RUOLI);
  313.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  314.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  315.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_DELEGATE+".nome_porta");
  316.                 sqlQueryObject.setANDLogicOperator(true);
  317.                 sqlQueryObject.setSelectDistinct(true);
  318.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_RUOLI+".ruolo = ?");
  319.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_RUOLI+".id_porta = "+CostantiDB.PORTE_DELEGATE+".id");
  320.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  321.                 queryString = sqlQueryObject.createSQLQuery();
  322.                 stmt = con.prepareStatement(queryString);
  323.                 stmt.setString(1, idRuolo.getNome());
  324.                 risultato = stmt.executeQuery();
  325.                 while (risultato.next()) {
  326.                     String nome = risultato.getString("nome_porta");
  327.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  328.                     if(resultPorta.mapping) {
  329.                         mappingFruizionePDList.add(resultPorta.label);
  330.                     }
  331.                     else {
  332.                         porteDelegateList.add(resultPorta.label);
  333.                     }
  334.                     isInUso = true;
  335.                 }
  336.                 risultato.close();
  337.                 stmt.close();
  338.             }
  339.            
  340.             // Controllo che il ruolo non sia in uso nelle porte delegate (token)
  341.             if(config){
  342.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  343.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE_TOKEN_RUOLI);
  344.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  345.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  346.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_DELEGATE+".nome_porta");
  347.                 sqlQueryObject.setANDLogicOperator(true);
  348.                 sqlQueryObject.setSelectDistinct(true);
  349.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_TOKEN_RUOLI+".ruolo = ?");
  350.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_TOKEN_RUOLI+".id_porta = "+CostantiDB.PORTE_DELEGATE+".id");
  351.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  352.                 queryString = sqlQueryObject.createSQLQuery();
  353.                 stmt = con.prepareStatement(queryString);
  354.                 stmt.setString(1, idRuolo.getNome());
  355.                 risultato = stmt.executeQuery();
  356.                 while (risultato.next()) {
  357.                     String nome = risultato.getString("nome_porta");
  358.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  359.                     if(resultPorta.mapping) {
  360.                         mappingFruizioneTokenPDList.add(resultPorta.label);
  361.                     }
  362.                     else {
  363.                         porteDelegateTokenList.add(resultPorta.label);
  364.                     }
  365.                     isInUso = true;
  366.                 }
  367.                 risultato.close();
  368.                 stmt.close();
  369.             }
  370.            
  371.             // Controllo che il soggetto non sia associato a policy di controllo del traffico o allarmi
  372.             if(config){
  373.                
  374.                 int max = 2;
  375.                 if(!CostantiDB.isAllarmiEnabled()) {
  376.                     max=1;
  377.                 }
  378.                
  379.                 for (int i = 0; i < max; i++) {
  380.                    
  381.                     String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  382.                     String identificativoColumn = "active_policy_id";
  383.                     String aliasColumn = "policy_alias";
  384.                     List<String> list = ctList;
  385.                     String oggetto = "Policy";
  386.                     if(i==1) {
  387.                         tabella = CostantiDB.ALLARMI;
  388.                         identificativoColumn = "nome";
  389.                         aliasColumn = "alias";
  390.                         list = allarmeList;
  391.                         oggetto = "Allarme";
  392.                     }
  393.                
  394.                     ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  395.                     sqlQueryObject.addFromTable(tabella);
  396.                     sqlQueryObject.addSelectField(identificativoColumn);
  397.                     sqlQueryObject.addSelectField(aliasColumn);
  398.                     sqlQueryObject.addSelectField("filtro_ruolo");
  399.                     sqlQueryObject.addSelectField("filtro_porta");
  400.                     sqlQueryObject.setANDLogicOperator(false); // OR
  401.                     sqlQueryObject.addWhereCondition(true,
  402.                             tabella+".filtro_ruolo_fruitore = ?");
  403.                     sqlQueryObject.addWhereCondition(true,
  404.                             tabella+".filtro_ruolo_erogatore = ?");
  405.                     queryString = sqlQueryObject.createSQLQuery();
  406.                     sqlQueryObject.addOrderBy("filtro_ruolo");
  407.                     sqlQueryObject.addOrderBy("filtro_porta");
  408.                     stmt = con.prepareStatement(queryString);
  409.                     int index = 1;
  410.                     stmt.setString(index++, idRuolo.getNome());
  411.                     stmt.setString(index++, idRuolo.getNome());
  412.                     risultato = stmt.executeQuery();
  413.                     while (risultato.next()) {
  414.                        
  415.                         String alias = risultato.getString(aliasColumn);
  416.                         if(alias== null || "".equals(alias)) {
  417.                             alias = risultato.getString(identificativoColumn);
  418.                         }
  419.                        
  420.                         String nomePorta = risultato.getString("filtro_porta");
  421.                         String filtroRuolo = risultato.getString("filtro_ruolo");
  422.                         if(nomePorta!=null) {
  423.                             String tipo = null;
  424.                             String label = null;
  425.                             if("delegata".equals(filtroRuolo)) {
  426.                                 try {
  427.                                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nomePorta, tipoDB, con, normalizeObjectIds);
  428.                                     if(resultPorta.mapping) {
  429.                                         label = "Fruizione di Servizio "+ resultPorta.label;
  430.                                     }
  431.                                 }catch(Exception e) {
  432.                                     tipo = "Outbound";
  433.                                 }
  434.                             }
  435.                             else if("applicativa".equals(filtroRuolo)) {
  436.                                 try {
  437.                                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nomePorta, tipoDB, con, normalizeObjectIds);
  438.                                     if(resultPorta.mapping) {
  439.                                         label = "Erogazione di Servizio "+ resultPorta.label;
  440.                                     }
  441.                                 }catch(Exception e) {
  442.                                     tipo = "Inbound";
  443.                                 }
  444.                             }
  445.                             else {
  446.                                 tipo = filtroRuolo;
  447.                             }
  448.                             if(label==null) {
  449.                                 list.add(oggetto+" '"+alias+"' attiva nella porta '"+tipo+"' '"+nomePorta+"' ");
  450.                             }
  451.                             else {
  452.                                 list.add(oggetto+" '"+alias+"' attiva nella "+label);
  453.                             }
  454.                         }
  455.                         else {
  456.                             list.add(oggetto+" '"+alias+"'");
  457.                         }
  458.        
  459.                         isInUso = true;
  460.                     }
  461.                     risultato.close();
  462.                     stmt.close();
  463.                    
  464.                 }
  465.                
  466.             }
  467.            
  468.            
  469.             // ** Controllo che non sia riferito dalla configurazione SignalHub **      
  470.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  471.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  472.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  473.             sqlQueryObject.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
  474.             sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI,"tipo_servizio","tipoServizio");
  475.             sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI,"nome_servizio","nomeServizio");
  476.             sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI,"versione_servizio","versioneServizio");
  477.             sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"tipo_soggetto","tipoSoggetto");
  478.             sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"nome_soggetto","nomeSoggetto");
  479.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  480.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id = " + CostantiDB.PROTOCOL_PROPERTIES + ".id_proprietario");
  481.             sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".tipo_proprietario=?");
  482.             sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".name=?");
  483.             sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES + ".value_string=?");
  484.             sqlQueryObject.setANDLogicOperator(true);
  485.             queryString = sqlQueryObject.createSQLQuery();
  486.             stmt = con.prepareStatement(queryString);
  487.             int index = 1;
  488.             stmt.setString(index++, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA.name());
  489.             stmt.setString(index++, CostantiDB.MODIPA_API_IMPL_INFO_SIGNAL_HUB_PUBLISHER_ROLE_ID);
  490.             stmt.setString(index++, idRuolo.getNome());
  491.             risultato = stmt.executeQuery();
  492.             while(risultato.next()) {
  493.                
  494.                 IDServizio idS = IDServizioFactory.getInstance().getIDServizioFromValues(risultato.getString("tipoServizio"), risultato.getString("nomeServizio"),
  495.                         risultato.getString("tipoSoggetto"), risultato.getString("nomeSoggetto"),
  496.                         risultato.getInt("versioneServizio"));
  497.                
  498.                 // trovata
  499.                 IDPortaApplicativa idPA = DBMappingUtils.getIDPortaApplicativaAssociataDefault(idS, con, tipoDB);
  500.                 if(idPA!=null) {
  501.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(idPA.getNome(), tipoDB, con, normalizeObjectIds);
  502.                     modiSignalHubList.add(resultPorta.label);
  503.                 }
  504.                 else {
  505.                     modiSignalHubList.add(idS.toString());
  506.                 }
  507.                
  508.                 isInUso = true;
  509.                
  510.             }
  511.             risultato.close();
  512.             stmt.close();
  513.            
  514.            
  515.             return isInUso;

  516.         } catch (Exception se) {
  517.             throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  518.         } finally {
  519.             // Chiudo statement and resultset
  520.             JDBCUtilities.closeResources(risultato, stmt);
  521.         }
  522.     }


  523.     protected static String toString(IDRuolo idRuolo, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator){
  524.         return toString(idRuolo, whereIsInUso, prefix, separator," non eliminabile perch&egrave; :");
  525.     }
  526.     protected static String toString(IDRuolo idRuolo, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator, String intestazione){
  527.         Set<ErrorsHandlerCostant> keys = whereIsInUso.keySet();
  528.         StringBuilder msgBuilder = new StringBuilder("Ruolo '"+idRuolo.getNome()+"'" + intestazione+separator);
  529.         if(!prefix){
  530.             msgBuilder = new StringBuilder("");
  531.         }
  532.         String separatorCategorie = "";
  533.         if(whereIsInUso.size()>1) {
  534.             separatorCategorie = separator;
  535.         }
  536.         for (ErrorsHandlerCostant key : keys) {
  537.             List<String> messages = whereIsInUso.get(key);

  538.             if ( messages!=null && !messages.isEmpty()) {
  539.                 msgBuilder.append(separatorCategorie);
  540.             }
  541.            
  542.             switch (key) {
  543.             case IN_USO_IN_SOGGETTI:
  544.                 if ( messages!=null && !messages.isEmpty()) {
  545.                     msgBuilder.append("utilizzato nei Soggetti: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  546.                 }
  547.                 break;
  548.             case IN_USO_IN_SERVIZI_APPLICATIVI:
  549.                 if ( messages!=null && !messages.isEmpty()) {
  550.                     msgBuilder.append("utilizzato negli Applicativi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  551.                 }
  552.                 break;
  553.                
  554.             case IN_USO_IN_PORTE_APPLICATIVE:
  555.                 if ( messages!=null && !messages.isEmpty()) {
  556.                     msgBuilder.append("utilizzato nelle Porte Inbound (Controllo Accessi - Autorizzazione Trasporto): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  557.                 }
  558.                 break;
  559.             case IN_USO_IN_PORTE_APPLICATIVE_MODI:
  560.                 if ( messages!=null && !messages.isEmpty()) {
  561.                     msgBuilder.append("utilizzato nelle Porte Inbound (Controllo Accessi - Autorizzazione Canale): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  562.                 }
  563.                 break;
  564.             case IN_USO_IN_PORTE_DELEGATE:
  565.                 if ( messages!=null && !messages.isEmpty()) {
  566.                     msgBuilder.append("utilizzato nelle Porte Outbound (Controllo Accessi - Autorizzazione Trasporto): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  567.                 }
  568.                 break;
  569.             case IN_USO_IN_MAPPING_EROGAZIONE_PA:
  570.                 if ( messages!=null && !messages.isEmpty()) {
  571.                     msgBuilder.append("utilizzato nelle Erogazioni (Controllo Accessi - Autorizzazione Trasporto): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  572.                 }
  573.                 break;
  574.             case IN_USO_IN_MAPPING_EROGAZIONE_PA_MODI:
  575.                 if ( messages!=null && !messages.isEmpty()) {
  576.                     msgBuilder.append("utilizzato nelle Erogazioni (Controllo Accessi - Autorizzazione Canale): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  577.                 }
  578.                 break;
  579.             case IN_USO_IN_MAPPING_FRUIZIONE_PD:
  580.                 if ( messages!=null && !messages.isEmpty()) {
  581.                     msgBuilder.append("utilizzato nelle Fruizioni (Controllo Accessi - Autorizzazione Trasporto): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  582.                 }
  583.                 break;
  584.                
  585.             case RUOLI_TOKEN_PA:
  586.                 if ( messages!=null && !messages.isEmpty()) {
  587.                     msgBuilder.append("utilizzato nelle Porte Inbound (Controllo Accessi - Autorizzazione Token): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  588.                 }
  589.                 break;
  590.             case RUOLI_TOKEN_PA_MODI:
  591.                 if ( messages!=null && !messages.isEmpty()) {
  592.                     msgBuilder.append("utilizzato nelle Porte Inbound (Controllo Accessi - Autorizzazione Messaggio): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  593.                 }
  594.                 break;
  595.             case RUOLI_TOKEN_PD:
  596.                 if ( messages!=null && !messages.isEmpty()) {
  597.                     msgBuilder.append("utilizzato nelle Porte Outbound (Controllo Accessi - Autorizzazione Token): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  598.                 }
  599.                 break;
  600.             case RUOLI_TOKEN_MAPPING_PA:
  601.                 if ( messages!=null && !messages.isEmpty()) {
  602.                     msgBuilder.append("utilizzato nelle Erogazioni (Controllo Accessi - Autorizzazione Token): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  603.                 }
  604.                 break;
  605.             case RUOLI_TOKEN_MAPPING_PA_MODI:
  606.                 if ( messages!=null && !messages.isEmpty()) {
  607.                     msgBuilder.append("utilizzato nelle Erogazioni (Controllo Accessi - Autorizzazione Messaggio): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  608.                 }
  609.                 break;
  610.             case RUOLI_TOKEN_MAPPING_PD:
  611.                 if ( messages!=null && !messages.isEmpty()) {
  612.                     msgBuilder.append("utilizzato nelle Fruizioni (Controllo Accessi - Autorizzazione Token): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  613.                 }
  614.                 break;
  615.                
  616.             case CONTROLLO_TRAFFICO:
  617.                 if ( messages!=null && !messages.isEmpty()) {
  618.                     msgBuilder.append("utilizzato in Policy di Rate Limiting: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  619.                 }
  620.                 break;
  621.             case ALLARMI:
  622.                 if ( messages!=null && !messages.isEmpty()) {
  623.                     msgBuilder.append("utilizzato in Allarmi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  624.                 }
  625.                 break;
  626.                
  627.             case IS_RIFERITA_MODI_SIGNAL_HUB:
  628.                 if ( messages!=null && !messages.isEmpty() ) {
  629.                     msgBuilder.append("riferito nella configurazione 'SignalHub' dell'erogazione: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
  630.                 }
  631.                 break;              
  632.                
  633.             default:
  634.                 msgBuilder.append("utilizzato in oggetto non codificato ("+key+")"+separator);
  635.                 break;
  636.             }

  637.         }// chiudo for

  638.         return msgBuilder.toString();
  639.     }

  640.    
  641. }