DBOggettiInUsoUtils_accordiParteSpecifica.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.sql.SQLException;
  25. import java.util.ArrayList;
  26. import java.util.List;
  27. import java.util.Map;
  28. import java.util.Set;

  29. import org.openspcoop2.core.commons.DBUtils;
  30. import org.openspcoop2.core.commons.ErrorsHandlerCostant;
  31. import org.openspcoop2.core.constants.CostantiDB;
  32. import org.openspcoop2.core.id.IDAccordo;
  33. import org.openspcoop2.core.id.IDPortaApplicativa;
  34. import org.openspcoop2.core.id.IDPortaDelegata;
  35. import org.openspcoop2.core.id.IDServizio;
  36. import org.openspcoop2.core.id.IDSoggetto;
  37. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  38. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  39. import org.openspcoop2.utils.UtilsException;
  40. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  41. import org.openspcoop2.utils.sql.ISQLQueryObject;
  42. import org.openspcoop2.utils.sql.SQLObjectFactory;

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

  52.     private static boolean isAccordoServizioParteSpecificaInUso(Connection con, String tipoDB, long idAccordoServizioParteSpecifica,
  53.             Map<ErrorsHandlerCostant,List<String>> whereIsInUso, String nomeMetodo,
  54.             List<IDPortaDelegata> nomePDGenerateAutomaticamente, List<IDPortaApplicativa> nomePAGenerateAutomaticamente, boolean normalizeObjectIds) throws UtilsException {
  55.        
  56.         PreparedStatement stmt = null;
  57.         ResultSet risultato = null;
  58.         PreparedStatement stmt2 = null;
  59.         ResultSet risultato2 = null;
  60.         String queryString;
  61.         try {
  62.             boolean isInUso = false;


  63.             List<String> porteApplicative_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE);
  64.             List<String> porteDelegate_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE);
  65.             List<String> fruitori_list = whereIsInUso.get(ErrorsHandlerCostant.POSSIEDE_FRUITORI);
  66.             List<String> servizioComponente_list = whereIsInUso.get(ErrorsHandlerCostant.IS_SERVIZIO_COMPONENTE_IN_ACCORDI);
  67.             List<String> mappingErogazionePA_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA);
  68.             List<String> mappingFruizionePD_list = whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD);
  69.             List<String> utenti_list = whereIsInUso.get(ErrorsHandlerCostant.UTENTE);
  70.             List<String> ct_list = whereIsInUso.get(ErrorsHandlerCostant.CONTROLLO_TRAFFICO);
  71.             List<String> allarme_list = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI);

  72.             if (porteApplicative_list == null) {
  73.                 porteApplicative_list = new ArrayList<>();
  74.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE, porteApplicative_list);
  75.             }
  76.             if (porteDelegate_list == null) {
  77.                 porteDelegate_list = new ArrayList<>();
  78.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_DELEGATE, porteDelegate_list);
  79.             }
  80.             if (fruitori_list == null) {
  81.                 fruitori_list = new ArrayList<>();
  82.                 whereIsInUso.put(ErrorsHandlerCostant.POSSIEDE_FRUITORI, fruitori_list);
  83.             }
  84.             if (servizioComponente_list == null) {
  85.                 servizioComponente_list = new ArrayList<>();
  86.                 whereIsInUso.put(ErrorsHandlerCostant.IS_SERVIZIO_COMPONENTE_IN_ACCORDI, servizioComponente_list);
  87.             }
  88.             if (mappingErogazionePA_list == null) {
  89.                 mappingErogazionePA_list = new ArrayList<>();
  90.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_EROGAZIONE_PA, mappingErogazionePA_list);
  91.             }
  92.             if (mappingFruizionePD_list == null) {
  93.                 mappingFruizionePD_list = new ArrayList<>();
  94.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_MAPPING_FRUIZIONE_PD, mappingFruizionePD_list);
  95.             }
  96.             if (utenti_list == null) {
  97.                 utenti_list = new ArrayList<>();
  98.                 whereIsInUso.put(ErrorsHandlerCostant.UTENTE, utenti_list);
  99.             }
  100.             if (ct_list == null) {
  101.                 ct_list = new ArrayList<>();
  102.                 whereIsInUso.put(ErrorsHandlerCostant.CONTROLLO_TRAFFICO, ct_list);
  103.             }
  104.             if (allarme_list == null) {
  105.                 allarme_list = new ArrayList<>();
  106.                 whereIsInUso.put(ErrorsHandlerCostant.ALLARMI, allarme_list);
  107.             }

  108.            
  109.            
  110.             // Raccolgo Dati Servizio.
  111.             String tipoServizio = null;
  112.             String nomeServizio = null;
  113.             int versioneServizio;
  114.             String tipoSoggetto = null;
  115.             String nomeSoggetto = null;
  116.             long idSoggetto;
  117.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  118.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  119.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  120.             sqlQueryObject.addSelectField("*");
  121.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  122.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id=?");
  123.             sqlQueryObject.setANDLogicOperator(true);
  124.             queryString = sqlQueryObject.createSQLQuery();
  125.             stmt = con.prepareStatement(queryString);
  126.             int index = 1;
  127.             stmt.setLong(index++, idAccordoServizioParteSpecifica);
  128.             risultato = stmt.executeQuery();
  129.             if (risultato.next()) {
  130.                 tipoServizio = risultato.getString("tipo_servizio");
  131.                 nomeServizio = risultato.getString("nome_servizio");
  132.                 versioneServizio = risultato.getInt("versione_servizio");
  133.                 tipoSoggetto = risultato.getString("tipo_soggetto");
  134.                 nomeSoggetto = risultato.getString("nome_soggetto");
  135.                 versioneServizio = risultato.getInt("versione_servizio");
  136.             }
  137.             else{
  138.                 throw new UtilsException("Accordo con id ["+idAccordoServizioParteSpecifica+"] non trovato");
  139.             }
  140.             risultato.close();
  141.             stmt.close();
  142.            
  143.             idSoggetto = DBUtils.getIdSoggetto(nomeSoggetto, tipoSoggetto, con, tipoDB);
  144.            
  145.            
  146.            
  147.            
  148.            
  149.             // porte applicative
  150.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  151.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  152.             sqlQueryObject.addSelectField("*");
  153.             sqlQueryObject.addWhereCondition(false, "id_servizio = ?", "tipo_servizio = ? AND servizio = ? AND versione_servizio = ?");
  154.             sqlQueryObject.addWhereCondition(false, "id_soggetto = ?", "id_soggetto_virtuale = ?", "tipo_soggetto_virtuale = ? AND nome_soggetto_virtuale = ?");
  155.             sqlQueryObject.setANDLogicOperator(true);
  156.             queryString = sqlQueryObject.createSQLQuery();
  157.             stmt = con.prepareStatement(queryString);
  158.             index = 1;
  159.             stmt.setLong(index++, idAccordoServizioParteSpecifica);
  160.             stmt.setString(index++, tipoServizio);
  161.             stmt.setString(index++, nomeServizio);
  162.             stmt.setInt(index++, versioneServizio);
  163.             stmt.setLong(index++, idSoggetto);
  164.             stmt.setLong(index++, idSoggetto);
  165.             stmt.setString(index++, tipoSoggetto);
  166.             stmt.setString(index++, nomeSoggetto);
  167.             risultato = stmt.executeQuery();
  168.             while (risultato.next()) {
  169.                
  170.                 String nomePorta = risultato.getString("nome_porta");
  171.                 IDPortaApplicativa idPA = new IDPortaApplicativa();
  172.                 idPA.setNome(nomePorta);
  173.                 if(nomePAGenerateAutomaticamente!=null && !nomePAGenerateAutomaticamente.contains(idPA)) {
  174.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nomePorta, tipoDB, con, normalizeObjectIds);
  175.                     if(resultPorta.mapping) {
  176.                         mappingErogazionePA_list.add(resultPorta.label); // non dovrebbe mai entrare in questa caso essendo filtrato da nomePAGenerateAutomaticamente
  177.                     }
  178.                     else {
  179.                         porteApplicative_list.add(resultPorta.label);
  180.                     }
  181.                     isInUso=true;
  182.                 }
  183.             }
  184.             risultato.close();
  185.             stmt.close();
  186.            
  187.            
  188.            
  189.            
  190.             // porte delegate
  191.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  192.             sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  193.             sqlQueryObject.addSelectField("*");
  194.             sqlQueryObject.addWhereCondition(false, "id_servizio = ?", "tipo_servizio = ? AND nome_servizio = ? AND versione_servizio = ?");
  195.             sqlQueryObject.addWhereCondition(false, "id_soggetto_erogatore = ?", "tipo_soggetto_erogatore = ? AND nome_soggetto_erogatore = ?");
  196.             sqlQueryObject.setANDLogicOperator(true);
  197.             queryString = sqlQueryObject.createSQLQuery();
  198.             stmt = con.prepareStatement(queryString);
  199.             index = 1;
  200.             stmt.setLong(index++, idAccordoServizioParteSpecifica);
  201.             stmt.setString(index++, tipoServizio);
  202.             stmt.setString(index++, nomeServizio);
  203.             stmt.setInt(index++, versioneServizio);
  204.             stmt.setLong(index++, idSoggetto);
  205.             stmt.setString(index++, tipoSoggetto);
  206.             stmt.setString(index++, nomeSoggetto);
  207.             risultato = stmt.executeQuery();
  208.             while (risultato.next()) {          
  209.                 String nomePorta = risultato.getString("nome_porta");
  210.                 IDPortaDelegata idPD = new IDPortaDelegata();
  211.                 idPD.setNome(nomePorta);
  212.                 if(nomePDGenerateAutomaticamente!=null && !nomePDGenerateAutomaticamente.contains(idPD)) {
  213.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nomePorta, tipoDB, con, normalizeObjectIds);
  214.                     if(resultPorta.mapping) {
  215.                         mappingFruizionePD_list.add(resultPorta.label);
  216.                     }
  217.                     else {
  218.                         porteDelegate_list.add(resultPorta.label);
  219.                     }
  220.                     isInUso=true;
  221.                 }
  222.             }
  223.             risultato.close();
  224.             stmt.close();
  225.            
  226.            
  227.            
  228.            
  229.            
  230.             // mapping erogazione pa
  231.            
  232.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  233.             sqlQueryObject.addFromTable(CostantiDB.MAPPING_EROGAZIONE_PA);
  234.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  235.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  236.             sqlQueryObject.addSelectField("tipo_soggetto");
  237.             sqlQueryObject.addSelectField("nome_soggetto");
  238.             sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE+".nome_porta");
  239.             sqlQueryObject.setANDLogicOperator(true);
  240.             sqlQueryObject.setSelectDistinct(true);
  241.             sqlQueryObject.addWhereCondition(CostantiDB.MAPPING_EROGAZIONE_PA+".id_erogazione = ?");
  242.             sqlQueryObject.addWhereCondition(CostantiDB.MAPPING_EROGAZIONE_PA+".id_porta = "+CostantiDB.PORTE_APPLICATIVE+".id");
  243.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  244.             queryString = sqlQueryObject.createSQLQuery();
  245.             stmt = con.prepareStatement(queryString);
  246.             stmt.setLong(1, idAccordoServizioParteSpecifica);
  247.             risultato = stmt.executeQuery();
  248.             while (risultato.next()) {
  249.                 //String tipo_soggetto = risultato.getString("tipo_soggetto");
  250.                 //String nome_soggetto = risultato.getString("nome_soggetto");
  251.                 String nomePorta = risultato.getString("nome_porta");
  252.                 IDPortaApplicativa idPA = new IDPortaApplicativa();
  253.                 idPA.setNome(nomePorta);
  254.                 if(nomePAGenerateAutomaticamente!=null &&
  255.                         !nomePAGenerateAutomaticamente.contains(idPA)){
  256.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nomePorta, tipoDB, con, normalizeObjectIds);
  257.                     if(resultPorta.mapping) {
  258.                         String l = resultPorta.label;
  259.                         if(mappingErogazionePA_list.contains(l)==false) {
  260.                             mappingErogazionePA_list.add(l);
  261.                         }
  262.                     }
  263.                     else {
  264.                         // ?? e' gia' un mapping
  265.                         String l = resultPorta.label;
  266.                         if(porteApplicative_list.contains(l)==false) {
  267.                             porteApplicative_list.add(l);
  268.                         }
  269.                     }
  270.                     isInUso=true;
  271.                 }
  272.             }
  273.             risultato.close();
  274.             stmt.close();
  275.            
  276.            
  277.            
  278.            
  279.            
  280.            
  281.            
  282.            
  283.            
  284.            
  285.             // mapping fruizioni pd
  286.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  287.             sqlQueryObject.addFromTable(CostantiDB.MAPPING_FRUIZIONE_PD);
  288.             sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
  289.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  290.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  291.             sqlQueryObject.setSelectDistinct(true);
  292.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  293.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  294.             sqlQueryObject.addSelectField(CostantiDB.PORTE_DELEGATE+".nome_porta");
  295.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".id = " + CostantiDB.SERVIZI_FRUITORI + ".id_soggetto");
  296.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  297.             sqlQueryObject.addWhereCondition(CostantiDB.MAPPING_FRUIZIONE_PD+".id_fruizione = "+CostantiDB.SERVIZI_FRUITORI + ".id");
  298.             sqlQueryObject.addWhereCondition(CostantiDB.MAPPING_FRUIZIONE_PD+".id_porta = "+CostantiDB.PORTE_DELEGATE + ".id");
  299.             sqlQueryObject.setANDLogicOperator(true);
  300.             queryString = sqlQueryObject.createSQLQuery();
  301.             stmt = con.prepareStatement(queryString);
  302.             stmt.setLong(1, idAccordoServizioParteSpecifica);
  303.             risultato = stmt.executeQuery();
  304.             while (risultato.next()) {
  305.                 //String tipo_soggetto = risultato.getString("tipo_soggetto");
  306.                 //String nome_soggetto = risultato.getString("nome_soggetto");
  307.                 String nomePorta = risultato.getString("nome_porta");
  308.                 IDPortaDelegata idPD = new IDPortaDelegata();
  309.                 idPD.setNome(nomePorta);
  310.                 if(nomePDGenerateAutomaticamente!=null && !nomePDGenerateAutomaticamente.contains(idPD)) {
  311.                     ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nomePorta, tipoDB, con, normalizeObjectIds);
  312.                     if(resultPorta.mapping) {
  313.                         String l = resultPorta.label;
  314.                         if(mappingFruizionePD_list.contains(l)==false) {
  315.                             mappingFruizionePD_list.add(l);
  316.                         }
  317.                     }
  318.                     else {
  319.                         // ?? e' gia' un mapping
  320.                         String l = resultPorta.label;
  321.                         if(porteDelegate_list.contains(l)==false) {
  322.                             porteDelegate_list.add(l);
  323.                         }
  324.                     }
  325.                     isInUso=true;
  326.                 }
  327.             }
  328.             risultato.close();
  329.             stmt.close();
  330.            
  331.            
  332.            
  333.            
  334.            
  335.             // fruitori
  336.             if(mappingFruizionePD_list.isEmpty()) {
  337.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  338.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  339.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  340.                 sqlQueryObject.setSelectDistinct(true);
  341.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  342.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  343.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".id = " + CostantiDB.SERVIZI_FRUITORI + ".id_soggetto");
  344.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  345.                 sqlQueryObject.setANDLogicOperator(true);
  346.                 queryString = sqlQueryObject.createSQLQuery();
  347.                 stmt = con.prepareStatement(queryString);
  348.                 stmt.setLong(1, idAccordoServizioParteSpecifica);
  349.                 risultato = stmt.executeQuery();
  350.                 while (risultato.next()) {
  351.                                        
  352.                     String tipoSoggettoFruitore = risultato.getString("tipo_soggetto");
  353.                     String nomeSoggettoFruitore = risultato.getString("nome_soggetto");
  354.                    
  355.                     boolean usedForPD = false;
  356.                     if(nomePDGenerateAutomaticamente!=null) {
  357.                         for (IDPortaDelegata idPD : nomePDGenerateAutomaticamente) {
  358.                             if(idPD.getIdentificativiFruizione()!=null && idPD.getIdentificativiFruizione().getSoggettoFruitore()!=null) {
  359.                                 IDSoggetto soggettoFruitore = new IDSoggetto(tipoSoggettoFruitore, nomeSoggettoFruitore);
  360.                                 if(soggettoFruitore.equals(idPD.getIdentificativiFruizione().getSoggettoFruitore())) {
  361.                                     usedForPD = true;
  362.                                     break;
  363.                                 }
  364.                             }
  365.                         }
  366.                     }
  367.                    
  368.                     if(!usedForPD) {
  369.                         if(normalizeObjectIds) {
  370.                             fruitori_list.add(NamingUtils.getLabelSoggetto(new IDSoggetto(tipoSoggettoFruitore, nomeSoggettoFruitore)));
  371.                         }
  372.                         else {
  373.                             fruitori_list.add(tipoSoggettoFruitore+"/"+nomeSoggettoFruitore);
  374.                         }
  375.                         isInUso=true;
  376.                     }
  377.                 }
  378.                 risultato.close();
  379.                 stmt.close();
  380.             }
  381.            
  382.            
  383.            
  384.            
  385.            
  386.             // servizio Componente
  387.             //List<String> nomiServiziApplicativi = new ArrayList<>();
  388.             //controllo se in uso in servizi
  389.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  390.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
  391.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  392.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  393.             sqlQueryObject.setSelectDistinct(true);
  394.             sqlQueryObject.addSelectField(CostantiDB.ACCORDI + ".nome");
  395.             sqlQueryObject.addSelectField(CostantiDB.ACCORDI + ".versione");
  396.             sqlQueryObject.addSelectField(CostantiDB.ACCORDI + ".id_referente");
  397.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPONENTI+".id_servizio_composto = "+CostantiDB.ACCORDI_SERVIZI_COMPOSTO+".id");
  398.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPOSTO+".id_accordo = "+CostantiDB.ACCORDI+".id");
  399.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPONENTI+".id_servizio_componente = ?");
  400.             sqlQueryObject.setANDLogicOperator(true);
  401.             queryString = sqlQueryObject.createSQLQuery();
  402.             stmt = con.prepareStatement(queryString);
  403.             stmt.setLong(1, idAccordoServizioParteSpecifica);
  404.             risultato = stmt.executeQuery();
  405.             while (risultato.next()){
  406.                 isInUso=true;
  407.                
  408.                 String nomeAccordo = risultato.getString("nome");
  409.                 int versione = risultato.getInt("versione");
  410.                 long idReferente = risultato.getLong("id_referente");
  411.                 IDSoggetto idReferenteObject = null;
  412.                
  413.                 if(idReferente>0){

  414.                     ISQLQueryObject sqlQueryObjectReferente = SQLObjectFactory.createSQLQueryObject(tipoDB);
  415.                     sqlQueryObjectReferente.addFromTable(CostantiDB.SOGGETTI);
  416.                     sqlQueryObjectReferente.addSelectField("*");
  417.                     sqlQueryObjectReferente.addWhereCondition("id=?");
  418.                     sqlQueryObjectReferente.setANDLogicOperator(true);
  419.                     String queryStringReferente = sqlQueryObjectReferente.createSQLQuery();
  420.                     stmt2 = con.prepareStatement(queryStringReferente);
  421.                     stmt2.setLong(1, idReferente);
  422.                     risultato2 = stmt2.executeQuery();
  423.                     if(risultato2.next()){
  424.                         idReferenteObject = new IDSoggetto();
  425.                         idReferenteObject.setTipo(risultato2.getString("tipo_soggetto"));
  426.                         idReferenteObject.setNome(risultato2.getString("nome_soggetto"));
  427.                     }
  428.                     risultato2.close(); risultato2=null;
  429.                     stmt2.close(); stmt2=null;

  430.                 }
  431.                
  432.                 if(normalizeObjectIds && idReferenteObject!=null) {
  433.                     String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(idReferenteObject.getTipo());
  434.                     IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromValues(nomeAccordo, idReferenteObject, versione);
  435.                     servizioComponente_list.add(DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelAccordoServizioParteComune(protocollo, idAccordo));
  436.                 }
  437.                 else {

  438.                     StringBuilder bf = new StringBuilder();

  439.                     bf.append(idReferenteObject!=null ? idReferenteObject.getTipo() : "?");
  440.                     bf.append("/");
  441.                     bf.append(idReferenteObject!=null ? idReferenteObject.getNome() : "?");
  442.                     bf.append(":");
  443.                    
  444.                     bf.append(nomeAccordo);
  445.    
  446.                     if(idReferente>0){
  447.                         bf.append(":");
  448.                         bf.append(versione);
  449.                     }
  450.    
  451.                     servizioComponente_list.add(bf.toString());
  452.                 }
  453.                
  454.             }
  455.             risultato.close();
  456.             stmt.close();

  457.            
  458.            
  459.            
  460.            
  461.            
  462.            

  463.                        
  464.            
  465.            
  466.             // Controllo che il soggetto non sia associato ad utenti
  467.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  468.             sqlQueryObject.addFromTable(CostantiDB.USERS);
  469.             sqlQueryObject.addFromTable(CostantiDB.USERS_SERVIZI);
  470.             sqlQueryObject.addSelectField("login");
  471.             sqlQueryObject.setANDLogicOperator(true);
  472.             sqlQueryObject.addWhereCondition(CostantiDB.USERS_SERVIZI+".id_servizio = ?");
  473.             sqlQueryObject.addWhereCondition(CostantiDB.USERS+".id = "+CostantiDB.USERS_SERVIZI+".id_utente");
  474.             queryString = sqlQueryObject.createSQLQuery();
  475.             stmt = con.prepareStatement(queryString);
  476.             stmt.setLong(1, idAccordoServizioParteSpecifica);
  477.             risultato = stmt.executeQuery();
  478.             while (risultato.next()) {
  479.                 utenti_list.add(risultato.getString("login"));

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

  612.            
  613.             return isInUso;

  614.         } catch (Exception se) {

  615.             throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  616.         } finally {
  617.             //Chiudo statement and resultset
  618.             JDBCUtilities.closeResources(risultato2, stmt2);
  619.             JDBCUtilities.closeResources(risultato, stmt);
  620.         }
  621.     }
  622.     @SuppressWarnings("deprecation")
  623.     private static IDServizio readIdServizio(ResultSet risultato) throws SQLException {
  624.         IDServizio idServizio = new IDServizio();
  625.         idServizio.setTipo(risultato.getString("tipo_servizio"));
  626.         idServizio.setNome(risultato.getString("nome_servizio"));
  627.         idServizio.setVersione(risultato.getInt("versione_servizio"));
  628.         idServizio.setSoggettoErogatore(new IDSoggetto(risultato.getString("tipo_soggetto"), risultato.getString("nome_soggetto")));
  629.         return idServizio;
  630.     }
  631.    
  632.     protected static boolean isAccordoServizioParteSpecificaInUso(Connection con, String tipoDB, IDServizio idServizio,
  633.             Map<ErrorsHandlerCostant,List<String>> whereIsInUso,
  634.             List<IDPortaDelegata> nomePDGenerateAutomaticamente, List<IDPortaApplicativa> nomePAGenerateAutomaticamente, boolean normalizeObjectIds) throws UtilsException {
  635.         String nomeMetodo = "isAccordoServizioParteSpecificaInUso(IDServizio)";
  636.         long idAccordoServizioParteSpecifica = -1;
  637.         try {
  638.             idAccordoServizioParteSpecifica = DBUtils.getIdAccordoServizioParteSpecifica(idServizio, con, tipoDB);
  639.             if(idAccordoServizioParteSpecifica<=0){
  640.                 throw new UtilsException("Accordi di Servizio Parte Specifica con id ["+idServizio.toString()+"] non trovato");
  641.             }
  642.         }catch (Exception se) {
  643.             throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  644.         }
  645.         return isAccordoServizioParteSpecificaInUso(con, tipoDB, idAccordoServizioParteSpecifica, whereIsInUso,nomeMetodo,
  646.                 nomePDGenerateAutomaticamente, nomePAGenerateAutomaticamente, normalizeObjectIds);
  647.     }
  648.     protected static String toString(IDServizio idServizio, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator,
  649.             boolean normalizeObjectIds, String oggetto){
  650.        
  651.         StringBuilder bf = new StringBuilder();
  652.         if(normalizeObjectIds) {
  653.             try {
  654.                 String protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(idServizio.getSoggettoErogatore().getTipo());
  655.                 String labelAccordo = DBOggettiInUsoUtils.getProtocolPrefix(protocollo)+NamingUtils.getLabelAccordoServizioParteSpecifica(protocollo, idServizio);
  656.                 bf.append(labelAccordo);
  657.             }catch(Exception e) {
  658.                 bf.append(idServizio.toString());
  659.             }
  660.         }
  661.         else {
  662.             bf.append(idServizio.toString());
  663.         }
  664.        
  665.        
  666.         Set<ErrorsHandlerCostant> keys = whereIsInUso.keySet();
  667.         String msg = oggetto+ " '"+bf.toString() + "' non eliminabile perch&egrave; :"+separator;
  668.         if(prefix==false){
  669.             msg = "";
  670.         }
  671.         String separatorCategorie = "";
  672.         if(whereIsInUso.size()>1) {
  673.             separatorCategorie = separator;
  674.         }
  675.         for (ErrorsHandlerCostant key : keys) {
  676.             List<String> messages = whereIsInUso.get(key);

  677.             if ( messages!=null && messages.size() > 0) {
  678.                 msg += separatorCategorie;
  679.             }
  680.            
  681.             switch (key) {
  682.             case IN_USO_IN_PORTE_DELEGATE:
  683.                 if ( messages!=null && messages.size() > 0 ) {
  684.                     msg += "in uso in Porte Delegate: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  685.                 }
  686.                 break;
  687.             case IN_USO_IN_PORTE_APPLICATIVE:
  688.                 if ( messages!=null && messages.size() > 0 ) {
  689.                     msg += "in uso in Porte Applicative: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  690.                 }
  691.                 break;
  692.             case POSSIEDE_FRUITORI:
  693.                 if ( messages!=null && messages.size() > 0 ) {
  694.                     msg += "fruito dai soggetti: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  695.                 }
  696.                 break;
  697.             case IS_SERVIZIO_COMPONENTE_IN_ACCORDI:
  698.                 if ( messages!=null && messages.size() > 0 ) {
  699.                     msg += "associato come servizio componente in API di Servizi Composti: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  700.                 }
  701.                 break;
  702.             case IN_USO_IN_MAPPING_EROGAZIONE_PA:
  703.                 if ( messages!=null && messages.size() > 0) {
  704.                     msg += "utilizzato nelle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  705.                 }
  706.                 break;
  707.             case IN_USO_IN_MAPPING_FRUIZIONE_PD:
  708.                 if ( messages!=null && messages.size() > 0) {
  709.                     msg += "utilizzato nelle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  710.                 }
  711.                 break;
  712.             case UTENTE:
  713.                 if ( messages!=null && messages.size() > 0 ) {
  714.                     msg += "associato ad Utenti: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  715.                 }
  716.                 break;
  717.             case CONTROLLO_TRAFFICO:
  718.                 if ( messages!=null && messages.size() > 0 ) {
  719.                     msg += "utilizzato in policy di Rate Limiting: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  720.                 }
  721.                 break;
  722.             case ALLARMI:
  723.                 if ( messages!=null && messages.size() > 0 ) {
  724.                     msg += "utilizzato in Allarmi: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator;
  725.                 }
  726.                 break;
  727.             default:
  728.                 msg += "utilizzato in oggetto non codificato ("+key+")"+separator;
  729.                 break;
  730.             }

  731.         }// chiudo for

  732.         return msg;
  733.     }
  734.    
  735. }