DriverRegistroServiziDB_soggettiSearchDriver.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.registry.driver.db;

  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 org.apache.commons.lang.StringUtils;
  28. import org.openspcoop2.core.commons.DBUtils;
  29. import org.openspcoop2.core.commons.Filtri;
  30. import org.openspcoop2.core.commons.ISearch;
  31. import org.openspcoop2.core.commons.Liste;
  32. import org.openspcoop2.core.commons.SearchUtils;
  33. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  34. import org.openspcoop2.core.constants.CostantiDB;
  35. import org.openspcoop2.core.constants.TipoPdD;
  36. import org.openspcoop2.core.id.IDFruizione;
  37. import org.openspcoop2.core.id.IDServizio;
  38. import org.openspcoop2.core.id.IDSoggetto;
  39. import org.openspcoop2.core.registry.CredenzialiSoggetto;
  40. import org.openspcoop2.core.registry.Proprieta;
  41. import org.openspcoop2.core.registry.Soggetto;
  42. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  43. import org.openspcoop2.core.registry.constants.PddTipologia;
  44. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  45. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  46. import org.openspcoop2.utils.sql.ISQLQueryObject;
  47. import org.openspcoop2.utils.sql.LikeConfig;
  48. import org.openspcoop2.utils.sql.SQLObjectFactory;
  49. import org.openspcoop2.utils.sql.SQLQueryObjectException;

  50. /**
  51.  * DriverRegistroServiziDB_soggettiDriver
  52.  *
  53.  *
  54.  * @author Sandra Giangrandi (sandra@link.it)
  55.  * @author Stefano Corallo (corallo@link.it)
  56.  * @author $Author$
  57.  * @version $Rev$, $Date$
  58.  */
  59. public class DriverRegistroServiziDB_soggettiSearchDriver {

  60.     private DriverRegistroServiziDB driver = null;
  61.    
  62.     protected DriverRegistroServiziDB_soggettiSearchDriver(DriverRegistroServiziDB driver) {
  63.         this.driver = driver;
  64.     }
  65.    
  66.    

  67.     protected List<String> soggettiRuoliList(long idSoggetto, ISearch ricerca) throws DriverRegistroServiziException {
  68.         String nomeMetodo = "soggettiRuoliList";
  69.         int idLista = Liste.SOGGETTI_RUOLI;
  70.         int offset;
  71.         int limit;
  72.         String search;
  73.         String queryString;

  74.         limit = ricerca.getPageSize(idLista);
  75.         offset = ricerca.getIndexIniziale(idLista);
  76.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));

  77.         Connection con = null;
  78.         PreparedStatement stmt = null;
  79.         ResultSet risultato = null;

  80.         if (this.driver.atomica) {
  81.             try {
  82.                 con = this.driver.getConnectionFromDatasource("soggettiRuoliList");
  83.             } catch (Exception e) {
  84.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  85.             }

  86.         } else
  87.             con = this.driver.globalConnection;

  88.         this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);

  89.         List<String> listIdRuoli = null;
  90.         try {

  91.             if (!search.equals("")) {
  92.                 //query con search
  93.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  94.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  95.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  96.                 sqlQueryObject.addFromTable(CostantiDB.RUOLI);
  97.                 sqlQueryObject.addSelectCountField("*", "cont");
  98.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  99.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_soggetto");
  100.                 sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_ruolo");
  101.                 sqlQueryObject.addWhereLikeCondition(CostantiDB.RUOLI+".nome", search, true, true);
  102.                
  103.                 sqlQueryObject.setSelectDistinct(true);
  104.                 sqlQueryObject.setANDLogicOperator(true);
  105.                 queryString = sqlQueryObject.createSQLQuery();
  106.             } else {
  107.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  108.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  109.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  110.                 sqlQueryObject.addSelectCountField("*", "cont");
  111.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  112.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_soggetto");

  113.                 sqlQueryObject.setSelectDistinct(true);
  114.                 sqlQueryObject.setANDLogicOperator(true);
  115.                 queryString = sqlQueryObject.createSQLQuery();
  116.             }
  117.             stmt = con.prepareStatement(queryString);
  118.             stmt.setLong(1, idSoggetto);

  119.             risultato = stmt.executeQuery();
  120.             if (risultato.next())
  121.                 ricerca.setNumEntries(idLista,risultato.getInt(1));
  122.             risultato.close();
  123.             stmt.close();

  124.             // ricavo le entries
  125.             if (limit == 0) // con limit
  126.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
  127.             if (!search.equals("")) { // con search
  128.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  129.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  130.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  131.                 sqlQueryObject.addFromTable(CostantiDB.RUOLI);
  132.                 sqlQueryObject.addSelectField(CostantiDB.RUOLI+".nome");
  133.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  134.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_soggetto");
  135.                 sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_ruolo");
  136.                 sqlQueryObject.addWhereLikeCondition(CostantiDB.RUOLI+".nome", search, true, true);
  137.                
  138.                 sqlQueryObject.setSelectDistinct(true);
  139.                 sqlQueryObject.setANDLogicOperator(true);
  140.                 sqlQueryObject.addOrderBy(CostantiDB.RUOLI+".nome");
  141.                 sqlQueryObject.setSortType(true);
  142.                 sqlQueryObject.setLimit(limit);
  143.                 sqlQueryObject.setOffset(offset);
  144.                 queryString = sqlQueryObject.createSQLQuery();
  145.             } else {
  146.                 // senza search
  147.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  148.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  149.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  150.                 sqlQueryObject.addFromTable(CostantiDB.RUOLI);
  151.                 sqlQueryObject.addSelectField(CostantiDB.RUOLI+".nome");
  152.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  153.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_soggetto");
  154.                 sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_ruolo");
  155.                
  156.                 sqlQueryObject.setSelectDistinct(true);
  157.                 sqlQueryObject.setANDLogicOperator(true);
  158.                 sqlQueryObject.addOrderBy(CostantiDB.RUOLI+".nome");
  159.                 sqlQueryObject.setSortType(true);
  160.                 sqlQueryObject.setLimit(limit);
  161.                 sqlQueryObject.setOffset(offset);
  162.                 queryString = sqlQueryObject.createSQLQuery();
  163.             }
  164.             stmt = con.prepareStatement(queryString);
  165.             stmt.setLong(1, idSoggetto);

  166.             risultato = stmt.executeQuery();

  167.             listIdRuoli = new ArrayList<>();
  168.             while (risultato.next()) {

  169.                 listIdRuoli.add(risultato.getString(1));

  170.             }

  171.         } catch (Exception qe) {
  172.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  173.         } finally {

  174.             //Chiudo statement and resultset
  175.             JDBCUtilities.closeResources(risultato, stmt);

  176.             this.driver.closeConnection(con);
  177.         }
  178.        
  179.         return listIdRuoli;
  180.     }
  181.    
  182.     protected List<Proprieta> soggettiProprietaList(long idSoggetto, ISearch ricerca) throws DriverRegistroServiziException {
  183.         String nomeMetodo = "soggettiRuoliList";
  184.         int idLista = Liste.SOGGETTI_PROP;
  185.         int offset;
  186.         int limit;
  187.         String search;
  188.         String queryString;

  189.         limit = ricerca.getPageSize(idLista);
  190.         offset = ricerca.getIndexIniziale(idLista);
  191.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));

  192.         Connection con = null;
  193.         PreparedStatement stmt = null;
  194.         ResultSet risultato = null;

  195.         if (this.driver.atomica) {
  196.             try {
  197.                 con = this.driver.getConnectionFromDatasource("soggettiRuoliList");
  198.             } catch (Exception e) {
  199.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  200.             }

  201.         } else
  202.             con = this.driver.globalConnection;

  203.         this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);

  204.         List<Proprieta> lista = null;
  205.         try {

  206.             if (!search.equals("")) {
  207.                 //query con search
  208.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  209.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  210.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_PROPS);
  211.                 sqlQueryObject.addSelectCountField("*", "cont");
  212.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  213.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_PROPS+".id_soggetto");
  214.                 sqlQueryObject.addWhereLikeCondition(CostantiDB.SOGGETTI_PROPS+".nome", search, true, true);    
  215.                
  216.                 sqlQueryObject.setANDLogicOperator(true);
  217.                 queryString = sqlQueryObject.createSQLQuery();
  218.             } else {
  219.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  220.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  221.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_PROPS);
  222.                 sqlQueryObject.addSelectCountField("*", "cont");
  223.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  224.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_PROPS+".id_soggetto");

  225.                 sqlQueryObject.setANDLogicOperator(true);
  226.                 queryString = sqlQueryObject.createSQLQuery();
  227.             }
  228.             stmt = con.prepareStatement(queryString);
  229.             stmt.setLong(1, idSoggetto);

  230.             risultato = stmt.executeQuery();
  231.             if (risultato.next())
  232.                 ricerca.setNumEntries(idLista,risultato.getInt(1));
  233.             risultato.close();
  234.             stmt.close();

  235.             // ricavo le entries
  236.             if (limit == 0) // con limit
  237.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
  238.             if (!search.equals("")) { // con search
  239.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  240.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  241.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_PROPS);
  242.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI_PROPS+".id");
  243.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI_PROPS+".nome");
  244.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI_PROPS+".valore");
  245.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI_PROPS+".enc_value");
  246.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  247.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_PROPS+".id_soggetto");
  248.                 sqlQueryObject.addWhereLikeCondition(CostantiDB.SOGGETTI_PROPS+".nome", search, true, true);    
  249.                
  250.                 sqlQueryObject.setANDLogicOperator(true);
  251.                 sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI_PROPS+".nome");
  252.                 sqlQueryObject.setSortType(true);
  253.                 sqlQueryObject.setLimit(limit);
  254.                 sqlQueryObject.setOffset(offset);
  255.                 queryString = sqlQueryObject.createSQLQuery();
  256.             } else {
  257.                 // senza search
  258.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  259.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  260.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_PROPS);
  261.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI_PROPS+".id");
  262.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI_PROPS+".nome");
  263.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI_PROPS+".valore");
  264.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI_PROPS+".enc_value");
  265.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id=?");
  266.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_PROPS+".id_soggetto");
  267.                
  268.                 sqlQueryObject.setANDLogicOperator(true);
  269.                 sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI_PROPS+".nome");
  270.                 sqlQueryObject.setSortType(true);
  271.                 sqlQueryObject.setLimit(limit);
  272.                 sqlQueryObject.setOffset(offset);
  273.                 queryString = sqlQueryObject.createSQLQuery();
  274.             }
  275.             stmt = con.prepareStatement(queryString);
  276.             stmt.setLong(1, idSoggetto);

  277.             risultato = stmt.executeQuery();

  278.             lista = new ArrayList<>();
  279.             while (risultato.next()) {
  280.                 Proprieta proprieta = new Proprieta();
  281.                 proprieta.setId(risultato.getLong("id"));
  282.                 proprieta.setNome(risultato.getString("nome"));
  283.                 proprieta.setValore(risultato.getString("valore"));
  284.                
  285.                 String plainValue = risultato.getString("valore");
  286.                 String encValue = risultato.getString("enc_value");
  287.                 if(encValue!=null && StringUtils.isNotEmpty(encValue)) {
  288.                     proprieta.setValore(encValue);
  289.                 }
  290.                 else {
  291.                     proprieta.setValore(plainValue);
  292.                 }
  293.                
  294.                 lista.add(proprieta);
  295.             }

  296.         } catch (Exception qe) {
  297.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  298.         } finally {

  299.             //Chiudo statement and resultset
  300.             JDBCUtilities.closeResources(risultato, stmt);

  301.             this.driver.closeConnection(con);
  302.         }
  303.        
  304.         return lista;
  305.     }
  306.    

  307.     protected List<Soggetto> soggettiRegistroListByTipo(String tipoSoggetto,ISearch ricerca) throws DriverRegistroServiziException{
  308.         return soggettiRegistroList("", tipoSoggetto, ricerca);
  309.     }

  310.     protected List<Soggetto> soggettiRegistroList(String superuser, ISearch ricerca) throws DriverRegistroServiziException {
  311.         return soggettiRegistroList(superuser, null, ricerca);
  312.     }

  313.     private List<Soggetto> soggettiRegistroList(String superuser, String tipoSoggetto,ISearch ricerca) throws DriverRegistroServiziException {
  314.         String nomeMetodo = "soggettiRegistroList";
  315.         int idLista = Liste.SOGGETTI;
  316.         int offset;
  317.         int limit;
  318.         String search;
  319.         String queryString;

  320.         limit = ricerca.getPageSize(idLista);
  321.         offset = ricerca.getIndexIniziale(idLista);
  322.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));

  323.         String filterProtocollo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROTOCOLLO);
  324.         String filterProtocolli = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROTOCOLLI);
  325.         List<String> tipoSoggettiProtocollo = null;
  326.         try {
  327.             tipoSoggettiProtocollo = Filtri.convertToTipiSoggetti(filterProtocollo, filterProtocolli);
  328.         }catch(Exception e) {
  329.             throw new DriverRegistroServiziException(e.getMessage(),e);
  330.         }
  331.        
  332.         String filterDominio = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_DOMINIO);
  333.         PddTipologia pddTipologia = null;
  334.         if(filterDominio!=null && !"".equals(filterDominio)) {
  335.             pddTipologia = PddTipologia.toPddTipologia(filterDominio);
  336.         }
  337.        
  338.         String filterSoggettoDefaultTmp = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_SOGGETTO_DEFAULT);
  339.         boolean filterSoggettoDefault = false;
  340.         if(filterSoggettoDefaultTmp!=null) {
  341.             filterSoggettoDefault = "true".equalsIgnoreCase(filterSoggettoDefaultTmp.trim());
  342.         }
  343.        
  344.         String filterTipoCredenziali = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_TIPO_CREDENZIALI);
  345.         String filterCredenziale = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_CREDENZIALE);
  346.         String filterCredenzialeIssuer = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_CREDENZIALE_ISSUER);
  347.         if(filterCredenzialeIssuer!=null && "".equals(filterCredenzialeIssuer)) {
  348.             filterCredenzialeIssuer = null;
  349.         }
  350.         if(filterCredenzialeIssuer!=null && !"ssl".equals(filterTipoCredenziali)) {
  351.             filterCredenzialeIssuer = null;
  352.         }
  353.        
  354.         String filterRuolo = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_RUOLO);
  355.        
  356.         boolean isFilterTipologiaErogatore = true;
  357.         boolean isFilterTipologiaFruitore = true;
  358.         String filterTipologia = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_TIPO_SOGGETTO);
  359.         if(filterTipologia!=null && !"".equals(filterTipologia)) {
  360.             if(CostantiRegistroServizi.SOGGETTO_TIPOLOGIA_EROGATORE.equals(filterTipologia)) {
  361.                 isFilterTipologiaFruitore = false;
  362.             }
  363.             else if(CostantiRegistroServizi.SOGGETTO_TIPOLOGIA_FRUITORE.equals(filterTipologia)) {
  364.                 isFilterTipologiaErogatore = false;
  365.             }
  366.         }
  367.        
  368.         boolean isFilterGruppoErogazione = false;
  369.         boolean isFilterGruppoFruizione = false;
  370.         String filterGruppo = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_GRUPPO);
  371.         if(filterGruppo!=null && !"".equals(filterGruppo)) {
  372.             isFilterGruppoErogazione = true;
  373.             isFilterGruppoFruizione = true;
  374.         }

  375.         TipoPdD apiContesto = null;
  376.         String filterApiContesto = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_API_CONTESTO);
  377.         if(filterApiContesto!=null && !"".equals(filterApiContesto)) {
  378.             apiContesto = TipoPdD.toTipoPdD(filterApiContesto);
  379.             if(TipoPdD.APPLICATIVA.equals(apiContesto)) {
  380.                 isFilterGruppoFruizione = false;
  381.             }
  382.             else if(TipoPdD.DELEGATA.equals(apiContesto)) {
  383.                 isFilterGruppoErogazione = false;
  384.             }
  385.             else {
  386.                 apiContesto = null;
  387.             }
  388.         }
  389.        
  390.         String filterApiImplementazione = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_API_IMPLEMENTAZIONE);
  391.         IDServizio apiImplementazioneErogazione = null;
  392.         IDFruizione apiImplementazioneFruizione = null;
  393.         if(filterApiImplementazione!=null && !"".equals(filterApiImplementazione)) {
  394.             if(TipoPdD.APPLICATIVA.equals(apiContesto)) {
  395.                 try {
  396.                     apiImplementazioneErogazione = IDServizio.toIDServizio(filterApiImplementazione);
  397.                     isFilterGruppoErogazione=false; // non ha piu' senso ho selezionato una erogazione puntuale
  398.                 }catch(Exception e) {
  399.                     throw new DriverRegistroServiziException("Filtro API Implementazione '"+filterApiImplementazione+"' non valido: "+e.getMessage(),e);
  400.                 }
  401.             }
  402.             else if(TipoPdD.DELEGATA.equals(apiContesto)) {
  403.                 try {
  404.                     apiImplementazioneFruizione = IDFruizione.toIDFruizione(filterApiImplementazione);
  405.                     isFilterGruppoFruizione=false; // non ha piu' senso ho selezionato una fruizione puntuale
  406.                 }catch(Exception e) {
  407.                     throw new DriverRegistroServiziException("Filtro API Implementazione '"+filterApiImplementazione+"' non valido: "+e.getMessage(),e);
  408.                 }
  409.             }
  410.         }
  411.        
  412.         String filtroProprietaNome = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROPRIETA_NOME);
  413.         String filtroProprietaValore = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROPRIETA_VALORE);
  414.         if((filtroProprietaNome!=null && "".equals(filtroProprietaNome))) {
  415.             filtroProprietaNome=null;
  416.         }
  417.         if((filtroProprietaValore!=null && "".equals(filtroProprietaValore))) {
  418.             filtroProprietaValore=null;
  419.         }
  420.         boolean filtroProprieta = filtroProprietaNome!=null || filtroProprietaValore!=null;
  421.        
  422.         this.driver.logDebug("search : " + search);
  423.         this.driver.logDebug("filterProtocollo : " + filterProtocollo);
  424.         this.driver.logDebug("filterProtocolli : " + filterProtocolli);
  425.         this.driver.logDebug("filterDominio : " + filterDominio);
  426.         this.driver.logDebug("filterSoggettoDefault : " + filterSoggettoDefault);
  427.         this.driver.logDebug("filterRuolo : " + filterRuolo);
  428.         this.driver.logDebug("filterTipoCredenziali : " + filterTipoCredenziali);
  429.         this.driver.logDebug("filterCredenziale : " + filterCredenziale);
  430.         this.driver.logDebug("filterCredenzialeIssuer : " + filterCredenzialeIssuer);
  431.         this.driver.logDebug("filterTipologiaSoggetto : " + filterTipologia);
  432.         this.driver.logDebug("filterGruppo : " + filterGruppo);
  433.         this.driver.logDebug("filterApiContesto : " + filterApiContesto);
  434.         this.driver.logDebug("filterApiImplementazione : " + filterApiImplementazione);
  435.         this.driver.logDebug("filtroProprietaNome : " + filtroProprietaNome);
  436.         this.driver.logDebug("filtroProprietaValore : " + filtroProprietaValore);
  437.        
  438.         Connection con = null;
  439.         PreparedStatement stmt = null;
  440.         ResultSet risultato = null;
  441.         ArrayList<Soggetto> lista = new ArrayList<>();

  442.         if (this.driver.atomica) {
  443.             try {
  444.                 con = this.driver.getConnectionFromDatasource("soggettiRegistroList");
  445.             } catch (Exception e) {
  446.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  447.             }

  448.         } else
  449.             con = this.driver.globalConnection;

  450.         this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);

  451.         try {

  452.             /* === Filtro Dominio === */
  453.            
  454.             ISQLQueryObject sqlQueryObjectPdd = null;
  455.             if(pddTipologia!=null && PddTipologia.ESTERNO.equals(pddTipologia)) {
  456.                 ISQLQueryObject sqlQueryObjectExistsPdd = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  457.                 sqlQueryObjectExistsPdd.addSelectField(CostantiDB.PDD+".nome");
  458.                 sqlQueryObjectExistsPdd.addFromTable(CostantiDB.PDD);
  459.                 sqlQueryObjectExistsPdd.setANDLogicOperator(true);
  460.                 sqlQueryObjectExistsPdd.addWhereCondition(CostantiDB.PDD+".nome="+CostantiDB.SOGGETTI+".server");
  461.                 sqlQueryObjectExistsPdd.addWhereCondition(CostantiDB.PDD+".tipo=?");
  462.                
  463.                 sqlQueryObjectPdd = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  464.                 sqlQueryObjectPdd.setANDLogicOperator(false);
  465.                 sqlQueryObjectPdd.addWhereIsNullCondition(CostantiDB.SOGGETTI+".server");
  466.                 sqlQueryObjectPdd.addWhereExistsCondition(false, sqlQueryObjectExistsPdd);
  467.             }  
  468.            
  469.            
  470.             /* === Filtro Tipologia, Gruppo, Tipo Erogazione/Fruizione, Implementazione API === */
  471.            
  472.             List<String> existsConditions = new ArrayList<>();
  473.             List<Object> existsParameters = new ArrayList<>();
  474.             String alias_CT = "ct";
  475.             String alias_ALLARMI = "alarm";
  476.             String alias_PD = "pd";
  477.             String alias_PA_SOGGETTI = "pasog";
  478.             String alias_PA = "pa";
  479.             String alias_PA_TRASFORMAZIONI_SOGGETTI = "patsog";
  480.             String alias_PA_TRASFORMAZIONI = "pat";
  481.             String alias_SERVIZI = "s";
  482.             String alias_ACCORDI = "a";
  483.             String alias_ACCORDI_GRUPPI = "ag";
  484.             String alias_GRUPPI = "g";
  485.             String alias_SOGGETTI = "sProprietario";
  486.            
  487.            
  488.             // ** erogatore **
  489.            
  490.             if(isFilterTipologiaErogatore) {
  491.            
  492.                 // indipedente da fruizione o erogazione
  493.                 if(apiContesto==null) {
  494.                    
  495.                     if(!isFilterTipologiaFruitore || (isFilterGruppoFruizione || isFilterGruppoErogazione) ) {
  496.                         ISQLQueryObject sqlQueryObjectErogatore = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  497.                         sqlQueryObjectErogatore.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  498.                         if(isFilterGruppoFruizione) {
  499.                             sqlQueryObjectErogatore.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  500.                             sqlQueryObjectErogatore.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  501.                             sqlQueryObjectErogatore.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  502.                         }
  503.                         sqlQueryObjectErogatore.addSelectAliasField(alias_SERVIZI, "id", alias_SERVIZI+"id");
  504.                         sqlQueryObjectErogatore.setANDLogicOperator(true);
  505.                         sqlQueryObjectErogatore.addWhereCondition(alias_SERVIZI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  506.                         if(isFilterGruppoFruizione) {
  507.                             sqlQueryObjectErogatore.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  508.                             sqlQueryObjectErogatore.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  509.                             sqlQueryObjectErogatore.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  510.                             sqlQueryObjectErogatore.addWhereCondition(alias_GRUPPI+".nome = ?");
  511.                             existsParameters.add(filterGruppo);
  512.                         }
  513.                         existsConditions.add(sqlQueryObjectErogatore.getWhereExistsCondition(false, sqlQueryObjectErogatore));
  514.                     }
  515.                    
  516.                 }
  517.                 else {
  518.                    
  519.                     // erogatore sulle porte delegate
  520.                     if(TipoPdD.DELEGATA.equals(apiContesto) || apiImplementazioneFruizione!=null) {
  521.                         ISQLQueryObject sqlQueryObjectErogatorePorteDelegate = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  522.                         sqlQueryObjectErogatorePorteDelegate.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  523.                         if(isFilterGruppoFruizione) {
  524.                             sqlQueryObjectErogatorePorteDelegate.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  525.                             sqlQueryObjectErogatorePorteDelegate.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  526.                             sqlQueryObjectErogatorePorteDelegate.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  527.                         }
  528.                         if(TipoPdD.DELEGATA.equals(apiContesto) || apiImplementazioneFruizione!=null) {
  529.                             sqlQueryObjectErogatorePorteDelegate.addFromTable(CostantiDB.PORTE_DELEGATE,alias_PD);
  530.                             if(apiImplementazioneFruizione!=null) {
  531.                                 sqlQueryObjectErogatorePorteDelegate.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  532.                             }
  533.                         }
  534.                         sqlQueryObjectErogatorePorteDelegate.addSelectAliasField(alias_SERVIZI, "id", alias_SERVIZI+"id");
  535.                         sqlQueryObjectErogatorePorteDelegate.setANDLogicOperator(true);
  536.                         sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_SERVIZI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  537.                         if(isFilterGruppoFruizione) {
  538.                             sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  539.                             sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  540.                             sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  541.                             sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_GRUPPI+".nome = ?");
  542.                             existsParameters.add(filterGruppo);
  543.                         }
  544.                         if(TipoPdD.DELEGATA.equals(apiContesto) || apiImplementazioneFruizione!=null) {
  545.                             sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_PD+".id_servizio = "+alias_SERVIZI+".id");
  546.                             if(apiImplementazioneFruizione!=null) {
  547.                                 sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_PD+".id_soggetto = "+alias_SOGGETTI+".id");
  548.                                 sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  549.                                 sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  550.                                 sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_PD+".tipo_soggetto_erogatore = ?");
  551.                                 sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_PD+".nome_soggetto_erogatore = ?");
  552.                                 sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_PD+".tipo_servizio = ?");
  553.                                 sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_PD+".nome_servizio = ?");
  554.                                 sqlQueryObjectErogatorePorteDelegate.addWhereCondition(alias_PD+".versione_servizio = ?");
  555.                                 existsParameters.add(apiImplementazioneFruizione.getIdFruitore().getTipo());
  556.                                 existsParameters.add(apiImplementazioneFruizione.getIdFruitore().getNome());
  557.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getSoggettoErogatore().getTipo());
  558.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getSoggettoErogatore().getNome());
  559.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getTipo());
  560.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getNome());
  561.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getVersione());
  562.                             }
  563.                         }                  
  564.                         existsConditions.add(sqlQueryObjectErogatorePorteDelegate.getWhereExistsCondition(false, sqlQueryObjectErogatorePorteDelegate));
  565.                     }
  566.                    
  567.                     // erogatore sulle porte applicative
  568.                    
  569.                     else if(TipoPdD.APPLICATIVA.equals(apiContesto) || apiImplementazioneErogazione!=null) {
  570.                         ISQLQueryObject sqlQueryObjectErogatorePorteApplicative = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  571.                         sqlQueryObjectErogatorePorteApplicative.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  572.                         if(isFilterGruppoErogazione) {
  573.                             sqlQueryObjectErogatorePorteApplicative.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  574.                             sqlQueryObjectErogatorePorteApplicative.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  575.                             sqlQueryObjectErogatorePorteApplicative.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  576.                         }
  577.                         if(TipoPdD.APPLICATIVA.equals(apiContesto) || apiImplementazioneErogazione!=null) {
  578.                             sqlQueryObjectErogatorePorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE,alias_PA);
  579.                         }
  580.                         sqlQueryObjectErogatorePorteApplicative.addSelectAliasField(alias_SERVIZI, "id", alias_SERVIZI+"id");
  581.                         sqlQueryObjectErogatorePorteApplicative.setANDLogicOperator(true);
  582.                         sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_SERVIZI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  583.                         if(isFilterGruppoErogazione) {
  584.                             sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  585.                             sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  586.                             sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  587.                             sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_GRUPPI+".nome = ?");
  588.                             existsParameters.add(filterGruppo);
  589.                         }
  590.                         if(TipoPdD.APPLICATIVA.equals(apiContesto) || apiImplementazioneErogazione!=null) {
  591.                             sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_PA+".id_servizio = "+alias_SERVIZI+".id");
  592.                             if(apiImplementazioneErogazione!=null) {
  593.                                 sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_PA+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  594.                                 sqlQueryObjectErogatorePorteApplicative.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto = ?");
  595.                                 sqlQueryObjectErogatorePorteApplicative.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto = ?");
  596.                                 sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_PA+".tipo_servizio = ?");
  597.                                 sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_PA+".servizio = ?");
  598.                                 sqlQueryObjectErogatorePorteApplicative.addWhereCondition(alias_PA+".versione_servizio = ?");
  599.                                 existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getTipo());
  600.                                 existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getNome());
  601.                                 existsParameters.add(apiImplementazioneErogazione.getTipo());
  602.                                 existsParameters.add(apiImplementazioneErogazione.getNome());
  603.                                 existsParameters.add(apiImplementazioneErogazione.getVersione());
  604.                             }
  605.                         }                  
  606.                         existsConditions.add(sqlQueryObjectErogatorePorteApplicative.getWhereExistsCondition(false, sqlQueryObjectErogatorePorteApplicative));
  607.                     }
  608.                 }
  609.             }
  610.            

  611.            
  612.             // ** fruitore **
  613.            
  614.             if(isFilterTipologiaFruitore) {
  615.                
  616.                 // porte delegate proprietario
  617.                 if( (!isFilterTipologiaErogatore && apiContesto==null) || isFilterGruppoFruizione || TipoPdD.DELEGATA.equals(apiContesto) || apiImplementazioneFruizione!=null) {
  618.                     ISQLQueryObject sqlQueryObjectProprietrioPorteDelegate = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  619.                     sqlQueryObjectProprietrioPorteDelegate.addFromTable(CostantiDB.PORTE_DELEGATE,alias_PD);
  620.                     if(isFilterGruppoFruizione) {
  621.                         sqlQueryObjectProprietrioPorteDelegate.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  622.                         sqlQueryObjectProprietrioPorteDelegate.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  623.                         sqlQueryObjectProprietrioPorteDelegate.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  624.                         sqlQueryObjectProprietrioPorteDelegate.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  625.                     }
  626.                     if(apiImplementazioneFruizione!=null) {
  627.                         sqlQueryObjectProprietrioPorteDelegate.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  628.                     }
  629.                     sqlQueryObjectProprietrioPorteDelegate.addSelectAliasField(alias_PD, "id", alias_PD+"id");
  630.                     sqlQueryObjectProprietrioPorteDelegate.setANDLogicOperator(true);
  631.                     sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_PD+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  632.                     if(isFilterGruppoFruizione) {
  633.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_PD+".id_servizio = "+alias_SERVIZI+".id");
  634.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  635.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  636.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  637.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_GRUPPI+".nome = ?");
  638.                         existsParameters.add(filterGruppo);
  639.                     }
  640.                     if(apiImplementazioneFruizione!=null) {
  641.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto = ?");
  642.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto = ?");
  643.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_PD+".tipo_soggetto_erogatore = ?");
  644.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_PD+".nome_soggetto_erogatore = ?");
  645.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_PD+".tipo_servizio = ?");
  646.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_PD+".nome_servizio = ?");
  647.                         sqlQueryObjectProprietrioPorteDelegate.addWhereCondition(alias_PD+".versione_servizio = ?");
  648.                         existsParameters.add(apiImplementazioneFruizione.getIdFruitore().getTipo());
  649.                         existsParameters.add(apiImplementazioneFruizione.getIdFruitore().getNome());
  650.                         existsParameters.add(apiImplementazioneFruizione.getIdServizio().getSoggettoErogatore().getTipo());
  651.                         existsParameters.add(apiImplementazioneFruizione.getIdServizio().getSoggettoErogatore().getNome());
  652.                         existsParameters.add(apiImplementazioneFruizione.getIdServizio().getTipo());
  653.                         existsParameters.add(apiImplementazioneFruizione.getIdServizio().getNome());
  654.                         existsParameters.add(apiImplementazioneFruizione.getIdServizio().getVersione());
  655.                     }
  656.                    
  657.                     existsConditions.add(sqlQueryObjectProprietrioPorteDelegate.getWhereExistsCondition(false, sqlQueryObjectProprietrioPorteDelegate));
  658.                 }
  659.                
  660.                 // autorizzazioni soggetti porte applicative
  661.                 if( (!isFilterTipologiaErogatore && apiContesto==null) || isFilterGruppoErogazione || TipoPdD.APPLICATIVA.equals(apiContesto) || apiImplementazioneErogazione!=null) {
  662.                     ISQLQueryObject sqlQueryObjectAutorizzazioniPorteApplicative = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  663.                     sqlQueryObjectAutorizzazioniPorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE_SOGGETTI,alias_PA_SOGGETTI);
  664.                     sqlQueryObjectAutorizzazioniPorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE,alias_PA);
  665.                     if(isFilterGruppoErogazione) {
  666.                         sqlQueryObjectAutorizzazioniPorteApplicative.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  667.                         sqlQueryObjectAutorizzazioniPorteApplicative.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  668.                         sqlQueryObjectAutorizzazioniPorteApplicative.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  669.                         sqlQueryObjectAutorizzazioniPorteApplicative.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  670.                     }
  671.                     if(apiImplementazioneErogazione!=null) {
  672.                         sqlQueryObjectAutorizzazioniPorteApplicative.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  673.                     }
  674.                     sqlQueryObjectAutorizzazioniPorteApplicative.addSelectAliasField(alias_PA_SOGGETTI, "id", alias_PA_SOGGETTI+"id");
  675.                     sqlQueryObjectAutorizzazioniPorteApplicative.setANDLogicOperator(true);
  676.                     sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_PA_SOGGETTI+".tipo_soggetto = "+CostantiDB.SOGGETTI+".tipo_soggetto");
  677.                     sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_PA_SOGGETTI+".nome_soggetto = "+CostantiDB.SOGGETTI+".nome_soggetto");
  678.                     sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_PA_SOGGETTI+".id_porta = "+alias_PA+".id");
  679.                     if(isFilterGruppoErogazione) {
  680.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_PA+".id_servizio = "+alias_SERVIZI+".id");
  681.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  682.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  683.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  684.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_GRUPPI+".nome = ?");
  685.                         existsParameters.add(filterGruppo);
  686.                     }
  687.                     if(apiImplementazioneErogazione!=null) {
  688.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_PA+".id_soggetto = "+alias_SOGGETTI+".id");
  689.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  690.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  691.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_PA+".tipo_servizio = ?");
  692.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_PA+".servizio = ?");
  693.                         sqlQueryObjectAutorizzazioniPorteApplicative.addWhereCondition(alias_PA+".versione_servizio = ?");
  694.                         existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getTipo());
  695.                         existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getNome());
  696.                         existsParameters.add(apiImplementazioneErogazione.getTipo());
  697.                         existsParameters.add(apiImplementazioneErogazione.getNome());
  698.                         existsParameters.add(apiImplementazioneErogazione.getVersione());
  699.                     }
  700.                    
  701.                     existsConditions.add(sqlQueryObjectAutorizzazioniPorteApplicative.getWhereExistsCondition(false, sqlQueryObjectAutorizzazioniPorteApplicative));
  702.                 }
  703.                
  704.                 // controllo del traffico (fruitore)
  705.                
  706.                 // Controllo del traffico sulle porte delegate
  707.                 // e' cablato il soggetto fruitore e il proprietrio della porta delegata
  708.                 /*
  709.                 if( (!isFilterTipologiaErogatore && apiContesto==null) || isFilterGruppoFruizione  || TipoPdD.DELEGATA.equals(apiContesto) || apiImplementazioneFruizione!=null) {
  710.                     ISQLQueryObject sqlQueryObjectControlloTrafficoPorteDelegate = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  711.                     sqlQueryObjectControlloTrafficoPorteDelegate.addFromTable(CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY,alias_CT);
  712.                     if(isFilterGruppoFruizione || apiImplementazioneFruizione!=null) {
  713.                         sqlQueryObjectControlloTrafficoPorteDelegate.addFromTable(CostantiDB.PORTE_DELEGATE,alias_PD);
  714.                         if(isFilterGruppoFruizione) {
  715.                             sqlQueryObjectControlloTrafficoPorteDelegate.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  716.                             sqlQueryObjectControlloTrafficoPorteDelegate.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  717.                             sqlQueryObjectControlloTrafficoPorteDelegate.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  718.                             sqlQueryObjectControlloTrafficoPorteDelegate.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  719.                         }
  720.                         if(apiImplementazioneFruizione!=null) {
  721.                             sqlQueryObjectControlloTrafficoPorteDelegate.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  722.                         }
  723.                     }
  724.                     sqlQueryObjectControlloTrafficoPorteDelegate.addSelectAliasField(alias_CT, "id", alias_CT+"id");
  725.                     sqlQueryObjectControlloTrafficoPorteDelegate.setANDLogicOperator(true);
  726.                     sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_CT+".filtro_tipo_fruitore = "+CostantiDB.SOGGETTI+".tipo_soggetto");
  727.                     sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_CT+".filtro_nome_fruitore = "+CostantiDB.SOGGETTI+".nome_soggetto");
  728.                     sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_CT+".filtro_ruolo = 'delegata'");
  729.                     if(isFilterGruppoFruizione || apiImplementazioneFruizione!=null) {
  730.                         sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_CT+".filtro_porta = "+alias_PD+".nome_porta");
  731.                         if(isFilterGruppoFruizione) {
  732.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_PD+".id_servizio = "+alias_SERVIZI+".id");
  733.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  734.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  735.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  736.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_GRUPPI+".nome = ?");
  737.                             existsParameters.add(filterGruppo);
  738.                         }
  739.                         if(apiImplementazioneFruizione!=null) {
  740.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_PD+".id_soggetto = "+alias_SOGGETTI+".id");
  741.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  742.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  743.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_PD+".tipo_soggetto_erogatore = ?");
  744.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_PD+".nome_soggetto_erogatore = ?");
  745.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_PD+".tipo_servizio = ?");
  746.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_PD+".nome_servizio = ?");
  747.                             sqlQueryObjectControlloTrafficoPorteDelegate.addWhereCondition(alias_PD+".versione_servizio = ?");
  748.                             existsParameters.add(apiImplementazioneFruizione.getIdFruitore().getTipo());
  749.                             existsParameters.add(apiImplementazioneFruizione.getIdFruitore().getNome());
  750.                             existsParameters.add(apiImplementazioneFruizione.getIdServizio().getSoggettoErogatore().getTipo());
  751.                             existsParameters.add(apiImplementazioneFruizione.getIdServizio().getSoggettoErogatore().getNome());
  752.                             existsParameters.add(apiImplementazioneFruizione.getIdServizio().getTipo());
  753.                             existsParameters.add(apiImplementazioneFruizione.getIdServizio().getNome());
  754.                             existsParameters.add(apiImplementazioneFruizione.getIdServizio().getVersione());
  755.                         }
  756.                     }
  757.                    
  758.                     existsConditions.add(sqlQueryObjectControlloTrafficoPorteDelegate.getWhereExistsCondition(false, sqlQueryObjectControlloTrafficoPorteDelegate));
  759.                 }
  760.                 */
  761.                
  762.                 // Controllo del traffico sulle porte applicative
  763.                 if( (!isFilterTipologiaErogatore && apiContesto==null) || isFilterGruppoErogazione  || TipoPdD.APPLICATIVA.equals(apiContesto) || apiImplementazioneErogazione!=null) {
  764.                     ISQLQueryObject sqlQueryObjectControlloTrafficoPorteApplicative = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  765.                     sqlQueryObjectControlloTrafficoPorteApplicative.addFromTable(CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY,alias_CT);
  766.                     if(isFilterGruppoErogazione || apiImplementazioneErogazione!=null) {
  767.                         sqlQueryObjectControlloTrafficoPorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE,alias_PA);
  768.                         if(isFilterGruppoErogazione) {
  769.                             sqlQueryObjectControlloTrafficoPorteApplicative.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  770.                             sqlQueryObjectControlloTrafficoPorteApplicative.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  771.                             sqlQueryObjectControlloTrafficoPorteApplicative.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  772.                             sqlQueryObjectControlloTrafficoPorteApplicative.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  773.                         }
  774.                         if(apiImplementazioneErogazione!=null) {
  775.                             sqlQueryObjectControlloTrafficoPorteApplicative.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  776.                         }
  777.                     }
  778.                     sqlQueryObjectControlloTrafficoPorteApplicative.addSelectAliasField(alias_CT, "id", alias_CT+"id");
  779.                     sqlQueryObjectControlloTrafficoPorteApplicative.setANDLogicOperator(true);
  780.                     sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_CT+".filtro_tipo_fruitore = "+CostantiDB.SOGGETTI+".tipo_soggetto");
  781.                     sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_CT+".filtro_nome_fruitore = "+CostantiDB.SOGGETTI+".nome_soggetto");
  782.                     sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_CT+".filtro_ruolo = 'applicativa'");
  783.                     if(isFilterGruppoErogazione || apiImplementazioneErogazione!=null) {
  784.                         sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_CT+".filtro_porta = "+alias_PA+".nome_porta");
  785.                         if(isFilterGruppoErogazione) {
  786.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_PA+".id_servizio = "+alias_SERVIZI+".id");
  787.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  788.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  789.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  790.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_GRUPPI+".nome = ?");
  791.                             existsParameters.add(filterGruppo);
  792.                         }
  793.                         if(apiImplementazioneErogazione!=null) {
  794.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_PA+".id_soggetto = "+alias_SOGGETTI+".id");
  795.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  796.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  797.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_PA+".tipo_servizio = ?");
  798.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_PA+".servizio = ?");
  799.                             sqlQueryObjectControlloTrafficoPorteApplicative.addWhereCondition(alias_PA+".versione_servizio = ?");
  800.                             existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getTipo());
  801.                             existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getNome());
  802.                             existsParameters.add(apiImplementazioneErogazione.getTipo());
  803.                             existsParameters.add(apiImplementazioneErogazione.getNome());
  804.                             existsParameters.add(apiImplementazioneErogazione.getVersione());
  805.                         }
  806.                     }
  807.                    
  808.                     existsConditions.add(sqlQueryObjectControlloTrafficoPorteApplicative.getWhereExistsCondition(false, sqlQueryObjectControlloTrafficoPorteApplicative));
  809.                 }
  810.                
  811.                 if(CostantiDB.isAllarmiEnabled()) {
  812.                    
  813.                     // allarmi (fruitore)
  814.                    
  815.                     // Allarmi sulle porte delegate
  816.                     // e' cablato il soggetto fruitore e il proprietrio della porta delegata
  817.                     /*
  818.                     if( (!isFilterTipologiaErogatore && apiContesto==null) || isFilterGruppoFruizione  || TipoPdD.DELEGATA.equals(apiContesto) || apiImplementazioneFruizione!=null) {
  819.                         ISQLQueryObject sqlQueryObjectPorteDelegate = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  820.                         sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.ALLARMI,alias_ALLARMI);
  821.                         if(isFilterGruppoFruizione || apiImplementazioneFruizione!=null) {
  822.                             sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.PORTE_DELEGATE,alias_PD);
  823.                             if(isFilterGruppoFruizione) {
  824.                                 sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  825.                                 sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  826.                                 sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  827.                                 sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  828.                             }
  829.                             if(apiImplementazioneFruizione!=null) {
  830.                                 sqlQueryObjectPorteDelegate.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  831.                             }
  832.                         }
  833.                         sqlQueryObjectPorteDelegate.addSelectAliasField(alias_ALLARMI, "id", alias_ALLARMI+"id");
  834.                         sqlQueryObjectPorteDelegate.setANDLogicOperator(true);
  835.                         sqlQueryObjectPorteDelegate.addWhereCondition(alias_ALLARMI+".filtro_tipo_fruitore = "+CostantiDB.SOGGETTI+".tipo_soggetto");
  836.                         sqlQueryObjectPorteDelegate.addWhereCondition(alias_ALLARMI+".filtro_nome_fruitore = "+CostantiDB.SOGGETTI+".nome_soggetto");
  837.                         sqlQueryObjectPorteDelegate.addWhereCondition(alias_ALLARMI+".filtro_ruolo = 'delegata'");
  838.                         if(isFilterGruppoFruizione || apiImplementazioneFruizione!=null) {
  839.                             sqlQueryObjectPorteDelegate.addWhereCondition(alias_ALLARMI+".filtro_porta = "+alias_PD+".nome_porta");
  840.                             if(isFilterGruppoFruizione) {
  841.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".id_servizio = "+alias_SERVIZI+".id");
  842.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  843.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  844.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  845.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_GRUPPI+".nome = ?");
  846.                                 existsParameters.add(filterGruppo);
  847.                             }
  848.                             if(apiImplementazioneFruizione!=null) {
  849.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".id_soggetto = "+alias_SOGGETTI+".id");
  850.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  851.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  852.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".tipo_soggetto_erogatore = ?");
  853.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".nome_soggetto_erogatore = ?");
  854.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".tipo_servizio = ?");
  855.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".nome_servizio = ?");
  856.                                 sqlQueryObjectPorteDelegate.addWhereCondition(alias_PD+".versione_servizio = ?");
  857.                                 existsParameters.add(apiImplementazioneFruizione.getIdFruitore().getTipo());
  858.                                 existsParameters.add(apiImplementazioneFruizione.getIdFruitore().getNome());
  859.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getSoggettoErogatore().getTipo());
  860.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getSoggettoErogatore().getNome());
  861.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getTipo());
  862.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getNome());
  863.                                 existsParameters.add(apiImplementazioneFruizione.getIdServizio().getVersione());
  864.                             }
  865.                         }
  866.                        
  867.                         existsConditions.add(sqlQueryObjectPorteDelegate.getWhereExistsCondition(false, sqlQueryObjectPorteDelegate));
  868.                     }
  869.                     */
  870.                    
  871.                     // Allarmi sulle porte applicative
  872.                     if( (!isFilterTipologiaErogatore && apiContesto==null) || isFilterGruppoErogazione  || TipoPdD.APPLICATIVA.equals(apiContesto) || apiImplementazioneErogazione!=null) {
  873.                         ISQLQueryObject sqlQueryObjectPorteApplicative = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  874.                         sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.ALLARMI,alias_ALLARMI);
  875.                         if(isFilterGruppoErogazione || apiImplementazioneErogazione!=null) {
  876.                             sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE,alias_PA);
  877.                             if(isFilterGruppoErogazione) {
  878.                                 sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  879.                                 sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  880.                                 sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  881.                                 sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  882.                             }
  883.                             if(apiImplementazioneErogazione!=null) {
  884.                                 sqlQueryObjectPorteApplicative.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  885.                             }
  886.                         }
  887.                         sqlQueryObjectPorteApplicative.addSelectAliasField(alias_ALLARMI, "id", alias_ALLARMI+"id");
  888.                         sqlQueryObjectPorteApplicative.setANDLogicOperator(true);
  889.                         sqlQueryObjectPorteApplicative.addWhereCondition(alias_ALLARMI+".filtro_tipo_fruitore = "+CostantiDB.SOGGETTI+".tipo_soggetto");
  890.                         sqlQueryObjectPorteApplicative.addWhereCondition(alias_ALLARMI+".filtro_nome_fruitore = "+CostantiDB.SOGGETTI+".nome_soggetto");
  891.                         sqlQueryObjectPorteApplicative.addWhereCondition(alias_ALLARMI+".filtro_ruolo = 'applicativa'");
  892.                         if(isFilterGruppoErogazione || apiImplementazioneErogazione!=null) {
  893.                             sqlQueryObjectPorteApplicative.addWhereCondition(alias_ALLARMI+".filtro_porta = "+alias_PA+".nome_porta");
  894.                             if(isFilterGruppoErogazione) {
  895.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".id_servizio = "+alias_SERVIZI+".id");
  896.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  897.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  898.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  899.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_GRUPPI+".nome = ?");
  900.                                 existsParameters.add(filterGruppo);
  901.                             }
  902.                             if(apiImplementazioneErogazione!=null) {
  903.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".id_soggetto = "+alias_SOGGETTI+".id");
  904.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  905.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  906.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".tipo_servizio = ?");
  907.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".servizio = ?");
  908.                                 sqlQueryObjectPorteApplicative.addWhereCondition(alias_PA+".versione_servizio = ?");
  909.                                 existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getTipo());
  910.                                 existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getNome());
  911.                                 existsParameters.add(apiImplementazioneErogazione.getTipo());
  912.                                 existsParameters.add(apiImplementazioneErogazione.getNome());
  913.                                 existsParameters.add(apiImplementazioneErogazione.getVersione());
  914.                             }
  915.                         }
  916.                        
  917.                         existsConditions.add(sqlQueryObjectPorteApplicative.getWhereExistsCondition(false, sqlQueryObjectPorteApplicative));
  918.                     }
  919.                 }
  920.                
  921.                 // porte_applicative trasformazioni
  922.                
  923.                 if((!isFilterTipologiaErogatore && apiContesto==null) ||  isFilterGruppoErogazione  || TipoPdD.APPLICATIVA.equals(apiContesto) || apiImplementazioneErogazione!=null) {
  924.                     ISQLQueryObject sqlQueryObjectTrasformazioniPorteApplicative = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  925.                     sqlQueryObjectTrasformazioniPorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI_SOGGETTI,alias_PA_TRASFORMAZIONI_SOGGETTI);
  926.                     sqlQueryObjectTrasformazioniPorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE_TRASFORMAZIONI,alias_PA_TRASFORMAZIONI);
  927.                     sqlQueryObjectTrasformazioniPorteApplicative.addFromTable(CostantiDB.PORTE_APPLICATIVE,alias_PA);
  928.                     if(isFilterGruppoErogazione) {
  929.                         sqlQueryObjectTrasformazioniPorteApplicative.addFromTable(CostantiDB.SERVIZI,alias_SERVIZI);
  930.                         sqlQueryObjectTrasformazioniPorteApplicative.addFromTable(CostantiDB.ACCORDI,alias_ACCORDI);
  931.                         sqlQueryObjectTrasformazioniPorteApplicative.addFromTable(CostantiDB.ACCORDI_GRUPPI,alias_ACCORDI_GRUPPI);
  932.                         sqlQueryObjectTrasformazioniPorteApplicative.addFromTable(CostantiDB.GRUPPI,alias_GRUPPI);
  933.                     }
  934.                     if(apiImplementazioneErogazione!=null) {
  935.                         sqlQueryObjectTrasformazioniPorteApplicative.addFromTable(CostantiDB.SOGGETTI,alias_SOGGETTI);
  936.                     }
  937.                     sqlQueryObjectTrasformazioniPorteApplicative.addSelectAliasField(alias_PA_TRASFORMAZIONI_SOGGETTI, "id", alias_PA_TRASFORMAZIONI_SOGGETTI+"id");
  938.                     sqlQueryObjectTrasformazioniPorteApplicative.setANDLogicOperator(true);
  939.                     sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA_TRASFORMAZIONI_SOGGETTI+".tipo_soggetto = "+CostantiDB.SOGGETTI+".tipo_soggetto");
  940.                     sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA_TRASFORMAZIONI_SOGGETTI+".nome_soggetto = "+CostantiDB.SOGGETTI+".nome_soggetto");
  941.                     sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA_TRASFORMAZIONI_SOGGETTI+".id_trasformazione = "+alias_PA_TRASFORMAZIONI+".id");
  942.                     sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA_TRASFORMAZIONI+".id_porta = "+alias_PA+".id");
  943.                     if(isFilterGruppoErogazione) {
  944.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA+".id_servizio = "+alias_SERVIZI+".id");
  945.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_SERVIZI+".id_accordo = "+alias_ACCORDI+".id");
  946.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_accordo = "+alias_ACCORDI+".id");
  947.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_ACCORDI_GRUPPI+".id_gruppo = "+alias_GRUPPI+".id");
  948.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_GRUPPI+".nome = ?");
  949.                         existsParameters.add(filterGruppo);
  950.                     }
  951.                     if(apiImplementazioneErogazione!=null) {
  952.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA+".id_soggetto = "+alias_SOGGETTI+".id");
  953.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_SOGGETTI+".tipo_soggetto = ?");
  954.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_SOGGETTI+".nome_soggetto = ?");
  955.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA+".tipo_servizio = ?");
  956.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA+".servizio = ?");
  957.                         sqlQueryObjectTrasformazioniPorteApplicative.addWhereCondition(alias_PA+".versione_servizio = ?");
  958.                         existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getTipo());
  959.                         existsParameters.add(apiImplementazioneErogazione.getSoggettoErogatore().getNome());
  960.                         existsParameters.add(apiImplementazioneErogazione.getTipo());
  961.                         existsParameters.add(apiImplementazioneErogazione.getNome());
  962.                         existsParameters.add(apiImplementazioneErogazione.getVersione());
  963.                     }
  964.                    
  965.                     existsConditions.add(sqlQueryObjectTrasformazioniPorteApplicative.getWhereExistsCondition(false, sqlQueryObjectTrasformazioniPorteApplicative));
  966.                 }
  967.             }
  968.            

  969.    
  970.            
  971.            
  972.            
  973.            
  974.            
  975.             if (!search.equals("")) {
  976.                 //query con search
  977.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  978.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  979.                 sqlQueryObject.addSelectCountField("*", "cont");
  980.                 if(filterSoggettoDefault) {
  981.                     sqlQueryObject.addWhereCondition("is_default = ?");
  982.                 }
  983.                 if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  984.                     sqlQueryObject.addWhereCondition("superuser = ?");
  985.                 if(tipoSoggetto!=null){
  986.                     sqlQueryObject.addWhereCondition("tipo_soggetto=?");
  987.                     sqlQueryObject.addWhereLikeCondition("nome_soggetto", search, true, true);  
  988.                 }
  989.                 else{
  990.                     sqlQueryObject.addWhereCondition(false,
  991.                             sqlQueryObject.getWhereLikeCondition("tipo_soggetto", search, true, true),
  992.                             sqlQueryObject.getWhereLikeCondition("nome_soggetto", search, true, true));
  993.                 }
  994.                 if(tipoSoggetto==null && tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0) {
  995.                     sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));
  996.                 }
  997.                 if(pddTipologia!=null) {
  998.                     if(PddTipologia.ESTERNO.equals(pddTipologia)) {                    
  999.                         sqlQueryObject.addWhereCondition(sqlQueryObjectPdd.createSQLConditions());                          
  1000.                     }
  1001.                     else {
  1002.                         sqlQueryObject.addFromTable(CostantiDB.PDD);
  1003.                         sqlQueryObject.addWhereCondition(true,CostantiDB.PDD+".nome="+CostantiDB.SOGGETTI+".server",CostantiDB.PDD+".tipo=?");
  1004.                     }
  1005.                 }
  1006.                 if(filterRuolo!=null && !"".equals(filterRuolo)) {
  1007.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  1008.                     sqlQueryObject.addFromTable(CostantiDB.RUOLI);
  1009.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_soggetto");
  1010.                     sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_ruolo");
  1011.                     sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".nome=?");
  1012.                 }
  1013.                 if(filterTipoCredenziali!=null && !"".equals(filterTipoCredenziali)) {
  1014.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipoauth = ?");
  1015.                     if(filterCredenziale!=null && !"".equals(filterCredenziale)) {
  1016.                         if(CostantiConfigurazione.CREDENZIALE_SSL.toString().equals(filterTipoCredenziali)) {
  1017.                             sqlQueryObject.addWhereCondition(false,
  1018.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".cn_subject", filterCredenziale,
  1019.                                             LikeConfig.contains(true,true)),
  1020.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".subject", filterCredenziale,
  1021.                                             LikeConfig.contains(true,true)));
  1022.                         }
  1023.                         else if(CostantiConfigurazione.CREDENZIALE_BASIC.toString().equals(filterTipoCredenziali) ||
  1024.                                 CostantiConfigurazione.CREDENZIALE_PRINCIPAL.toString().equals(filterTipoCredenziali)) {
  1025.                             sqlQueryObject.addWhereLikeCondition(CostantiDB.SOGGETTI+".utente",
  1026.                                     filterCredenziale, LikeConfig.contains(true,true));
  1027.                         }
  1028.                     }
  1029.                     if(filterCredenzialeIssuer!=null && !"".equals(filterCredenzialeIssuer)) {
  1030.                         if(CostantiConfigurazione.CREDENZIALE_SSL.toString().equals(filterTipoCredenziali)) {
  1031.                             sqlQueryObject.addWhereCondition(false,
  1032.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".cn_issuer", filterCredenzialeIssuer,
  1033.                                             LikeConfig.contains(true,true)),
  1034.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".issuer", filterCredenzialeIssuer,
  1035.                                             LikeConfig.contains(true,true)));
  1036.                         }
  1037.                     }
  1038.                 }
  1039.                 if(!existsConditions.isEmpty()) {
  1040.                     sqlQueryObject.addWhereCondition(false, existsConditions.toArray(new String[1]));
  1041.                 }
  1042.                 if(filtroProprieta) {
  1043.                     DBUtils.setFiltriProprietaSoggetto(sqlQueryObject, this.driver.tipoDB,
  1044.                             filtroProprietaNome, filtroProprietaValore);
  1045.                 }
  1046.                 sqlQueryObject.setANDLogicOperator(true);
  1047.                 queryString = sqlQueryObject.createSQLQuery();
  1048.             } else {
  1049.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1050.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1051.                 sqlQueryObject.addSelectCountField("*", "cont");
  1052.                 if(filterSoggettoDefault) {
  1053.                     sqlQueryObject.addWhereCondition("is_default = ?");
  1054.                 }
  1055.                 if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  1056.                     sqlQueryObject.addWhereCondition("superuser = ?");
  1057.                 if(tipoSoggetto!=null)
  1058.                     sqlQueryObject.addWhereCondition("tipo_soggetto=?");
  1059.                 if(tipoSoggetto==null && tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0) {
  1060.                     sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));
  1061.                 }
  1062.                 if(pddTipologia!=null) {
  1063.                     if(PddTipologia.ESTERNO.equals(pddTipologia)) {
  1064.                         sqlQueryObject.addWhereCondition(sqlQueryObjectPdd.createSQLConditions());                          
  1065.                     }
  1066.                     else {
  1067.                         sqlQueryObject.addFromTable(CostantiDB.PDD);
  1068.                         sqlQueryObject.addWhereCondition(true,CostantiDB.PDD+".nome="+CostantiDB.SOGGETTI+".server",CostantiDB.PDD+".tipo=?");
  1069.                     }
  1070.                 }
  1071.                 if(filterRuolo!=null && !"".equals(filterRuolo)) {
  1072.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  1073.                     sqlQueryObject.addFromTable(CostantiDB.RUOLI);
  1074.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_soggetto");
  1075.                     sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_ruolo");
  1076.                     sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".nome=?");
  1077.                 }
  1078.                 if(filterTipoCredenziali!=null && !"".equals(filterTipoCredenziali)) {
  1079.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipoauth = ?");
  1080.                     if(filterCredenziale!=null && !"".equals(filterCredenziale)) {
  1081.                         if(CostantiConfigurazione.CREDENZIALE_SSL.toString().equals(filterTipoCredenziali)) {
  1082.                             sqlQueryObject.addWhereCondition(false,
  1083.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".cn_subject", filterCredenziale,
  1084.                                             LikeConfig.contains(true,true)),
  1085.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".subject", filterCredenziale,
  1086.                                             LikeConfig.contains(true,true)));
  1087.                         }
  1088.                         else if(CostantiConfigurazione.CREDENZIALE_BASIC.toString().equals(filterTipoCredenziali) ||
  1089.                                 CostantiConfigurazione.CREDENZIALE_PRINCIPAL.toString().equals(filterTipoCredenziali)) {
  1090.                             sqlQueryObject.addWhereLikeCondition(CostantiDB.SOGGETTI+".utente",
  1091.                                     filterCredenziale, LikeConfig.contains(true,true));
  1092.                         }
  1093.                     }
  1094.                     if(filterCredenzialeIssuer!=null && !"".equals(filterCredenzialeIssuer)) {
  1095.                         if(CostantiConfigurazione.CREDENZIALE_SSL.toString().equals(filterTipoCredenziali)) {
  1096.                             sqlQueryObject.addWhereCondition(false,
  1097.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".cn_issuer", filterCredenzialeIssuer,
  1098.                                             LikeConfig.contains(true,true)),
  1099.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".issuer", filterCredenzialeIssuer,
  1100.                                             LikeConfig.contains(true,true)));
  1101.                         }
  1102.                     }
  1103.                 }
  1104.                 if(!existsConditions.isEmpty()) {
  1105.                     sqlQueryObject.addWhereCondition(false, existsConditions.toArray(new String[1]));
  1106.                 }
  1107.                 if(filtroProprieta) {
  1108.                     DBUtils.setFiltriProprietaSoggetto(sqlQueryObject, this.driver.tipoDB,
  1109.                             filtroProprietaNome, filtroProprietaValore);
  1110.                 }
  1111.                 sqlQueryObject.setANDLogicOperator(true);
  1112.                 queryString = sqlQueryObject.createSQLQuery();
  1113.             }
  1114.             stmt = con.prepareStatement(queryString);
  1115.             int index = 1;
  1116.             if(filterSoggettoDefault) {
  1117.                 stmt.setInt(index++, 1);
  1118.             }
  1119.             if(this.driver.useSuperUser && superuser!=null && (!superuser.equals(""))){
  1120.                 stmt.setString(index++, superuser);
  1121.             }
  1122.             if (!search.equals("")) {
  1123.                 if(tipoSoggetto!=null){
  1124.                     stmt.setString(index++, tipoSoggetto);
  1125.                 }
  1126.             }else{
  1127.                 if(tipoSoggetto!=null)
  1128.                     stmt.setString(index++, tipoSoggetto);
  1129.             }
  1130.             if(pddTipologia!=null) {
  1131.                 stmt.setString(index++, pddTipologia.toString());
  1132.             }
  1133.             if(filterRuolo!=null && !"".equals(filterRuolo)) {
  1134.                 stmt.setString(index++, filterRuolo);
  1135.             }
  1136.             if(filterTipoCredenziali!=null && !"".equals(filterTipoCredenziali)) {
  1137.                 stmt.setString(index++, filterTipoCredenziali);
  1138. //              if(filterCredenziale!=null && !"".equals(filterCredenziale)) {
  1139. //                  // like
  1140. //              }
  1141.             }
  1142.             if(existsParameters!=null && !existsParameters.isEmpty()) {
  1143.                 for (Object object : existsParameters) {
  1144.                     if(object instanceof String) {
  1145.                         stmt.setString(index++, (String) object);
  1146.                     }
  1147.                     else {
  1148.                         stmt.setInt(index++, (Integer) object);
  1149.                     }
  1150.                 }
  1151.             }
  1152.             risultato = stmt.executeQuery();
  1153.             if (risultato.next())
  1154.                 ricerca.setNumEntries(idLista,risultato.getInt(1));
  1155.             risultato.close();
  1156.             stmt.close();

  1157.             // ricavo le entries
  1158.             if (limit == 0) // con limit
  1159.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
  1160.             if (!search.equals("")) { // con search
  1161.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1162.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1163.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"id","identificativoSoggetto");
  1164.                 sqlQueryObject.addSelectField("nome_soggetto");
  1165.                 sqlQueryObject.addSelectField("tipo_soggetto");
  1166.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"descrizione","descrizioneSoggetto");
  1167.                 sqlQueryObject.addSelectField("identificativo_porta");
  1168.                 sqlQueryObject.addSelectField("server");
  1169.                 sqlQueryObject.addSelectField("id_connettore");
  1170.                 sqlQueryObject.addSelectField("codice_ipa");
  1171.                 sqlQueryObject.addSelectField("tipoauth");
  1172.                
  1173.                 if(filterSoggettoDefault) {
  1174.                     sqlQueryObject.addWhereCondition("is_default = ?");
  1175.                 }
  1176.                 if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  1177.                     sqlQueryObject.addWhereCondition("superuser = ?");
  1178.                 if(tipoSoggetto!=null){
  1179.                     sqlQueryObject.addWhereCondition("tipo_soggetto=?");
  1180.                     sqlQueryObject.addWhereLikeCondition("nome_soggetto", search, true, true);  
  1181.                 }
  1182.                 else{
  1183.                     sqlQueryObject.addWhereCondition(false,
  1184.                             sqlQueryObject.getWhereLikeCondition("tipo_soggetto", search, true, true),
  1185.                             sqlQueryObject.getWhereLikeCondition("nome_soggetto", search, true, true));
  1186.                 }
  1187.                 if(tipoSoggetto==null && tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0) {
  1188.                     sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));
  1189.                 }
  1190.                 if(pddTipologia!=null) {
  1191.                     if(PddTipologia.ESTERNO.equals(pddTipologia)) {
  1192.                         sqlQueryObject.addWhereCondition(sqlQueryObjectPdd.createSQLConditions());                                  
  1193.                     }
  1194.                     else {
  1195.                         sqlQueryObject.addFromTable(CostantiDB.PDD);
  1196.                         sqlQueryObject.addWhereCondition(true,CostantiDB.PDD+".nome="+CostantiDB.SOGGETTI+".server",CostantiDB.PDD+".tipo=?");
  1197.                     }
  1198.                 }
  1199.                 if(filterRuolo!=null && !"".equals(filterRuolo)) {
  1200.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  1201.                     sqlQueryObject.addFromTable(CostantiDB.RUOLI);
  1202.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_soggetto");
  1203.                     sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_ruolo");
  1204.                     sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".nome=?");
  1205.                 }
  1206.                 if(filterTipoCredenziali!=null && !"".equals(filterTipoCredenziali)) {
  1207.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipoauth = ?");
  1208.                     if(filterCredenziale!=null && !"".equals(filterCredenziale)) {
  1209.                         if(CostantiConfigurazione.CREDENZIALE_SSL.toString().equals(filterTipoCredenziali)) {
  1210.                             sqlQueryObject.addWhereCondition(false,
  1211.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".cn_subject", filterCredenziale,
  1212.                                             LikeConfig.contains(true,true)),
  1213.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".subject", filterCredenziale,
  1214.                                             LikeConfig.contains(true,true)));
  1215.                         }
  1216.                         else if(CostantiConfigurazione.CREDENZIALE_BASIC.toString().equals(filterTipoCredenziali) ||
  1217.                                 CostantiConfigurazione.CREDENZIALE_PRINCIPAL.toString().equals(filterTipoCredenziali)) {
  1218.                             sqlQueryObject.addWhereLikeCondition(CostantiDB.SOGGETTI+".utente",
  1219.                                     filterCredenziale, LikeConfig.contains(true,true));
  1220.                         }
  1221.                     }
  1222.                     if(filterCredenzialeIssuer!=null && !"".equals(filterCredenzialeIssuer)) {
  1223.                         if(CostantiConfigurazione.CREDENZIALE_SSL.toString().equals(filterTipoCredenziali)) {
  1224.                             sqlQueryObject.addWhereCondition(false,
  1225.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".cn_issuer", filterCredenzialeIssuer,
  1226.                                             LikeConfig.contains(true,true)),
  1227.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".issuer", filterCredenzialeIssuer,
  1228.                                             LikeConfig.contains(true,true)));
  1229.                         }
  1230.                     }
  1231.                 }
  1232.                 if(!existsConditions.isEmpty()) {
  1233.                     sqlQueryObject.addWhereCondition(false, existsConditions.toArray(new String[1]));
  1234.                 }
  1235.                 if(filtroProprieta) {
  1236.                     DBUtils.setFiltriProprietaSoggetto(sqlQueryObject, this.driver.tipoDB,
  1237.                             filtroProprietaNome, filtroProprietaValore);
  1238.                 }
  1239.                 sqlQueryObject.setANDLogicOperator(true);
  1240.                 sqlQueryObject.addOrderBy("nome_soggetto");
  1241.                 sqlQueryObject.addOrderBy("tipo_soggetto");
  1242.                 sqlQueryObject.setSortType(true);
  1243.                 sqlQueryObject.setLimit(limit);
  1244.                 sqlQueryObject.setOffset(offset);
  1245.                 queryString = sqlQueryObject.createSQLQuery();
  1246.             } else {
  1247.                 // senza search
  1248.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1249.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1250.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"id","identificativoSoggetto");
  1251.                 sqlQueryObject.addSelectField("nome_soggetto");
  1252.                 sqlQueryObject.addSelectField("tipo_soggetto");
  1253.                 sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI,"descrizione","descrizioneSoggetto");
  1254.                 sqlQueryObject.addSelectField("identificativo_porta");
  1255.                 sqlQueryObject.addSelectField("server");
  1256.                 sqlQueryObject.addSelectField("id_connettore");
  1257.                 sqlQueryObject.addSelectField("codice_ipa");
  1258.                 sqlQueryObject.addSelectField("tipoauth");
  1259.                
  1260.                 if(filterSoggettoDefault) {
  1261.                     sqlQueryObject.addWhereCondition("is_default = ?");
  1262.                 }
  1263.                 if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  1264.                     sqlQueryObject.addWhereCondition("superuser = ?");
  1265.                 if(tipoSoggetto!=null)
  1266.                     sqlQueryObject.addWhereCondition("tipo_soggetto=?");
  1267.                 if(tipoSoggetto==null && tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0) {
  1268.                     sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));
  1269.                 }
  1270.                 if(pddTipologia!=null) {
  1271.                     if(PddTipologia.ESTERNO.equals(pddTipologia)) {
  1272.                         sqlQueryObject.addWhereCondition(sqlQueryObjectPdd.createSQLConditions());                                  
  1273.                     }
  1274.                     else {
  1275.                         sqlQueryObject.addFromTable(CostantiDB.PDD);
  1276.                         sqlQueryObject.addWhereCondition(true,CostantiDB.PDD+".nome="+CostantiDB.SOGGETTI+".server",CostantiDB.PDD+".tipo=?");
  1277.                     }
  1278.                 }
  1279.                 if(filterRuolo!=null && !"".equals(filterRuolo)) {
  1280.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI_RUOLI);
  1281.                     sqlQueryObject.addFromTable(CostantiDB.RUOLI);
  1282.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_soggetto");
  1283.                     sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".id="+CostantiDB.SOGGETTI_RUOLI+".id_ruolo");
  1284.                     sqlQueryObject.addWhereCondition(CostantiDB.RUOLI+".nome=?");
  1285.                 }
  1286.                 if(filterTipoCredenziali!=null && !"".equals(filterTipoCredenziali)) {
  1287.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipoauth = ?");
  1288.                     if(filterCredenziale!=null && !"".equals(filterCredenziale)) {
  1289.                         if(CostantiConfigurazione.CREDENZIALE_SSL.toString().equals(filterTipoCredenziali)) {
  1290.                             sqlQueryObject.addWhereCondition(false,
  1291.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".cn_subject", filterCredenziale,
  1292.                                             LikeConfig.contains(true,true)),
  1293.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".subject", filterCredenziale,
  1294.                                             LikeConfig.contains(true,true)));
  1295.                         }
  1296.                         else if(CostantiConfigurazione.CREDENZIALE_BASIC.toString().equals(filterTipoCredenziali) ||
  1297.                                 CostantiConfigurazione.CREDENZIALE_PRINCIPAL.toString().equals(filterTipoCredenziali)) {
  1298.                             sqlQueryObject.addWhereLikeCondition(CostantiDB.SOGGETTI+".utente",
  1299.                                     filterCredenziale, LikeConfig.contains(true,true));
  1300.                         }
  1301.                     }
  1302.                     if(filterCredenzialeIssuer!=null && !"".equals(filterCredenzialeIssuer)) {
  1303.                         if(CostantiConfigurazione.CREDENZIALE_SSL.toString().equals(filterTipoCredenziali)) {
  1304.                             sqlQueryObject.addWhereCondition(false,
  1305.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".cn_issuer", filterCredenzialeIssuer,
  1306.                                             LikeConfig.contains(true,true)),
  1307.                                     sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".issuer", filterCredenzialeIssuer,
  1308.                                             LikeConfig.contains(true,true)));
  1309.                         }
  1310.                     }
  1311.                 }
  1312.                 if(!existsConditions.isEmpty()) {
  1313.                     sqlQueryObject.addWhereCondition(false, existsConditions.toArray(new String[1]));
  1314.                 }
  1315.                 if(filtroProprieta) {
  1316.                     DBUtils.setFiltriProprietaSoggetto(sqlQueryObject, this.driver.tipoDB,
  1317.                             filtroProprietaNome, filtroProprietaValore);
  1318.                 }
  1319.                 sqlQueryObject.setANDLogicOperator(true);
  1320.                 sqlQueryObject.addOrderBy("nome_soggetto");
  1321.                 sqlQueryObject.addOrderBy("tipo_soggetto");
  1322.                 sqlQueryObject.setSortType(true);
  1323.                 sqlQueryObject.setLimit(limit);
  1324.                 sqlQueryObject.setOffset(offset);
  1325.                 queryString = sqlQueryObject.createSQLQuery();
  1326.             }
  1327.             stmt = con.prepareStatement(queryString);
  1328.             index = 1;
  1329.             if(filterSoggettoDefault) {
  1330.                 stmt.setInt(index++, 1);
  1331.             }
  1332.             if(this.driver.useSuperUser && superuser!=null && (!superuser.equals(""))){
  1333.                 stmt.setString(index++, superuser);
  1334.             }
  1335.             if (!search.equals("")) {
  1336.                 if(tipoSoggetto!=null){
  1337.                     stmt.setString(index++, tipoSoggetto);
  1338.                 }
  1339.             }else{
  1340.                 if(tipoSoggetto!=null)
  1341.                     stmt.setString(index++, tipoSoggetto);
  1342.             }
  1343.             if(pddTipologia!=null) {
  1344.                 stmt.setString(index++, pddTipologia.toString());
  1345.             }
  1346.             if(filterRuolo!=null && !"".equals(filterRuolo)) {
  1347.                 stmt.setString(index++, filterRuolo);
  1348.             }
  1349.             if(filterTipoCredenziali!=null && !"".equals(filterTipoCredenziali)) {
  1350.                 stmt.setString(index++, filterTipoCredenziali);
  1351. //              if(filterCredenziale!=null && !"".equals(filterCredenziale)) {
  1352. //                  // like
  1353. //              }
  1354.             }
  1355.             if(existsParameters!=null && !existsParameters.isEmpty()) {
  1356.                 for (Object object : existsParameters) {
  1357.                     if(object instanceof String) {
  1358.                         stmt.setString(index++, (String) object);
  1359.                     }
  1360.                     else {
  1361.                         stmt.setInt(index++, (Integer) object);
  1362.                     }
  1363.                 }
  1364.             }
  1365.             risultato = stmt.executeQuery();

  1366.             Soggetto sog;
  1367.             while (risultato.next()) {

  1368.                 sog = new Soggetto();
  1369.                 sog.setId(risultato.getLong("identificativoSoggetto"));
  1370.                 sog.setNome(risultato.getString("nome_soggetto"));
  1371.                 sog.setTipo(risultato.getString("tipo_soggetto"));
  1372.                 sog.setDescrizione(risultato.getString("descrizioneSoggetto"));
  1373.                 sog.setIdentificativoPorta(risultato.getString("identificativo_porta"));
  1374.                 sog.setPortaDominio(risultato.getString("server"));
  1375.                 sog.setCodiceIpa(risultato.getString("codice_ipa"));

  1376.                 long idConnettore = risultato.getLong("id_connettore");
  1377.                 sog.setConnettore(this.driver.getConnettore(idConnettore, con));

  1378.                 String tipoAuth = risultato.getString("tipoauth");
  1379.                 if(tipoAuth != null && !tipoAuth.equals("")){
  1380.                     CredenzialiSoggetto credenziali = new CredenzialiSoggetto();
  1381.                     credenziali.setTipo(DriverRegistroServiziDB_LIB.getEnumCredenzialeTipo(tipoAuth));
  1382.                     sog.addCredenziali( credenziali );
  1383.                 }
  1384.                
  1385.                 lista.add(sog);

  1386.             }

  1387.             return lista;

  1388.         } catch (Exception qe) {
  1389.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1390.         } finally {

  1391.             //Chiudo statement and resultset
  1392.             JDBCUtilities.closeResources(risultato, stmt);

  1393.             this.driver.closeConnection(con);
  1394.         }
  1395.     }
  1396.    
  1397.     protected List<IDSoggetto> idSoggettiRegistroListByTipo(String tipoSoggetto,ISearch ricerca) throws DriverRegistroServiziException{
  1398.         return idSoggettiRegistroList("", tipoSoggetto, ricerca);
  1399.     }

  1400.     protected List<IDSoggetto> idSoggettiRegistroList(String superuser, ISearch ricerca) throws DriverRegistroServiziException {
  1401.         return idSoggettiRegistroList(superuser, null, ricerca);
  1402.     }
  1403.    
  1404.     private List<IDSoggetto> idSoggettiRegistroList(String superuser, String tipoSoggetto, ISearch ricerca) throws DriverRegistroServiziException {
  1405.         String nomeMetodo = "idSoggettiRegistroList";
  1406.         int idLista = Liste.SOGGETTI;
  1407.         int offset;
  1408.         int limit;
  1409.         String search;
  1410.         String queryString;

  1411.         limit = ricerca.getPageSize(idLista);
  1412.         offset = ricerca.getIndexIniziale(idLista);
  1413.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));

  1414.         String filterProtocollo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROTOCOLLO);
  1415.         String filterProtocolli = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROTOCOLLI);
  1416.         List<String> tipoSoggettiProtocollo = null;
  1417.         try {
  1418.             tipoSoggettiProtocollo = Filtri.convertToTipiSoggetti(filterProtocollo, filterProtocolli);
  1419.         }catch(Exception e) {
  1420.             throw new DriverRegistroServiziException(e.getMessage(),e);
  1421.         }
  1422.        
  1423.         String filterDominio = SearchUtils.getFilter(ricerca, idLista,  Filtri.FILTRO_DOMINIO);
  1424.         PddTipologia pddTipologia = null;
  1425.         if(filterDominio!=null && !"".equals(filterDominio)) {
  1426.             pddTipologia = PddTipologia.toPddTipologia(filterDominio);
  1427.         }
  1428.        
  1429.         this.driver.logDebug("search : " + search);
  1430.         this.driver.logDebug("filterProtocollo : " + filterProtocollo);
  1431.         this.driver.logDebug("filterProtocolli : " + filterProtocolli);
  1432.        
  1433.         Connection con = null;
  1434.         PreparedStatement stmt = null;
  1435.         ResultSet risultato = null;
  1436.         ArrayList<IDSoggetto> lista = new ArrayList<>();

  1437.         if (this.driver.atomica) {
  1438.             try {
  1439.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  1440.             } catch (Exception e) {
  1441.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1442.             }

  1443.         } else
  1444.             con = this.driver.globalConnection;

  1445.         this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);

  1446.         try {
  1447.             /* === Filtro Dominio === */
  1448.            
  1449.             ISQLQueryObject sqlQueryObjectPdd = null;
  1450.             if(pddTipologia!=null && PddTipologia.ESTERNO.equals(pddTipologia)) {
  1451.                 ISQLQueryObject sqlQueryObjectExistsPdd = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1452.                 sqlQueryObjectExistsPdd.addSelectField(CostantiDB.PDD+".nome");
  1453.                 sqlQueryObjectExistsPdd.addFromTable(CostantiDB.PDD);
  1454.                 sqlQueryObjectExistsPdd.setANDLogicOperator(true);
  1455.                 sqlQueryObjectExistsPdd.addWhereCondition(CostantiDB.PDD+".nome="+CostantiDB.SOGGETTI+".server");
  1456.                 sqlQueryObjectExistsPdd.addWhereCondition(CostantiDB.PDD+".tipo=?");
  1457.                
  1458.                 sqlQueryObjectPdd = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1459.                 sqlQueryObjectPdd.setANDLogicOperator(false);
  1460.                 sqlQueryObjectPdd.addWhereIsNullCondition(CostantiDB.SOGGETTI+".server");
  1461.                 sqlQueryObjectPdd.addWhereExistsCondition(false, sqlQueryObjectExistsPdd);
  1462.             }

  1463.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1464.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1465.             sqlQueryObject.addSelectCountField("*", "cont");
  1466.            
  1467.             // creazione sqlQueryObject
  1468.             impostaFiltriRicercaSqlQueryObjectIdSoggettiList(superuser, tipoSoggetto, search, tipoSoggettiProtocollo, sqlQueryObject, pddTipologia, sqlQueryObjectPdd);
  1469.             sqlQueryObject.setANDLogicOperator(true);
  1470.             queryString = sqlQueryObject.createSQLQuery();
  1471.            
  1472.             stmt = con.prepareStatement(queryString);
  1473.             // setParameters
  1474.             setParametersIdSoggettiList(superuser, tipoSoggetto, search, pddTipologia, stmt);

  1475.             risultato = stmt.executeQuery();
  1476.             if (risultato.next())
  1477.                 ricerca.setNumEntries(idLista,risultato.getInt(1));
  1478.             risultato.close();
  1479.             stmt.close();

  1480.             // ricavo le entries
  1481.             if (limit == 0) // con limit
  1482.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
  1483.            
  1484.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1485.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1486.             sqlQueryObject.addSelectField("nome_soggetto");
  1487.             sqlQueryObject.addSelectField("tipo_soggetto");
  1488.            
  1489.             // creazione sqlQueryObject
  1490.             impostaFiltriRicercaSqlQueryObjectIdSoggettiList(superuser, tipoSoggetto, search, tipoSoggettiProtocollo, sqlQueryObject, pddTipologia, sqlQueryObjectPdd);
  1491.             sqlQueryObject.setANDLogicOperator(true);
  1492.             sqlQueryObject.addOrderBy("nome_soggetto");
  1493.             sqlQueryObject.addOrderBy("tipo_soggetto");
  1494.             sqlQueryObject.setSortType(true);
  1495.             sqlQueryObject.setLimit(limit);
  1496.             sqlQueryObject.setOffset(offset);
  1497.             queryString = sqlQueryObject.createSQLQuery();

  1498.             stmt = con.prepareStatement(queryString);
  1499.             // setParameters
  1500.             setParametersIdSoggettiList(superuser, tipoSoggetto, search, pddTipologia, stmt);
  1501.             risultato = stmt.executeQuery();

  1502.             IDSoggetto sog;
  1503.             while (risultato.next()) {

  1504.                 sog = new IDSoggetto();
  1505.                 sog.setNome(risultato.getString("nome_soggetto"));
  1506.                 sog.setTipo(risultato.getString("tipo_soggetto"));
  1507.                 lista.add(sog);

  1508.             }

  1509.             return lista;

  1510.         } catch (Exception qe) {
  1511.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1512.         } finally {

  1513.             //Chiudo statement and resultset
  1514.             JDBCUtilities.closeResources(risultato, stmt);

  1515.             this.driver.closeConnection(con);
  1516.         }
  1517.     }

  1518.     private void setParametersIdSoggettiList(String superuser, String tipoSoggetto, String search, PddTipologia pddTipologia, PreparedStatement stmt) throws SQLException {
  1519.         int index = 1;
  1520.        
  1521.         // superuser
  1522.         if(this.driver.useSuperUser && superuser!=null && (!superuser.equals(""))){
  1523.             stmt.setString(index++, superuser);
  1524.         }
  1525.        
  1526.         // tipoSoggettiProtocollo in like
  1527.        
  1528.         // pddTipologia
  1529.         if(pddTipologia!=null && !PddTipologia.ESTERNO.equals(pddTipologia)) {
  1530.             stmt.setString(index++, pddTipologia.toString());
  1531.         }
  1532.        
  1533.         // tipoSoggetto
  1534.         if (!search.equals("")) {
  1535.             if(tipoSoggetto!=null){
  1536.                 stmt.setString(index, tipoSoggetto); // index++ eliminato per segnalazione sonar
  1537.             }
  1538.         }else{
  1539.             if(tipoSoggetto!=null)
  1540.                 stmt.setString(index, tipoSoggetto); // index++ eliminato per segnalazione sonar
  1541.         }
  1542.     }

  1543.     private void impostaFiltriRicercaSqlQueryObjectIdSoggettiList(String superuser, String tipoSoggetto, String search, List<String> tipoSoggettiProtocollo,
  1544.             ISQLQueryObject sqlQueryObject, PddTipologia pddTipologia, ISQLQueryObject sqlQueryObjectPdd) throws SQLQueryObjectException {
  1545.         // superuser
  1546.         if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  1547.             sqlQueryObject.addWhereCondition("superuser = ?");
  1548.        
  1549.         // tipoSoggettiProtocollo
  1550.         if(tipoSoggetto==null && tipoSoggettiProtocollo!=null && !tipoSoggettiProtocollo.isEmpty()) {
  1551.             sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));
  1552.         }
  1553.        
  1554.         // pddTipologia
  1555.         if(pddTipologia!=null) {
  1556.             if(PddTipologia.ESTERNO.equals(pddTipologia)) {                    
  1557.                 sqlQueryObject.addWhereCondition(sqlQueryObjectPdd.createSQLConditions());                          
  1558.             }
  1559.             else {
  1560.                 sqlQueryObject.addFromTable(CostantiDB.PDD);
  1561.                 sqlQueryObject.addWhereCondition(true,CostantiDB.PDD+".nome="+CostantiDB.SOGGETTI+".server",CostantiDB.PDD+".tipo=?");
  1562.             }
  1563.         }
  1564.        
  1565.         // tipoSoggetto
  1566.         if (!search.equals("")) {
  1567.             //query con search
  1568.            
  1569.             if(tipoSoggetto!=null){
  1570.                 sqlQueryObject.addWhereCondition("tipo_soggetto=?");
  1571.                 sqlQueryObject.addWhereLikeCondition("nome_soggetto", search, true, true);  
  1572.             }
  1573.             else{
  1574.                 sqlQueryObject.addWhereCondition(false,
  1575.                         sqlQueryObject.getWhereLikeCondition("tipo_soggetto", search, true, true),
  1576.                         sqlQueryObject.getWhereLikeCondition("nome_soggetto", search, true, true));
  1577.             }
  1578.         } else {
  1579.             if(tipoSoggetto!=null)
  1580.                 sqlQueryObject.addWhereCondition("tipo_soggetto=?");
  1581.         }
  1582.     }
  1583. }