DBOggettiInUsoUtils_soggetti.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.config.constants.RuoloTipoMatch;
  31. import org.openspcoop2.core.constants.CostantiDB;
  32. import org.openspcoop2.core.id.IDAccordo;
  33. import org.openspcoop2.core.id.IDAccordoCooperazione;
  34. import org.openspcoop2.core.id.IDServizio;
  35. import org.openspcoop2.core.id.IDSoggetto;
  36. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  37. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  38. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  39. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  40. import org.openspcoop2.utils.UtilsException;
  41. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  42. import org.openspcoop2.utils.sql.ISQLQueryObject;
  43. import org.openspcoop2.utils.sql.SQLObjectFactory;

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

  53.     protected static boolean isSoggettoConfigInUso(Connection con, String tipoDB, IDSoggetto idSoggettoConfig, boolean checkControlloTraffico,
  54.             Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean normalizeObjectIds,
  55.             boolean verificaRuoli) throws UtilsException {
  56.         return isSoggettoInUso(con,tipoDB,idSoggettoConfig,null,checkControlloTraffico, whereIsInUso, normalizeObjectIds, verificaRuoli);
  57.     }
  58.     protected static boolean isSoggettoRegistryInUso(Connection con, String tipoDB, IDSoggetto idSoggettoRegistro, boolean checkControlloTraffico,
  59.             Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean normalizeObjectIds,
  60.             boolean verificaRuoli) throws UtilsException {
  61.         return isSoggettoInUso(con,tipoDB,null,idSoggettoRegistro,checkControlloTraffico, whereIsInUso, normalizeObjectIds, verificaRuoli);
  62.     }
  63.     private static boolean isSoggettoInUso(Connection con, String tipoDB, IDSoggetto idSoggettoConfig, IDSoggetto idSoggettoRegistro, boolean checkControlloTraffico,
  64.             Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean normalizeObjectIds,
  65.             boolean verificaRuoli) throws UtilsException {
  66.         String nomeMetodo = "isSoggettoInUso";

  67.         PreparedStatement stmt = null;
  68.         ResultSet risultato = null;
  69.         String queryString;
  70.         try {
  71.             boolean isInUso = false;

  72.             long idSoggetto = -1;
  73.             String tipoSoggetto = null;
  74.             String nomeSoggetto = null;
  75.             if(idSoggettoRegistro!=null){
  76.                 tipoSoggetto = idSoggettoRegistro.getTipo();
  77.                 nomeSoggetto = idSoggettoRegistro.getNome();

  78.             }else{
  79.                 tipoSoggetto = idSoggettoConfig.getTipo();
  80.                 nomeSoggetto = idSoggettoConfig.getNome();
  81.             }
  82.             idSoggetto = DBUtils.getIdSoggetto(nomeSoggetto, tipoSoggetto, con, tipoDB);
  83.             if(idSoggetto<=0){
  84.                 throw new UtilsException("Soggetto con tipo["+tipoSoggetto+"] e nome["+nomeSoggetto+"] non trovato");
  85.             }

  86.             List<String> servizi_fruitori_list = whereIsInUso.get(ErrorsHandlerCostant.IS_FRUITORE);
  87.             List<String> servizi_applicativi_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_SERVIZI_APPLICATIVI);
  88.             List<String> servizi_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_SERVIZI);
  89.             List<String> porte_delegate_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE);
  90.             List<String> porte_applicative_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE);
  91.             List<String> mappingErogazionePA_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA);
  92.             List<String> mappingFruizionePD_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD);
  93.             List<String> accordi_list = whereIsInUso.get(ErrorsHandlerCostant.IS_REFERENTE);
  94.             List<String> accordi_coop_list = whereIsInUso.get(ErrorsHandlerCostant.IS_REFERENTE_COOPERAZIONE);
  95.             List<String> partecipanti_list = whereIsInUso.get(ErrorsHandlerCostant.IS_PARTECIPANTE_COOPERAZIONE);
  96.             List<String> utenti_list = whereIsInUso.get(ErrorsHandlerCostant.UTENTE);
  97.             List<String> ct_list = whereIsInUso.get(ErrorsHandlerCostant.CONTROLLO_TRAFFICO);
  98.             List<String> allarme_list = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI);
  99.             List<String> autorizzazionePA_mapping_list = whereIsInUso.get(ErrorsHandlerCostant.AUTORIZZAZIONE_MAPPING);
  100.             List<String> autorizzazionePA_list = whereIsInUso.get(ErrorsHandlerCostant.AUTORIZZAZIONE);
  101.             List<String> ruoliPA_mapping_list = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_MAPPING);
  102.             List<String> ruoliPA_list = whereIsInUso.get(ErrorsHandlerCostant.RUOLI);
  103.             List<String> ruoliTokenPA_mapping_list = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PA);
  104.             List<String> ruoliTokenPA_list = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_PA);
  105.             List<String> ruoliTokenPA_mapping_modi_list = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PA_MODI);
  106.             List<String> ruoliTokenPA_modi_list = whereIsInUso.get(ErrorsHandlerCostant.RUOLI_TOKEN_PA_MODI);
  107.             List<String> trasformazionePA_mapping_list = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PA);
  108.             List<String> trasformazionePA_list = whereIsInUso.get(ErrorsHandlerCostant.TRASFORMAZIONE_PA);
  109.             List<String> configurazioniProxyPass_list = whereIsInUso.get(ErrorsHandlerCostant.CONFIGURAZIONE_REGOLE_PROXY_PASS);

  110.             if (servizi_fruitori_list == null) {
  111.                 servizi_fruitori_list = new ArrayList<>();
  112.                 whereIsInUso.put(ErrorsHandlerCostant.IS_FRUITORE, servizi_fruitori_list);
  113.             }
  114.             if (servizi_applicativi_list == null) {
  115.                 servizi_applicativi_list = new ArrayList<>();
  116.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_SERVIZI_APPLICATIVI, servizi_applicativi_list);
  117.             }
  118.             if (servizi_list == null) {
  119.                 servizi_list = new ArrayList<>();
  120.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_SERVIZI, servizi_list);
  121.             }
  122.             if (porte_delegate_list == null) {
  123.                 porte_delegate_list = new ArrayList<>();
  124.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE, porte_delegate_list);
  125.             }
  126.             if (porte_applicative_list == null) {
  127.                 porte_applicative_list = new ArrayList<>();
  128.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE, porte_applicative_list);
  129.             }
  130.             if (mappingErogazionePA_list == null) {
  131.                 mappingErogazionePA_list = new ArrayList<>();
  132.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA, mappingErogazionePA_list);
  133.             }
  134.             if (mappingFruizionePD_list == null) {
  135.                 mappingFruizionePD_list = new ArrayList<>();
  136.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD, mappingFruizionePD_list);
  137.             }
  138.             if (accordi_list == null) {
  139.                 accordi_list = new ArrayList<>();
  140.                 whereIsInUso.put(ErrorsHandlerCostant.IS_REFERENTE, accordi_list);
  141.             }
  142.             if (accordi_coop_list == null) {
  143.                 accordi_coop_list = new ArrayList<>();
  144.                 whereIsInUso.put(ErrorsHandlerCostant.IS_REFERENTE_COOPERAZIONE, accordi_coop_list);
  145.             }
  146.             if (partecipanti_list == null) {
  147.                 partecipanti_list = new ArrayList<>();
  148.                 whereIsInUso.put(ErrorsHandlerCostant.IS_PARTECIPANTE_COOPERAZIONE, partecipanti_list);
  149.             }
  150.             if (utenti_list == null) {
  151.                 utenti_list = new ArrayList<>();
  152.                 whereIsInUso.put(ErrorsHandlerCostant.UTENTE, utenti_list);
  153.             }
  154.             if (ct_list == null) {
  155.                 ct_list = new ArrayList<>();
  156.                 whereIsInUso.put(ErrorsHandlerCostant.CONTROLLO_TRAFFICO, ct_list);
  157.             }
  158.             if (allarme_list == null) {
  159.                 allarme_list = new ArrayList<>();
  160.                 whereIsInUso.put(ErrorsHandlerCostant.ALLARMI, allarme_list);
  161.             }
  162.             if (autorizzazionePA_mapping_list == null) {
  163.                 autorizzazionePA_mapping_list = new ArrayList<>();
  164.                 whereIsInUso.put(ErrorsHandlerCostant.AUTORIZZAZIONE_MAPPING, autorizzazionePA_mapping_list);
  165.             }
  166.             if (autorizzazionePA_list == null) {
  167.                 autorizzazionePA_list = new ArrayList<>();
  168.                 whereIsInUso.put(ErrorsHandlerCostant.AUTORIZZAZIONE, autorizzazionePA_list);
  169.             }
  170.             if (ruoliPA_mapping_list == null) {
  171.                 ruoliPA_mapping_list = new ArrayList<>();
  172.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_MAPPING, ruoliPA_mapping_list);
  173.             }
  174.             if (ruoliPA_list == null) {
  175.                 ruoliPA_list = new ArrayList<>();
  176.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI, ruoliPA_list);
  177.             }
  178.             if (ruoliTokenPA_mapping_list == null) {
  179.                 ruoliTokenPA_mapping_list = new ArrayList<>();
  180.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PA, ruoliTokenPA_mapping_list);
  181.             }
  182.             if (ruoliTokenPA_list == null) {
  183.                 ruoliTokenPA_list = new ArrayList<>();
  184.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_PA, ruoliTokenPA_list);
  185.             }
  186.             if (ruoliTokenPA_mapping_modi_list == null) {
  187.                 ruoliTokenPA_mapping_modi_list = new ArrayList<>();
  188.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_MAPPING_PA_MODI, ruoliTokenPA_mapping_modi_list);
  189.             }
  190.             if (ruoliTokenPA_modi_list == null) {
  191.                 ruoliTokenPA_modi_list = new ArrayList<>();
  192.                 whereIsInUso.put(ErrorsHandlerCostant.RUOLI_TOKEN_PA_MODI, ruoliTokenPA_modi_list);
  193.             }
  194.             if (trasformazionePA_mapping_list == null) {
  195.                 trasformazionePA_mapping_list = new ArrayList<>();
  196.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_MAPPING_PA, trasformazionePA_mapping_list);
  197.             }
  198.             if (trasformazionePA_list == null) {
  199.                 trasformazionePA_list = new ArrayList<>();
  200.                 whereIsInUso.put(ErrorsHandlerCostant.TRASFORMAZIONE_PA, trasformazionePA_list);
  201.             }
  202.             if (configurazioniProxyPass_list == null) {
  203.                 configurazioniProxyPass_list = new ArrayList<>();
  204.                 whereIsInUso.put(ErrorsHandlerCostant.CONFIGURAZIONE_REGOLE_PROXY_PASS, configurazioniProxyPass_list);
  205.             }


  206.             // Controllo che il soggetto non sia in uso nei servizi applicativi
  207.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  208.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  209.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  210.             sqlQueryObject.addSelectField("tipo_soggetto");
  211.             sqlQueryObject.addSelectField("nome_soggetto");
  212.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_APPLICATIVI+".nome");
  213.             sqlQueryObject.setANDLogicOperator(true);
  214.             sqlQueryObject.setSelectDistinct(true);
  215.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  216.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto = ?");
  217.             queryString = sqlQueryObject.createSQLQuery();
  218.             stmt = con.prepareStatement(queryString);
  219.             stmt.setLong(1, idSoggetto);
  220.             risultato = stmt.executeQuery();
  221.             while (risultato.next()) {
  222.                 String tipo_soggetto = risultato.getString("tipo_soggetto");
  223.                 //String nome_soggetto = risultato.getString("nome_soggetto");
  224.                 String nome = risultato.getString("nome");
  225.                 // non serve, essendo di un soggetto specificoIDSoggetto idSoggettoProprietario = new IDSoggetto(tipo_soggetto, nome_soggetto);
  226.                 if(normalizeObjectIds) {
  227.                     String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(tipo_soggetto);
  228.                     servizi_applicativi_list.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+nome);
  229.                             // non serve, essendo di un soggetto specifico +getSubjectSuffix(protocollo, idSoggettoProprietario));
  230.                 }
  231.                 else {
  232.                     servizi_applicativi_list.add(nome);
  233.                 }
  234.                 isInUso = true;
  235.             }
  236.             risultato.close();
  237.             stmt.close();


  238.             // controllo porte delegate sia per id che per tipo e nome
  239.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  240.             sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  241.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  242.             sqlQueryObject.addSelectField(CostantiDB.PORTE_DELEGATE+".nome_porta");
  243.             sqlQueryObject.setANDLogicOperator(true);
  244.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_DELEGATE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  245.             sqlQueryObject.addWhereCondition(false,
  246.                     "id_soggetto_erogatore = ?",
  247.                     "(tipo_soggetto_erogatore = ? AND nome_soggetto_erogatore = ?)",
  248.                     "id_soggetto = ?");
  249.             queryString = sqlQueryObject.createSQLQuery();
  250.             stmt = con.prepareStatement(queryString);
  251.             // controllo se soggetto erogatore di porte delegate
  252.             stmt.setLong(1, idSoggetto);
  253.             stmt.setString(2, tipoSoggetto);
  254.             stmt.setString(3, nomeSoggetto);
  255.             // controllo se soggetto proprietario di porte delegate
  256.             stmt.setLong(4, idSoggetto);
  257.             risultato = stmt.executeQuery();
  258.             while (risultato.next()) {
  259.                 String nome = risultato.getString("nome_porta");
  260.                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
  261.                 if(resultPorta.mapping) {
  262.                     mappingFruizionePD_list.add(resultPorta.label);
  263.                 }
  264.                 else {
  265.                     porte_delegate_list.add(resultPorta.label);
  266.                 }
  267.                 isInUso = true;
  268.             }
  269.             risultato.close();
  270.             stmt.close();



  271.             // controllo se in uso in porte applicative come proprietario della porta o come soggetto virtuale
  272.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  273.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  274.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  275.             sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE+".nome_porta");
  276.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  277.             sqlQueryObject.setANDLogicOperator(true);
  278.             sqlQueryObject.addWhereCondition(false,
  279.                     "id_soggetto = ?",
  280.                     "id_soggetto_virtuale = ?",
  281.                     "(tipo_soggetto_virtuale = ? AND nome_soggetto_virtuale = ?)");    
  282.             queryString = sqlQueryObject.createSQLQuery();
  283.             stmt = con.prepareStatement(queryString);
  284.             stmt.setLong(1, idSoggetto);
  285.             stmt.setLong(2, idSoggetto);
  286.             stmt.setString(3, tipoSoggetto);
  287.             stmt.setString(4, nomeSoggetto);
  288.             risultato = stmt.executeQuery();
  289.             while (risultato.next()) {
  290.                 String nome = risultato.getString("nome_porta");
  291.                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  292.                 if(resultPorta.mapping) {
  293.                     mappingErogazionePA_list.add(resultPorta.label);
  294.                 }
  295.                 else {
  296.                     porte_applicative_list.add(resultPorta.label);
  297.                 }
  298.                 isInUso = true;
  299.             }
  300.             risultato.close();
  301.             stmt.close();



  302.             if(idSoggettoRegistro!=null){
  303.                 //controllo se referente
  304.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  305.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  306.                 sqlQueryObject.addSelectField("*");
  307.                 sqlQueryObject.addWhereCondition("id_referente = ?");
  308.                 queryString = sqlQueryObject.createSQLQuery();
  309.                 stmt = con.prepareStatement(queryString);
  310.                 stmt.setLong(1, idSoggetto);
  311.                 risultato = stmt.executeQuery();
  312.                 while (risultato.next()){
  313.                     String nomeAccordo = risultato.getString("nome");
  314.                     Integer versione = risultato.getInt("versione");
  315.                     if(normalizeObjectIds) {
  316.                         String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(idSoggettoRegistro.getTipo());
  317.                         IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromValues(nomeAccordo, idSoggettoRegistro, versione);
  318.                         accordi_list.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelAccordoServizioParteComune(protocollo, idAccordo));
  319.                     }
  320.                     else {
  321.                         StringBuilder bf = new StringBuilder();
  322.                         bf.append(idSoggettoRegistro.toString());
  323.                         bf.append(":");
  324.                         bf.append(nomeAccordo);
  325.                         if(versione!=null){
  326.                             bf.append(":");
  327.                             bf.append(versione);
  328.                         }
  329.                         accordi_list.add(bf.toString());
  330.                     }              
  331.                     isInUso=true;
  332.                 }
  333.                 risultato.close();
  334.                 stmt.close();

  335.             }

  336.             if(idSoggettoRegistro!=null){
  337.                 //controllo se referente di un accordo cooperazione
  338.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  339.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI_COOPERAZIONE);
  340.                 sqlQueryObject.addSelectField("*");
  341.                 sqlQueryObject.addWhereCondition("id_referente = ?");
  342.                 queryString = sqlQueryObject.createSQLQuery();
  343.                 stmt = con.prepareStatement(queryString);
  344.                 stmt.setLong(1, idSoggetto);
  345.                 risultato = stmt.executeQuery();
  346.                 while (risultato.next()){
  347.                     String nomeAccordo = risultato.getString("nome");
  348.                     Integer versione = risultato.getInt("versione");
  349.                     if(normalizeObjectIds) {
  350.                         String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(idSoggettoRegistro.getTipo());
  351.                         IDAccordoCooperazione idAccordo = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromValues(nomeAccordo, idSoggettoRegistro, versione);
  352.                         accordi_coop_list.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelAccordoCooperazione(protocollo, idAccordo));
  353.                     }
  354.                     else {
  355.                         StringBuilder bf = new StringBuilder();
  356.                         bf.append(idSoggettoRegistro.toString());
  357.                         bf.append(":");
  358.                         bf.append(nomeAccordo);
  359.                         if(versione!=null){
  360.                             bf.append(":");
  361.                             bf.append(versione);
  362.                         }
  363.                         accordi_coop_list.add(bf.toString());
  364.                     }
  365.                     isInUso=true;
  366.                 }
  367.                 risultato.close();
  368.                 stmt.close();

  369.             }

  370.             if(idSoggettoRegistro!=null){

  371.                 //controllo se partecipante
  372.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  373.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
  374.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI_COOPERAZIONE);
  375.                 sqlQueryObject.addSelectField("*");
  376.                 sqlQueryObject.setANDLogicOperator(true);
  377.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI+".id_accordo_cooperazione = "+CostantiDB.ACCORDI_COOPERAZIONE+".id");
  378.                 sqlQueryObject.addWhereCondition("id_soggetto = ?");
  379.                 queryString = sqlQueryObject.createSQLQuery();
  380.                 stmt = con.prepareStatement(queryString);
  381.                 stmt.setLong(1, idSoggetto);
  382.                 risultato = stmt.executeQuery();
  383.                 while (risultato.next()){
  384.                     String nomeAccordo = risultato.getString("nome");
  385.                     Integer versione = risultato.getInt("versione");
  386.                     if(normalizeObjectIds) {
  387.                         String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(idSoggettoRegistro.getTipo());
  388.                         IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromValues(nomeAccordo, idSoggettoRegistro, versione);
  389.                         partecipanti_list.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelAccordoServizioParteComune(protocollo, idAccordo));
  390.                     }
  391.                     else {
  392.                         StringBuilder bf = new StringBuilder();
  393.                         bf.append(idSoggettoRegistro.toString());
  394.                         bf.append(":");
  395.                         bf.append(nomeAccordo);
  396.                         if(versione!=null){
  397.                             bf.append(":");
  398.                             bf.append(versione);
  399.                         }
  400.                         partecipanti_list.add(bf.toString());
  401.                     }
  402.                     isInUso=true;
  403.                 }
  404.                 risultato.close();
  405.                 stmt.close();

  406.             }
  407.            
  408.             if(idSoggettoRegistro!=null && mappingFruizionePD_list.isEmpty() && mappingErogazionePA_list.isEmpty()){
  409.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  410.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  411.                 sqlQueryObject.addSelectField("*");
  412.                 sqlQueryObject.addWhereCondition("id_soggetto = ?");
  413.                 queryString = sqlQueryObject.createSQLQuery();
  414.                 stmt = con.prepareStatement(queryString);
  415.                 stmt.setLong(1, idSoggetto);
  416.                 risultato = stmt.executeQuery();
  417.                 while (risultato.next()) {
  418.                     String nome_servizio = risultato.getString("nome_servizio");
  419.                     String tipo_servizio = risultato.getString("tipo_servizio");
  420.                     Integer versione_servizio = risultato.getInt("versione_servizio");
  421.                     if(normalizeObjectIds) {
  422.                         String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(idSoggettoRegistro.getTipo());
  423.                         IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tipo_servizio, nome_servizio, idSoggettoRegistro, versione_servizio);
  424.                         servizi_list.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelAccordoServizioParteSpecifica(protocollo, idServizio));
  425.                     }
  426.                     else {
  427.                         servizi_list.add(idSoggettoRegistro.toString()+
  428.                                 "_"+tipo_servizio + "/" + nome_servizio+"/"+versione_servizio);
  429.                     }
  430.                     isInUso = true;
  431.                 }
  432.                 risultato.close();
  433.                 stmt.close();
  434.             }
  435.            
  436.             if(idSoggettoRegistro!=null && mappingFruizionePD_list.isEmpty() && mappingErogazionePA_list.isEmpty()){

  437.                 // controllo che non sia fruitore di un servizio
  438.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  439.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  440.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  441.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  442.                 sqlQueryObject.addSelectField("tipo_servizio");
  443.                 sqlQueryObject.addSelectField("nome_servizio");
  444.                 sqlQueryObject.addSelectField("versione_servizio");
  445.                 sqlQueryObject.addSelectField("tipo_soggetto");
  446.                 sqlQueryObject.addSelectField("nome_soggetto");
  447.                 sqlQueryObject.setANDLogicOperator(true);
  448.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id_servizio = "+CostantiDB.SERVIZI+".id");
  449.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  450.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id_soggetto = ?");
  451.                 queryString = sqlQueryObject.createSQLQuery();
  452.                 stmt = con.prepareStatement(queryString);
  453.                 stmt.setLong(1, idSoggetto);
  454.                 risultato = stmt.executeQuery();
  455.                 while (risultato.next()) {
  456.                     String tipo_soggetto = risultato.getString("tipo_soggetto");
  457.                     String nome_soggetto = risultato.getString("nome_soggetto");

  458.                     String tipoServizio = risultato.getString("tipo_servizio");
  459.                     String nomeServizio = risultato.getString("nome_servizio");
  460.                     Integer versioneServizio = risultato.getInt("versione_servizio");
  461.                    
  462.                     if(normalizeObjectIds) {
  463.                         String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(idSoggettoRegistro.getTipo());
  464.                         IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tipoServizio, nomeServizio, new IDSoggetto(tipo_soggetto, nome_soggetto), versioneServizio);
  465.                         servizi_fruitori_list.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelAccordoServizioParteSpecifica(protocollo, idServizio));
  466.                     }
  467.                     else {
  468.                         servizi_fruitori_list.add(tipo_soggetto+"/"+nome_soggetto+
  469.                                 "_"+
  470.                                 tipoServizio+"/"+nomeServizio+"/"+versioneServizio);
  471.                     }
  472.                     isInUso = true;
  473.                 }
  474.                 risultato.close();
  475.                 stmt.close();

  476.             }
  477.            
  478.            
  479.             // Controllo che il soggetto non sia associato ad utenti
  480.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  481.             sqlQueryObject.addFromTable(CostantiDB.USERS);
  482.             sqlQueryObject.addFromTable(CostantiDB.USERS_SOGGETTI);
  483.             sqlQueryObject.addSelectField("login");
  484.             sqlQueryObject.setANDLogicOperator(true);
  485.             sqlQueryObject.addWhereCondition(CostantiDB.USERS_SOGGETTI+".id_soggetto = ?");
  486.             sqlQueryObject.addWhereCondition(CostantiDB.USERS+".id = "+CostantiDB.USERS_SOGGETTI+".id_utente");
  487.             queryString = sqlQueryObject.createSQLQuery();
  488.             stmt = con.prepareStatement(queryString);
  489.             stmt.setLong(1, idSoggetto);
  490.             risultato = stmt.executeQuery();
  491.             while (risultato.next()) {
  492.                 utenti_list.add(risultato.getString("login"));
  493.                 isInUso = true;
  494.             }
  495.             risultato.close();
  496.             stmt.close();
  497.            
  498.            
  499.            
  500.            
  501.             // Controllo che il soggetto non sia associato a policy di controllo del traffico o allarmi
  502.            
  503.             int max = 2;
  504.             if(!CostantiDB.isAllarmiEnabled()) {
  505.                 max=1;
  506.             }
  507.             for (int i = 0; i < max; i++) {
  508.                
  509.                 String tabella = CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY;
  510.                 String identificativo_column = "active_policy_id";
  511.                 String alias_column = "policy_alias";
  512.                 List<String> list = ct_list;
  513.                 String oggetto = "Policy";
  514.                 if(i==1) {
  515.                     tabella = CostantiDB.ALLARMI;
  516.                     identificativo_column = "nome";
  517.                     alias_column = "alias";
  518.                     list = allarme_list;
  519.                     oggetto = "Allarme";
  520.                 }
  521.            
  522.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  523.                 sqlQueryObject.addFromTable(tabella);
  524.                 sqlQueryObject.addSelectField(identificativo_column);
  525.                 sqlQueryObject.addSelectField(alias_column);
  526.                 sqlQueryObject.addSelectField("filtro_ruolo");
  527.                 sqlQueryObject.addSelectField("filtro_porta");
  528.                 sqlQueryObject.setANDLogicOperator(false); // OR
  529.                 sqlQueryObject.addWhereCondition(true,
  530.                         tabella+".filtro_tipo_fruitore = ?",
  531.                         tabella+".filtro_nome_fruitore = ?");
  532.                 sqlQueryObject.addWhereCondition(true,
  533.                         tabella+".filtro_tipo_erogatore = ?",
  534.                         tabella+".filtro_nome_erogatore = ?");
  535.                 sqlQueryObject.addOrderBy("filtro_ruolo");
  536.                 sqlQueryObject.addOrderBy("filtro_porta");
  537.                 queryString = sqlQueryObject.createSQLQuery();
  538.                 stmt = con.prepareStatement(queryString);
  539.                 int index = 1;
  540.                 stmt.setString(index++, tipoSoggetto);
  541.                 stmt.setString(index++, nomeSoggetto);
  542.                 stmt.setString(index++, tipoSoggetto);
  543.                 stmt.setString(index++, nomeSoggetto);
  544.                 risultato = stmt.executeQuery();
  545.                 while (risultato.next()) {
  546.                    
  547.                     String alias = risultato.getString(alias_column);
  548.                     if(alias== null || "".equals(alias)) {
  549.                         alias = risultato.getString(identificativo_column);
  550.                     }
  551.                    
  552.                     String nomePorta = risultato.getString("filtro_porta");
  553.                     String filtro_ruolo = risultato.getString("filtro_ruolo");
  554.                     if(nomePorta!=null) {
  555.                         String tipo = null;
  556.                         String label = null;
  557.                         if("delegata".equals(filtro_ruolo)) {
  558.                             try {
  559.                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nomePorta, tipoDB, con, normalizeObjectIds);
  560.                                 if(resultPorta.mapping) {
  561.                                     label = "Fruizione di Servizio "+ resultPorta.label;
  562.                                 }
  563.                             }catch(Exception e) {
  564.                                 tipo = "Outbound";
  565.                             }
  566.                         }
  567.                         else if("applicativa".equals(filtro_ruolo)) {
  568.                             try {
  569.                                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nomePorta, tipoDB, con, normalizeObjectIds);
  570.                                 if(resultPorta.mapping) {
  571.                                     label = "Erogazione di Servizio "+ resultPorta.label;
  572.                                 }
  573.                             }catch(Exception e) {
  574.                                 tipo = "Inbound";
  575.                             }
  576.                         }
  577.                         else {
  578.                             tipo = filtro_ruolo;
  579.                         }
  580.                         if(label==null) {
  581.                             list.add(oggetto+" '"+alias+"' attiva nella porta '"+tipo+"' '"+nomePorta+"' ");
  582.                         }
  583.                         else {
  584.                             list.add(oggetto+" '"+alias+"' attiva nella "+label);
  585.                         }
  586.                     }
  587.                     else {
  588.                         list.add(oggetto+" '"+alias+"'");
  589.                     }
  590.    
  591.                     isInUso = true;
  592.                 }
  593.                 risultato.close();
  594.                 stmt.close();
  595.             }

  596.            
  597.             // controllo se in uso in porte applicative nell'autorizzazione
  598.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  599.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  600.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_SOGGETTI);
  601.             sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE+".nome_porta");
  602.             sqlQueryObject.setANDLogicOperator(true);
  603.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_SOGGETTI+".id_porta = "+CostantiDB.PORTE_APPLICATIVE+".id");
  604.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_SOGGETTI+".tipo_soggetto=?");
  605.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_SOGGETTI+".nome_soggetto=?");
  606.             queryString = sqlQueryObject.createSQLQuery();
  607.             stmt = con.prepareStatement(queryString);
  608.             stmt.setString(1, tipoSoggetto);
  609.             stmt.setString(2, nomeSoggetto);
  610.             risultato = stmt.executeQuery();
  611.             while (risultato.next()) {
  612.                 String nome = risultato.getString("nome_porta");
  613.                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  614.                 if(resultPorta.mapping) {
  615.                     autorizzazionePA_mapping_list.add(resultPorta.label);
  616.                 }
  617.                 else {
  618.                     autorizzazionePA_list.add(resultPorta.label);
  619.                 }
  620.                 isInUso = true;
  621.             }
  622.             risultato.close();
  623.             stmt.close();
  624.            
  625.            
  626.             if(verificaRuoli) {
  627.                 // Raccolgo prima i ruoli
  628.                 List<String> listRuoliSoggetti = new ArrayList<>();
  629.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  630.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  631.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  632.                 sqlQueryObject.addFromTable(CostantiDB.RUOLI);
  633.                 sqlQueryObject.addSelectAliasField(CostantiDB.RUOLI,"nome","nomeRuolo");
  634.                 sqlQueryObject.setANDLogicOperator(true);
  635.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  636.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI_RUOLI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  637.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI_RUOLI+".id_ruolo="+CostantiDB.RUOLI+".id");
  638.                 queryString = sqlQueryObject.createSQLQuery();
  639.                 stmt = con.prepareStatement(queryString);
  640.                 stmt.setLong(1, idSoggetto);
  641.                 risultato = stmt.executeQuery();
  642.                 while (risultato.next()){
  643.                     String ruolo = risultato.getString("nomeRuolo");
  644.                     listRuoliSoggetti.add(ruolo);
  645.                 }
  646.                 risultato.close();
  647.                 stmt.close();
  648.                
  649.                 if(!listRuoliSoggetti.isEmpty()) {
  650.                
  651.                     boolean isInUsoRuoli = _checkSoggetto_ruoloInUsoInPorteApplicative(con, tipoDB, normalizeObjectIds,
  652.                             CostantiDB.PORTE_APPLICATIVE_RUOLI,
  653.                             listRuoliSoggetti,
  654.                             ruoliPA_mapping_list, ruoliPA_list,
  655.                             ruoliPA_mapping_list, ruoliPA_list);
  656.                     if(isInUsoRuoli) {
  657.                         isInUso = true;
  658.                     }

  659.                     boolean isInUsoRuoliToken = _checkSoggetto_ruoloInUsoInPorteApplicative(con, tipoDB, normalizeObjectIds,
  660.                             CostantiDB.PORTE_APPLICATIVE_TOKEN_RUOLI,
  661.                             listRuoliSoggetti,
  662.                             ruoliTokenPA_mapping_list, ruoliTokenPA_list,
  663.                             ruoliTokenPA_mapping_modi_list, ruoliTokenPA_modi_list);
  664.                     if(isInUsoRuoliToken) {
  665.                         isInUso = true;
  666.                     }
  667.                    
  668.                 }
  669.             }

  670.            
  671.             // controllo se in uso in porte applicative nella trasformazione
  672.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  673.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  674.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI);
  675.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI_SOGGETTI);
  676.             sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE+".nome_porta");
  677.             sqlQueryObject.setANDLogicOperator(true);
  678.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".id_porta = "+CostantiDB.PORTE_APPLICATIVE+".id");
  679.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI+".id = "+CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI_SOGGETTI+".id_trasformazione");
  680.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI_SOGGETTI+".tipo_soggetto=?");
  681.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI_SOGGETTI+".nome_soggetto=?");  
  682.             queryString = sqlQueryObject.createSQLQuery();
  683.             stmt = con.prepareStatement(queryString);
  684.             stmt.setString(1, tipoSoggetto);
  685.             stmt.setString(2, nomeSoggetto);
  686.             risultato = stmt.executeQuery();
  687.             while (risultato.next()) {
  688.                 String nome = risultato.getString("nome_porta");
  689.                 ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  690.                 if(resultPorta.mapping) {
  691.                     trasformazionePA_mapping_list.add(resultPorta.label);
  692.                 }
  693.                 else {
  694.                     trasformazionePA_list.add(resultPorta.label);
  695.                 }
  696.                 isInUso = true;
  697.             }
  698.             risultato.close();
  699.             stmt.close();
  700.            
  701.             // controllo se in uso nelle regole di cnonfigurazione del proxy pass
  702.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  703.             sqlQueryObject.addFromTable(CostantiDB.CONFIG_URL_REGOLE);
  704.             sqlQueryObject.addSelectField(CostantiDB.CONFIG_URL_REGOLE+".nome");
  705.             sqlQueryObject.setANDLogicOperator(true);
  706.             sqlQueryObject.addWhereCondition(CostantiDB.CONFIG_URL_REGOLE+".tipo_soggetto=?");
  707.             sqlQueryObject.addWhereCondition(CostantiDB.CONFIG_URL_REGOLE+".nome_soggetto=?");  
  708.             queryString = sqlQueryObject.createSQLQuery();
  709.             stmt = con.prepareStatement(queryString);
  710.             stmt.setString(1, tipoSoggetto);
  711.             stmt.setString(2, nomeSoggetto);
  712.             risultato = stmt.executeQuery();
  713.             while (risultato.next()) {
  714.                 String nome = risultato.getString("nome");
  715.                 configurazioniProxyPass_list.add(nome);
  716.                 isInUso = true;
  717.             }
  718.             risultato.close();
  719.             stmt.close();
  720.            
  721.            
  722.             return isInUso;

  723.         } catch (Exception se) {
  724.             throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  725.         } finally {
  726.             // Chiudo statement and resultset
  727.             JDBCUtilities.closeResources(risultato, stmt);
  728.         }
  729.     }

  730.     private static boolean _checkSoggetto_ruoloInUsoInPorteApplicative(Connection con, String tipoDB, boolean normalizeObjectIds,
  731.             String nomeTabella,
  732.             List<String> listRuoliSoggetti,
  733.             List<String> ruoliPA_mapping_list, List<String> ruoliPA_list,
  734.             List<String> ruoliPA_mapping_modi_list, List<String> ruoliPA_modi_list) throws Exception {
  735.         boolean isInUso = false;
  736.         PreparedStatement stmt = null;
  737.         ResultSet risultato = null;
  738.         try {

  739.             List<String> distinctPorteApplicative = new ArrayList<>();
  740.             List<String> verificaPorteApplicativeAll = new ArrayList<>();
  741.            
  742.             for (String ruolo : listRuoliSoggetti) {
  743.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  744.                 sqlQueryObject.addFromTable(nomeTabella);
  745.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  746.                 sqlQueryObject.addSelectField("nome_porta");
  747.                 sqlQueryObject.addSelectField("ruoli_match");
  748.                 sqlQueryObject.setANDLogicOperator(true);
  749.                 sqlQueryObject.addWhereCondition(nomeTabella+".id_porta="+CostantiDB.PORTE_APPLICATIVE+".id");
  750.                 sqlQueryObject.addWhereCondition(nomeTabella+".ruolo=?");
  751.                 String queryString = sqlQueryObject.createSQLQuery();
  752.                 stmt = con.prepareStatement(queryString);
  753.                 stmt.setString(1, ruolo);
  754.                 risultato = stmt.executeQuery();
  755.                 while (risultato.next()){
  756.                     String nome = risultato.getString("nome_porta");
  757.                     String ruolo_match = risultato.getString("ruoli_match");
  758.                     if(RuoloTipoMatch.ANY.getValue().equals(ruolo_match)) {
  759.                         if(distinctPorteApplicative.contains(nome)) {
  760.                             continue;
  761.                         }
  762.                         else {
  763.                             distinctPorteApplicative.add(nome);
  764.                         }
  765.                         ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  766.                         if(resultPorta.mapping) {
  767.                             if(resultPorta.erogazioneModi)
  768.                                 ruoliPA_mapping_modi_list.add(resultPorta.label);
  769.                             else
  770.                                 ruoliPA_mapping_list.add(resultPorta.label);
  771.                         }
  772.                         else {
  773.                             if(resultPorta.erogazioneModi)
  774.                                 ruoliPA_modi_list.add(resultPorta.label);
  775.                             else
  776.                                 ruoliPA_list.add(resultPorta.label);
  777.                         }
  778.                         isInUso = true;
  779.                     }
  780.                     else {
  781.                         // devo verificare tutti i ruoli richiesti
  782.                         if(verificaPorteApplicativeAll.contains(nome)) {
  783.                             continue;
  784.                         }
  785.                         else {
  786.                             verificaPorteApplicativeAll.add(nome);
  787.                         }
  788.                     }
  789.                 }
  790.                 risultato.close();
  791.                 stmt.close();  
  792.             }
  793.            
  794.             // autorizzazione 'all'
  795.             if(!verificaPorteApplicativeAll.isEmpty()) {
  796.                 for (String nome : verificaPorteApplicativeAll) {
  797.                    
  798.                     // Raccolgo prima i ruoli della porta
  799.                     List<String> listRuoliPorta = new ArrayList<>();
  800.                     ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  801.                     sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  802.                     sqlQueryObject.addFromTable(nomeTabella);
  803.                     sqlQueryObject.addSelectField("ruolo");
  804.                     sqlQueryObject.setANDLogicOperator(true);
  805.                     sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".nome_porta=?");
  806.                     sqlQueryObject.addWhereCondition(nomeTabella+".id_porta="+CostantiDB.PORTE_APPLICATIVE+".id");
  807.                     String queryString = sqlQueryObject.createSQLQuery();
  808.                     stmt = con.prepareStatement(queryString);
  809.                     stmt.setString(1, nome);
  810.                     risultato = stmt.executeQuery();
  811.                     while (risultato.next()){
  812.                         String ruolo = risultato.getString("ruolo");
  813.                         listRuoliPorta.add(ruolo);
  814.                     }
  815.                     risultato.close();
  816.                     stmt.close();
  817.                    
  818.                     if(!listRuoliPorta.isEmpty()) {
  819.                         boolean match = true;
  820.                         for (String ruoloPorta : listRuoliPorta) {
  821.                             if(!listRuoliSoggetti.contains(ruoloPorta)) {
  822.                                 match = false;
  823.                                 break;
  824.                             }
  825.                         }
  826.                         if(match) {
  827.                             if(distinctPorteApplicative.contains(nome)) {
  828.                                 continue;
  829.                             }
  830.                             else {
  831.                                 distinctPorteApplicative.add(nome);
  832.                             }
  833.                             ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
  834.                             if(resultPorta.mapping) {
  835.                                 if(resultPorta.erogazioneModi)
  836.                                     ruoliPA_mapping_modi_list.add(resultPorta.label);
  837.                                 else
  838.                                     ruoliPA_mapping_list.add(resultPorta.label);
  839.                             }
  840.                             else {
  841.                                 if(resultPorta.erogazioneModi)
  842.                                     ruoliPA_modi_list.add(resultPorta.label);
  843.                                 else
  844.                                     ruoliPA_list.add(resultPorta.label);
  845.                             }
  846.                             isInUso = true;
  847.                         }
  848.                     }
  849.                    
  850.                 }
  851.             }

  852.         } finally {
  853.             // Chiudo statement and resultset
  854.             try {
  855.                 if (risultato != null) {
  856.                     risultato.close();
  857.                 }
  858.             } catch (Exception e) {
  859.                 // ignore
  860.             }
  861.             try {
  862.                 if (stmt != null) {
  863.                     stmt.close();
  864.                 }
  865.             } catch (Exception e) {
  866.                 // ignore
  867.             }
  868.         }
  869.         return isInUso;
  870.     }
  871.    
  872.     protected static String toString(IDSoggetto idSoggetto, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator, boolean normalizeObjectIds){
  873.         Set<ErrorsHandlerCostant> keys = whereIsInUso.keySet();
  874.         String labelSoggetto = idSoggetto.toString();
  875.         try {
  876.             if(normalizeObjectIds) {
  877.                 String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(idSoggetto.getTipo());
  878.                 labelSoggetto = DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelSoggetto(protocollo, idSoggetto);
  879.             }
  880.         }catch(Exception e) {
  881.             // ignore
  882.         }
  883.         String msg = "Soggetto '"+labelSoggetto+ "' non eliminabile perch&egrave; :"+separator;
  884.         if(prefix==false){
  885.             msg = "";
  886.         }
  887.         String separatorCategorie = "";
  888.         if(whereIsInUso.size()>1) {
  889.             separatorCategorie = separator;
  890.         }
  891.         for (ErrorsHandlerCostant key : keys) {
  892.             List<String> messages = whereIsInUso.get(key);

  893.             if ( messages!=null && messages.size() > 0) {
  894.                 msg += separatorCategorie;
  895.             }
  896.            
  897.             switch (key) {
  898.             case IS_FRUITORE:
  899.                 if ( messages!=null && messages.size() > 0) {
  900.                     msg += "fruitore dei Servizi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  901.                 }
  902.                 break;
  903.             case IN_USO_IN_SERVIZI_APPLICATIVI:
  904.                 if ( messages!=null && messages.size() > 0 ) {
  905.                     msg += "utilizzato negli Applicativi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  906.                 }
  907.                 break;
  908.             case IN_USO_IN_SERVIZI:
  909.                 if ( messages!=null && messages.size() > 0) {
  910.                     msg += "erogatore dei Servizi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  911.                 }
  912.                 break;
  913.             case IN_USO_IN_PORTE_APPLICATIVE:
  914.                 if ( messages!=null && messages.size() > 0) {
  915.                     msg += "utilizzato nelle Porte Inbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  916.                 }
  917.                 break;
  918.             case IN_USO_IN_PORTE_DELEGATE:
  919.                 if ( messages!=null && messages.size() > 0) {
  920.                     msg += "utilizzato nelle Porte Outbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  921.                 }
  922.                 break;
  923.             case IN_USO_IN_MAPPING_EROGAZIONE_PA:
  924.                 if ( messages!=null && messages.size() > 0) {
  925.                     msg += "utilizzato nelle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  926.                 }
  927.                 break;
  928.             case IN_USO_IN_MAPPING_FRUIZIONE_PD:
  929.                 if ( messages!=null && messages.size() > 0) {
  930.                     msg += "utilizzato nelle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  931.                 }
  932.                 break;
  933.             case IS_REFERENTE:
  934.                 if ( messages!=null && messages.size() > 0 ) {
  935.                     msg += "referente di API: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  936.                 }
  937.                 break;
  938.             case IS_REFERENTE_COOPERAZIONE:
  939.                 if ( messages!=null && messages.size() > 0 ) {
  940.                     msg += "referente di Accordi di Cooperazione: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  941.                 }
  942.                 break;
  943.             case IS_PARTECIPANTE_COOPERAZIONE:
  944.                 if ( messages!=null && messages.size() > 0 ) {
  945.                     msg += "partecipante in Accordi di Cooperazione: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  946.                 }
  947.                 break;
  948.             case UTENTE:
  949.                 if ( messages!=null && messages.size() > 0 ) {
  950.                     msg += "associato ad Utenti: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  951.                 }
  952.                 break;
  953.             case CONTROLLO_TRAFFICO:
  954.                 if ( messages!=null && messages.size() > 0 ) {
  955.                     msg += "utilizzato in policy di Rate Limiting: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  956.                 }
  957.                 break;
  958.             case ALLARMI:
  959.                 if ( messages!=null && messages.size() > 0 ) {
  960.                     msg += "utilizzato in Allarmi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  961.                 }
  962.                 break;
  963.             case AUTORIZZAZIONE_MAPPING:
  964.                 if ( messages!=null && messages.size() > 0) {
  965.                     msg += "utilizzato nel Controllo degli Accessi (Soggetti Autenticati) delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  966.                 }
  967.                 break;
  968.             case AUTORIZZAZIONE:
  969.                 if ( messages!=null && messages.size() > 0) {
  970.                     msg += "utilizzato nelle Porte Inbound (Controllo degli Accessi - Soggetti Autenticati): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  971.                 }
  972.                 break;
  973.             case RUOLI_MAPPING:
  974.                 if ( messages!=null && messages.size() > 0) {
  975.                     msg += "compatibile con l'Autorizzazione Trasporto per Ruoli indicata nel Controllo degli Accessi delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  976.                 }
  977.                 break;
  978.             case RUOLI:
  979.                 if ( messages!=null && messages.size() > 0) {
  980.                     msg += "compatibile con l'Autorizzazione Trasporto per Ruoli indicata nel Controllo degli Accessi delle Porte Inbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  981.                 }
  982.                 break;
  983.             case RUOLI_TOKEN_MAPPING_PA:
  984.                 if ( messages!=null && messages.size() > 0) {
  985.                     msg += "compatibile con l'Autorizzazione Token per Ruoli indicata nel Controllo degli Accessi delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  986.                 }
  987.                 break;
  988.             case RUOLI_TOKEN_PA:
  989.                 if ( messages!=null && messages.size() > 0) {
  990.                     msg += "compatibile con l'Autorizzazione Token per Ruoli indicata nel Controllo degli Accessi delle Porte Inbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  991.                 }
  992.                 break;
  993.             case RUOLI_TOKEN_MAPPING_PA_MODI:
  994.                 if ( messages!=null && messages.size() > 0) {
  995.                     msg += "compatibile con l'Autorizzazione Messaggio per Ruoli indicata nel Controllo degli Accessi delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  996.                 }
  997.                 break;
  998.             case RUOLI_TOKEN_PA_MODI:
  999.                 if ( messages!=null && messages.size() > 0) {
  1000.                     msg += "compatibile con l'Autorizzazione Messaggio per Ruoli indicata nel Controllo degli Accessi delle Porte Inbound: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  1001.                 }
  1002.                 break;
  1003.             case TRASFORMAZIONE_MAPPING_PA:
  1004.                 if ( messages!=null && messages.size() > 0) {
  1005.                     msg += "utilizzato nel criterio di applicabilità della Trasformazione (Soggetti) per le Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  1006.                 }
  1007.                 break;
  1008.             case TRASFORMAZIONE_PA:
  1009.                 if ( messages!=null && messages.size() > 0) {
  1010.                     msg += "utilizzato nelle Porte Inbound (Criterio di applicabilità della Trasformazione - Soggetti): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  1011.                 }
  1012.                 break;
  1013.             case CONFIGURAZIONE_REGOLE_PROXY_PASS:
  1014.                 if ( messages!=null && messages.size() > 0) {
  1015.                     msg += "utilizzato nelle Regole di Proxy Pass: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  1016.                 }
  1017.                 break;
  1018.             default:
  1019.                 msg += "utilizzato in oggetto non codificato ("+key+")"+separator;
  1020.                 break;
  1021.             }

  1022.         }// chiudo for

  1023.         return msg;
  1024.     }
  1025.    
  1026. }