DriverConfigurazioneDB_allarmiDriver.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.core.config.driver.db;

  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 org.openspcoop2.core.allarmi.Allarme;
  27. import org.openspcoop2.core.allarmi.constants.RuoloPorta;
  28. import org.openspcoop2.core.allarmi.constants.StatoAllarme;
  29. import org.openspcoop2.core.allarmi.utils.AllarmiConverterUtils;
  30. import org.openspcoop2.core.allarmi.utils.AllarmiDriverUtils;
  31. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  32. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  33. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  34. import org.openspcoop2.core.constants.CostantiDB;
  35. import org.openspcoop2.core.id.IDServizio;
  36. import org.openspcoop2.core.id.IDSoggetto;
  37. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  38. import org.openspcoop2.utils.sql.ISQLQueryObject;
  39. import org.openspcoop2.utils.sql.SQLObjectFactory;

  40. /**
  41.  * DriverConfigurazioneDB_allarmiDriver
  42.  *
  43.  *
  44.  * @author Sandra Giangrandi (sandra@link.it)
  45.  * @author Stefano Corallo (corallo@link.it)
  46.  * @author $Author$
  47.  * @version $Rev$, $Date$
  48.  */
  49. public class DriverConfigurazioneDB_allarmiDriver {

  50.     private DriverConfigurazioneDB driver = null;
  51.    
  52.     protected DriverConfigurazioneDB_allarmiDriver(DriverConfigurazioneDB driver) {
  53.         this.driver = driver;
  54.     }
  55.    
  56.     protected long countAllarmi(String tipologiaRicerca, Boolean enabled, StatoAllarme stato, Boolean acknowledged, String nomeAllarme,
  57.             List<IDSoggetto> listSoggettiProprietariAbilitati, List<IDServizio> listIDServizioAbilitati,
  58.             List<String> tipoSoggettiByProtocollo, List<String> tipoServiziByProtocollo,
  59.             IDSoggetto idSoggettoProprietario, List<IDServizio> listIDServizio) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  60.        
  61.         Connection con = null;
  62.         ResultSet rs = null;
  63.         PreparedStatement stm = null;
  64.        
  65.         if (this.driver.atomica) {
  66.             try {
  67.                 con = this.driver.getConnectionFromDatasource("countAllarmi");

  68.             } catch (Exception e) {
  69.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::countAllarmi] Exception accedendo al datasource :" + e.getMessage(),e);

  70.             }

  71.         } else
  72.             con = this.driver.globalConnection;

  73.         try {
  74.            
  75.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  76.             sqlQueryObject.addFromTable(CostantiDB.ALLARMI);
  77.             sqlQueryObject.addSelectCountField(CostantiDB.ALLARMI + ".id", "numeroAllarmi");
  78.             sqlQueryObject.setANDLogicOperator(true);
  79.            
  80.             _setExpressionAllarmi(sqlQueryObject, tipologiaRicerca, enabled, stato, acknowledged, nomeAllarme,
  81.                     listSoggettiProprietariAbilitati, listIDServizioAbilitati,
  82.                     tipoSoggettiByProtocollo, tipoServiziByProtocollo,
  83.                     idSoggettoProprietario, listIDServizio);
  84.            
  85.             String sqlQuery = sqlQueryObject.createSQLQuery();

  86.             stm = con.prepareStatement(sqlQuery);
  87.            
  88.             sqlQuery = _setExpressionAllarmiValues(stm, sqlQuery,
  89.                     tipologiaRicerca, enabled, stato, acknowledged, nomeAllarme,
  90.                     listSoggettiProprietariAbilitati, listIDServizioAbilitati,
  91.                     tipoSoggettiByProtocollo, tipoServiziByProtocollo,
  92.                     idSoggettoProprietario, listIDServizio);
  93.             this.driver.logDebug("eseguo query: " + sqlQuery);
  94.            
  95.             rs = stm.executeQuery();
  96.             long numeroAllarmi = 0;
  97.             if(rs.next()) {
  98.                
  99.                  numeroAllarmi = rs.getLong("numeroAllarmi");
  100.             }
  101.             rs.close(); rs=null;
  102.             stm.close(); stm = null;

  103.             return numeroAllarmi;
  104.            
  105.         } catch (Exception se) {
  106.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::countAllarmi] Exception: " + se.getMessage(),se);
  107.         } finally {
  108.             //Chiudo statement and resultset
  109.             JDBCUtilities.closeResources(rs, stm);
  110.             this.driver.closeConnection(con);
  111.         }
  112.        
  113.     }
  114.    
  115.     protected List<Allarme> findAllAllarmi(String tipologiaRicerca, Boolean enabled, StatoAllarme stato, Boolean acknowledged, String nomeAllarme,
  116.             List<IDSoggetto> listSoggettiProprietariAbilitati, List<IDServizio> listIDServizioAbilitati,
  117.             List<String> tipoSoggettiByProtocollo, List<String> tipoServiziByProtocollo,
  118.             IDSoggetto idSoggettoProprietario, List<IDServizio> listIDServizio,
  119.             Integer offset, Integer limit) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  120.        
  121.         Connection con = null;
  122.         ResultSet rs = null;
  123.         PreparedStatement stm = null;
  124.        
  125.         if (this.driver.atomica) {
  126.             try {
  127.                 con = this.driver.getConnectionFromDatasource("findAllAllarmi");

  128.             } catch (Exception e) {
  129.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::findAllAllarmi] Exception accedendo al datasource :" + e.getMessage(),e);

  130.             }

  131.         } else
  132.             con = this.driver.globalConnection;

  133.         try {
  134.            
  135.             List<Allarme> list = new ArrayList<Allarme>();
  136.            
  137.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  138.             sqlQueryObject.addFromTable(CostantiDB.ALLARMI);
  139.             sqlQueryObject.addSelectField(CostantiDB.ALLARMI + ".id");
  140.             sqlQueryObject.addSelectField(CostantiDB.ALLARMI + ".alias");
  141.             sqlQueryObject.setANDLogicOperator(true);
  142.            
  143.             _setExpressionAllarmi(sqlQueryObject, tipologiaRicerca, enabled, stato, acknowledged, nomeAllarme,
  144.                     listSoggettiProprietariAbilitati, listIDServizioAbilitati,
  145.                     tipoSoggettiByProtocollo, tipoServiziByProtocollo,
  146.                     idSoggettoProprietario, listIDServizio);
  147.            
  148.             sqlQueryObject.addOrderBy("alias");
  149.            
  150.             if(offset!=null) {
  151.                 sqlQueryObject.setOffset(offset);
  152.             }
  153.             if(limit!=null) {
  154.                 sqlQueryObject.setLimit(limit);
  155.             }
  156.            
  157.             String sqlQuery = sqlQueryObject.createSQLQuery();

  158.             stm = con.prepareStatement(sqlQuery);

  159.             sqlQuery = _setExpressionAllarmiValues(stm, sqlQuery,
  160.                     tipologiaRicerca, enabled, stato, acknowledged, nomeAllarme,
  161.                     listSoggettiProprietariAbilitati, listIDServizioAbilitati,
  162.                     tipoSoggettiByProtocollo, tipoServiziByProtocollo,
  163.                     idSoggettoProprietario, listIDServizio);
  164.             this.driver.logDebug("eseguo query: " + sqlQuery);
  165.            
  166.             rs = stm.executeQuery();
  167.             while(rs.next()) {
  168.                
  169.                 long idAllarme = rs.getLong("id");
  170.                 list.add(AllarmiDriverUtils.getAllarme(idAllarme, con, this.driver.log, this.driver.tipoDB));
  171.                
  172.             }
  173.             rs.close(); rs=null;
  174.             stm.close(); stm = null;

  175.             return list;
  176.            
  177.         } catch (Exception se) {
  178.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::findAllAllarmi] Exception: " + se.getMessage(),se);
  179.         } finally {
  180.             //Chiudo statement and resultset
  181.             JDBCUtilities.closeResources(rs, stm);
  182.             this.driver.closeConnection(con);
  183.         }
  184.        
  185.     }
  186.    
  187.     private void _setExpressionAllarmi(ISQLQueryObject sqlQueryObject, String tipologiaRicerca, Boolean enabled, StatoAllarme stato, Boolean acknowledged, String nomeAllarme,
  188.             List<IDSoggetto> listSoggettiProprietariAbilitati, List<IDServizio> listIDServizioAbilitati,
  189.             List<String> tipoSoggettiByProtocollo, List<String> tipoServiziByProtocollo,
  190.             IDSoggetto idSoggettoProprietario, List<IDServizio> listIDServizio) throws Exception {
  191.         if(enabled!=null){
  192.             sqlQueryObject.addWhereCondition("enabled=?");
  193.         }
  194.         if(stato!=null){
  195.             sqlQueryObject.addWhereCondition("stato=?");
  196.         }
  197.         if(acknowledged!=null){
  198.             sqlQueryObject.addWhereCondition("acknowledged=?");
  199.         }
  200.        
  201.         if(nomeAllarme!=null) {
  202.             sqlQueryObject.addWhereLikeCondition("alias", nomeAllarme, true, true);
  203.         }
  204.        
  205.         ISQLQueryObject sqlQueryObjectPorteApplicative = null;
  206.         ISQLQueryObject sqlQueryObjectPorteDelegate = null;
  207.        
  208.         if(CostantiConfigurazione.ALLARMI_TIPOLOGIA_CONFIGURAZIONE.equals(tipologiaRicerca)) {
  209.             sqlQueryObject.addWhereIsNullCondition("filtro_porta");
  210.         }
  211.        
  212.         if(CostantiConfigurazione.ALLARMI_TIPOLOGIA_APPLICATIVA.equals(tipologiaRicerca) || CostantiConfigurazione.ALLARMI_TIPOLOGIA_SOLO_ASSOCIATE.equals(tipologiaRicerca)) {
  213.        
  214.             String alias_PA = "pa";
  215.             String alias_SOGGETTI = "sog";
  216.            
  217.             sqlQueryObjectPorteApplicative = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  218.             sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE,alias_PA);
  219.             sqlQueryObjectPorteApplicative.setANDLogicOperator(true);
  220.             sqlQueryObjectPorteApplicative.addWhereCondition(CostantiDB.ALLARMI+".filtro_ruolo=?");
  221.             sqlQueryObjectPorteApplicative.addWhereCondition(CostantiDB.ALLARMI+".filtro_porta="+alias_PA+".nome_porta");
  222.             sqlQueryObjectPorteApplicative.addWhereIsNotNullCondition(alias_PA+".tipo_servizio");
  223.             sqlQueryObjectPorteApplicative.addWhereIsNotNullCondition(alias_PA+".servizio");
  224.             sqlQueryObjectPorteApplicative.addWhereIsNotNullCondition(alias_PA+".versione_servizio");
  225.            
  226.             if( (listSoggettiProprietariAbilitati!=null && !listSoggettiProprietariAbilitati.isEmpty())
  227.                     ||
  228.                 (listIDServizioAbilitati!=null && !listIDServizioAbilitati.isEmpty())
  229.                     ||
  230.                 (tipoSoggettiByProtocollo!=null && !tipoSoggettiByProtocollo.isEmpty())
  231.                     ||
  232.                 idSoggettoProprietario!=null
  233.                     ||
  234.                 listIDServizio!=null && !listIDServizio.isEmpty()
  235.                     ) {
  236.                 sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  237.                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".id_soggetto = "+alias_SOGGETTI+".id");
  238.             }
  239.            
  240.            
  241.            
  242.             // Utenza permessi
  243.            
  244.             List<String> condizioniUtenza = new ArrayList<>();
  245.            
  246.             if(listSoggettiProprietariAbilitati!=null && !listSoggettiProprietariAbilitati.isEmpty()) {
  247.                 ISQLQueryObject sqlQueryObjectUtenzaSoggetto = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  248.                 sqlQueryObjectUtenzaSoggetto.setANDLogicOperator(true);
  249.                 List<String> condizioni = new ArrayList<>();
  250.                 for (@SuppressWarnings("unused") IDSoggetto idSoggetto : listSoggettiProprietariAbilitati) {
  251.                     ISQLQueryObject sqlQueryObjectSoggetto = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  252.                     sqlQueryObjectSoggetto.setANDLogicOperator(true);
  253.                     sqlQueryObjectSoggetto.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  254.                     sqlQueryObjectSoggetto.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  255.                     condizioni.add(sqlQueryObjectSoggetto.createSQLConditions());
  256.                 }
  257.                 sqlQueryObjectUtenzaSoggetto.addWhereCondition(false, condizioni.toArray(new String[condizioni.size()]));
  258.                
  259.                 condizioniUtenza.add(sqlQueryObjectUtenzaSoggetto.createSQLConditions());
  260.             }
  261.             if(listIDServizioAbilitati!=null && !listIDServizioAbilitati.isEmpty()) {
  262.                 ISQLQueryObject sqlQueryObjectUtenzaServizio = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  263.                 sqlQueryObjectUtenzaServizio.setANDLogicOperator(true);
  264.                 List<String> condizioni = new ArrayList<>();
  265.                 for (@SuppressWarnings("unused") IDServizio idServizio : listIDServizioAbilitati) {
  266.                     ISQLQueryObject sqlQueryObjectServizio = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  267.                     sqlQueryObjectServizio.setANDLogicOperator(true);
  268.                     sqlQueryObjectServizio.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  269.                     sqlQueryObjectServizio.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  270.                     sqlQueryObjectServizio.addWhereCondition(alias_PA+".tipo_servizio = ?");
  271.                     sqlQueryObjectServizio.addWhereCondition(alias_PA+".servizio = ?");
  272.                     sqlQueryObjectServizio.addWhereCondition(alias_PA+".versione_servizio = ?");
  273.                     condizioni.add(sqlQueryObjectServizio.createSQLConditions());
  274.                 }
  275.                 sqlQueryObjectUtenzaServizio.addWhereCondition(false, condizioni.toArray(new String[condizioni.size()]));
  276.                
  277.                 condizioniUtenza.add(sqlQueryObjectUtenzaServizio.createSQLConditions());
  278.             }
  279.            
  280.             if(!condizioniUtenza.isEmpty()) {
  281.                 sqlQueryObjectPorteApplicative.addWhereCondition(false, condizioniUtenza.toArray(new String[condizioniUtenza.size()]));
  282.             }
  283.        
  284.             // protocollo
  285.             if(tipoSoggettiByProtocollo!=null && !tipoSoggettiByProtocollo.isEmpty()) {
  286.                 sqlQueryObjectPorteApplicative.addWhereINCondition(alias_SOGGETTI+".tipo_soggetto", true, tipoSoggettiByProtocollo.toArray(new String[tipoSoggettiByProtocollo.size()]));
  287.             }
  288.             if(tipoServiziByProtocollo!=null && !tipoServiziByProtocollo.isEmpty()) {
  289.                 sqlQueryObjectPorteApplicative.addWhereINCondition(alias_PA+".tipo_servizio", true, tipoServiziByProtocollo.toArray(new String[tipoServiziByProtocollo.size()]));
  290.             }
  291.            
  292.             // soggetto proprietario
  293.             if(idSoggettoProprietario!=null) {
  294.                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  295.                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  296.             }
  297.            
  298.             // servizi
  299.             if(listIDServizio!=null && !listIDServizio.isEmpty()) {
  300.                
  301.                 if(listIDServizio.size()==1) {
  302.                     sqlQueryObjectPorteApplicative.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  303.                     sqlQueryObjectPorteApplicative.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  304.                     sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".tipo_servizio = ?");
  305.                     sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".servizio = ?");
  306.                     sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".versione_servizio = ?");
  307.                 }
  308.                 else {
  309.                     List<String> condizioni = new ArrayList<>();
  310.                     for (@SuppressWarnings("unused") IDServizio idServizio : listIDServizio) {
  311.                         ISQLQueryObject sqlQueryObjectServizio = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  312.                         sqlQueryObjectServizio.setANDLogicOperator(true);
  313.                         sqlQueryObjectServizio.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  314.                         sqlQueryObjectServizio.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  315.                         sqlQueryObjectServizio.addWhereCondition(alias_PA+".tipo_servizio = ?");
  316.                         sqlQueryObjectServizio.addWhereCondition(alias_PA+".servizio = ?");
  317.                         sqlQueryObjectServizio.addWhereCondition(alias_PA+".versione_servizio = ?");
  318.                         condizioni.add(sqlQueryObjectServizio.createSQLConditions());
  319.                     }
  320.                     sqlQueryObjectPorteApplicative.addWhereCondition(false, condizioni.toArray(new String[condizioni.size()]));
  321.                 }
  322.                
  323.             }
  324.            
  325.         }
  326.        
  327.         if(CostantiConfigurazione.ALLARMI_TIPOLOGIA_DELEGATA.equals(tipologiaRicerca) || CostantiConfigurazione.ALLARMI_TIPOLOGIA_SOLO_ASSOCIATE.equals(tipologiaRicerca)) {
  328.            
  329.             String alias_PD = "pd";
  330.             String alias_SOGGETTI = "sog";
  331.            
  332.             sqlQueryObjectPorteDelegate = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  333.             sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.PORTE_DELEGATE,alias_PD);
  334.             sqlQueryObjectPorteDelegate.setANDLogicOperator(true);
  335.             sqlQueryObjectPorteDelegate.addWhereCondition(CostantiDB.ALLARMI+".filtro_ruolo=?");
  336.             sqlQueryObjectPorteDelegate.addWhereCondition(CostantiDB.ALLARMI+".filtro_porta="+alias_PD+".nome_porta");
  337.             sqlQueryObjectPorteDelegate.addWhereIsNotNullCondition(alias_PD+".tipo_soggetto_erogatore");
  338.             sqlQueryObjectPorteDelegate.addWhereIsNotNullCondition(alias_PD+".nome_soggetto_erogatore");
  339.             sqlQueryObjectPorteDelegate.addWhereIsNotNullCondition(alias_PD+".tipo_servizio");
  340.             sqlQueryObjectPorteDelegate.addWhereIsNotNullCondition(alias_PD+".nome_servizio");
  341.             sqlQueryObjectPorteDelegate.addWhereIsNotNullCondition(alias_PD+".versione_servizio");
  342.            
  343.             if( (listSoggettiProprietariAbilitati!=null && !listSoggettiProprietariAbilitati.isEmpty())
  344.                     ||
  345.                 (tipoSoggettiByProtocollo!=null && !tipoSoggettiByProtocollo.isEmpty())
  346.                     ||
  347.                 (tipoServiziByProtocollo!=null && !tipoServiziByProtocollo.isEmpty())
  348.                     ||
  349.                 idSoggettoProprietario!=null
  350.                     ) {
  351.                 sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  352.                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".id_soggetto = "+alias_SOGGETTI+".id");
  353.             }
  354.            
  355.            
  356.            
  357.             // Utenza permessi
  358.            
  359.             List<String> condizioniUtenza = new ArrayList<>();
  360.            
  361.             if(listSoggettiProprietariAbilitati!=null && !listSoggettiProprietariAbilitati.isEmpty()) {
  362.                 ISQLQueryObject sqlQueryObjectUtenzaSoggetto = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  363.                 sqlQueryObjectUtenzaSoggetto.setANDLogicOperator(true);
  364.                 List<String> condizioni = new ArrayList<>();
  365.                 for (@SuppressWarnings("unused") IDSoggetto idSoggetto : listSoggettiProprietariAbilitati) {
  366.                     ISQLQueryObject sqlQueryObjectSoggetto = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  367.                     sqlQueryObjectSoggetto.setANDLogicOperator(true);
  368.                     sqlQueryObjectSoggetto.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  369.                     sqlQueryObjectSoggetto.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  370.                     condizioni.add(sqlQueryObjectSoggetto.createSQLConditions());
  371.                 }
  372.                 sqlQueryObjectUtenzaSoggetto.addWhereCondition(false, condizioni.toArray(new String[condizioni.size()]));
  373.                
  374.                 condizioniUtenza.add(sqlQueryObjectUtenzaSoggetto.createSQLConditions());
  375.             }
  376.             if(listIDServizioAbilitati!=null && !listIDServizioAbilitati.isEmpty()) {
  377.                 ISQLQueryObject sqlQueryObjectUtenzaServizio = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  378.                 sqlQueryObjectUtenzaServizio.setANDLogicOperator(true);
  379.                 List<String> condizioni = new ArrayList<>();
  380.                 for (@SuppressWarnings("unused") IDServizio idServizio : listIDServizioAbilitati) {
  381.                     ISQLQueryObject sqlQueryObjectServizio = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  382.                     sqlQueryObjectServizio.setANDLogicOperator(true);
  383.                     sqlQueryObjectServizio.addWhereCondition(alias_PD+".tipo_soggetto_erogatore = ?");
  384.                     sqlQueryObjectServizio.addWhereCondition(alias_PD+".nome_soggetto_erogatore = ?");
  385.                     sqlQueryObjectServizio.addWhereCondition(alias_PD+".tipo_servizio = ?");
  386.                     sqlQueryObjectServizio.addWhereCondition(alias_PD+".nome_servizio = ?");
  387.                     sqlQueryObjectServizio.addWhereCondition(alias_PD+".versione_servizio = ?");
  388.                     condizioni.add(sqlQueryObjectServizio.createSQLConditions());
  389.                 }
  390.                 sqlQueryObjectUtenzaServizio.addWhereCondition(false, condizioni.toArray(new String[condizioni.size()]));
  391.                
  392.                 condizioniUtenza.add(sqlQueryObjectUtenzaServizio.createSQLConditions());
  393.             }
  394.            
  395.             if(!condizioniUtenza.isEmpty()) {
  396.                 sqlQueryObjectPorteDelegate.addWhereCondition(false, condizioniUtenza.toArray(new String[condizioniUtenza.size()]));
  397.             }
  398.        
  399.             // protocollo
  400.             if(tipoSoggettiByProtocollo!=null && !tipoSoggettiByProtocollo.isEmpty()) {
  401.                 sqlQueryObjectPorteDelegate.addWhereINCondition(alias_SOGGETTI+".tipo_soggetto", true, tipoSoggettiByProtocollo.toArray(new String[tipoSoggettiByProtocollo.size()]));
  402.                 sqlQueryObjectPorteDelegate.addWhereINCondition(alias_PD+".tipo_soggetto_erogatore", true, tipoSoggettiByProtocollo.toArray(new String[tipoSoggettiByProtocollo.size()]));
  403.             }
  404.             if(tipoServiziByProtocollo!=null && !tipoServiziByProtocollo.isEmpty()) {
  405.                 sqlQueryObjectPorteDelegate.addWhereINCondition(alias_PD+".tipo_servizio", true, tipoServiziByProtocollo.toArray(new String[tipoServiziByProtocollo.size()]));
  406.             }
  407.            
  408.             // soggetto proprietario
  409.             if(idSoggettoProprietario!=null) {
  410.                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  411.                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  412.             }
  413.            
  414.             // servizi
  415.             if(listIDServizio!=null && !listIDServizio.isEmpty()) {
  416.                
  417.                 if(listIDServizio.size()==1) {
  418.                     sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".tipo_soggetto_erogatore = ?");
  419.                     sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".nome_soggetto_erogatore = ?");
  420.                     sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".tipo_servizio = ?");
  421.                     sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".nome_servizio = ?");
  422.                     sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".versione_servizio = ?");
  423.                 }
  424.                 else {
  425.                     List<String> condizioni = new ArrayList<>();
  426.                     for (@SuppressWarnings("unused") IDServizio idServizio : listIDServizio) {
  427.                         ISQLQueryObject sqlQueryObjectServizio = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  428.                         sqlQueryObjectServizio.setANDLogicOperator(true);
  429.                         sqlQueryObjectServizio.addWhereCondition(alias_PD+".tipo_soggetto_erogatore = ?");
  430.                         sqlQueryObjectServizio.addWhereCondition(alias_PD+".nome_soggetto_erogatore = ?");
  431.                         sqlQueryObjectServizio.addWhereCondition(alias_PD+".tipo_servizio = ?");
  432.                         sqlQueryObjectServizio.addWhereCondition(alias_PD+".nome_servizio = ?");
  433.                         sqlQueryObjectServizio.addWhereCondition(alias_PD+".versione_servizio = ?");
  434.                         condizioni.add(sqlQueryObjectServizio.createSQLConditions());
  435.                     }
  436.                     sqlQueryObjectPorteDelegate.addWhereCondition(false, condizioni.toArray(new String[condizioni.size()]));
  437.                 }
  438.                
  439.             }
  440.            
  441.         }
  442.        
  443.         if(sqlQueryObjectPorteApplicative!=null && sqlQueryObjectPorteDelegate!=null) {
  444.             ISQLQueryObject sqlQueryObjectOR = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  445.             sqlQueryObjectOR.setANDLogicOperator(false);
  446.             sqlQueryObjectOR.addWhereExistsCondition(false, sqlQueryObjectPorteApplicative);
  447.             sqlQueryObjectOR.addWhereExistsCondition(false, sqlQueryObjectPorteDelegate);
  448.             sqlQueryObject.addWhereCondition(sqlQueryObjectOR.createSQLConditions());
  449.         }
  450.         else if(sqlQueryObjectPorteApplicative!=null) {
  451.             sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectPorteApplicative);
  452.         }
  453.         else if(sqlQueryObjectPorteDelegate!=null) {
  454.             sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectPorteDelegate);
  455.         }
  456.        
  457.     }
  458.     private String _setExpressionAllarmiValues(PreparedStatement stm, String query,
  459.             String tipologiaRicerca,Boolean enabled, StatoAllarme stato, Boolean acknowledged, String nomeAllarme,
  460.             List<IDSoggetto> listSoggettiProprietariAbilitati, List<IDServizio> listIDServizioAbilitati,
  461.             List<String> tipoSoggettiByProtocollo, List<String> tipoServiziByProtocollo,
  462.             IDSoggetto idSoggettoProprietario, List<IDServizio> listIDServizio) throws Exception {
  463.         int index = 1;
  464.         if(enabled!=null){
  465.             int v = enabled? CostantiDB.TRUE : CostantiDB.FALSE;
  466.             stm.setInt(index++, v);
  467.             query = query.replaceFirst("\\?", v+"");
  468.         }
  469.         if(stato!=null){
  470.             int v = AllarmiConverterUtils.toIntegerValue(stato);
  471.             stm.setInt(index++,v);
  472.             query = query.replaceFirst("\\?", v+"");
  473.         }
  474.         if(acknowledged!=null){
  475.             int v = acknowledged? CostantiDB.TRUE : CostantiDB.FALSE;
  476.             stm.setInt(index++, v);
  477.             query = query.replaceFirst("\\?", v+"");
  478.         }
  479.                
  480.         if(nomeAllarme!=null) {
  481.             // nop
  482.         }
  483.        
  484. //      if(CostantiConfigurazione.ALLARMI_TIPOLOGIA_CONFIGURAZIONE.equals(tipologiaRicerca)) {
  485. //          // nop
  486. //      }
  487.        
  488.         if(CostantiConfigurazione.ALLARMI_TIPOLOGIA_APPLICATIVA.equals(tipologiaRicerca) || CostantiConfigurazione.ALLARMI_TIPOLOGIA_SOLO_ASSOCIATE.equals(tipologiaRicerca)) {
  489.            
  490.             stm.setString(index++, RuoloPorta.APPLICATIVA.getValue()); query = query.replaceFirst("\\?", "'"+RuoloPorta.APPLICATIVA.getValue()+"'");
  491.                        
  492.             // Utenza permessi

  493.             if(listSoggettiProprietariAbilitati!=null && !listSoggettiProprietariAbilitati.isEmpty()) {
  494.                 for (IDSoggetto idSoggetto : listSoggettiProprietariAbilitati) {
  495.                     stm.setString(index++, idSoggetto.getTipo()); query = query.replaceFirst("\\?", "'"+idSoggetto.getTipo()+"'");
  496.                     stm.setString(index++, idSoggetto.getNome()); query = query.replaceFirst("\\?", "'"+idSoggetto.getNome()+"'");
  497.                 }
  498.             }
  499.             if(listIDServizioAbilitati!=null && !listIDServizioAbilitati.isEmpty()) {
  500.                 for (IDServizio idServizio : listIDServizioAbilitati) {
  501.                     stm.setString(index++, idServizio.getSoggettoErogatore().getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getTipo()+"'");
  502.                     stm.setString(index++, idServizio.getSoggettoErogatore().getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getNome()+"'");
  503.                     stm.setString(index++, idServizio.getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getTipo()+"'");
  504.                     stm.setString(index++, idServizio.getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getNome()+"'");
  505.                     stm.setInt(index++, idServizio.getVersione()); query = query.replaceFirst("\\?", idServizio.getVersione()+"");
  506.                 }
  507.             }

  508.             // protocollo
  509.             // nop
  510.            
  511.             // soggetto proprietario
  512.             if(idSoggettoProprietario!=null) {
  513.                 stm.setString(index++, idSoggettoProprietario.getTipo()); query = query.replaceFirst("\\?", "'"+idSoggettoProprietario.getTipo()+"'");
  514.                 stm.setString(index++, idSoggettoProprietario.getNome()); query = query.replaceFirst("\\?", "'"+idSoggettoProprietario.getNome()+"'");
  515.             }
  516.            
  517.             // servizi
  518.             if(listIDServizio!=null && !listIDServizio.isEmpty()) {
  519.                
  520.                 if(listIDServizio.size()==1) {
  521.                     IDServizio idServizio = listIDServizio.get(0);
  522.                     stm.setString(index++, idServizio.getSoggettoErogatore().getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getTipo()+"'");
  523.                     stm.setString(index++, idServizio.getSoggettoErogatore().getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getNome()+"'");
  524.                     stm.setString(index++, idServizio.getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getTipo()+"'");
  525.                     stm.setString(index++, idServizio.getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getNome()+"'");
  526.                     stm.setInt(index++, idServizio.getVersione()); query = query.replaceFirst("\\?", idServizio.getVersione()+"");
  527.                 }
  528.                 else {
  529.                     for (IDServizio idServizio : listIDServizio) {
  530.                         stm.setString(index++, idServizio.getSoggettoErogatore().getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getTipo()+"'");
  531.                         stm.setString(index++, idServizio.getSoggettoErogatore().getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getNome()+"'");
  532.                         stm.setString(index++, idServizio.getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getTipo()+"'");
  533.                         stm.setString(index++, idServizio.getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getNome()+"'");
  534.                         stm.setInt(index++, idServizio.getVersione()); query = query.replaceFirst("\\?", idServizio.getVersione()+"");
  535.                     }
  536.                 }
  537.                
  538.             }
  539.            
  540.         }
  541.        
  542.         if(CostantiConfigurazione.ALLARMI_TIPOLOGIA_DELEGATA.equals(tipologiaRicerca) || CostantiConfigurazione.ALLARMI_TIPOLOGIA_SOLO_ASSOCIATE.equals(tipologiaRicerca)) {
  543.            
  544.             stm.setString(index++, RuoloPorta.DELEGATA.getValue()); query = query.replaceFirst("\\?", "'"+RuoloPorta.DELEGATA.getValue()+"'");
  545.            
  546.             // Utenza permessi
  547.            
  548.             if(listSoggettiProprietariAbilitati!=null && !listSoggettiProprietariAbilitati.isEmpty()) {
  549.                 for (IDSoggetto idSoggetto : listSoggettiProprietariAbilitati) {
  550.                     stm.setString(index++, idSoggetto.getTipo()); query = query.replaceFirst("\\?", "'"+idSoggetto.getTipo()+"'");
  551.                     stm.setString(index++, idSoggetto.getNome()); query = query.replaceFirst("\\?", "'"+idSoggetto.getNome()+"'");
  552.                 }
  553.             }
  554.             if(listIDServizioAbilitati!=null && !listIDServizioAbilitati.isEmpty()) {
  555.                 for (IDServizio idServizio : listIDServizioAbilitati) {
  556.                     stm.setString(index++, idServizio.getSoggettoErogatore().getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getTipo()+"'");
  557.                     stm.setString(index++, idServizio.getSoggettoErogatore().getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getNome()+"'");
  558.                     stm.setString(index++, idServizio.getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getTipo()+"'");
  559.                     stm.setString(index++, idServizio.getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getNome()+"'");
  560.                     stm.setInt(index++, idServizio.getVersione()); query = query.replaceFirst("\\?", idServizio.getVersione()+"");
  561.                 }
  562.             }
  563.            
  564.             // protocollo
  565.             // nop
  566.            
  567.             // soggetto proprietario
  568.             if(idSoggettoProprietario!=null) {
  569.                 stm.setString(index++, idSoggettoProprietario.getTipo()); query = query.replaceFirst("\\?", "'"+idSoggettoProprietario.getTipo()+"'");
  570.                 stm.setString(index++, idSoggettoProprietario.getNome()); query = query.replaceFirst("\\?", "'"+idSoggettoProprietario.getNome()+"'");
  571.             }
  572.            
  573.             // servizi
  574.             if(listIDServizio!=null && !listIDServizio.isEmpty()) {
  575.                
  576.                 if(listIDServizio.size()==1) {
  577.                     IDServizio idServizio = listIDServizio.get(0);
  578.                     stm.setString(index++, idServizio.getSoggettoErogatore().getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getTipo()+"'");
  579.                     stm.setString(index++, idServizio.getSoggettoErogatore().getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getNome()+"'");
  580.                     stm.setString(index++, idServizio.getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getTipo()+"'");
  581.                     stm.setString(index++, idServizio.getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getNome()+"'");
  582.                     stm.setInt(index++, idServizio.getVersione()); query = query.replaceFirst("\\?", idServizio.getVersione()+"");
  583.                 }
  584.                 else {
  585.                     for (IDServizio idServizio : listIDServizio) {
  586.                         stm.setString(index++, idServizio.getSoggettoErogatore().getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getTipo()+"'");
  587.                         stm.setString(index++, idServizio.getSoggettoErogatore().getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getSoggettoErogatore().getNome()+"'");
  588.                         stm.setString(index++, idServizio.getTipo()); query = query.replaceFirst("\\?", "'"+idServizio.getTipo()+"'");
  589.                         stm.setString(index++, idServizio.getNome()); query = query.replaceFirst("\\?", "'"+idServizio.getNome()+"'");
  590.                         stm.setInt(index++, idServizio.getVersione()); query = query.replaceFirst("\\?", idServizio.getVersione()+"");
  591.                     }
  592.                 }
  593.                
  594.             }
  595.            
  596.         }
  597.        
  598.         return query;
  599.     }
  600. }