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.id.IDRuolo;
  32. import org.openspcoop2.core.id.IDSoggetto;
  33. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  34. import org.openspcoop2.utils.UtilsException;
  35. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  36. import org.openspcoop2.utils.sql.ISQLQueryObject;
  37. import org.openspcoop2.utils.sql.SQLObjectFactory;

  38. /**
  39.  * DBOggettiInUsoUtils_ruoli
  40.  *
  41.  * @author Andrea Poli (apoli@link.it)
  42.  * @author $Author$
  43.  * @version $Rev$, $Date$
  44.  *
  45.  */
  46. public class DBOggettiInUsoUtils_ruoli {

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

  62.         PreparedStatement stmt = null;
  63.         ResultSet risultato = null;
  64.         String queryString;

  65.         try {

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

  186.             }
  187.            
  188.             // Controllo che il ruolo non sia in uso nei serviziApplicativi
  189.             if(config){
  190.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  191.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_RUOLI);
  192.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  193.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  194.                 sqlQueryObject.addSelectField("tipo_soggetto");
  195.                 sqlQueryObject.addSelectField("nome_soggetto");
  196.                 sqlQueryObject.addSelectField(CostantiDB.SERVIZI_APPLICATIVI+".nome");
  197.                 sqlQueryObject.setANDLogicOperator(true);
  198.                 sqlQueryObject.setSelectDistinct(true);
  199.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_RUOLI+".ruolo = ?");
  200.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_RUOLI+".id_servizio_applicativo = "+CostantiDB.SERVIZI_APPLICATIVI+".id");
  201.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  202.                 queryString = sqlQueryObject.createSQLQuery();
  203.                 stmt = con.prepareStatement(queryString);
  204.                 stmt.setString(1, idRuolo.getNome());
  205.                 risultato = stmt.executeQuery();
  206.                 while (risultato.next()) {
  207.                     String tipo_soggetto = risultato.getString("tipo_soggetto");
  208.                     String nome_soggetto = risultato.getString("nome_soggetto");
  209.                     String nome = risultato.getString("nome");
  210.                     IDSoggetto idSoggetto = new IDSoggetto(tipo_soggetto, nome_soggetto);
  211.                     if(normalizeObjectIds) {
  212.                         String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(tipo_soggetto);
  213.                         servizi_applicativi_list.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+nome+DBOggettiInUsoUtils.getSubjectSuffix(protocollo, idSoggetto));
  214.                     }
  215.                     else {
  216.                         servizi_applicativi_list.add(tipo_soggetto + "/" + nome_soggetto+"_"+nome);
  217.                     }
  218.                     isInUso = true;
  219.                 }
  220.                 risultato.close();
  221.                 stmt.close();
  222.             }
  223.            
  224.             // Controllo che il ruolo non sia in uso nelle porte applicative
  225.             if(config){
  226.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  227.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_RUOLI);
  228.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  229.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  230.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE+".nome_porta");
  231.                 sqlQueryObject.setANDLogicOperator(true);
  232.                 sqlQueryObject.setSelectDistinct(true);
  233.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_RUOLI+".ruolo = ?");
  234.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_RUOLI+".id_porta = "+CostantiDB.PORTE_APPLICATIVE+".id");
  235.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  236.                 queryString = sqlQueryObject.createSQLQuery();
  237.                 stmt = con.prepareStatement(queryString);
  238.                 stmt.setString(1, idRuolo.getNome());
  239.                 risultato = stmt.executeQuery();
  240.                 while (risultato.next()) {
  241.                     String nome = risultato.getString("nome_porta");
  242.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  243.                     if(resultPorta.mapping) {
  244.                         if(resultPorta.erogazioneModi)
  245.                             mappingErogazionePA_modi_list.add(resultPorta.label);
  246.                         else
  247.                             mappingErogazionePA_list.add(resultPorta.label);
  248.                     }
  249.                     else {
  250.                         if(resultPorta.erogazioneModi)
  251.                             porte_applicative_modi_list.add(resultPorta.label);
  252.                         else
  253.                             porte_applicative_list.add(resultPorta.label);
  254.                     }
  255.                     isInUso = true;
  256.                 }
  257.                 risultato.close();
  258.                 stmt.close();
  259.             }
  260.            
  261.             // Controllo che il ruolo non sia in uso nelle porte applicative (token)
  262.             if(config){
  263.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  264.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_TOKEN_RUOLI);
  265.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  266.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  267.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE+".nome_porta");
  268.                 sqlQueryObject.setANDLogicOperator(true);
  269.                 sqlQueryObject.setSelectDistinct(true);
  270.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TOKEN_RUOLI+".ruolo = ?");
  271.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TOKEN_RUOLI+".id_porta = "+CostantiDB.PORTE_APPLICATIVE+".id");
  272.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  273.                 queryString = sqlQueryObject.createSQLQuery();
  274.                 stmt = con.prepareStatement(queryString);
  275.                 stmt.setString(1, idRuolo.getNome());
  276.                 risultato = stmt.executeQuery();
  277.                 while (risultato.next()) {
  278.                     String nome = risultato.getString("nome_porta");
  279.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  280.                     if(resultPorta.mapping) {
  281.                         if(resultPorta.erogazioneModi)
  282.                             mappingErogazioneTokenPA_modi_list.add(resultPorta.label);
  283.                         else
  284.                             mappingErogazioneTokenPA_list.add(resultPorta.label);
  285.                     }
  286.                     else {
  287.                         if(resultPorta.erogazioneModi)
  288.                             porte_applicative_token_modi_list.add(resultPorta.label);
  289.                         else
  290.                             porte_applicative_token_list.add(resultPorta.label);
  291.                     }
  292.                     isInUso = true;
  293.                 }
  294.                 risultato.close();
  295.                 stmt.close();
  296.             }
  297.            
  298.             // Controllo che il ruolo non sia in uso nelle porte delegate
  299.             if(config){
  300.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  301.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE_RUOLI);
  302.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  303.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  304.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_DELEGATE+".nome_porta");
  305.                 sqlQueryObject.setANDLogicOperator(true);
  306.                 sqlQueryObject.setSelectDistinct(true);
  307.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_RUOLI+".ruolo = ?");
  308.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_RUOLI+".id_porta = "+CostantiDB.PORTE_DELEGATE+".id");
  309.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  310.                 queryString = sqlQueryObject.createSQLQuery();
  311.                 stmt = con.prepareStatement(queryString);
  312.                 stmt.setString(1, idRuolo.getNome());
  313.                 risultato = stmt.executeQuery();
  314.                 while (risultato.next()) {
  315.                     String nome = risultato.getString("nome_porta");
  316.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  317.                     if(resultPorta.mapping) {
  318.                         mappingFruizionePD_list.add(resultPorta.label);
  319.                     }
  320.                     else {
  321.                         porte_delegate_list.add(resultPorta.label);
  322.                     }
  323.                     isInUso = true;
  324.                 }
  325.                 risultato.close();
  326.                 stmt.close();
  327.             }
  328.            
  329.             // Controllo che il ruolo non sia in uso nelle porte delegate (token)
  330.             if(config){
  331.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  332.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE_TOKEN_RUOLI);
  333.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  334.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  335.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_DELEGATE+".nome_porta");
  336.                 sqlQueryObject.setANDLogicOperator(true);
  337.                 sqlQueryObject.setSelectDistinct(true);
  338.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_TOKEN_RUOLI+".ruolo = ?");
  339.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE_TOKEN_RUOLI+".id_porta = "+CostantiDB.PORTE_DELEGATE+".id");
  340.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  341.                 queryString = sqlQueryObject.createSQLQuery();
  342.                 stmt = con.prepareStatement(queryString);
  343.                 stmt.setString(1, idRuolo.getNome());
  344.                 risultato = stmt.executeQuery();
  345.                 while (risultato.next()) {
  346.                     String nome = risultato.getString("nome_porta");
  347.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  348.                     if(resultPorta.mapping) {
  349.                         mappingFruizioneTokenPD_list.add(resultPorta.label);
  350.                     }
  351.                     else {
  352.                         porte_delegate_token_list.add(resultPorta.label);
  353.                     }
  354.                     isInUso = true;
  355.                 }
  356.                 risultato.close();
  357.                 stmt.close();
  358.             }
  359.            
  360.             // Controllo che il soggetto non sia associato a policy di controllo del traffico o allarmi
  361.             if(config){
  362.                
  363.                 int max = 2;
  364.                 if(!CostantiDB.isAllarmiEnabled()) {
  365.                     max=1;
  366.                 }
  367.                
  368.                 for (int i = 0; i < max; i++) {
  369.                    
  370.                     String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  371.                     String identificativo_column = "active_policy_id";
  372.                     String alias_column = "policy_alias";
  373.                     List<String> list = ct_list;
  374.                     String oggetto = "Policy";
  375.                     if(i==1) {
  376.                         tabella = CostantiDB.ALLARMI;
  377.                         identificativo_column = "nome";
  378.                         alias_column = "alias";
  379.                         list = allarme_list;
  380.                         oggetto = "Allarme";
  381.                     }
  382.                
  383.                     ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  384.                     sqlQueryObject.addFromTable(tabella);
  385.                     sqlQueryObject.addSelectField(identificativo_column);
  386.                     sqlQueryObject.addSelectField(alias_column);
  387.                     sqlQueryObject.addSelectField("filtro_ruolo");
  388.                     sqlQueryObject.addSelectField("filtro_porta");
  389.                     sqlQueryObject.setANDLogicOperator(false); // OR
  390.                     sqlQueryObject.addWhereCondition(true,
  391.                             tabella+".filtro_ruolo_fruitore = ?");
  392.                     sqlQueryObject.addWhereCondition(true,
  393.                             tabella+".filtro_ruolo_erogatore = ?");
  394.                     queryString = sqlQueryObject.createSQLQuery();
  395.                     sqlQueryObject.addOrderBy("filtro_ruolo");
  396.                     sqlQueryObject.addOrderBy("filtro_porta");
  397.                     stmt = con.prepareStatement(queryString);
  398.                     int index = 1;
  399.                     stmt.setString(index++, idRuolo.getNome());
  400.                     stmt.setString(index++, idRuolo.getNome());
  401.                     risultato = stmt.executeQuery();
  402.                     while (risultato.next()) {
  403.                        
  404.                         String alias = risultato.getString(alias_column);
  405.                         if(alias== null || "".equals(alias)) {
  406.                             alias = risultato.getString(identificativo_column);
  407.                         }
  408.                        
  409.                         String nomePorta = risultato.getString("filtro_porta");
  410.                         String filtro_ruolo = risultato.getString("filtro_ruolo");
  411.                         if(nomePorta!=null) {
  412.                             String tipo = null;
  413.                             String label = null;
  414.                             if("delegata".equals(filtro_ruolo)) {
  415.                                 try {
  416.                                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nomePorta, tipoDB, con, normalizeObjectIds);
  417.                                     if(resultPorta.mapping) {
  418.                                         label = "Fruizione di Servizio "+ resultPorta.label;
  419.                                     }
  420.                                 }catch(Exception e) {
  421.                                     tipo = "Outbound";
  422.                                 }
  423.                             }
  424.                             else if("applicativa".equals(filtro_ruolo)) {
  425.                                 try {
  426.                                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nomePorta, tipoDB, con, normalizeObjectIds);
  427.                                     if(resultPorta.mapping) {
  428.                                         label = "Erogazione di Servizio "+ resultPorta.label;
  429.                                     }
  430.                                 }catch(Exception e) {
  431.                                     tipo = "Inbound";
  432.                                 }
  433.                             }
  434.                             else {
  435.                                 tipo = filtro_ruolo;
  436.                             }
  437.                             if(label==null) {
  438.                                 list.add(oggetto+" '"+alias+"' attiva nella porta '"+tipo+"' '"+nomePorta+"' ");
  439.                             }
  440.                             else {
  441.                                 list.add(oggetto+" '"+alias+"' attiva nella "+label);
  442.                             }
  443.                         }
  444.                         else {
  445.                             list.add(oggetto+" '"+alias+"'");
  446.                         }
  447.        
  448.                         isInUso = true;
  449.                     }
  450.                     risultato.close();
  451.                     stmt.close();
  452.                    
  453.                 }
  454.                
  455.             }
  456.            
  457.             return isInUso;

  458.         } catch (Exception se) {
  459.             throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  460.         } finally {
  461.             // Chiudo statement and resultset
  462.             JDBCUtilities.closeResources(risultato, stmt);
  463.         }
  464.     }


  465.     protected static String toString(IDRuolo idRuolo, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator){
  466.         return toString(idRuolo, whereIsInUso, prefix, separator," non eliminabile perch&egrave; :");
  467.     }
  468.     protected static String toString(IDRuolo idRuolo, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator, String intestazione){
  469.         Set<ErrorsHandlerCostant> keys = whereIsInUso.keySet();
  470.         String msg = "Ruolo '"+idRuolo.getNome()+"'" + intestazione+separator;
  471.         if(prefix==false){
  472.             msg = "";
  473.         }
  474.         String separatorCategorie = "";
  475.         if(whereIsInUso.size()>1) {
  476.             separatorCategorie = separator;
  477.         }
  478.         for (ErrorsHandlerCostant key : keys) {
  479.             List<String> messages = whereIsInUso.get(key);

  480.             if ( messages!=null && messages.size() > 0) {
  481.                 msg += separatorCategorie;
  482.             }
  483.            
  484.             switch (key) {
  485.             case IN_USO_IN_SOGGETTI:
  486.                 if ( messages!=null && messages.size() > 0) {
  487.                     msg += "utilizzato nei Soggetti: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  488.                 }
  489.                 break;
  490.             case IN_USO_IN_SERVIZI_APPLICATIVI:
  491.                 if ( messages!=null && messages.size() > 0) {
  492.                     msg += "utilizzato negli Applicativi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  493.                 }
  494.                 break;
  495.                
  496.             case IN_USO_IN_PORTE_APPLICATIVE:
  497.                 if ( messages!=null && messages.size() > 0) {
  498.                     msg += "utilizzato nelle Porte Inbound (Controllo Accessi - Autorizzazione Trasporto): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  499.                 }
  500.                 break;
  501.             case IN_USO_IN_PORTE_APPLICATIVE_MODI:
  502.                 if ( messages!=null && messages.size() > 0) {
  503.                     msg += "utilizzato nelle Porte Inbound (Controllo Accessi - Autorizzazione Canale): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  504.                 }
  505.                 break;
  506.             case IN_USO_IN_PORTE_DELEGATE:
  507.                 if ( messages!=null && messages.size() > 0) {
  508.                     msg += "utilizzato nelle Porte Outbound (Controllo Accessi - Autorizzazione Trasporto): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  509.                 }
  510.                 break;
  511.             case IN_USO_IN_MAPPING_EROGAZIONE_PA:
  512.                 if ( messages!=null && messages.size() > 0) {
  513.                     msg += "utilizzato nelle Erogazioni (Controllo Accessi - Autorizzazione Trasporto): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  514.                 }
  515.                 break;
  516.             case IN_USO_IN_MAPPING_EROGAZIONE_PA_MODI:
  517.                 if ( messages!=null && messages.size() > 0) {
  518.                     msg += "utilizzato nelle Erogazioni (Controllo Accessi - Autorizzazione Canale): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  519.                 }
  520.                 break;
  521.             case IN_USO_IN_MAPPING_FRUIZIONE_PD:
  522.                 if ( messages!=null && messages.size() > 0) {
  523.                     msg += "utilizzato nelle Fruizioni (Controllo Accessi - Autorizzazione Trasporto): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  524.                 }
  525.                 break;
  526.                
  527.             case RUOLI_TOKEN_PA:
  528.                 if ( messages!=null && messages.size() > 0) {
  529.                     msg += "utilizzato nelle Porte Inbound (Controllo Accessi - Autorizzazione Token): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  530.                 }
  531.                 break;
  532.             case RUOLI_TOKEN_PA_MODI:
  533.                 if ( messages!=null && messages.size() > 0) {
  534.                     msg += "utilizzato nelle Porte Inbound (Controllo Accessi - Autorizzazione Messaggio): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  535.                 }
  536.                 break;
  537.             case RUOLI_TOKEN_PD:
  538.                 if ( messages!=null && messages.size() > 0) {
  539.                     msg += "utilizzato nelle Porte Outbound (Controllo Accessi - Autorizzazione Token): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  540.                 }
  541.                 break;
  542.             case RUOLI_TOKEN_MAPPING_PA:
  543.                 if ( messages!=null && messages.size() > 0) {
  544.                     msg += "utilizzato nelle Erogazioni (Controllo Accessi - Autorizzazione Token): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  545.                 }
  546.                 break;
  547.             case RUOLI_TOKEN_MAPPING_PA_MODI:
  548.                 if ( messages!=null && messages.size() > 0) {
  549.                     msg += "utilizzato nelle Erogazioni (Controllo Accessi - Autorizzazione Messaggio): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  550.                 }
  551.                 break;
  552.             case RUOLI_TOKEN_MAPPING_PD:
  553.                 if ( messages!=null && messages.size() > 0) {
  554.                     msg += "utilizzato nelle Fruizioni (Controllo Accessi - Autorizzazione Token): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  555.                 }
  556.                 break;
  557.                
  558.             case CONTROLLO_TRAFFICO:
  559.                 if ( messages!=null && messages.size() > 0 ) {
  560.                     msg += "utilizzato in Policy di Rate Limiting: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  561.                 }
  562.                 break;
  563.             case ALLARMI:
  564.                 if ( messages!=null && messages.size() > 0 ) {
  565.                     msg += "utilizzato in Allarmi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  566.                 }
  567.                 break;
  568.             default:
  569.                 msg += "utilizzato in oggetto non codificato ("+key+")"+separator;
  570.                 break;
  571.             }

  572.         }// chiudo for

  573.         return msg;
  574.     }

  575.    
  576. }