DriverConfigurazioneDB_serviziApplicativiDriver.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.core.config.driver.db;

  21. import java.sql.Connection;
  22. import java.sql.PreparedStatement;
  23. import java.sql.ResultSet;
  24. import java.sql.SQLException;
  25. import java.sql.Timestamp;
  26. import java.util.ArrayList;
  27. import java.util.HashMap;
  28. import java.util.List;
  29. import java.util.Map;

  30. import org.apache.commons.lang.StringUtils;
  31. import org.openspcoop2.core.byok.IDriverBYOK;
  32. import org.openspcoop2.core.commons.DBUtils;
  33. import org.openspcoop2.core.commons.ErrorsHandlerCostant;
  34. import org.openspcoop2.core.config.Connettore;
  35. import org.openspcoop2.core.config.Credenziali;
  36. import org.openspcoop2.core.config.GestioneErrore;
  37. import org.openspcoop2.core.config.InvocazioneCredenziali;
  38. import org.openspcoop2.core.config.InvocazionePorta;
  39. import org.openspcoop2.core.config.InvocazionePortaGestioneErrore;
  40. import org.openspcoop2.core.config.InvocazioneServizio;
  41. import org.openspcoop2.core.config.Proprieta;
  42. import org.openspcoop2.core.config.ProprietaOggetto;
  43. import org.openspcoop2.core.config.ProtocolProperty;
  44. import org.openspcoop2.core.config.RispostaAsincrona;
  45. import org.openspcoop2.core.config.Ruolo;
  46. import org.openspcoop2.core.config.ServizioApplicativo;
  47. import org.openspcoop2.core.config.ServizioApplicativoRuoli;
  48. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  49. import org.openspcoop2.core.config.constants.CredenzialeTipo;
  50. import org.openspcoop2.core.config.constants.InvocazioneServizioTipoAutenticazione;
  51. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  52. import org.openspcoop2.core.config.constants.TipologiaErogazione;
  53. import org.openspcoop2.core.config.constants.TipologiaFruizione;
  54. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  55. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  56. import org.openspcoop2.core.config.driver.FiltroRicercaProtocolPropertyConfig;
  57. import org.openspcoop2.core.config.driver.FiltroRicercaServiziApplicativi;
  58. import org.openspcoop2.core.config.driver.IDServizioUtils;
  59. import org.openspcoop2.core.constants.CostantiDB;
  60. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  61. import org.openspcoop2.core.constants.TipiConnettore;
  62. import org.openspcoop2.core.id.IDServizio;
  63. import org.openspcoop2.core.id.IDServizioApplicativo;
  64. import org.openspcoop2.core.id.IDSoggetto;
  65. import org.openspcoop2.utils.TipiDatabase;
  66. import org.openspcoop2.utils.UtilsException;
  67. import org.openspcoop2.utils.certificate.ArchiveLoader;
  68. import org.openspcoop2.utils.certificate.ArchiveType;
  69. import org.openspcoop2.utils.certificate.Certificate;
  70. import org.openspcoop2.utils.certificate.CertificateInfo;
  71. import org.openspcoop2.utils.certificate.CertificateUtils;
  72. import org.openspcoop2.utils.certificate.PrincipalType;
  73. import org.openspcoop2.utils.crypt.CryptConfig;
  74. import org.openspcoop2.utils.crypt.CryptFactory;
  75. import org.openspcoop2.utils.crypt.ICrypt;
  76. import org.openspcoop2.utils.date.DateManager;
  77. import org.openspcoop2.utils.jdbc.IJDBCAdapter;
  78. import org.openspcoop2.utils.jdbc.JDBCAdapterException;
  79. import org.openspcoop2.utils.jdbc.JDBCAdapterFactory;
  80. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  81. import org.openspcoop2.utils.sql.ISQLQueryObject;
  82. import org.openspcoop2.utils.sql.SQLObjectFactory;
  83. import org.openspcoop2.utils.sql.SQLQueryObjectException;

  84. /**
  85.  * DriverConfigurazioneDB_serviziApplicativiDriver
  86.  *
  87.  *
  88.  * @author Sandra Giangrandi (sandra@link.it)
  89.  * @author Stefano Corallo (corallo@link.it)
  90.  * @author $Author$
  91.  * @version $Rev$, $Date$
  92.  */
  93. public class DriverConfigurazioneDB_serviziApplicativiDriver {

  94.     private DriverConfigurazioneDB driver = null;
  95.     private DriverConfigurazioneDBSoggetti soggettiDriver = null;
  96.     private DriverConfigurazioneDB_protocolPropertiesDriver protocolPropertiesDriver = null;
  97.     private DriverConfigurazioneDBUtils utilsDriver = null;
  98.    
  99.     protected DriverConfigurazioneDB_serviziApplicativiDriver(DriverConfigurazioneDB driver) {
  100.         this.driver = driver;
  101.         this.soggettiDriver = new DriverConfigurazioneDBSoggetti(driver);
  102.         this.protocolPropertiesDriver = new DriverConfigurazioneDB_protocolPropertiesDriver(driver);
  103.         this.utilsDriver = new DriverConfigurazioneDBUtils(driver);
  104.     }
  105.    

  106.     protected ServizioApplicativo getServizioApplicativo(IDServizioApplicativo idServizioApplicativo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  107.             return this.getEngineServizioApplicativo(idServizioApplicativo, null, null,
  108.                     null, null, null, false,
  109.                     null,
  110.                     null,
  111.                     null,
  112.                     false, false,
  113.                     null, null, false,
  114.                     null, false, false, false);
  115.     }
  116.    
  117.     protected ServizioApplicativo getServizioApplicativoByCredenzialiBasic(String aUser,String aPassword, CryptConfig config) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  118.             return this.getEngineServizioApplicativo(null, aUser, aPassword,
  119.                     null, null, null, false,
  120.                     null,
  121.                     null,
  122.                     config,
  123.                     false, false,
  124.                     null, null, false,
  125.                     null, false, false, false);
  126.     }
  127.     protected ServizioApplicativo getServizioApplicativoByCredenzialiBasic(String aUser,String aPassword, CryptConfig config,
  128.             List<String> tipiSoggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  129.         return this.getEngineServizioApplicativo(null, aUser, aPassword,
  130.                 null, null, null, false,
  131.                 null,
  132.                 null,
  133.                 config,
  134.                 false, false,
  135.                 null, null, false,
  136.                 tipiSoggetto, false, false, false);
  137. }
  138.    
  139.     protected ServizioApplicativo getServizioApplicativoByCredenzialiApiKey(String aUser,String aPassword, boolean appId, CryptConfig config) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  140.             return this.getEngineServizioApplicativo(null, aUser, aPassword,
  141.                     null, null, null, false,
  142.                     null,
  143.                     null,
  144.                     config,
  145.                     true, appId,
  146.                     null, null, false,
  147.                     null, false, false, false);
  148.     }
  149.     protected ServizioApplicativo getServizioApplicativoByCredenzialiApiKey(String aUser,String aPassword, boolean appId, CryptConfig config,
  150.             List<String> tipiSoggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  151.         return this.getEngineServizioApplicativo(null, aUser, aPassword,
  152.                 null, null, null, false,
  153.                 null,
  154.                 null,
  155.                 config,
  156.                 true, appId,
  157.                 null, null, false,
  158.                 tipiSoggetto, false, false, false);
  159.     }
  160.    
  161.     protected ServizioApplicativo getServizioApplicativoByCredenzialiToken(String tokenPolicy, String tokenClientId, boolean tokenWithHttpsEnabled) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  162.             return this.getEngineServizioApplicativo(null, null, null,
  163.                     null, null, null, false,
  164.                     null,
  165.                     null,
  166.                     null,
  167.                     false, false,
  168.                     tokenPolicy, tokenClientId, tokenWithHttpsEnabled,
  169.                     null, false, false, false);
  170.     }
  171.     protected ServizioApplicativo getServizioApplicativoByCredenzialiToken(String tokenPolicy, String tokenClientId, boolean tokenWithHttpsEnabled,
  172.             List<String> tipiSoggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  173.         return this.getEngineServizioApplicativo(null, null, null,
  174.                 null, null, null, false,
  175.                 null,
  176.                 null,
  177.                 null,
  178.                 false, false,
  179.                 tokenPolicy, tokenClientId, tokenWithHttpsEnabled,
  180.                 tipiSoggetto, false, false, false);
  181.     }
  182.    
  183.     protected ServizioApplicativo getServizioApplicativoByCredenzialiSsl(String aSubject, String aIssuer) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  184.             return this.getEngineServizioApplicativo(null, null, null,
  185.                     aSubject, aIssuer, null, false,
  186.                     null,
  187.                     null,
  188.                     null,
  189.                     false, false,
  190.                     null, null, false,
  191.                     null, false, false, false);
  192.     }
  193.     protected ServizioApplicativo getServizioApplicativoByCredenzialiSsl(String aSubject, String aIssuer,
  194.             List<String> tipiSoggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  195.         return this.getEngineServizioApplicativo(null, null, null,
  196.                 aSubject, aIssuer, null, false,
  197.                 null,
  198.                 null,
  199.                 null,
  200.                 false, false,
  201.                 null, null, false,
  202.                 tipiSoggetto, false, false, false);
  203.     }
  204.     protected ServizioApplicativo getServizioApplicativoByCredenzialiSsl(String aSubject, String aIssuer,
  205.             List<String> tipiSoggetto, boolean includiApplicativiNonModI,boolean includiApplicativiModIEsterni,boolean includiApplicativiModIInterni) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  206.         return this.getEngineServizioApplicativo(null, null, null,
  207.                 aSubject, aIssuer, null, false,
  208.                 null,
  209.                 null,
  210.                 null,
  211.                 false, false,
  212.                 null, null, false,
  213.                 tipiSoggetto, includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  214.     }
  215.    
  216.     protected ServizioApplicativo getServizioApplicativoByCredenzialiSsl(CertificateInfo certificate, boolean strictVerifier) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  217.          return this.getEngineServizioApplicativo(null, null, null,
  218.                 null, null, certificate, strictVerifier,
  219.                 null,
  220.                 null,
  221.                 null,
  222.                 false, false,
  223.                 null, null, false,
  224.                 null, false, false, false);
  225.     }
  226.     protected ServizioApplicativo getServizioApplicativoByCredenzialiSsl(CertificateInfo certificate, boolean strictVerifier,
  227.             List<String> tipiSoggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  228.      return this.getEngineServizioApplicativo(null, null, null,
  229.                 null, null, certificate, strictVerifier,
  230.                 null,
  231.                 null,
  232.                 null,
  233.                 false, false,
  234.             null, null, false,
  235.             tipiSoggetto, false, false, false);
  236.     }
  237.     protected ServizioApplicativo getServizioApplicativoByCredenzialiSsl(CertificateInfo certificate, boolean strictVerifier,
  238.             List<String> tipiSoggetto, boolean includiApplicativiNonModI,boolean includiApplicativiModIEsterni,boolean includiApplicativiModIInterni) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  239.      return this.getEngineServizioApplicativo(null, null, null,
  240.                 null, null, certificate, strictVerifier,
  241.                 null,
  242.                 null,
  243.                 null,
  244.                 false, false,
  245.             null, null, false,
  246.             tipiSoggetto, includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  247.     }
  248.    
  249.     protected ServizioApplicativo getServizioApplicativoByCredenzialiPrincipal(String principal) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  250.         return this.getEngineServizioApplicativo(null, null, null,
  251.                 null, null, null, false,
  252.                 principal,
  253.                 null,
  254.                 null,
  255.                 false, false,
  256.                 null, null, false,
  257.                 null, false, false, false);
  258.     }
  259.     protected ServizioApplicativo getServizioApplicativoByCredenzialiPrincipal(String principal,
  260.             List<String> tipiSoggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  261.         return this.getEngineServizioApplicativo(null, null, null,
  262.                 null, null, null, false,
  263.                 principal,
  264.                 null,
  265.                 null,
  266.                 false, false,
  267.                 null, null, false,
  268.                 tipiSoggetto, false, false, false);
  269.     }
  270.    
  271.     protected ServizioApplicativo getServizioApplicativo(long idServizioApplicativo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  272.             return this.getEngineServizioApplicativo(null, null, null,
  273.                     null, null, null, false,
  274.                     null,
  275.                     idServizioApplicativo,
  276.                     null,
  277.                     false, false,
  278.                     null, null, false,
  279.                     null, false, false, false);
  280.     }

  281.     private ServizioApplicativo getEngineServizioApplicativo(IDServizioApplicativo idServizioApplicativoObject,
  282.             String aUser, String aPassord,
  283.             String aSubject, String aIssuer, CertificateInfo aCertificate, boolean aStrictVerifier,
  284.             String principal,
  285.             Long idServizioApplicativo,
  286.             CryptConfig config,
  287.             boolean apiKey, boolean appId,
  288.             String tokenPolicy, String tokenClientId, boolean tokenWithHttpsEnabled,
  289.             List<String> tipiSoggetto, boolean includiApplicativiNonModI,boolean includiApplicativiModIEsterni,boolean includiApplicativiModIInterni) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {

  290.         Connection con = null;
  291.         PreparedStatement stm = null;
  292.         ResultSet rs = null;
  293.         String nome_sa = null;
  294.         String sqlQuery = null;
  295.         ServizioApplicativo sa = null;

  296.         int type = 0;
  297.         final int TYPE_ID_OBJECT = 1;
  298.         final int TYPE_BASIC = 2;
  299.         final int TYPE_SSL_SUBJECT_ISSUER = 31;
  300.         final int TYPE_SSL_CERTIFICATE = 32;
  301.         final int TYPE_PRINCIPAL = 4;
  302.         final int TYPE_ID_LONG = 5;
  303.         final int TYPE_API_KEY = 6;
  304.         final int TYPE_TOKEN = 7;
  305.         if(idServizioApplicativoObject!=null){
  306.             IDSoggetto idSO = idServizioApplicativoObject.getIdSoggettoProprietario();
  307.             if(idSO==null)throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Soggetto Proprietario non definito.");
  308.             if(idSO.getNome()==null || "".equals(idSO.getNome()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Nome Soggetto Proprietario non definito.");
  309.             if(idSO.getTipo()==null || "".equals(idSO.getTipo()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Nome Soggetto Proprietario non definito.");

  310.             nome_sa = idServizioApplicativoObject.getNome();
  311.             if(nome_sa==null){
  312.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Nome non definito.");
  313.             }
  314.             type = TYPE_ID_OBJECT;
  315.         }
  316.         else if(apiKey){
  317.             type = TYPE_API_KEY;
  318.         }
  319.         else if(aUser!=null){
  320.             type = TYPE_BASIC;
  321.         }
  322.         else if(aSubject!=null){
  323.             type = TYPE_SSL_SUBJECT_ISSUER;
  324.         }
  325.         else if(aCertificate!=null){
  326.             type = TYPE_SSL_CERTIFICATE;
  327.         }
  328.         else if(principal!=null){
  329.             type = TYPE_PRINCIPAL;
  330.         }
  331.         else if(tokenPolicy!=null){
  332.             type = TYPE_TOKEN;
  333.         }
  334.         else{
  335.             type = TYPE_ID_LONG;
  336.             if(idServizioApplicativo==null || idServizioApplicativo.longValue()<=0){
  337.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Id DB non definito.");
  338.             }
  339.         }

  340.         if (this.driver.atomica) {
  341.             try {
  342.                 con = this.driver.getConnectionFromDatasource("getServizioApplicativo");

  343.             } catch (Exception e) {
  344.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Exception accedendo al datasource :" + e.getMessage(),e);

  345.             }

  346.         } else
  347.             con = this.driver.globalConnection;

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

  349.         try {

  350.             switch (type) {
  351.             case TYPE_ID_OBJECT:{
  352.                 String tipoSog=idServizioApplicativoObject.getIdSoggettoProprietario().getTipo();
  353.                 String nomeSog=idServizioApplicativoObject.getIdSoggettoProprietario().getNome();

  354.                 long idSog=DBUtils.getIdSoggetto(nomeSog, tipoSog, con, this.driver.tipoDB,this.driver.tabellaSoggetti);

  355.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  356.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  357.                 sqlQueryObject.addSelectField("*");
  358.                 sqlQueryObject.addWhereCondition("nome = ?");
  359.                 sqlQueryObject.addWhereCondition("id_soggetto = ?");
  360.                 sqlQueryObject.setANDLogicOperator(true);
  361.                 sqlQuery = sqlQueryObject.createSQLQuery();
  362.                 stm = con.prepareStatement(sqlQuery);
  363.                 stm.setString(1, nome_sa);
  364.                 stm.setLong(2, idSog);
  365.                 this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, nome_sa));

  366.                 break;
  367.             }
  368.             case TYPE_BASIC:
  369.             case TYPE_API_KEY:{

  370.                 boolean testInChiaro = false;
  371.                 ICrypt crypt = null;
  372.                 String tipoCredenziale = null;
  373.                 if(type==TYPE_BASIC) {
  374.                     tipoCredenziale = CostantiConfigurazione.CREDENZIALE_BASIC.toString();
  375.                     if(config==null || config.isBackwardCompatibility()) {
  376.                         testInChiaro = true;
  377.                     }
  378.                     if(config!=null) {
  379.                         crypt = CryptFactory.getCrypt(this.driver.log, config);
  380.                     }
  381.                 }
  382.                 else {
  383.                     tipoCredenziale = CostantiConfigurazione.CREDENZIALE_APIKEY.toString();
  384.                     if(config!=null) {
  385.                         crypt = CryptFactory.getCrypt(this.driver.log, config);
  386.                     }
  387.                     else {
  388.                         testInChiaro = true;
  389.                     }
  390.                 }
  391.                
  392.                 //cerco un servizio applicativo che contenga utente e password con autenticazione basi
  393.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  394.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  395.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  396.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  397.                 }
  398.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI+".id","saId");
  399.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI+".password","saPwd");
  400.                 sqlQueryObject.addWhereCondition("tipoauth = ?");
  401.                 sqlQueryObject.addWhereCondition("utente = ?");
  402.                 if(apiKey) {
  403.                     sqlQueryObject.addWhereCondition("issuer = ?");
  404.                 }
  405.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  406.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  407.                     sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  408.                 }
  409.                 sqlQueryObject.setANDLogicOperator(true);
  410.                 sqlQuery = sqlQueryObject.createSQLQuery();
  411.                 stm = con.prepareStatement(sqlQuery);
  412.                 stm.setString(1, tipoCredenziale);
  413.                 stm.setString(2, aUser);
  414.                 if(apiKey) {
  415.                     stm.setString(3, CostantiDB.getIssuerApiKey(appId));
  416.                 }

  417.                 if(apiKey) {
  418.                     this.driver.logDebug("eseguo query :" + DBUtils.formatSQLString(sqlQuery, tipoCredenziale, aUser, CostantiDB.getIssuerApiKey(appId)));
  419.                 }
  420.                 else {
  421.                     this.driver.logDebug("eseguo query :" + DBUtils.formatSQLString(sqlQuery, tipoCredenziale, aUser));
  422.                 }

  423.                 rs = stm.executeQuery();
  424.                 long idSA = -1;
  425.                 while(rs.next()){
  426.                    
  427.                     String passwordDB =  rs.getString("saPwd");
  428.                    
  429.                     boolean found = false;
  430.                     if(testInChiaro) {
  431.                         found = aPassord.equals(passwordDB);
  432.                     }
  433.                     if(!found && crypt!=null) {
  434.                         found = crypt.check(aPassord, passwordDB);
  435.                     }
  436.                    
  437.                     if( found ) {
  438.                         idSA = rs.getLong("saId");
  439.                         break;
  440.                     }

  441.                 }
  442.                 rs.close();
  443.                 stm.close();
  444.                 /**System.out.println("TROVATO["+idSA+"]");*/
  445.                 if(idSA<=0){
  446.                     throw new DriverConfigurazioneNotFound("Nessun Servizio Applicativo trovato.");
  447.                 }
  448.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  449.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  450.                 sqlQueryObject.addSelectField("*");
  451.                 sqlQueryObject.addWhereCondition("id = ?");
  452.                 stm = con.prepareStatement(sqlQueryObject.toString());
  453.                 stm.setLong(1, idSA);

  454.                 this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, idSA));
  455.                
  456.                 break;
  457.             }  
  458.             case TYPE_SSL_SUBJECT_ISSUER:{

  459.                 // Autenticazione SSL deve essere LIKE
  460.                 Map<String, List<String>> hashSubject = CertificateUtils.getPrincipalIntoMap(aSubject, PrincipalType.SUBJECT);
  461.                 Map<String, List<String>> hashIssuer = null;
  462.                 if(StringUtils.isNotEmpty(aIssuer)) {
  463.                     hashIssuer = CertificateUtils.getPrincipalIntoMap(aIssuer, PrincipalType.ISSUER);
  464.                 }

  465.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  466.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  467.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  468.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  469.                 }
  470.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "saIdentificativo");
  471.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "subject", "saSubject");
  472.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "issuer", "saIssuer");
  473.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "tipoauth", "saTipoAuth");
  474.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?");
  475.                 // I certificati caricati con una token policy potrebbero non dover essere considerati per l'autenticazione https
  476.                 // in futuro se serve gestire il boolean tokenWithHttpsEnabled anche per l'autenticazione https
  477.                 if(!tokenWithHttpsEnabled){
  478.                     sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy");
  479.                 }

  480.                 for (String key : hashSubject.keySet()) {
  481.                     List<String> listValues = hashSubject.get(key);
  482.                     for (String value : listValues) {
  483.                         sqlQueryObject.addWhereLikeCondition(CostantiDB.SERVIZI_APPLICATIVI+".subject", "/"+CertificateUtils.formatKeyPrincipal(key)+"="+CertificateUtils.formatValuePrincipal(value)+"/", true, true, false);
  484.                     }
  485.                 }
  486.                
  487.                 if(hashIssuer!=null) {
  488.                     for (String key : hashIssuer.keySet()) {            
  489.                         List<String> listValues = hashIssuer.get(key);
  490.                         for (String value : listValues) {
  491.                             sqlQueryObject.addWhereLikeCondition(CostantiDB.SERVIZI_APPLICATIVI+".issuer", "/"+CertificateUtils.formatKeyPrincipal(key)+"="+CertificateUtils.formatValuePrincipal(value)+"/", true, true, false);
  492.                         }
  493.                     }
  494.                 }
  495.                 else {
  496.                     sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI+".issuer");
  497.                 }
  498.                
  499.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  500.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  501.                    
  502.                     if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  503.                         ISQLQueryObject object =  buildFiltroApplicativiTls(sqlQueryObject, tipiSoggetto,
  504.                                 includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  505.                         sqlQueryObject.addWhereCondition(object.createSQLConditions());
  506.                     } else {
  507.                         sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  508.                     }
  509.                 }

  510.                 sqlQueryObject.setANDLogicOperator(true);
  511.                 sqlQuery = sqlQueryObject.createSQLQuery();

  512.                 //System.out.println("QUERY["+sqlQuery+"]["+type+"]["+idSoggettoFruitore+"]["+CostantiConfigurazione.CREDENZIALE_SSL.toString()+"]");

  513.                 stm = con.prepareStatement(sqlQuery);
  514.                 stm.setString(1, CostantiConfigurazione.CREDENZIALE_SSL.toString());

  515.                 this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, CostantiConfigurazione.CREDENZIALE_SSL.toString()));

  516.                 rs = stm.executeQuery();
  517.                 long idSA = -1;
  518.                 while(rs.next()){
  519.                     // Possono esistere piu' sil che hanno una porzione di subject uguale, devo quindi verificare che sia proprio quello che cerco
  520.                    
  521.                     String subjectPotenziale =  rs.getString("saSubject");
  522.                     boolean subjectValid = CertificateUtils.sslVerify(subjectPotenziale, aSubject, PrincipalType.SUBJECT, this.driver.log);
  523.                    
  524.                     boolean issuerValid = true;
  525.                     if(hashIssuer!=null) {
  526.                         String issuerPotenziale =  rs.getString("saIssuer");
  527.                         if(StringUtils.isNotEmpty(issuerPotenziale)) {
  528.                             issuerValid = CertificateUtils.sslVerify(issuerPotenziale, aIssuer, PrincipalType.ISSUER, this.driver.log);
  529.                         }
  530.                         else {
  531.                             issuerValid = false;
  532.                         }
  533.                     }
  534.                    
  535.                    
  536.                     if( subjectValid && issuerValid ) {
  537.                         idSA = rs.getLong("saIdentificativo");
  538.                         break;
  539.                     }
  540.                 }
  541.                 rs.close();
  542.                 stm.close();
  543.                 //System.out.println("TROVATO["+idSA+"]");
  544.                
  545.                 if(idSA<=0) {
  546.                     // provo a vedere all'interno delle credenziali ulteriori
  547.                    
  548.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  549.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  550.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  551.                     if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  552.                         sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  553.                     }
  554.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "saIdentificativo");
  555.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI, "subject", "saSubject");
  556.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI, "issuer", "saIssuer");
  557.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "tipoauth", "saTipoAuth");
  558.                     sqlQueryObject.setANDLogicOperator(true);
  559.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".id_servizio_applicativo="+CostantiDB.SERVIZI_APPLICATIVI+".id");
  560.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?");
  561.                     // I certificati caricati con una token policy potrebbero non dover essere considerati per l'autenticazione https
  562.                     // in futuro se serve gestire il boolean tokenWithHttpsEnabled anche per l'autenticazione https
  563.                     if(!tokenWithHttpsEnabled){
  564.                         sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy");
  565.                     }
  566.                    
  567.                     for (String key : hashSubject.keySet()) {
  568.                         List<String> listValues = hashSubject.get(key);
  569.                         for (String value : listValues) {
  570.                             sqlQueryObject.addWhereLikeCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".subject", "/"+CertificateUtils.formatKeyPrincipal(key)+"="+CertificateUtils.formatValuePrincipal(value)+"/", true, true, false);
  571.                         }
  572.                     }
  573.                    
  574.                     if(hashIssuer!=null) {
  575.                         for (String key : hashIssuer.keySet()) {
  576.                             List<String> listValues = hashIssuer.get(key);
  577.                             for (String value : listValues) {
  578.                                 sqlQueryObject.addWhereLikeCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".issuer", "/"+CertificateUtils.formatKeyPrincipal(key)+"="+CertificateUtils.formatValuePrincipal(value)+"/", true, true, false);
  579.                             }
  580.                         }
  581.                     }
  582.                     else {
  583.                         sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".issuer");
  584.                     }
  585.                    
  586.                     if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  587.                         sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  588.                         if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  589.                             ISQLQueryObject object =  buildFiltroApplicativiTls(sqlQueryObject, tipiSoggetto,
  590.                                     includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  591.                             sqlQueryObject.addWhereCondition(object.createSQLConditions());
  592.                         } else {
  593.                             sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  594.                         }
  595.                     }

  596.                     sqlQueryObject.setANDLogicOperator(true);
  597.                     sqlQuery = sqlQueryObject.createSQLQuery();
  598.                    
  599.                     //System.out.println("QUERY["+sqlQuery+"]["+type+"]["+idSoggettoFruitore+"]["+CostantiConfigurazione.CREDENZIALE_SSL.toString()+"]");

  600.                     stm = con.prepareStatement(sqlQuery);
  601.                     stm.setString(1, CostantiConfigurazione.CREDENZIALE_SSL.toString());

  602.                     this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, CostantiConfigurazione.CREDENZIALE_SSL.toString()));

  603.                     rs = stm.executeQuery();
  604.                     while(rs.next()){
  605.                         // Possono esistere piu' sil che hanno una porzione di subject uguale, devo quindi verificare che sia proprio quello che cerco
  606.                        
  607.                         String subjectPotenziale =  rs.getString("saSubject");
  608.                         boolean subjectValid = CertificateUtils.sslVerify(subjectPotenziale, aSubject, PrincipalType.SUBJECT, this.driver.log);
  609.                        
  610.                         boolean issuerValid = true;
  611.                         if(hashIssuer!=null) {
  612.                             String issuerPotenziale =  rs.getString("saIssuer");
  613.                             if(StringUtils.isNotEmpty(issuerPotenziale)) {
  614.                                 issuerValid = CertificateUtils.sslVerify(issuerPotenziale, aIssuer, PrincipalType.ISSUER, this.driver.log);
  615.                             }
  616.                             else {
  617.                                 issuerValid = false;
  618.                             }
  619.                         }
  620.                        
  621.                        
  622.                         if( subjectValid && issuerValid ) {
  623.                             idSA = rs.getLong("saIdentificativo");
  624.                             break;
  625.                         }
  626.                     }
  627.                     rs.close();
  628.                     stm.close();
  629.                     //System.out.println("TROVATO["+idSA+"]");
  630.                 }
  631.                
  632.                 if(idSA<=0){
  633.                     throw new DriverConfigurazioneNotFound("Nessun Servizio Applicativo trovato.");
  634.                 }
  635.                
  636.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  637.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  638.                 sqlQueryObject.addSelectField("*");
  639.                 sqlQueryObject.addWhereCondition("id = ?");
  640.                 stm = con.prepareStatement(sqlQueryObject.toString());
  641.                 stm.setLong(1, idSA);

  642.                 this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, idSA));

  643.                 break;
  644.             }
  645.             case TYPE_SSL_CERTIFICATE:{

  646.                 String cnSubject = aCertificate.getSubject().getCN();
  647.                 String cnIssuer = aCertificate.getIssuer().getCN();

  648.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  649.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  650.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  651.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  652.                 }
  653.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "saIdentificativo");
  654.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "cn_subject", "saCNSubject");
  655.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "cn_issuer", "saCNIssuer");
  656.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "cert_strict_verification", "saCertStrictVerificationr");
  657.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "certificate", "saCertificate");
  658.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "tipoauth", "saTipoAuth");
  659.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?");
  660.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".cn_subject = ?");
  661.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".cn_issuer = ?");
  662.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".cert_strict_verification = ?");
  663.                 // I certificati caricati con una token policy potrebbero non dover essere considerati per l'autenticazione https
  664.                 // in futuro se serve gestire il boolean tokenWithHttpsEnabled anche per l'autenticazione https
  665.                 if(!tokenWithHttpsEnabled){
  666.                     sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy");
  667.                 }
  668.                
  669.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  670.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  671.                     if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  672.                         ISQLQueryObject object =  buildFiltroApplicativiTls(sqlQueryObject, tipiSoggetto,
  673.                                 includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  674.                         sqlQueryObject.addWhereCondition(object.createSQLConditions());
  675.                     } else {
  676.                         sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  677.                     }
  678.                 }

  679.                 sqlQueryObject.setANDLogicOperator(true);
  680.                 sqlQuery = sqlQueryObject.createSQLQuery();

  681.                 //System.out.println("QUERY["+sqlQuery+"]["+type+"]["+idSoggettoFruitore+"]["+CostantiConfigurazione.CREDENZIALE_SSL.toString()+"]");

  682.                 stm = con.prepareStatement(sqlQuery);
  683.                 int index = 1;
  684.                 stm.setString(index++, CostantiConfigurazione.CREDENZIALE_SSL.toString());
  685.                 stm.setString(index++, cnSubject);
  686.                 stm.setString(index++, cnIssuer);
  687.                 if(aStrictVerifier) {
  688.                     stm.setInt(index++, CostantiDB.TRUE);
  689.                 }
  690.                 else {
  691.                     stm.setInt(index++, CostantiDB.FALSE);
  692.                 }

  693.                 this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, CostantiConfigurazione.CREDENZIALE_SSL.toString()));

  694.                 IJDBCAdapter jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(this.driver.tipoDB);
  695.                
  696.                 rs = stm.executeQuery();
  697.                 long idSA = -1;
  698.                 while(rs.next()){
  699.                     // Possono esistere piu' sil che hanno un CN con subject e issuer diverso.
  700.                    
  701.                     byte[] certificatoBytes = jdbcAdapter.getBinaryData(rs, "saCertificate");
  702.                     Certificate certificato = ArchiveLoader.load(ArchiveType.CER, certificatoBytes, 0, null);
  703.                     //int tmpStrict = rs.getInt("cert_strict_verification");
  704.                     //boolean strict = tmpStrict == CostantiDB.TRUE;
  705.                    
  706.                     if(aCertificate.equals(certificato.getCertificate(),aStrictVerifier)) {
  707.                         idSA = rs.getLong("saIdentificativo");
  708.                         break;
  709.                     }

  710.                 }
  711.                 rs.close();
  712.                 stm.close();
  713.                 //System.out.println("TROVATO["+idSA+"]");
  714.                
  715.                 if(idSA<=0) {
  716.                     // provo a vedere all'interno delle credenziali ulteriori
  717.                    
  718.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  719.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  720.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  721.                     if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  722.                         sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  723.                     }
  724.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "saIdentificativo");
  725.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI, "cn_subject", "saCNSubject");
  726.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI, "cn_issuer", "saCNIssuer");
  727.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI, "cert_strict_verification", "saCertStrictVerificationr");
  728.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI, "certificate", "saCertificate");
  729.                     sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "tipoauth", "saTipoAuth");
  730.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".id_servizio_applicativo="+CostantiDB.SERVIZI_APPLICATIVI+".id");
  731.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?");
  732.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".cn_subject = ?");
  733.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".cn_issuer = ?");
  734.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".cert_strict_verification = ?");
  735.                     // I certificati caricati con una token policy potrebbero non dover essere considerati per l'autenticazione https
  736.                     // in futuro se serve gestire il boolean tokenWithHttpsEnabled anche per l'autenticazione https
  737.                     if(!tokenWithHttpsEnabled){
  738.                         sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy");
  739.                     }
  740.                    
  741.                     if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  742.                         sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  743.                         if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  744.                             ISQLQueryObject object =  buildFiltroApplicativiTls(sqlQueryObject, tipiSoggetto,
  745.                                     includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  746.                             sqlQueryObject.addWhereCondition(object.createSQLConditions());
  747.                         } else {
  748.                             sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  749.                         }
  750.                     }
  751.                    
  752.                     sqlQueryObject.setANDLogicOperator(true);
  753.                     sqlQuery = sqlQueryObject.createSQLQuery();

  754.                     //System.out.println("QUERY["+sqlQuery+"]["+type+"]["+idSoggettoFruitore+"]["+CostantiConfigurazione.CREDENZIALE_SSL.toString()+"]");

  755.                     stm = con.prepareStatement(sqlQuery);
  756.                     index = 1;
  757.                     stm.setString(index++, CostantiConfigurazione.CREDENZIALE_SSL.toString());
  758.                     stm.setString(index++, cnSubject);
  759.                     stm.setString(index++, cnIssuer);
  760.                     if(aStrictVerifier) {
  761.                         stm.setInt(index++, CostantiDB.TRUE);
  762.                     }
  763.                     else {
  764.                         stm.setInt(index++, CostantiDB.FALSE);
  765.                     }

  766.                     this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, CostantiConfigurazione.CREDENZIALE_SSL.toString()));

  767.                     jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(this.driver.tipoDB);
  768.                    
  769.                     rs = stm.executeQuery();
  770.                     while(rs.next()){
  771.                         // Possono esistere piu' sil che hanno un CN con subject e issuer diverso.
  772.                        
  773.                         byte[] certificatoBytes = jdbcAdapter.getBinaryData(rs, "saCertificate");
  774.                         Certificate certificato = ArchiveLoader.load(ArchiveType.CER, certificatoBytes, 0, null);
  775.                         //int tmpStrict = rs.getInt("cert_strict_verification");
  776.                         //boolean strict = tmpStrict == CostantiDB.TRUE;
  777.                        
  778.                         if(aCertificate.equals(certificato.getCertificate(),aStrictVerifier)) {
  779.                             idSA = rs.getLong("saIdentificativo");
  780.                             break;
  781.                         }

  782.                     }
  783.                     rs.close();
  784.                     stm.close();
  785.                     //System.out.println("TROVATO["+idSA+"]");
  786.                 }
  787.                
  788.                 if(idSA<=0){
  789.                     throw new DriverConfigurazioneNotFound("Nessun Servizio Applicativo trovato.");
  790.                 }
  791.                
  792.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  793.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  794.                 sqlQueryObject.addSelectField("*");
  795.                 sqlQueryObject.addWhereCondition("id = ?");
  796.                 stm = con.prepareStatement(sqlQueryObject.toString());
  797.                 stm.setLong(1, idSA);

  798.                 this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, idSA));

  799.                 break;
  800.             }  
  801.             case TYPE_PRINCIPAL:{

  802.                 //cerco un servizio applicativo che contenga utente e password con autenticazione basi
  803.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  804.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  805.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  806.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  807.                 }
  808.                 sqlQueryObject.addSelectField("*");
  809.                 sqlQueryObject.addWhereCondition("tipoauth = ?");
  810.                 sqlQueryObject.addWhereCondition("utente = ?");
  811.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  812.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  813.                     sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  814.                 }
  815.                 sqlQueryObject.setANDLogicOperator(true);
  816.                 sqlQuery = sqlQueryObject.createSQLQuery();
  817.                 stm = con.prepareStatement(sqlQuery);
  818.                 //stm.setString(1, nome_sa);
  819.                 stm.setString(1, CostantiConfigurazione.CREDENZIALE_PRINCIPAL.toString());
  820.                 stm.setString(2, principal);
  821.                 this.driver.logDebug("eseguo query :" + DBUtils.formatSQLString(sqlQuery, CostantiConfigurazione.CREDENZIALE_PRINCIPAL.toString(), principal));

  822.                 break;
  823.             }
  824.             case TYPE_TOKEN:{

  825.                 //cerco un servizio applicativo che contenga l'autenticazione token
  826.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  827.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  828.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  829.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  830.                 }
  831.                 sqlQueryObject.addSelectField("*");
  832.                
  833.                 List<FiltroRicercaProtocolPropertyConfig> modiFilter = null;
  834.                 if(tokenWithHttpsEnabled){
  835.                
  836.                     modiFilter = buildListModiTokenCredentials(tokenPolicy, tokenClientId);
  837.                    
  838.                     ISQLQueryObject sqlQueryObjectBuiltIn = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  839.                     sqlQueryObjectBuiltIn.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  840.                     sqlQueryObjectBuiltIn.addWhereCondition(false, "tipoauth = ?", "tipoauth = ?");
  841.                     sqlQueryObjectBuiltIn.addWhereCondition("token_policy = ?");
  842.                     sqlQueryObjectBuiltIn.addWhereCondition("utente = ?");
  843.                     sqlQueryObjectBuiltIn.setANDLogicOperator(true);
  844.                    
  845.                     ISQLQueryObject sqlQueryObjectModi = buildSQLQueryObjectModiTokenCredentials(modiFilter);
  846.                    
  847.                     sqlQueryObject.addWhereCondition(sqlQueryObjectBuiltIn.createSQLConditions());
  848.                     sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectModi);
  849.                     sqlQueryObject.setANDLogicOperator(false);
  850.                 }
  851.                 else {
  852.                     sqlQueryObject.addWhereCondition("tipoauth = ?");
  853.                     sqlQueryObject.addWhereCondition("token_policy = ?");
  854.                     sqlQueryObject.addWhereCondition("utente = ?");
  855.                     sqlQueryObject.setANDLogicOperator(true);
  856.                 }
  857.                
  858.                 if(tipiSoggetto!=null && !tipiSoggetto.isEmpty()) {
  859.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  860.                     sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  861.                 }

  862.                 sqlQuery = sqlQueryObject.createSQLQuery();
  863.                 stm = con.prepareStatement(sqlQuery);
  864.                
  865.                 int index = 1;
  866.                 if(tokenWithHttpsEnabled){
  867.                     stm.setString(index++, CostantiConfigurazione.CREDENZIALE_TOKEN.toString());
  868.                     stm.setString(index++, CostantiConfigurazione.CREDENZIALE_SSL.toString());
  869.                     stm.setString(index++, tokenPolicy);
  870.                     stm.setString(index++, tokenClientId);
  871.                     setSQLQueryObjectModiTokenCredentials (stm, index, modiFilter);
  872.                 }
  873.                 else {
  874.                     stm.setString(index++, CostantiConfigurazione.CREDENZIALE_TOKEN.toString());
  875.                     stm.setString(index++, tokenPolicy);
  876.                     stm.setString(index++, tokenClientId);
  877.                 }
  878.                
  879.                 this.driver.logDebug("eseguo query (tokenPolicy:"+tokenPolicy+" tokenClientId:"+tokenClientId+"):" +sqlQuery);

  880.                 break;
  881.             }
  882.             case TYPE_ID_LONG:{
  883.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  884.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  885.                 sqlQueryObject.addSelectField("*");
  886.                 sqlQueryObject.addWhereCondition("id = ?");
  887.                 sqlQuery = sqlQueryObject.createSQLQuery();
  888.                 stm = con.prepareStatement(sqlQuery);
  889.                 stm.setLong(1, idServizioApplicativo);

  890.                 this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, idServizioApplicativo));
  891.                 break;
  892.             }
  893.            
  894.             }

  895.             if(stm==null) {
  896.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Type '"+type+"' sconosciuto?");
  897.             }
  898.            
  899.             rs = stm.executeQuery();

  900.             if (rs.next()) {
  901.                 sa = new ServizioApplicativo();

  902.                 sa.setId(rs.getLong("id"));
  903.                 sa.setTipo(rs.getString("tipo"));
  904.                 sa.setNome(rs.getString("nome"));
  905.                 sa.setIdSoggetto(rs.getLong("id_soggetto"));
  906.                 //tipo e nome soggetto
  907.                 //tipo e nome soggetto sono necessari per la propagazione...
  908.                 sa.setTipoSoggettoProprietario(this.soggettiDriver.getSoggetto(sa.getIdSoggetto(),con).getTipo());
  909.                 sa.setNomeSoggettoProprietario(this.soggettiDriver.getSoggetto(sa.getIdSoggetto(),con).getNome());
  910.                 // descrizione
  911.                 sa.setDescrizione(rs.getString("descrizione"));

  912.                 int as_client = rs.getInt("as_client");
  913.                 sa.setUseAsClient(CostantiDB.TRUE == as_client);
  914.                
  915.                 //tipologia fruizione
  916.                 String tipoFruizione = rs.getString("tipologia_fruizione")!=null && !"".equals(rs.getString("tipologia_fruizione")) ? rs.getString("tipologia_fruizione") : TipologiaFruizione.DISABILITATO.toString();
  917.                 String tipoErogazione = rs.getString("tipologia_erogazione")!=null && !"".equals(rs.getString("tipologia_erogazione"))? rs.getString("tipologia_erogazione") : TipologiaErogazione.DISABILITATO.toString();
  918.                 sa.setTipologiaFruizione(TipologiaFruizione.valueOf(tipoFruizione.toUpperCase()).toString());
  919.                 sa.setTipologiaErogazione(TipologiaErogazione.valueOf(tipoErogazione.toUpperCase()).toString());

  920.                 //se le credenziali sono nulle allora non nn esiste invocazione porta
  921.                 InvocazionePorta invPorta = null;
  922.                 String tipoAuth = rs.getString("tipoauth");
  923.                 String fault = rs.getString("fault");
  924.                 String faultActor = rs.getString("fault_actor");
  925.                 String prefixFault = rs.getString("prefix_fault_code");
  926.                 String genericFault = rs.getString("generic_fault_code");
  927.                 if ((tipoAuth != null && !tipoAuth.equals("")) ||
  928.                         (fault != null && !fault.equals("")) ||
  929.                         (faultActor!=null && !faultActor.equals("")) ||
  930.                         (genericFault!=null && !genericFault.equals("")) ||
  931.                         (prefixFault!=null && !prefixFault.equals(""))
  932.                         ) {
  933.                     invPorta = new InvocazionePorta();
  934.                     Credenziali credenziali = new Credenziali();
  935.                    
  936.                     credenziali.setTipo(DriverConfigurazioneDBLib.getEnumCredenzialeTipo(tipoAuth));
  937.                    
  938.                     credenziali.setUser(rs.getString("utente"));
  939.                     credenziali.setPassword(rs.getString("password"));
  940.                    
  941.                     if(org.openspcoop2.core.config.constants.CredenzialeTipo.APIKEY.equals(credenziali.getTipo())) {
  942.                         credenziali.setAppId(CostantiDB.isAPPID(rs.getString("issuer")));
  943.                     }
  944.                     else {
  945.                         credenziali.setIssuer(rs.getString("issuer"));
  946.                     }
  947.                    
  948.                     credenziali.setSubject(rs.getString("subject"));
  949.                     credenziali.setCnSubject(rs.getString("cn_subject"));
  950.                     credenziali.setCnIssuer(rs.getString("cn_issuer"));
  951.                     IJDBCAdapter jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(this.driver.tipoDB);
  952.                     credenziali.setCertificate(jdbcAdapter.getBinaryData(rs, "certificate"));
  953.                     int strict = rs.getInt("cert_strict_verification");
  954.                     if(strict == CostantiDB.TRUE) {
  955.                         credenziali.setCertificateStrictVerification(true);
  956.                     }
  957.                     else if(strict == CostantiDB.FALSE) {
  958.                         credenziali.setCertificateStrictVerification(false);
  959.                     }
  960.                    
  961.                     credenziali.setTokenPolicy(rs.getString("token_policy"));
  962.                    
  963.                     if(tipoAuth != null && !tipoAuth.equals("")){
  964.                         invPorta.addCredenziali( credenziali );
  965.                     }

  966.                     InvocazionePortaGestioneErrore gestioneErrore = new InvocazionePortaGestioneErrore();
  967.                     gestioneErrore.setFault(DriverConfigurazioneDBLib.getEnumFaultIntegrazioneTipo(fault));
  968.                     gestioneErrore.setFaultActor(faultActor);
  969.                     gestioneErrore.setGenericFaultCode(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(genericFault));
  970.                     gestioneErrore.setPrefixFaultCode(prefixFault);
  971.                     //setto gestione errore solo se i valori sono diversi da null
  972.                     invPorta.setGestioneErrore((fault != null || faultActor!=null || genericFault!=null || prefixFault!=null ) ? gestioneErrore : null);

  973.                     invPorta.setInvioPerRiferimento(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs.getString("invio_x_rif")));

  974.                     int sbustamentoInfoProtocollo = rs.getInt("sbustamento_protocol_info");
  975.                     if(CostantiDB.TRUE == sbustamentoInfoProtocollo)
  976.                         invPorta.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.ABILITATO);
  977.                     else if(CostantiDB.FALSE == sbustamentoInfoProtocollo)
  978.                         invPorta.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.DISABILITATO);
  979.                     else
  980.                         invPorta.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.ABILITATO);
  981.                    
  982.                 }

  983.                 // RispostaAsincrona
  984.                 //se non esiste il connnettore e getmsgrisp e' disabilitato allora nn esiste risposta asincrona
  985.                 Long idConnettore = rs.getLong("id_connettore_risp");
  986.                 String getMsgRisp = rs.getString("getmsgrisp");
  987.                 RispostaAsincrona rispAsinc = null;            
  988.                 if (idConnettore > 0 || (getMsgRisp != null && !getMsgRisp.equals("")) ) {
  989.                     rispAsinc = new RispostaAsincrona();

  990.                     rispAsinc.setAutenticazione(DriverConfigurazioneDBLib.getEnumInvocazioneServizioTipoAutenticazione(rs.getString("tipoauthrisp")));
  991.                     rispAsinc.setInvioPerRiferimento(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs.getString("invio_x_rif_risp")));
  992.                     rispAsinc.setRispostaPerRiferimento(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs.getString("risposta_x_rif_risp")));

  993.                     if(rispAsinc.getAutenticazione()!=null && InvocazioneServizioTipoAutenticazione.BASIC.equals(rispAsinc.getAutenticazione())){
  994.                         InvocazioneCredenziali credenzialiRispA = new InvocazioneCredenziali();
  995.                        
  996.                         String encValue = rs.getString("enc_passwordrisp");
  997.                         String plainValue = rs.getString("passwordrisp");
  998.                         if(encValue!=null && StringUtils.isNotEmpty(encValue)) {
  999.                             IDriverBYOK driverBYOK = this.driver.getDriverUnwrapBYOK();
  1000.                             if(driverBYOK!=null) {
  1001.                                 credenzialiRispA.setPassword(driverBYOK.unwrapAsString(encValue));
  1002.                             }
  1003.                             else {
  1004.                                 credenzialiRispA.setPassword(encValue);
  1005.                             }
  1006.                         }
  1007.                         else {
  1008.                             credenzialiRispA.setPassword(plainValue);
  1009.                         }
  1010.                        
  1011.                         credenzialiRispA.setUser(rs.getString("utenterisp"));
  1012.                         rispAsinc.setCredenziali(credenzialiRispA);
  1013.                     }
  1014.                    
  1015.                     Connettore connettore = DriverConfigurazioneDB_connettoriLIB.getConnettore(idConnettore, con, this.driver.getDriverUnwrapBYOK());
  1016.                     rispAsinc.setConnettore(connettore);
  1017.                     rispAsinc.setGetMessage(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(getMsgRisp));

  1018.                     int sbustamentoInfoProtocollo = rs.getInt("sbustamento_protocol_info_risp");
  1019.                     if(CostantiDB.TRUE == sbustamentoInfoProtocollo)
  1020.                         rispAsinc.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.ABILITATO);
  1021.                     else if(CostantiDB.FALSE == sbustamentoInfoProtocollo)
  1022.                         rispAsinc.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.DISABILITATO);
  1023.                     else
  1024.                         rispAsinc.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.ABILITATO);

  1025.                     if(rs.getInt("sbustamentorisp")==1)
  1026.                         rispAsinc.setSbustamentoSoap(CostantiConfigurazione.ABILITATO);
  1027.                     else
  1028.                         rispAsinc.setSbustamentoSoap(CostantiConfigurazione.DISABILITATO);

  1029.                     // Gestione errore
  1030.                     Long idGestioneErroreRispostaAsincrona = rs.getLong("id_gestione_errore_risp");
  1031.                     GestioneErrore gestioneErroreRispostaAsincrona = null;
  1032.                     if(idGestioneErroreRispostaAsincrona>0){
  1033.                         gestioneErroreRispostaAsincrona = DriverConfigurazioneDB_gestioneErroreLIB.getGestioneErrore(idGestioneErroreRispostaAsincrona, con);
  1034.                         rispAsinc.setGestioneErrore(gestioneErroreRispostaAsincrona);
  1035.                     }
  1036.                 }

  1037.                 // InvocazioneServizio
  1038.                 //se non esiste il connettore e getmsginv e' disabilitato allora non esiste invocazione servizio
  1039.                 idConnettore = rs.getLong("id_connettore_inv");
  1040.                 String getMsgInv = rs.getString("getmsginv");
  1041.                 InvocazioneServizio invServizio = null;            
  1042.                 if (idConnettore > 0 || (getMsgInv != null && !getMsgInv.equals("")) ) {
  1043.                     invServizio = new InvocazioneServizio();
  1044.                     Connettore connserv = DriverConfigurazioneDB_connettoriLIB.getConnettore(idConnettore, con, this.driver.getDriverUnwrapBYOK());
  1045.                     invServizio.setConnettore(connserv);
  1046.                     invServizio.setGetMessage(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(getMsgInv));

  1047.                     int sbustamentoInfoProtocollo = rs.getInt("sbustamento_protocol_info_inv");
  1048.                     if(CostantiDB.TRUE == sbustamentoInfoProtocollo)
  1049.                         invServizio.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.ABILITATO);
  1050.                     else if(CostantiDB.FALSE == sbustamentoInfoProtocollo)
  1051.                         invServizio.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.DISABILITATO);
  1052.                     else
  1053.                         invServizio.setSbustamentoInformazioniProtocollo(CostantiConfigurazione.ABILITATO);

  1054.                     if(rs.getInt("sbustamentoinv")==1)
  1055.                         invServizio.setSbustamentoSoap(CostantiConfigurazione.ABILITATO);
  1056.                     else
  1057.                         invServizio.setSbustamentoSoap(CostantiConfigurazione.DISABILITATO);

  1058.                     invServizio.setAutenticazione(DriverConfigurazioneDBLib.getEnumInvocazioneServizioTipoAutenticazione(rs.getString("tipoauthinv")));
  1059.                     invServizio.setInvioPerRiferimento(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs.getString("invio_x_rif_inv")));
  1060.                     invServizio.setRispostaPerRiferimento(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs.getString("risposta_x_rif_inv")));
  1061.                    
  1062.                     if(invServizio.getAutenticazione()!=null && InvocazioneServizioTipoAutenticazione.BASIC.equals(invServizio.getAutenticazione())){
  1063.                         InvocazioneCredenziali credInvServ = new InvocazioneCredenziali();
  1064.                        
  1065.                         String encValue = rs.getString("enc_passwordinv");
  1066.                         String plainValue = rs.getString("passwordinv");
  1067.                         if(encValue!=null && StringUtils.isNotEmpty(encValue)) {
  1068.                             IDriverBYOK driverBYOK = this.driver.getDriverUnwrapBYOK();
  1069.                             if(driverBYOK!=null) {
  1070.                                 credInvServ.setPassword(driverBYOK.unwrapAsString(encValue));
  1071.                             }
  1072.                             else {
  1073.                                 credInvServ.setPassword(encValue);
  1074.                             }
  1075.                         }
  1076.                         else {
  1077.                             credInvServ.setPassword(plainValue);
  1078.                         }
  1079.                        
  1080.                         credInvServ.setUser(rs.getString("utenteinv"));
  1081.                         invServizio.setCredenziali(credInvServ);
  1082.                     }

  1083.                     // Gestione errore
  1084.                     Long idGestioneErroreInvocazioneServizio = rs.getLong("id_gestione_errore_inv");
  1085.                     GestioneErrore gestioneErroreInvocazioneServizio = null;
  1086.                     if(idGestioneErroreInvocazioneServizio>0){
  1087.                         gestioneErroreInvocazioneServizio = DriverConfigurazioneDB_gestioneErroreLIB.getGestioneErrore(idGestioneErroreInvocazioneServizio, con);
  1088.                         invServizio.setGestioneErrore(gestioneErroreInvocazioneServizio);
  1089.                     }
  1090.                 }

  1091.                 sa.setInvocazionePorta(invPorta);
  1092.                 sa.setRispostaAsincrona(rispAsinc);
  1093.                 sa.setInvocazioneServizio(invServizio);

  1094.                 // retrocompatibilita tipologie
  1095.                 if(sa.getTipologiaErogazione()==null){
  1096.                     sa.setTipologiaErogazione(TipologiaErogazione.DISABILITATO.getValue());
  1097.                 }
  1098.                 if(sa.getTipologiaFruizione()==null){
  1099.                     sa.setTipologiaFruizione(TipologiaFruizione.DISABILITATO.getValue());
  1100.                 }
  1101.                 if(TipologiaErogazione.DISABILITATO.equals(sa.getTipologiaErogazione()) &&
  1102.                         TipologiaFruizione.DISABILITATO.equals(sa.getTipologiaFruizione())){
  1103.                    
  1104.                     // TipologiaFruizione: cerco di comprenderlo dalla configurazione del sa
  1105.                     if(sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().sizeCredenzialiList()>0){
  1106.                         sa.setTipologiaFruizione(TipologiaFruizione.NORMALE.getValue());
  1107.                     }

  1108.                     // TipologiaErogazione: cerco di comprenderlo dalla configurazione del sa
  1109.                     if(sa.getInvocazioneServizio()!=null){
  1110.                         if(StatoFunzionalita.ABILITATO.equals(sa.getInvocazioneServizio().getGetMessage())){
  1111.                             sa.setTipologiaErogazione(TipologiaErogazione.MESSAGE_BOX.getValue());
  1112.                         }
  1113.                         else if(sa.getInvocazioneServizio().getConnettore()!=null &&
  1114.                                 !TipiConnettore.DISABILITATO.getNome().equals(sa.getInvocazioneServizio().getConnettore().getTipo())){
  1115.                             sa.setTipologiaErogazione(TipologiaErogazione.TRASPARENTE.getValue());
  1116.                         }
  1117.                     }
  1118.                        
  1119.                 }  
  1120.                
  1121.                 // Proprieta Oggetto
  1122.                 sa.setProprietaOggetto(this.utilsDriver.readProprietaOggetto(rs,false));
  1123.                
  1124.                 rs.close();
  1125.                 stm.close();
  1126.                
  1127.                
  1128.                
  1129.                 // ruoli
  1130.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1131.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_RUOLI);
  1132.                 sqlQueryObject.addSelectField("*");
  1133.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1134.                 sqlQuery = sqlQueryObject.createSQLQuery();
  1135.                 stm = con.prepareStatement(sqlQuery);
  1136.                 stm.setLong(1, sa.getId());
  1137.                 rs = stm.executeQuery();

  1138.                 while (rs.next()) {
  1139.                    
  1140.                     if(sa.getInvocazionePorta()==null){
  1141.                         sa.setInvocazionePorta(new InvocazionePorta());
  1142.                     }
  1143.                     if(sa.getInvocazionePorta().getRuoli()==null){
  1144.                         sa.getInvocazionePorta().setRuoli(new ServizioApplicativoRuoli());
  1145.                     }
  1146.                    
  1147.                     Ruolo ruolo = new Ruolo();
  1148.                     ruolo.setNome(rs.getString("ruolo"));
  1149.                     sa.getInvocazionePorta().getRuoli().addRuolo(ruolo);
  1150.                
  1151.                 }
  1152.                 rs.close();
  1153.                 stm.close();
  1154.                
  1155.                
  1156.                 // credenziali
  1157.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1158.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  1159.                 sqlQueryObject.addSelectField("*");
  1160.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1161.                 sqlQueryObject.addOrderBy("id", true);
  1162.                 sqlQuery = sqlQueryObject.createSQLQuery();
  1163.                 stm = con.prepareStatement(sqlQuery);
  1164.                 stm.setLong(1, sa.getId());
  1165.                 rs = stm.executeQuery();

  1166.                 while (rs.next()) {
  1167.                    
  1168.                     if(sa.getInvocazionePorta()==null){
  1169.                         sa.setInvocazionePorta(new InvocazionePorta());
  1170.                     }
  1171.                    
  1172.                     Credenziali credenziali = new Credenziali();
  1173.                    
  1174.                     credenziali.setTipo(DriverConfigurazioneDBLib.getEnumCredenzialeTipo(tipoAuth));
  1175.                                        
  1176.                     credenziali.setIssuer(rs.getString("issuer"));
  1177.                     credenziali.setSubject(rs.getString("subject"));
  1178.                     credenziali.setCnSubject(rs.getString("cn_subject"));
  1179.                     credenziali.setCnIssuer(rs.getString("cn_issuer"));
  1180.                     IJDBCAdapter jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(this.driver.tipoDB);
  1181.                     credenziali.setCertificate(jdbcAdapter.getBinaryData(rs, "certificate"));
  1182.                     int strict = rs.getInt("cert_strict_verification");
  1183.                     if(strict == CostantiDB.TRUE) {
  1184.                         credenziali.setCertificateStrictVerification(true);
  1185.                     }
  1186.                     else if(strict == CostantiDB.FALSE) {
  1187.                         credenziali.setCertificateStrictVerification(false);
  1188.                     }
  1189.                
  1190.                     sa.getInvocazionePorta().addCredenziali(credenziali);  
  1191.                 }
  1192.                 rs.close();
  1193.                 stm.close();
  1194.                
  1195.                
  1196.                 // proprieta'
  1197.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1198.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_PROPS);
  1199.                 sqlQueryObject.addSelectField("*");
  1200.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1201.                 sqlQuery = sqlQueryObject.createSQLQuery();
  1202.                 stm = con.prepareStatement(sqlQuery);
  1203.                 stm.setLong(1, sa.getId());
  1204.                 rs = stm.executeQuery();

  1205.                 while (rs.next()) {
  1206.                    
  1207.                     Proprieta proprieta = new Proprieta();
  1208.                     proprieta.setNome(rs.getString("nome"));
  1209.                    
  1210.                     String plainValue = rs.getString("valore");
  1211.                     String encValue = rs.getString("enc_value");
  1212.                     if(encValue!=null && StringUtils.isNotEmpty(encValue)) {
  1213.                         IDriverBYOK driverBYOK = this.driver.getDriverUnwrapBYOK();
  1214.                         if(driverBYOK!=null) {
  1215.                             proprieta.setValore(driverBYOK.unwrapAsString(encValue));
  1216.                         }
  1217.                         else {
  1218.                             proprieta.setValore(encValue);
  1219.                         }
  1220.                     }
  1221.                     else {
  1222.                         proprieta.setValore(plainValue);
  1223.                     }
  1224.                    
  1225.                     sa.addProprieta(proprieta);
  1226.                
  1227.                 }
  1228.                 rs.close();
  1229.                 stm.close();
  1230.                
  1231.                
  1232.                 // Protocol Properties
  1233.                 try{
  1234.                     List<ProtocolProperty> listPP = DriverConfigurazioneDBLib.getListaProtocolProperty(sa.getId(), ProprietariProtocolProperty.SERVIZIO_APPLICATIVO, con,
  1235.                             this.driver.tipoDB, this.driver.getDriverUnwrapBYOK());
  1236.                     if(listPP!=null && !listPP.isEmpty()){
  1237.                         for (ProtocolProperty protocolProperty : listPP) {
  1238.                             sa.addProtocolProperty(protocolProperty);
  1239.                         }
  1240.                     }
  1241.                 }catch(DriverConfigurazioneNotFound dNotFound){
  1242.                     // ignore
  1243.                 }
  1244.                
  1245.                
  1246.                 return sa;

  1247.             } else {
  1248.                 throw new DriverConfigurazioneNotFound("Nessun Servizio Applicativo trovato.");
  1249.             }
  1250.         } catch (SQLException e) {
  1251.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] SQLException :" + e.getMessage(),e);
  1252.         }catch (DriverConfigurazioneNotFound e) {
  1253.             throw new DriverConfigurazioneNotFound(e);
  1254.         }catch (Exception e) {
  1255.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Exception :" + e.getMessage(),e);
  1256.         } finally {
  1257.             //Chiudo statement and resultset
  1258.             JDBCUtilities.closeResources(rs, stm);
  1259.             this.driver.closeConnection(con);
  1260.         }

  1261.     }

  1262.     private List<FiltroRicercaProtocolPropertyConfig> buildListModiTokenCredentials (String tokenPolicy, String tokenClientId) throws SQLQueryObjectException {
  1263.         List<FiltroRicercaProtocolPropertyConfig> list = new ArrayList<FiltroRicercaProtocolPropertyConfig>();
  1264.         FiltroRicercaProtocolPropertyConfig pTokenPolicy = new FiltroRicercaProtocolPropertyConfig();
  1265.         pTokenPolicy.setName(CostantiDB.MODIPA_SICUREZZA_TOKEN_POLICY);
  1266.         pTokenPolicy.setValueAsString(tokenPolicy);
  1267.         list.add(pTokenPolicy);
  1268.         FiltroRicercaProtocolPropertyConfig pTokenClientId = new FiltroRicercaProtocolPropertyConfig();
  1269.         pTokenClientId.setName(CostantiDB.MODIPA_SICUREZZA_TOKEN_CLIENT_ID);
  1270.         pTokenClientId.setValueAsString(tokenClientId);
  1271.         list.add(pTokenClientId);
  1272.         return list;
  1273.     }
  1274.     private ISQLQueryObject buildSQLQueryObjectModiTokenCredentials (List<FiltroRicercaProtocolPropertyConfig> list) throws SQLQueryObjectException {
  1275.         ISQLQueryObject sqlQueryObjectProtocolProperties = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1276.         this.protocolPropertiesDriver._setProtocolPropertiesForSearch(sqlQueryObjectProtocolProperties, list, CostantiDB.SERVIZI_APPLICATIVI);
  1277.         return sqlQueryObjectProtocolProperties;
  1278.     }
  1279.     private void setSQLQueryObjectModiTokenCredentials (PreparedStatement stmt, int index,
  1280.             List<FiltroRicercaProtocolPropertyConfig> list) throws SQLQueryObjectException, SQLException, JDBCAdapterException, UtilsException {
  1281.         this.protocolPropertiesDriver._setProtocolPropertiesForSearch(stmt, index,
  1282.                 list, ProprietariProtocolProperty.SERVIZIO_APPLICATIVO);
  1283.     }
  1284.    
  1285.     private ISQLQueryObject buildFiltroApplicativiTls(ISQLQueryObject sqlQueryObject, List<String> tipiSoggetto,
  1286.             boolean includiApplicativiNonModI, boolean includiApplicativiModIEsterni, boolean includiApplicativiModIInterni) throws SQLQueryObjectException {
  1287.         ISQLQueryObject object = null;
  1288.         if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  1289.             object = sqlQueryObject.newSQLQueryObject();
  1290.             object.setANDLogicOperator(false);
  1291.             if(includiApplicativiNonModI) {
  1292.                 ISQLQueryObject notModI = sqlQueryObject.newSQLQueryObject();
  1293.                 notModI.setANDLogicOperator(true);
  1294.                 notModI.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  1295.                 notModI.setNOTBeforeConditions(true);
  1296.                 object.addWhereCondition(notModI.createSQLConditions());
  1297.             }
  1298.            
  1299.             ISQLQueryObject modIEsterniPdd = null;
  1300.             if(includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  1301.                 modIEsterniPdd = sqlQueryObject.newSQLQueryObject();
  1302.                 modIEsterniPdd.addFromTable(CostantiDB.SOGGETTI); // di servizio, non viene usata in createSQLConditions
  1303.                 modIEsterniPdd.setANDLogicOperator(false);
  1304.                
  1305.                 modIEsterniPdd.addWhereIsNullCondition(CostantiDB.SOGGETTI+".server");
  1306.                
  1307.                 if(!TipiDatabase.ORACLE.toString().equals(sqlQueryObject.getTipoDatabase())) {
  1308.                     modIEsterniPdd.addWhereIsEmptyCondition(CostantiDB.SOGGETTI+".server");
  1309.                 }
  1310.                
  1311.                 ISQLQueryObject modIEsterniPddQuery = sqlQueryObject.newSQLQueryObject();
  1312.                 modIEsterniPddQuery.addFromTable(CostantiDB.PDD);
  1313.                 modIEsterniPddQuery.setANDLogicOperator(true);
  1314.                 modIEsterniPddQuery.addSelectAliasField(CostantiDB.PDD, "nome", "nomeServer");
  1315.                 modIEsterniPddQuery.addWhereCondition(CostantiDB.SOGGETTI+".server="+CostantiDB.PDD+".nome");
  1316.                 modIEsterniPddQuery.addWhereCondition(CostantiDB.PDD+".tipo='esterno'");
  1317.                 modIEsterniPdd.addWhereExistsCondition(false, modIEsterniPddQuery);
  1318.                
  1319.                 modIEsterniPdd.setNOTBeforeConditions(!includiApplicativiModIEsterni);
  1320.                
  1321.                 ISQLQueryObject modIEsterniP= sqlQueryObject.newSQLQueryObject();
  1322.                 modIEsterniP.setANDLogicOperator(true);
  1323.                 modIEsterniP.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  1324.                 modIEsterniP.addWhereCondition(modIEsterniPdd.createSQLConditions());
  1325.                 object.addWhereCondition(modIEsterniP.createSQLConditions());
  1326.             }
  1327.         }
  1328.         return object;
  1329.     }
  1330.    
  1331.     /**
  1332.      *
  1333.      * @param aSA
  1334.      * @throws DriverConfigurazioneException
  1335.      */
  1336.     protected void createServizioApplicativo(ServizioApplicativo aSA) throws DriverConfigurazioneException {

  1337.         if (aSA == null)
  1338.             throw new DriverConfigurazioneException("Servizio Applicativo non valido");
  1339.         if (aSA.getNome() == null || aSA.getNome().equals(""))
  1340.             throw new DriverConfigurazioneException("Nome Servizio Applicativo non valido");
  1341.         if (aSA.getNomeSoggettoProprietario() == null || aSA.getNomeSoggettoProprietario().equals(""))
  1342.             throw new DriverConfigurazioneException("Nome Soggetto Proprietario Servizio Applicativo non valido");
  1343.         if (aSA.getTipoSoggettoProprietario() == null || aSA.getTipoSoggettoProprietario().equals(""))
  1344.             throw new DriverConfigurazioneException("Tipo Soggetto Proprietario Servizio Applicativo non valido");

  1345.         Connection con = null;
  1346.         boolean error = false;

  1347.         if (this.driver.atomica) {
  1348.             try {
  1349.                 con = this.driver.getConnectionFromDatasource("createServizioApplicativo");
  1350.                 con.setAutoCommit(false);
  1351.             } catch (Exception e) {
  1352.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::createServizioApplicativo] Exception accedendo al datasource :" + e.getMessage(),e);

  1353.             }

  1354.         } else
  1355.             con = this.driver.globalConnection;

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

  1357.         try {
  1358.             this.driver.logDebug("CRUDServizioApplicativo type = 1");
  1359.             // creo soggetto
  1360.             DriverConfigurazioneDB_serviziApplicativiLIB.CRUDServizioApplicativo(1, aSA, con, this.driver.getDriverWrapBYOK());

  1361.         } catch (Exception qe) {
  1362.             error = true;
  1363.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::createServizioApplicativo] Errore durante la creazione del servizioApplicativo : " + qe.getMessage(),qe);
  1364.         } finally {

  1365.             this.driver.closeConnection(error,con);
  1366.         }
  1367.     }

  1368.     /**
  1369.      *
  1370.      * @param aSA
  1371.      * @throws DriverConfigurazioneException
  1372.      */
  1373.     protected void updateServizioApplicativo(ServizioApplicativo aSA) throws DriverConfigurazioneException {
  1374.         if (aSA == null)
  1375.             throw new DriverConfigurazioneException("Servizio Applicativo non valida");
  1376.         if (aSA.getNome() == null || aSA.getNome().equals(""))
  1377.             throw new DriverConfigurazioneException("Nome Servizio Applicativo non valido");
  1378.         if (aSA.getNomeSoggettoProprietario() == null || aSA.getNomeSoggettoProprietario().equals(""))
  1379.             throw new DriverConfigurazioneException("Nome Soggetto Proprietario Servizio Applicativo non valido");
  1380.         if (aSA.getTipoSoggettoProprietario() == null || aSA.getTipoSoggettoProprietario().equals(""))
  1381.             throw new DriverConfigurazioneException("Tipo Soggetto Proprietario Servizio Applicativo non valido");

  1382.         Connection con = null;
  1383.         boolean error = false;

  1384.         if (this.driver.atomica) {
  1385.             try {
  1386.                 con = this.driver.getConnectionFromDatasource("updateServizioApplicativo");
  1387.                 con.setAutoCommit(false);
  1388.             } catch (Exception e) {
  1389.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::updateServizioApplicativo] Exception accedendo al datasource :" + e.getMessage(),e);

  1390.             }

  1391.         } else
  1392.             con = this.driver.globalConnection;

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

  1394.         try {
  1395.             this.driver.logDebug("CRUDServizioApplicativo type = 2");
  1396.             // creo soggetto
  1397.             DriverConfigurazioneDB_serviziApplicativiLIB.CRUDServizioApplicativo(2, aSA, con, this.driver.getDriverWrapBYOK());

  1398.         } catch (Exception qe) {
  1399.             error = true;
  1400.             throw new DriverConfigurazioneException("Errore durante l'aggiornamento del servizioApplicativo : " + qe.getMessage(), qe);
  1401.         } finally {

  1402.             this.driver.closeConnection(error,con);
  1403.         }
  1404.     }

  1405.     protected void deleteServizioApplicativo(ServizioApplicativo aSA) throws DriverConfigurazioneException {
  1406.         if (aSA == null)
  1407.             throw new DriverConfigurazioneException("Servizio Applicativo non valida");
  1408.         if (aSA.getNome() == null || aSA.getNome().equals(""))
  1409.             throw new DriverConfigurazioneException("Nome Servizio Applicativo non valido");
  1410.         if (aSA.getNomeSoggettoProprietario() == null || aSA.getNomeSoggettoProprietario().equals(""))
  1411.             throw new DriverConfigurazioneException("Nome Soggetto Proprietario Servizio Applicativo non valido");
  1412.         if (aSA.getTipoSoggettoProprietario() == null || aSA.getTipoSoggettoProprietario().equals(""))
  1413.             throw new DriverConfigurazioneException("Tipo Soggetto Proprietario Servizio Applicativo non valido");

  1414.         Connection con = null;
  1415.         boolean error = false;

  1416.         if (this.driver.atomica) {
  1417.             try {
  1418.                 con = this.driver.getConnectionFromDatasource("deleteServizioApplicativo");
  1419.                 con.setAutoCommit(false);
  1420.             } catch (Exception e) {
  1421.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::deleteServizioApplicativo] Exception accedendo al datasource :" + e.getMessage(),e);

  1422.             }

  1423.         } else
  1424.             con = this.driver.globalConnection;

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

  1426.         try {
  1427.             this.driver.logDebug("CRUDServizioApplicativo type = 3");
  1428.             // creo soggetto
  1429.             DriverConfigurazioneDB_serviziApplicativiLIB.CRUDServizioApplicativo(3, aSA, con, this.driver.getDriverWrapBYOK());

  1430.         } catch (Exception qe) {
  1431.             error = true;
  1432.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::deleteServizioApplicativo] Errore durante la delete del servizioApplicativo : " + qe.getMessage(),qe);
  1433.         } finally {

  1434.             this.driver.closeConnection(error,con);
  1435.         }
  1436.     }
  1437.    
  1438.    

  1439.    

  1440.     protected List<ServizioApplicativo> servizioApplicativoWithCredenzialiBasicList(String utente, String password, boolean checkPassword) throws DriverConfigurazioneException {
  1441.         String nomeMetodo = "servizioApplicativoWithCredenzialiBasicList";
  1442.         String queryString;

  1443.         Connection con = null;
  1444.         PreparedStatement stmt=null;
  1445.         ResultSet risultato=null;
  1446.         ArrayList<ServizioApplicativo> lista = new ArrayList<>();

  1447.         if (this.driver.atomica) {
  1448.             try {
  1449.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  1450.             } catch (Exception e) {
  1451.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1452.             }

  1453.         } else
  1454.             con = this.driver.globalConnection;

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

  1456.         try {

  1457.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1458.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1459.             sqlQueryObject.addSelectField("id");
  1460.             sqlQueryObject.addSelectField("nome");
  1461.             sqlQueryObject.addSelectField("id_soggetto");
  1462.             sqlQueryObject.addWhereCondition("tipoauth = ?");
  1463.             sqlQueryObject.addWhereCondition("utente = ?");
  1464.             if(checkPassword) {
  1465.                 sqlQueryObject.addWhereCondition("password = ?");
  1466.             }
  1467.             sqlQueryObject.setANDLogicOperator(true);
  1468.             queryString = sqlQueryObject.createSQLQuery();
  1469.             stmt = con.prepareStatement(queryString);
  1470.             int index = 1;
  1471.             stmt.setString(index++, CredenzialeTipo.BASIC.getValue());
  1472.             stmt.setString(index++, utente);
  1473.             if(checkPassword) {
  1474.                 stmt.setString(index++, password);
  1475.             }
  1476.             risultato = stmt.executeQuery();

  1477.             ServizioApplicativo sa;
  1478.             while (risultato.next()) {

  1479.                 sa=this.getServizioApplicativo(risultato.getLong("id"));

  1480.                 lista.add(sa);

  1481.             }

  1482.             return lista;

  1483.         } catch (Exception qe) {
  1484.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1485.         } finally {

  1486.             //Chiudo statement and resultset
  1487.             JDBCUtilities.closeResources(risultato, stmt);

  1488.             this.driver.closeConnection(con);
  1489.         }
  1490.     }
  1491.    
  1492.     protected List<ServizioApplicativo> servizioApplicativoWithCredenzialiApiKeyList(String utente, boolean appId) throws DriverConfigurazioneException {
  1493.         String nomeMetodo = "servizioApplicativoWithCredenzialiApiKeyList";
  1494.         String queryString;

  1495.         Connection con = null;
  1496.         PreparedStatement stmt=null;
  1497.         ResultSet risultato=null;
  1498.         ArrayList<ServizioApplicativo> lista = new ArrayList<>();

  1499.         if (this.driver.atomica) {
  1500.             try {
  1501.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  1502.             } catch (Exception e) {
  1503.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1504.             }

  1505.         } else
  1506.             con = this.driver.globalConnection;

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

  1508.         try {

  1509.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1510.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1511.             sqlQueryObject.addSelectField("id");
  1512.             sqlQueryObject.addSelectField("nome");
  1513.             sqlQueryObject.addSelectField("id_soggetto");
  1514.             sqlQueryObject.addWhereCondition("tipoauth = ?");
  1515.             sqlQueryObject.addWhereCondition("utente = ?");
  1516.             sqlQueryObject.addWhereCondition("issuer = ?");
  1517.             sqlQueryObject.setANDLogicOperator(true);
  1518.             queryString = sqlQueryObject.createSQLQuery();
  1519.             stmt = con.prepareStatement(queryString);
  1520.             int index = 1;
  1521.             stmt.setString(index++, CredenzialeTipo.APIKEY.getValue());
  1522.             stmt.setString(index++, utente);
  1523.             stmt.setString(index++, CostantiDB.getIssuerApiKey(appId));
  1524.             risultato = stmt.executeQuery();

  1525.             ServizioApplicativo sa;
  1526.             while (risultato.next()) {

  1527.                 sa=this.getServizioApplicativo(risultato.getLong("id"));

  1528.                 lista.add(sa);

  1529.             }

  1530.             return lista;

  1531.         } catch (Exception qe) {
  1532.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1533.         } finally {

  1534.             //Chiudo statement and resultset
  1535.             JDBCUtilities.closeResources(risultato, stmt);

  1536.             this.driver.closeConnection(con);
  1537.         }
  1538.     }

  1539.     protected List<ServizioApplicativo> servizioApplicativoWithCredenzialiSslList(String subject, String issuer,
  1540.             List<String> tipiSoggetto,
  1541.             boolean includiApplicativiNonModI, boolean includiApplicativiModIEsterni, boolean includiApplicativiModIInterni) throws DriverConfigurazioneException {
  1542.         String nomeMetodo = "servizioApplicativoWithCredenzialiSslList";
  1543.         String queryString;

  1544.         Connection con = null;
  1545.         PreparedStatement stmt=null;
  1546.         ResultSet risultato=null;
  1547.         ArrayList<ServizioApplicativo> lista = new ArrayList<>();

  1548.         if (this.driver.atomica) {
  1549.             try {
  1550.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  1551.             } catch (Exception e) {
  1552.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1553.             }

  1554.         } else
  1555.             con = this.driver.globalConnection;

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

  1557.         try {

  1558.             for (int i = 0; i < 2; i++) {
  1559.                            
  1560.                 String tabella = null;
  1561.                 if(i==0) {
  1562.                     tabella = CostantiDB.SERVIZI_APPLICATIVI;
  1563.                 }
  1564.                 else {
  1565.                     tabella = CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI;
  1566.                 }
  1567.                
  1568.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1569.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1570.                 if(tipiSoggetto!=null) {
  1571.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1572.                 }
  1573.                 if(i>0) {
  1574.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  1575.                 }
  1576.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "saIdentificativo");
  1577.                 /**sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "nome", "saNome");
  1578.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id_soggetto", "saIdentificativoSoggetto");*/
  1579.                 sqlQueryObject.addSelectAliasField(tabella, "subject", "saSubject");
  1580.                 sqlQueryObject.addSelectAliasField(tabella, "issuer", "saIssuer");
  1581.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "tipoauth", "saTipoAuth");
  1582.                
  1583.                 if(tipiSoggetto!=null) {
  1584.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  1585.                     if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  1586.                         ISQLQueryObject object =  buildFiltroApplicativiTls(sqlQueryObject, tipiSoggetto,
  1587.                                 includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  1588.                         sqlQueryObject.addWhereCondition(object.createSQLConditions());
  1589.                     } else {
  1590.                         sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  1591.                     }
  1592.                 }
  1593.                 if(i>0) {
  1594.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".id_servizio_applicativo="+CostantiDB.SERVIZI_APPLICATIVI+".id");
  1595.                 }
  1596.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?");
  1597.                 // I certificati caricati con una token policy potrebbero non dover essere considerati per l'autenticazione https
  1598.                 // in futuro se serve gestire il boolean tokenWithHttpsEnabled anche per l'autenticazione https
  1599.                 boolean tokenWithHttpsEnabled = false;
  1600.                 if(!tokenWithHttpsEnabled){
  1601.                     sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy");
  1602.                 }
  1603.                
  1604.                 Map<String, List<String>> hashSubject = CertificateUtils.getPrincipalIntoMap(subject, PrincipalType.SUBJECT);
  1605.                 Map<String, List<String>> hashIssuer = null;
  1606.                 if(StringUtils.isNotEmpty(issuer)) {
  1607.                     hashIssuer = CertificateUtils.getPrincipalIntoMap(issuer, PrincipalType.ISSUER);
  1608.                 }
  1609.                
  1610.                 for (String key : hashSubject.keySet()) {                  
  1611.                     List<String> listValues = hashSubject.get(key);
  1612.                     for (String value : listValues) {
  1613.                         sqlQueryObject.addWhereLikeCondition(tabella+".subject", "/"+CertificateUtils.formatKeyPrincipal(key)+"="+CertificateUtils.formatValuePrincipal(value)+"/", true, true, false);
  1614.                     }
  1615.                    
  1616.                 }
  1617.                
  1618.                 if(hashIssuer!=null) {
  1619.                     for (String key : hashIssuer.keySet()) {
  1620.                         List<String> listValues = hashIssuer.get(key);
  1621.                         for (String value : listValues) {
  1622.                             sqlQueryObject.addWhereLikeCondition(tabella+".issuer", "/"+CertificateUtils.formatKeyPrincipal(key)+"="+CertificateUtils.formatValuePrincipal(value)+"/", true, true, false);
  1623.                         }
  1624.                     }
  1625.                    
  1626.                 }
  1627.                 else {
  1628.                     sqlQueryObject.addWhereIsNullCondition(tabella+".issuer");
  1629.                 }
  1630.                
  1631.                 sqlQueryObject.setANDLogicOperator(true);
  1632.                 queryString = sqlQueryObject.createSQLQuery();
  1633.                 stmt = con.prepareStatement(queryString);
  1634.                 stmt.setString(1, CredenzialeTipo.SSL.getValue());
  1635.                
  1636.                 risultato = stmt.executeQuery();
  1637.    
  1638.                 ServizioApplicativo sa;
  1639.                 while (risultato.next()) {
  1640.    
  1641.                     // Possono esistere piu' sil che hanno una porzione di subject uguale, devo quindi verificare che sia proprio quello che cerco
  1642.                    
  1643.                     String subjectPotenziale =  risultato.getString("saSubject");
  1644.                     boolean subjectValid = CertificateUtils.sslVerify(subjectPotenziale, subject, PrincipalType.SUBJECT, this.driver.log);
  1645.                    
  1646.                     boolean issuerValid = true;
  1647.                     if(hashIssuer!=null) {
  1648.                         String issuerPotenziale =  risultato.getString("saIssuer");
  1649.                         if(StringUtils.isNotEmpty(issuerPotenziale)) {
  1650.                             issuerValid = CertificateUtils.sslVerify(issuerPotenziale, issuer, PrincipalType.ISSUER, this.driver.log);
  1651.                         }
  1652.                         else {
  1653.                             issuerValid = false;
  1654.                         }
  1655.                     }
  1656.                    
  1657.                     if( !subjectValid || !issuerValid ) {
  1658.                         continue;
  1659.                     }
  1660.                    
  1661.                     sa=this.getServizioApplicativo(risultato.getLong("saIdentificativo"));
  1662.                     lista.add(sa);
  1663.                 }
  1664.                 risultato.close(); risultato = null;
  1665.                 stmt.close(); stmt = null;
  1666.                
  1667.             }
  1668.            
  1669.             return lista;

  1670.         } catch (Exception qe) {
  1671.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1672.         } finally {

  1673.             //Chiudo statement and resultset
  1674.             JDBCUtilities.closeResources(risultato, stmt);

  1675.             this.driver.closeConnection(con);
  1676.         }
  1677.     }
  1678.    
  1679.     protected List<ServizioApplicativo> servizioApplicativoWithCredenzialiSslList(CertificateInfo certificate, boolean strictVerifier,
  1680.             List<String> tipiSoggetto,
  1681.             boolean includiApplicativiNonModI, boolean includiApplicativiModIEsterni, boolean includiApplicativiModIInterni) throws DriverConfigurazioneException {
  1682.         String nomeMetodo = "servizioApplicativoWithCredenzialiSslList";
  1683.         String queryString;

  1684.         Connection con = null;
  1685.         PreparedStatement stmt=null;
  1686.         ResultSet risultato=null;
  1687.         ArrayList<ServizioApplicativo> lista = new ArrayList<>();

  1688.         if (this.driver.atomica) {
  1689.             try {
  1690.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  1691.             } catch (Exception e) {
  1692.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1693.             }

  1694.         } else
  1695.             con = this.driver.globalConnection;

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

  1697.         try {
  1698.            
  1699.            
  1700.             for (int i = 0; i < 2; i++) {
  1701.                
  1702.                 String tabella = null;
  1703.                 if(i==0) {
  1704.                     tabella = CostantiDB.SERVIZI_APPLICATIVI;
  1705.                 }
  1706.                 else {
  1707.                     tabella = CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI;
  1708.                 }

  1709.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1710.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1711.                 if(tipiSoggetto!=null) {
  1712.                     sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1713.                 }
  1714.                 if(i>0) {
  1715.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  1716.                 }
  1717.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "saIdentificativo");
  1718.                 /**sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "nome", "saNome");
  1719.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id_soggetto", "saIdentificativoSoggetto");*/
  1720.                 sqlQueryObject.addSelectAliasField(tabella, "cn_subject", "saCNSubject");
  1721.                 sqlQueryObject.addSelectAliasField(tabella, "cn_issuer", "saCNIssuer");
  1722.                 sqlQueryObject.addSelectAliasField(tabella, "cert_strict_verification", "saCertStrictVerificationr");
  1723.                 sqlQueryObject.addSelectAliasField(tabella, "certificate", "saCertificate");
  1724.                
  1725.                 if(tipiSoggetto!=null) {
  1726.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  1727.                     if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  1728.                         ISQLQueryObject object =  buildFiltroApplicativiTls(sqlQueryObject, tipiSoggetto,
  1729.                                 includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  1730.                         sqlQueryObject.addWhereCondition(object.createSQLConditions());
  1731.                     } else {
  1732.                         sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiSoggetto.toArray(new String[1]));
  1733.                     }
  1734.                 }
  1735.                 if(i>0) {
  1736.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI+".id_servizio_applicativo="+CostantiDB.SERVIZI_APPLICATIVI+".id");
  1737.                 }
  1738.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?");
  1739.                 // I certificati caricati con una token policy potrebbero non dover essere considerati per l'autenticazione https
  1740.                 // in futuro se serve gestire il boolean tokenWithHttpsEnabled anche per l'autenticazione https
  1741.                 boolean tokenWithHttpsEnabled = false;
  1742.                 if(!tokenWithHttpsEnabled){
  1743.                     sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy");
  1744.                 }
  1745.                 sqlQueryObject.addWhereCondition(tabella+".cn_subject = ?");
  1746.                 sqlQueryObject.addWhereCondition(tabella+".cn_issuer = ?");
  1747.                 /**sqlQueryObject.addWhereCondition(tabella+".cert_strict_verification = ?");*/
  1748.                
  1749.                 sqlQueryObject.setANDLogicOperator(true);
  1750.                 queryString = sqlQueryObject.createSQLQuery();
  1751.                 String cnSubject = certificate.getSubject().getCN();
  1752.                 String cnIssuer = certificate.getIssuer().getCN();
  1753.                 stmt = con.prepareStatement(queryString);
  1754.                 int indexStmt = 1;
  1755.                 stmt.setString(indexStmt++, CredenzialeTipo.SSL.getValue());
  1756.                 stmt.setString(indexStmt++, cnSubject);
  1757.                 stmt.setString(indexStmt++, cnIssuer);
  1758.                 // Il controllo serve ad evitare di caricare piu' applicativi con stesso certificato medesimo (indipendentemente dallo strict)
  1759.                 // Se quindi sto creando un entita con strict abilitato, verifichero sotto tra i vari certificati la corrispondenza esatta, altrimenti una corrispondenza non esatta
  1760.                 /**if(strictVerifier) {
  1761.                     stmt.setInt(indexStmt++, CostantiDB.TRUE);
  1762.                 }
  1763.                 else {
  1764.                     stmt.setInt(indexStmt++, CostantiDB.FALSE);
  1765.                 }*/
  1766.                 risultato = stmt.executeQuery();
  1767.    
  1768.                 ServizioApplicativo sa;
  1769.                 IJDBCAdapter jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(this.driver.tipoDB);
  1770.                 while (risultato.next()) {
  1771.    
  1772.                     // Possono esistere piu' servizi applicativi che hanno un CN con subject e issuer diverso.
  1773.                    
  1774.                     byte[] certificatoBytes = jdbcAdapter.getBinaryData(risultato, "saCertificate");
  1775.                     Certificate certificato = ArchiveLoader.load(ArchiveType.CER, certificatoBytes, 0, null);
  1776.                     /**int tmpStrict = rs.getInt("cert_strict_verification");
  1777.                     boolean strict = tmpStrict == CostantiDB.TRUE;*/
  1778.                    
  1779.                     if(!certificate.equals(certificato.getCertificate(),strictVerifier)) {
  1780.                         continue;
  1781.                     }
  1782.                    
  1783.                     sa=this.getServizioApplicativo(risultato.getLong("saIdentificativo"));
  1784.                     lista.add(sa);
  1785.                 }
  1786.                 risultato.close(); risultato=null;
  1787.                 stmt.close(); stmt=null;
  1788.             }

  1789.             return lista;

  1790.         } catch (Exception qe) {
  1791.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1792.         } finally {

  1793.             //Chiudo statement and resultset
  1794.             JDBCUtilities.closeResources(risultato, stmt);

  1795.             this.driver.closeConnection(con);
  1796.         }
  1797.     }
  1798.    
  1799.     protected List<ServizioApplicativo> servizioApplicativoWithCredenzialiPrincipalList(String principal) throws DriverConfigurazioneException {
  1800.         String nomeMetodo = "servizioApplicativoWithCredenzialiPrincipalList";
  1801.         String queryString;

  1802.         Connection con = null;
  1803.         PreparedStatement stmt=null;
  1804.         ResultSet risultato=null;
  1805.         ArrayList<ServizioApplicativo> lista = new ArrayList<>();

  1806.         if (this.driver.atomica) {
  1807.             try {
  1808.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  1809.             } catch (Exception e) {
  1810.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1811.             }

  1812.         } else
  1813.             con = this.driver.globalConnection;

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

  1815.         try {

  1816.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1817.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1818.             sqlQueryObject.addSelectField("id");
  1819.             sqlQueryObject.addSelectField("nome");
  1820.             sqlQueryObject.addSelectField("id_soggetto");
  1821.             sqlQueryObject.addWhereCondition("tipoauth = ?");
  1822.             sqlQueryObject.addWhereCondition("utente = ?");
  1823.             sqlQueryObject.setANDLogicOperator(true);
  1824.             queryString = sqlQueryObject.createSQLQuery();
  1825.             stmt = con.prepareStatement(queryString);
  1826.             stmt.setString(1, CredenzialeTipo.PRINCIPAL.getValue());
  1827.             stmt.setString(2, principal);      
  1828.             risultato = stmt.executeQuery();

  1829.             ServizioApplicativo sa;
  1830.             while (risultato.next()) {

  1831.                 sa=this.getServizioApplicativo(risultato.getLong("id"));

  1832.                 lista.add(sa);

  1833.             }

  1834.             return lista;

  1835.         } catch (Exception qe) {
  1836.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1837.         } finally {

  1838.             //Chiudo statement and resultset
  1839.             JDBCUtilities.closeResources(risultato, stmt);

  1840.             this.driver.closeConnection(con);
  1841.         }
  1842.     }
  1843.    
  1844.     protected List<ServizioApplicativo> servizioApplicativoWithCredenzialiTokenList(String tokenPolicy, String tokenClientId, boolean tokenWithHttpsEnabled) throws DriverConfigurazioneException {
  1845.         String nomeMetodo = "servizioApplicativoWithCredenzialiTokenList";
  1846.         String queryString;

  1847.         Connection con = null;
  1848.         PreparedStatement stmt=null;
  1849.         ResultSet risultato=null;
  1850.         ArrayList<ServizioApplicativo> lista = new ArrayList<>();

  1851.         if (this.driver.atomica) {
  1852.             try {
  1853.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  1854.             } catch (Exception e) {
  1855.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1856.             }

  1857.         } else
  1858.             con = this.driver.globalConnection;

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

  1860.         try {

  1861.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1862.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1863.             sqlQueryObject.addSelectField("id");
  1864.             sqlQueryObject.addSelectField("nome");
  1865.             sqlQueryObject.addSelectField("id_soggetto");
  1866.            
  1867.             List<FiltroRicercaProtocolPropertyConfig> modiFilter = null;
  1868.             if(tokenWithHttpsEnabled){
  1869.            
  1870.                 modiFilter = buildListModiTokenCredentials(tokenPolicy, tokenClientId);
  1871.                
  1872.                 ISQLQueryObject sqlQueryObjectBuiltIn = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1873.                 sqlQueryObjectBuiltIn.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1874.                 sqlQueryObjectBuiltIn.addWhereCondition(false, "tipoauth = ?", "tipoauth = ?");
  1875.                 sqlQueryObjectBuiltIn.addWhereCondition("token_policy = ?");
  1876.                 sqlQueryObjectBuiltIn.addWhereCondition("utente = ?");
  1877.                 sqlQueryObjectBuiltIn.setANDLogicOperator(true);
  1878.                
  1879.                 ISQLQueryObject sqlQueryObjectModi = buildSQLQueryObjectModiTokenCredentials(modiFilter);
  1880.                
  1881.                 sqlQueryObject.addWhereCondition(sqlQueryObjectBuiltIn.createSQLConditions());
  1882.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectModi);
  1883.                 sqlQueryObject.setANDLogicOperator(false);
  1884.             }
  1885.             else {
  1886.                 sqlQueryObject.addWhereCondition("tipoauth = ?");
  1887.                 sqlQueryObject.addWhereCondition("token_policy = ?");
  1888.                 sqlQueryObject.addWhereCondition("utente = ?");
  1889.                 sqlQueryObject.setANDLogicOperator(true);
  1890.             }
  1891.            
  1892.             queryString = sqlQueryObject.createSQLQuery();
  1893.             stmt = con.prepareStatement(queryString);
  1894.            
  1895.             int index = 1;
  1896.             if(tokenWithHttpsEnabled){
  1897.                 stmt.setString(index++, CostantiConfigurazione.CREDENZIALE_TOKEN.toString());
  1898.                 stmt.setString(index++, CostantiConfigurazione.CREDENZIALE_SSL.toString());
  1899.                 stmt.setString(index++, tokenPolicy);
  1900.                 stmt.setString(index++, tokenClientId);
  1901.                 setSQLQueryObjectModiTokenCredentials (stmt, index, modiFilter);
  1902.             }
  1903.             else {
  1904.                 stmt.setString(index++, CostantiConfigurazione.CREDENZIALE_TOKEN.toString());
  1905.                 stmt.setString(index++, tokenPolicy);
  1906.                 stmt.setString(index++, tokenClientId);
  1907.             }
  1908.            
  1909.             this.driver.logDebug("eseguo query (tokenPolicy:"+tokenPolicy+" tokenClientId:"+tokenClientId+"):" +queryString);
  1910.            
  1911.             risultato = stmt.executeQuery();

  1912.             ServizioApplicativo sa;
  1913.             while (risultato.next()) {

  1914.                 sa=this.getServizioApplicativo(risultato.getLong("id"));

  1915.                 lista.add(sa);

  1916.             }

  1917.             return lista;

  1918.         } catch (Exception qe) {
  1919.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1920.         } finally {

  1921.             //Chiudo statement and resultset
  1922.             JDBCUtilities.closeResources(risultato, stmt);

  1923.             this.driver.closeConnection(con);
  1924.         }
  1925.     }

  1926.     protected String[] soggettiServizioApplicativoList(long idSoggetto) throws DriverConfigurazioneException {
  1927.         String nomeMetodo = "soggettiServizioApplicativoList";
  1928.         Connection con = null;
  1929.         PreparedStatement stmt=null;
  1930.         ResultSet risultato=null;
  1931.         String[] silList = null;

  1932.         if (this.driver.atomica) {
  1933.             try {
  1934.                 con = this.driver.getConnectionFromDatasource("soggettiServizioApplicativoList");
  1935.             } catch (Exception e) {
  1936.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1937.             }

  1938.         } else
  1939.             con = this.driver.globalConnection;

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

  1941.         try {

  1942.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1943.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1944.             sqlQueryObject.addSelectCountField("*", "cont");
  1945.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  1946.             String queryString = sqlQueryObject.createSQLQuery();
  1947.             stmt = con.prepareStatement(queryString);
  1948.             stmt.setLong(1, idSoggetto);
  1949.             risultato = stmt.executeQuery();
  1950.             if (risultato.next()) {
  1951.                 silList = new String[risultato.getInt(1)];
  1952.             }
  1953.             risultato.close();
  1954.             stmt.close();

  1955.             if(silList!=null) {
  1956.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1957.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1958.                 sqlQueryObject.addSelectField("nome");
  1959.                 sqlQueryObject.addSelectField("id_soggetto");
  1960.                 sqlQueryObject.addWhereCondition("id_soggetto = ?");
  1961.                 sqlQueryObject.addOrderBy("nome");
  1962.                 sqlQueryObject.setSortType(true);
  1963.                 queryString = sqlQueryObject.createSQLQuery();
  1964.                 stmt = con.prepareStatement(queryString);
  1965.                 stmt.setLong(1, idSoggetto);
  1966.                 risultato = stmt.executeQuery();
  1967.    
  1968.                 int i = 0;
  1969.                 while (risultato.next()) {
  1970.                     silList[i] = risultato.getString("nome");
  1971.                     i++;
  1972.                 }
  1973.             }

  1974.             return silList;

  1975.         } catch (Exception qe) {
  1976.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1977.         } finally {

  1978.             //Chiudo statement and resultset
  1979.             JDBCUtilities.closeResources(risultato, stmt);

  1980.             this.driver.closeConnection(con);
  1981.         }
  1982.     }

  1983.     protected List<IDServizioApplicativoDB> soggettiServizioApplicativoList(IDSoggetto idSoggetto,String superuser,CredenzialeTipo credenziale, Boolean appId, String tipoSA,
  1984.             boolean bothSslAndToken, String tokenPolicy) throws DriverConfigurazioneException {
  1985.         return soggettiServizioApplicativoList(idSoggetto,superuser,credenziale, appId, tipoSA, bothSslAndToken, tokenPolicy, false);
  1986.     }
  1987.     protected List<IDServizioApplicativoDB> soggettiServizioApplicativoList(IDSoggetto idSoggetto,String superuser,CredenzialeTipo credenziale, Boolean appId, String tipoSA,
  1988.             boolean bothSslAndToken, String tokenPolicy, boolean tokenPolicyOR) throws DriverConfigurazioneException {
  1989.         String nomeMetodo = "soggettiServizioApplicativoList";
  1990.         Connection con = null;
  1991.         PreparedStatement stmt=null;
  1992.         ResultSet risultato=null;
  1993.         ArrayList<IDServizioApplicativoDB> silList = new ArrayList<>();

  1994.         if (this.driver.atomica) {
  1995.             try {
  1996.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  1997.             } catch (Exception e) {
  1998.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1999.             }

  2000.         } else
  2001.             con = this.driver.globalConnection;

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

  2003.         try {

  2004.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2005.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2006.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  2007.             sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "idServAppl");
  2008.             sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "nome", "nomeServAppl");
  2009.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI, "tipo_soggetto");
  2010.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI, "nome_soggetto");
  2011.             sqlQueryObject.addSelectField("id_soggetto");
  2012.             sqlQueryObject.addWhereCondition("id_soggetto = "+CostantiDB.SOGGETTI+".id");
  2013.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto = ?");
  2014.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto = ?");
  2015.             if(this.driver.useSuperUser && superuser!=null && (!"".equals(superuser)))
  2016.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".superuser = ?");
  2017.             if(tipoSA!=null) {
  2018.                 if(CostantiConfigurazione.CLIENT.equals(tipoSA)) {
  2019.                     sqlQueryObject.addWhereCondition(false, CostantiDB.SERVIZI_APPLICATIVI+".tipo = ?", CostantiDB.SERVIZI_APPLICATIVI+".as_client = ?");
  2020.                 }
  2021.                 else {
  2022.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipo = ?");
  2023.                 }
  2024.             }
  2025.             if(credenziale!=null) {
  2026.                 if(tokenPolicyOR) {
  2027.                     ISQLQueryObject sqlQueryObjectTrasporto = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2028.                     sqlQueryObjectTrasporto.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2029.                     sqlQueryObjectTrasporto.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?");
  2030.                     if(CredenzialeTipo.APIKEY.equals(credenziale) && appId!=null) {
  2031.                         sqlQueryObjectTrasporto.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".issuer = ?");
  2032.                     }
  2033.                     sqlQueryObjectTrasporto.setANDLogicOperator(true);
  2034.                     String trasporto = sqlQueryObjectTrasporto.createSQLConditions();
  2035.                    
  2036.                     ISQLQueryObject sqlQueryObjectToken = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2037.                     sqlQueryObjectToken.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2038.                     sqlQueryObjectToken.addWhereCondition(false,
  2039.                             CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?",
  2040.                             CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ? AND "+CostantiDB.SERVIZI_APPLICATIVI+".token_policy IS NOT NULL AND "+CostantiDB.SERVIZI_APPLICATIVI+".utente IS NOT NULL");
  2041.                     if(tokenPolicy!=null) {
  2042.                         sqlQueryObjectToken.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy = ?");
  2043.                     }
  2044.                     sqlQueryObjectToken.setANDLogicOperator(true);
  2045.                     String token = sqlQueryObjectToken.createSQLConditions();
  2046.                    
  2047.                     sqlQueryObject.addWhereCondition(false, trasporto, token);
  2048.                 }
  2049.                 else {
  2050.                     if(CredenzialeTipo.TOKEN.equals(credenziale)){
  2051.                         if(bothSslAndToken) {
  2052.                             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ? AND "+CostantiDB.SERVIZI_APPLICATIVI+".token_policy IS NOT NULL AND "+CostantiDB.SERVIZI_APPLICATIVI+".utente IS NOT NULL");
  2053.                         }
  2054.                         else {
  2055.                             sqlQueryObject.addWhereCondition(false,
  2056.                                     CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?",
  2057.                                     CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ? AND "+CostantiDB.SERVIZI_APPLICATIVI+".token_policy IS NOT NULL AND "+CostantiDB.SERVIZI_APPLICATIVI+".utente IS NOT NULL");
  2058.                         }
  2059.                     }
  2060.                     else {
  2061.                         sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipoauth = ?");
  2062.                         if(CredenzialeTipo.SSL.equals(credenziale)){
  2063.                             // I certificati caricati con una token policy potrebbero non dover essere considerati per l'autenticazione https
  2064.                             // in futuro se serve gestire il boolean tokenWithHttpsEnabled anche per l'autenticazione https
  2065.                             boolean tokenWithHttpsEnabled = false;
  2066.                             if(!tokenWithHttpsEnabled){
  2067.                                 sqlQueryObject.addWhereIsNullCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy");
  2068.                             }
  2069.                         }
  2070.                     }
  2071.                     if(CredenzialeTipo.APIKEY.equals(credenziale) && appId!=null) {
  2072.                         sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".issuer = ?");
  2073.                     }
  2074.                     if(tokenPolicy!=null) {
  2075.                         sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".token_policy = ?");
  2076.                     }
  2077.                 }
  2078.             }
  2079.             sqlQueryObject.setANDLogicOperator(true);
  2080.             sqlQueryObject.addOrderBy("nome");
  2081.             sqlQueryObject.setSortType(true);
  2082.             String queryString = sqlQueryObject.createSQLQuery();
  2083.             stmt = con.prepareStatement(queryString);
  2084.             int index = 1;
  2085.             stmt.setString(index++, idSoggetto.getTipo());
  2086.             stmt.setString(index++, idSoggetto.getNome());
  2087.             if(this.driver.useSuperUser && superuser!=null && (!"".equals(superuser)))
  2088.                 stmt.setString(index++, superuser);
  2089.             if(tipoSA!=null) {
  2090.                 stmt.setString(index++, tipoSA);
  2091.                 if(CostantiConfigurazione.CLIENT.equals(tipoSA)) {
  2092.                     stmt.setInt(index++, CostantiDB.TRUE);
  2093.                 }
  2094.             }
  2095.             if(credenziale!=null) {
  2096.                 if(tokenPolicyOR) {
  2097.                     // trasporto
  2098.                     stmt.setString(index++, credenziale.getValue());
  2099.                     if(CredenzialeTipo.APIKEY.equals(credenziale) && appId!=null) {
  2100.                         stmt.setString(index++, CostantiDB.getIssuerApiKey(appId));
  2101.                     }
  2102.                    
  2103.                     // token
  2104.                     stmt.setString(index++, CredenzialeTipo.TOKEN.getValue());
  2105.                     stmt.setString(index++, CredenzialeTipo.SSL.getValue());
  2106.                     if(tokenPolicy!=null) {
  2107.                         stmt.setString(index++, tokenPolicy);
  2108.                     }
  2109.                 }
  2110.                 else {
  2111.                     if(CredenzialeTipo.TOKEN.equals(credenziale)){
  2112.                         if(bothSslAndToken) {
  2113.                             stmt.setString(index++, CredenzialeTipo.SSL.getValue());
  2114.                         }
  2115.                         else {
  2116.                             stmt.setString(index++, credenziale.getValue());
  2117.                             stmt.setString(index++, CredenzialeTipo.SSL.getValue());
  2118.                         }
  2119.                     }
  2120.                     else {
  2121.                         stmt.setString(index++, credenziale.getValue());
  2122.                     }

  2123.                     if(CredenzialeTipo.APIKEY.equals(credenziale) && appId!=null) {
  2124.                         stmt.setString(index++, CostantiDB.getIssuerApiKey(appId));
  2125.                     }
  2126.                     if(tokenPolicy!=null) {
  2127.                         stmt.setString(index++, tokenPolicy);
  2128.                     }
  2129.                 }
  2130.             }
  2131.             risultato = stmt.executeQuery();

  2132.             while (risultato.next()) {
  2133.                
  2134.                 IDServizioApplicativoDB idSA = new IDServizioApplicativoDB();
  2135.                 idSA.setIdSoggettoProprietario(new IDSoggetto(risultato.getString("tipo_soggetto"), risultato.getString("nome_soggetto")));
  2136.                 idSA.setNome(risultato.getString("nomeServAppl"));
  2137.                 idSA.setId(risultato.getLong("idServAppl"));
  2138.                 silList.add(idSA);
  2139.             }

  2140.             return silList;

  2141.         } catch (Exception qe) {
  2142.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  2143.         } finally {

  2144.             //Chiudo statement and resultset
  2145.             JDBCUtilities.closeResources(risultato, stmt);

  2146.             this.driver.closeConnection(con);
  2147.         }
  2148.     }
  2149.    
  2150.     protected List<String> nomiProprietaSA(String filterSoggettoTipo, String filterSoggettoNome, List<String> tipoSoggettiProtocollo) throws DriverConfigurazioneException {
  2151.         String queryString;

  2152.         Connection con = null;
  2153.         PreparedStatement stmt=null;
  2154.         ResultSet risultato=null;
  2155.         ArrayList<String> lista = new ArrayList<>();

  2156.         if (this.driver.atomica) {
  2157.             try {
  2158.                 con = this.driver.getConnectionFromDatasource("nomiProprietaSA");
  2159.             } catch (Exception e) {
  2160.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::nomiProprietaSA] Exception accedendo al datasource :" + e.getMessage(),e);

  2161.             }

  2162.         } else
  2163.             con = this.driver.globalConnection;

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

  2165.         try {

  2166.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2167.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_PROPS);
  2168.             sqlQueryObject.setSelectDistinct(true);
  2169.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_APPLICATIVI_PROPS + ".nome");
  2170.            
  2171.             if((filterSoggettoNome!=null && !"".equals(filterSoggettoNome)) || (tipoSoggettiProtocollo != null && tipoSoggettiProtocollo.size() > 0)) {
  2172.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  2173.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2174.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI + ".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  2175.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_PROPS+".id_servizio_applicativo="+CostantiDB.SERVIZI_APPLICATIVI+".id");
  2176.             }
  2177.            
  2178.             if((filterSoggettoNome!=null && !"".equals(filterSoggettoNome))) {
  2179.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto=?");
  2180.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto=?");
  2181.             }
  2182.            
  2183.             if((tipoSoggettiProtocollo != null && tipoSoggettiProtocollo.size() > 0)) {
  2184.                 String [] tipiServiziProtocolloS = tipoSoggettiProtocollo.toArray(new String[tipoSoggettiProtocollo.size()]);
  2185.                 sqlQueryObject.addWhereINCondition(CostantiDB.SOGGETTI+".tipo_soggetto", true, tipiServiziProtocolloS);
  2186.             }
  2187.            
  2188.             sqlQueryObject.addOrderBy(CostantiDB.SERVIZI_APPLICATIVI_PROPS + ".nome");
  2189.             sqlQueryObject.setSortType(true);
  2190.             sqlQueryObject.setANDLogicOperator(true);
  2191.            
  2192.             queryString = sqlQueryObject.createSQLQuery();
  2193.             stmt = con.prepareStatement(queryString);
  2194.             if((filterSoggettoNome!=null && !"".equals(filterSoggettoNome))) {
  2195.                 stmt.setString(1, filterSoggettoTipo);
  2196.                 stmt.setString(2, filterSoggettoNome);
  2197.             }
  2198.             risultato = stmt.executeQuery();
  2199.             while (risultato.next()) {
  2200.                 lista.add(risultato.getString("nome"));
  2201.             }
  2202.             return lista;
  2203.         } catch (Exception qe) {
  2204.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::nomiProprietaSA] Errore : " + qe.getMessage(),qe);
  2205.         } finally {
  2206.             //Chiudo statement and resultset
  2207.             JDBCUtilities.closeResources(risultato, stmt);
  2208.             this.driver.closeConnection(con);
  2209.         }
  2210.     }
  2211.    
  2212.     protected List<IDServizioApplicativoDB> getIdServiziApplicativiWithIdErogatore(Long idErogatore, String tipo,
  2213.             boolean checkIM, boolean checkConnettoreAbilitato) throws DriverConfigurazioneException {

  2214.         Connection con = null;
  2215.         PreparedStatement stm = null;
  2216.         ResultSet rs = null;
  2217.         String sqlQuery = "";
  2218.         ArrayList<IDServizioApplicativoDB> lista = new ArrayList<IDServizioApplicativoDB>();

  2219.         try {
  2220.            
  2221.             if (this.driver.atomica) {
  2222.                 try {
  2223.                     con = this.driver.getConnectionFromDatasource("getServiziApplicativiWithIdErogatore");
  2224.                 } catch (Exception e) {
  2225.                     throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServiziApplicativiWithIdErogatore] Exception accedendo al datasource :" + e.getMessage(),e);

  2226.                 }

  2227.             } else
  2228.                 con = this.driver.globalConnection;
  2229.            
  2230.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2231.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2232.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  2233.             sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "idServAppl");
  2234.             sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "nome", "nomeServAppl");
  2235.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI, "tipo_soggetto");
  2236.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI, "nome_soggetto");
  2237.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  2238.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto");
  2239.             sqlQueryObject.setANDLogicOperator(true);
  2240.             if(tipo != null) {
  2241.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipo = ?");
  2242.             }
  2243.             if(checkConnettoreAbilitato) {
  2244.                 sqlQueryObject.addFromTable(CostantiDB.CONNETTORI);
  2245.                 sqlQueryObject.addWhereCondition(CostantiDB.CONNETTORI+".id="+CostantiDB.SERVIZI_APPLICATIVI+".id_connettore_inv");
  2246.                 if(checkIM) {
  2247.                     sqlQueryObject.addWhereCondition(false,
  2248.                             CostantiDB.SERVIZI_APPLICATIVI+".getmsginv = ? ",
  2249.                             CostantiDB.CONNETTORI+".endpointtype <> ? " );
  2250.                 }
  2251.                 else {
  2252.                     sqlQueryObject.addWhereCondition(CostantiDB.CONNETTORI+".endpointtype <> ? " );
  2253.                 }
  2254.             }
  2255.             else if(checkIM) {
  2256.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".getmsginv = ? ");
  2257.             }
  2258.            
  2259.             sqlQuery = sqlQueryObject.createSQLQuery();
  2260.             stm = con.prepareStatement(sqlQuery);

  2261.             int index = 1;
  2262.             stm.setLong(index++, idErogatore);
  2263.             if(tipo != null) {
  2264.                 stm.setString(index++, tipo);
  2265.             }
  2266.             if(checkConnettoreAbilitato) {
  2267.                 if(checkIM) {
  2268.                     stm.setString(index++, DriverConfigurazioneDBLib.getValue(StatoFunzionalita.ABILITATO));
  2269.                     stm.setString(index++, TipiConnettore.DISABILITATO.getNome());
  2270.                 }
  2271.                 else {
  2272.                     stm.setString(index++, TipiConnettore.DISABILITATO.getNome());
  2273.                 }
  2274.             }
  2275.             else if(checkIM) {
  2276.                 stm.setString(index++, DriverConfigurazioneDBLib.getValue(StatoFunzionalita.ABILITATO));
  2277.             }

  2278.             String debugQuery = DBUtils.formatSQLString(sqlQuery, idErogatore);
  2279.             if(tipo != null) {
  2280.                 debugQuery = DBUtils.formatSQLString(debugQuery, tipo);
  2281.             }
  2282.             if(checkConnettoreAbilitato) {
  2283.                 if(checkIM) {
  2284.                     debugQuery = DBUtils.formatSQLString(debugQuery,  DriverConfigurazioneDBLib.getValue(StatoFunzionalita.ABILITATO));
  2285.                     debugQuery = DBUtils.formatSQLString(debugQuery,  TipiConnettore.DISABILITATO.getNome());
  2286.                 }
  2287.                 else {
  2288.                     debugQuery = DBUtils.formatSQLString(debugQuery,  TipiConnettore.DISABILITATO.getNome());
  2289.                 }
  2290.             }
  2291.             else if(checkIM) {
  2292.                 debugQuery = DBUtils.formatSQLString(debugQuery, DriverConfigurazioneDBLib.getValue(StatoFunzionalita.ABILITATO));
  2293.             }
  2294.             this.driver.logDebug("eseguo query : " + debugQuery);
  2295.            
  2296.             rs = stm.executeQuery();

  2297.             while (rs.next()) {
  2298.                
  2299.                 IDServizioApplicativoDB idSA = new IDServizioApplicativoDB();
  2300.                 idSA.setIdSoggettoProprietario(new IDSoggetto(rs.getString("tipo_soggetto"), rs.getString("nome_soggetto")));
  2301.                 idSA.setNome(rs.getString("nomeServAppl"));
  2302.                 idSA.setId(rs.getLong("idServAppl"));
  2303.                 lista.add(idSA);
  2304.             }

  2305.             return lista;
  2306.         } catch (Exception qe) {
  2307.             throw new DriverConfigurazioneException(qe);
  2308.         } finally {

  2309.             JDBCUtilities.closeResources(rs, stm);
  2310.            
  2311.             this.driver.closeConnection(con);

  2312.         }

  2313.     }
  2314.    
  2315.     protected boolean existsServizioApplicativo(IDServizioApplicativo idServizioApplicativo) throws DriverConfigurazioneException{

  2316.         IDSoggetto idSoggetto = idServizioApplicativo.getIdSoggettoProprietario();
  2317.         if(idSoggetto==null)throw new DriverConfigurazioneException("[DriverConfigurazioneDB::existsServizioApplicativo] Soggetto Fruitore non Impostato.");
  2318.         if(idServizioApplicativo.getNome()==null || "".equals(idServizioApplicativo.getNome()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::existsServizioApplicativo] Nome Servizio Applicativo non Impostato.");
  2319.         if(idSoggetto.getNome()==null || "".equals(idSoggetto.getNome()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::existsServizioApplicativo] Nome Soggetto Fruitore non Impostato.");
  2320.         if(idSoggetto.getTipo()==null || "".equals(idSoggetto.getTipo()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::existsServizioApplicativo] Nome Soggetto Fruitore non Impostato.");

  2321.         Connection con = null;

  2322.         try {
  2323.            
  2324.             if (this.driver.atomica) {
  2325.                 try {
  2326.                     con = this.driver.getConnectionFromDatasource("existsServizioApplicativo");
  2327.                 } catch (Exception e) {
  2328.                     throw new DriverConfigurazioneException("[DriverConfigurazioneDB::createAccessoRegistro] Exception accedendo al datasource :" + e.getMessage(),e);

  2329.                 }

  2330.             } else
  2331.                 con = this.driver.globalConnection;
  2332.            
  2333.             return DriverConfigurazioneDB_serviziApplicativiLIB.getIdServizioApplicativo(idServizioApplicativo.getNome(), idSoggetto.getTipo(), idSoggetto.getNome(), con, this.driver.tipoDB,this.driver.tabellaSoggetti)>0;
  2334.         } catch (Exception qe) {
  2335.             throw new DriverConfigurazioneException(qe);
  2336.         } finally {

  2337.             this.driver.closeConnection(con);

  2338.         }

  2339.     }

  2340.     protected long getIdServizioApplicativo(IDSoggetto idSoggetto, String nomeServizioApplicativo) throws DriverConfigurazioneException {

  2341.         if(idSoggetto==null)throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Soggetto Fruitore non Impostato.");
  2342.         if(nomeServizioApplicativo==null || "".equals(nomeServizioApplicativo))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Nome Servizio Applicativo non Impostato.");
  2343.         if(idSoggetto.getNome()==null || "".equals(idSoggetto.getNome()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Nome Soggetto Fruitore non Impostato.");
  2344.         if(idSoggetto.getTipo()==null || "".equals(idSoggetto.getTipo()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Tipo Soggetto Fruitore non Impostato.");

  2345.         Connection con = null;

  2346.         try {
  2347.            
  2348.             if (this.driver.atomica) {
  2349.                 try {
  2350.                     con = this.driver.getConnectionFromDatasource("getIdServizioApplicativo");
  2351.                 } catch (Exception e) {
  2352.                     throw new DriverConfigurazioneException("[DriverConfigurazioneDB::getServizioApplicativo] Exception accedendo al datasource :" + e.getMessage(),e);

  2353.                 }

  2354.             } else
  2355.                 con = this.driver.globalConnection;
  2356.            
  2357.             return DriverConfigurazioneDB_serviziApplicativiLIB.getIdServizioApplicativo(nomeServizioApplicativo, idSoggetto.getTipo(), idSoggetto.getNome(), con, this.driver.tipoDB,this.driver.tabellaSoggetti);
  2358.         } catch (Exception qe) {
  2359.             throw new DriverConfigurazioneException(qe);
  2360.         } finally {

  2361.             this.driver.closeConnection(con);

  2362.         }

  2363.     }

  2364.     protected boolean existsServizioApplicativoSoggetto(Long idSoggetto) throws DriverConfigurazioneException {

  2365.         Connection con = null;
  2366.         PreparedStatement stm = null;
  2367.         ResultSet rs = null;
  2368.         String sqlQuery = "";

  2369.         try {
  2370.            
  2371.             if (this.driver.atomica) {
  2372.                 try {
  2373.                     con = this.driver.getConnectionFromDatasource("existsServizioApplicativoSoggetto");
  2374.                 } catch (Exception e) {
  2375.                     throw new DriverConfigurazioneException("[DriverConfigurazioneDB::existsServizioApplicativoSoggetto] Exception accedendo al datasource :" + e.getMessage(),e);

  2376.                 }

  2377.             } else
  2378.                 con = this.driver.globalConnection;
  2379.            
  2380.             boolean esiste = false;
  2381.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2382.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2383.             sqlQueryObject.addSelectField("*");
  2384.             sqlQueryObject.addWhereCondition("id_soggetto=?");
  2385.             sqlQuery = sqlQueryObject.createSQLQuery();
  2386.             stm = con.prepareStatement(sqlQuery);

  2387.             stm.setLong(1, idSoggetto);

  2388.             this.driver.logDebug("eseguo query : " + DBUtils.formatSQLString(sqlQuery, idSoggetto));
  2389.             rs = stm.executeQuery();

  2390.             if (rs.next())
  2391.                 esiste = true;

  2392.             return esiste;
  2393.         } catch (Exception qe) {
  2394.             throw new DriverConfigurazioneException(qe);
  2395.         } finally {

  2396.             JDBCUtilities.closeResources(rs, stm);
  2397.            
  2398.             this.driver.closeConnection(con);

  2399.         }

  2400.     }
  2401.    
  2402.     protected boolean isServizioApplicativoInUsoComeErogatore(ServizioApplicativo sa, Map<ErrorsHandlerCostant, String> whereIsInUso) throws DriverConfigurazioneException {

  2403.         Connection con = null;
  2404.         PreparedStatement stmt=null;
  2405.         ResultSet risultato=null;

  2406.         try {

  2407.             if (this.driver.atomica) {
  2408.                 try {
  2409.                     con = this.driver.getConnectionFromDatasource("isServizioApplicativoInUsoComeErogatore");
  2410.                 } catch (Exception e) {
  2411.                     throw new DriverConfigurazioneException("[DriverConfigurazioneDB::isServizioApplicativoInUsoComeErogatore] Exception accedendo al datasource :" + e.getMessage(),e);

  2412.                 }

  2413.             } else
  2414.                 con = this.driver.globalConnection;
  2415.            
  2416.             ArrayList<String> nomiPorteApplicative = new ArrayList<>();
  2417.             boolean isInUso=false;
  2418.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2419.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_SA);
  2420.             sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  2421.             sqlQueryObject.addSelectField("*");
  2422.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_SA+".id_servizio_applicativo = ?");
  2423.             sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_SA+".id_porta = "+CostantiDB.PORTE_APPLICATIVE+".id");
  2424.             sqlQueryObject.setANDLogicOperator(true);
  2425.             String queryString = sqlQueryObject.createSQLQuery();
  2426.             stmt = con.prepareStatement(queryString);
  2427.             stmt.setLong(1, sa.getId());
  2428.             risultato = stmt.executeQuery();
  2429.             while (risultato.next()) {
  2430.                 isInUso=true;
  2431.                 nomiPorteApplicative.add(risultato.getString("nome_porta"));
  2432.             }
  2433.             risultato.close();
  2434.             stmt.close();


  2435.             if(isInUso){
  2436.                 if(whereIsInUso==null) whereIsInUso=new HashMap<ErrorsHandlerCostant, String>();

  2437.                 whereIsInUso.put(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE, nomiPorteApplicative.toString());
  2438.             }

  2439.             return isInUso;

  2440.         } catch (Exception qe) {
  2441.             throw new DriverConfigurazioneException(qe);
  2442.         } finally {

  2443.             JDBCUtilities.closeResources(risultato, stmt);

  2444.             this.driver.closeConnection(con);

  2445.         }

  2446.     }
  2447.    
  2448.     protected List<ServizioApplicativo> getServiziApplicativiBySoggetto(long idSoggetto) throws DriverConfigurazioneException {
  2449.         String nomeMetodo = "getPorteApplicativeBySoggetto";

  2450.         Connection con = null;
  2451.         PreparedStatement stmt=null;
  2452.         ResultSet risultato=null;
  2453.         ArrayList<ServizioApplicativo> lista = new ArrayList<>();

  2454.         if (this.driver.atomica) {
  2455.             try {
  2456.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  2457.             } catch (Exception e) {
  2458.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  2459.             }

  2460.         } else
  2461.             con = this.driver.globalConnection;

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

  2463.         try {

  2464.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2465.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2466.             sqlQueryObject.addSelectField("id");
  2467.             sqlQueryObject.addWhereCondition("id_soggetto=?");
  2468.             String queryString = sqlQueryObject.createSQLQuery();
  2469.             stmt = con.prepareStatement(queryString);
  2470.             stmt.setLong(1, idSoggetto);
  2471.             risultato = stmt.executeQuery();

  2472.             while (risultato.next()) {

  2473.                 Long id = risultato.getLong("id");

  2474.                 ServizioApplicativo sa = this.getServizioApplicativo(id);

  2475.                 // Check per validazioneSemantica

  2476.                 if(sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().sizeCredenzialiList()==0){
  2477.                     // Una invocazione porta senza credenziali equivale a non avere i dati di invocazione porta per la PdD.
  2478.                     // ma l'interfaccia permette di farlo poiche' la configurazione avviene per step.
  2479.                     sa.setInvocazionePorta(null);
  2480.                 }

  2481.                 if(sa.getInvocazioneServizio()!=null &&
  2482.                         (sa.getInvocazioneServizio().getConnettore()==null || CostantiConfigurazione.DISABILITATO.equals(sa.getInvocazioneServizio().getConnettore().getTipo())) &&
  2483.                         CostantiConfigurazione.DISABILITATO.equals(sa.getInvocazioneServizio().getGetMessage()) ){
  2484.                     // Un' invocazione servizio senza connettore e senza getMessage equivale a non averlo per la PdD.
  2485.                     // ma l'interfaccia permette di farlo poiche' la configurazione avviene per step.
  2486.                     sa.setInvocazioneServizio(null);
  2487.                 }

  2488.                 if(sa.getRispostaAsincrona()!=null &&
  2489.                         (sa.getRispostaAsincrona().getConnettore()==null || CostantiConfigurazione.DISABILITATO.equals(sa.getRispostaAsincrona().getConnettore().getTipo())) &&
  2490.                         CostantiConfigurazione.DISABILITATO.equals(sa.getRispostaAsincrona().getGetMessage()) ){
  2491.                     // Un' invocazione servizio senza connettore e senza getMessage equivale a non averlo per la PdD.
  2492.                     // ma l'interfaccia permette di farlo poiche' la configurazione avviene per step.
  2493.                     sa.setRispostaAsincrona(null);
  2494.                 }

  2495.                 lista.add(sa);

  2496.             }

  2497.             return lista;

  2498.         } catch (Exception qe) {
  2499.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  2500.         } finally {
  2501.             //Chiudo statement and resultset
  2502.             JDBCUtilities.closeResources(risultato, stmt);
  2503.             this.driver.closeConnection(con);
  2504.         }
  2505.     }
  2506.    
  2507.     protected List<IDServizioApplicativo> getAllIdServiziApplicativi(
  2508.             FiltroRicercaServiziApplicativi filtroRicerca) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{

  2509.         Connection con = null;
  2510.         PreparedStatement stm = null;
  2511.         ResultSet rs = null;

  2512.         this.driver.logDebug("getAllIdServiziApplicativi...");

  2513.         try {
  2514.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  2515.             // prendo la connessione dal pool
  2516.             if (this.driver.atomica)
  2517.                 con = this.driver.getConnectionFromDatasource("getAllIdServiziApplicativi");
  2518.             else
  2519.                 con = this.driver.globalConnection;

  2520.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2521.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2522.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  2523.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_APPLICATIVI+".nome");
  2524.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI+".tipo_soggetto");
  2525.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI+".nome_soggetto");
  2526.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  2527.             if(filtroRicerca!=null){
  2528.                 if(filtroRicerca.getIdRuolo()!=null){
  2529.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI_RUOLI);
  2530.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_RUOLI+".id_servizio_applicativo = "+CostantiDB.SERVIZI_APPLICATIVI+".id");
  2531.                 }
  2532.             }

  2533.             if(filtroRicerca!=null){
  2534.                 // Filtro By Data
  2535.                 if(filtroRicerca.getMinDate()!=null)
  2536.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".ora_registrazione > ?");
  2537.                 if(filtroRicerca.getMaxDate()!=null)
  2538.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".ora_registrazione < ?");
  2539.                 if(filtroRicerca.getTipoSoggetto()!=null)
  2540.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto = ?");
  2541.                 if(filtroRicerca.getNomeSoggetto()!=null)
  2542.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto = ?");
  2543.                 if(filtroRicerca.getNome()!=null)
  2544.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".nome = ?");
  2545.                 if(filtroRicerca.getIdRuolo()!=null)
  2546.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI_RUOLI+".ruolo = ?");
  2547.                 if(filtroRicerca.getTipo()!=null)
  2548.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".tipo = ?");
  2549.                 DBUtils.setPropertiesForSearch(sqlQueryObject, filtroRicerca.getProprieta(), CostantiDB.SERVIZI_APPLICATIVI, CostantiDB.SERVIZI_APPLICATIVI_PROPS, "nome", "valore", "id_servizio_applicativo");
  2550.                 this.protocolPropertiesDriver.setProtocolPropertiesForSearch(sqlQueryObject, filtroRicerca, CostantiDB.SERVIZI_APPLICATIVI);
  2551.             }

  2552.             sqlQueryObject.setANDLogicOperator(true);
  2553.             String sqlQuery = sqlQueryObject.createSQLQuery();
  2554.             this.driver.logDebug("eseguo query : " + sqlQuery );
  2555.             stm = con.prepareStatement(sqlQuery);
  2556.             int indexStmt = 1;
  2557.             if(filtroRicerca!=null){
  2558.                 if(filtroRicerca.getMinDate()!=null){
  2559.                     this.driver.logDebug("minDate stmt.setTimestamp("+filtroRicerca.getMinDate()+")");
  2560.                     stm.setTimestamp(indexStmt, new Timestamp(filtroRicerca.getMinDate().getTime()));
  2561.                     indexStmt++;
  2562.                 }
  2563.                 if(filtroRicerca.getMaxDate()!=null){
  2564.                     this.driver.logDebug("maxDate stmt.setTimestamp("+filtroRicerca.getMaxDate()+")");
  2565.                     stm.setTimestamp(indexStmt, new Timestamp(filtroRicerca.getMaxDate().getTime()));
  2566.                     indexStmt++;
  2567.                 }  
  2568.                 if(filtroRicerca.getTipoSoggetto()!=null){
  2569.                     this.driver.logDebug("tipoSoggetto stmt.setString("+filtroRicerca.getTipoSoggetto()+")");
  2570.                     stm.setString(indexStmt, filtroRicerca.getTipoSoggetto());
  2571.                     indexStmt++;
  2572.                 }
  2573.                 if(filtroRicerca.getNomeSoggetto()!=null){
  2574.                     this.driver.logDebug("nomeSoggetto stmt.setString("+filtroRicerca.getNomeSoggetto()+")");
  2575.                     stm.setString(indexStmt, filtroRicerca.getNomeSoggetto());
  2576.                     indexStmt++;
  2577.                 }      
  2578.                 if(filtroRicerca.getNome()!=null){
  2579.                     this.driver.logDebug("nome stmt.setString("+filtroRicerca.getNome()+")");
  2580.                     stm.setString(indexStmt, filtroRicerca.getNome());
  2581.                     indexStmt++;
  2582.                 }  
  2583.                 if(filtroRicerca.getIdRuolo()!=null){
  2584.                     this.driver.logDebug("ruolo stmt.setString("+filtroRicerca.getIdRuolo().getNome()+")");
  2585.                     stm.setString(indexStmt, filtroRicerca.getIdRuolo().getNome());
  2586.                     indexStmt++;
  2587.                 }
  2588.                 if(filtroRicerca.getTipo()!=null){
  2589.                     this.driver.logDebug("tipo stmt.setString("+filtroRicerca.getTipo()+")");
  2590.                     stm.setString(indexStmt, filtroRicerca.getTipo());
  2591.                     indexStmt++;
  2592.                 }
  2593.                 DBUtils.setPropertiesForSearch(stm, indexStmt, filtroRicerca.getProprieta(), this.driver.tipoDB, this.driver.log);
  2594.                 this.protocolPropertiesDriver.setProtocolPropertiesForSearch(stm, indexStmt, filtroRicerca, ProprietariProtocolProperty.SERVIZIO_APPLICATIVO);
  2595.             }
  2596.             rs = stm.executeQuery();
  2597.             List<IDServizioApplicativo> idsSA = new ArrayList<IDServizioApplicativo>();
  2598.             while (rs.next()) {
  2599.                 IDSoggetto idS = new IDSoggetto(rs.getString("tipo_soggetto"),rs.getString("nome_soggetto"));
  2600.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  2601.                 idSA.setIdSoggettoProprietario(idS);
  2602.                 idSA.setNome(rs.getString("nome"));
  2603.                 idsSA.add(idSA);
  2604.             }
  2605.             if(idsSA.size()==0){
  2606.                 if(filtroRicerca!=null)
  2607.                     throw new DriverConfigurazioneNotFound("ServiziApplicativi non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  2608.                 else
  2609.                     throw new DriverConfigurazioneNotFound("ServiziApplicativi non trovati");
  2610.             }else{
  2611.                 return idsSA;
  2612.             }
  2613.         }catch(DriverConfigurazioneNotFound de){
  2614.             throw de;
  2615.         }
  2616.         catch(Exception e){
  2617.             throw new DriverConfigurazioneException("getAllIdServiziApplicativi error",e);
  2618.         } finally {

  2619.             //Chiudo statement and resultset
  2620.             JDBCUtilities.closeResources(rs, stm);

  2621.             this.driver.closeConnection(con);

  2622.         }

  2623.     }
  2624.    
  2625.     protected long getIdServizioApplicativoByConnettore(long idConnettore) throws DriverConfigurazioneException {
  2626.         String nomeMetodo = "getIdServizioApplicativoByConnettore";

  2627.         Connection con = null;

  2628.         if (this.driver.atomica) {
  2629.             try {
  2630.                 con = this.driver.getConnectionFromDatasource("getProtocolProperty");

  2631.             } catch (Exception e) {
  2632.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(), e);

  2633.             }

  2634.         } else {
  2635.             con = this.driver.globalConnection;
  2636.         }

  2637.         PreparedStatement stmt=null;
  2638.         ResultSet risultato=null;
  2639.         try {

  2640.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2641.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2642.             sqlQueryObject.addSelectField("id");
  2643.             sqlQueryObject.addWhereCondition("id_connettore_inv=?");
  2644.             sqlQueryObject.addWhereCondition("id_connettore_risp=?");
  2645.             sqlQueryObject.setANDLogicOperator(false);
  2646.             String queryString = sqlQueryObject.createSQLQuery();
  2647.             stmt = con.prepareStatement(queryString);
  2648.             stmt.setLong(1, idConnettore);
  2649.             stmt.setLong(2, idConnettore);
  2650.             risultato = stmt.executeQuery();
  2651.             long idSA = -1;
  2652.             if (risultato.next()) {
  2653.                 idSA = risultato.getLong("id");
  2654.             }          
  2655.             return idSA;

  2656.         } catch (Exception se) {
  2657.             throw new DriverConfigurazioneException("[DriverConfigurazioneException::" + nomeMetodo + "] Exception: " + se.getMessage());
  2658.         } finally {
  2659.             //Chiudo statement and resultset
  2660.             JDBCUtilities.closeResources(risultato, stmt);
  2661.             this.driver.closeConnection(con);
  2662.         }
  2663.     }
  2664.    
  2665.     protected IDServizio getLabelNomeServizioApplicativo(String nomeServizioApplicativo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  2666.        
  2667.         // viene inserito come azione dell'IDServizio
  2668.        
  2669.         Connection con = null;
  2670.         ResultSet rs = null;
  2671.         PreparedStatement stm = null;
  2672.        
  2673.         if (this.driver.atomica) {
  2674.             try {
  2675.                 con = this.driver.getConnectionFromDatasource("findAllAllarmi");

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

  2678.             }

  2679.         } else
  2680.             con = this.driver.globalConnection;

  2681.         try {

  2682.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2683.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2684.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_APPLICATIVI + ".id");
  2685.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_APPLICATIVI + ".tipo");
  2686.             sqlQueryObject.setANDLogicOperator(true);
  2687.             sqlQueryObject.addWhereCondition("nome=?");

  2688.             String sqlQuery = sqlQueryObject.createSQLQuery();

  2689.             stm = con.prepareStatement(sqlQuery);
  2690.             stm.setString(1, nomeServizioApplicativo);

  2691.             this.driver.logDebug("eseguo query: " + sqlQuery);
  2692.            
  2693.             long idSA = -1;
  2694.             String tipo = null;
  2695.             rs = stm.executeQuery();
  2696.             if(rs.next()) {
  2697.                 idSA = rs.getLong("id");
  2698.                 tipo = rs.getString("tipo");
  2699.             }
  2700.             rs.close(); rs=null;
  2701.             stm.close(); stm = null;

  2702.             if(idSA>0) {

  2703.                 if(CostantiConfigurazione.SERVER.equals(tipo)){
  2704.                     return null; // non serve normalizzazione, si puo' usare il nome stesso
  2705.                 }
  2706.                
  2707.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2708.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_SA);
  2709.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
  2710.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  2711.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE + ".behaviour");
  2712.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE_SA + ".connettore_nome");
  2713.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  2714.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  2715.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE + ".tipo_servizio");
  2716.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE + ".servizio");
  2717.                 sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE + ".versione_servizio");
  2718.                 sqlQueryObject.setANDLogicOperator(true);
  2719.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE + ".id="+CostantiDB.PORTE_APPLICATIVE_SA + ".id_porta");
  2720.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".id="+CostantiDB.PORTE_APPLICATIVE + ".id_soggetto");
  2721.                 sqlQueryObject.addWhereCondition(CostantiDB.PORTE_APPLICATIVE_SA + ".id_servizio_applicativo=?");

  2722.                 sqlQuery = sqlQueryObject.createSQLQuery();
  2723.                
  2724.                 stm = con.prepareStatement(sqlQuery);
  2725.                 stm.setLong(1, idSA);

  2726.                 this.driver.logDebug("eseguo query: " + sqlQuery);
  2727.                
  2728.                 List<IDServizio> nomiConnettore = new ArrayList<IDServizio>();
  2729.                 rs = stm.executeQuery();
  2730.                 while(rs.next()) {
  2731.                    
  2732.                     String behaviour = rs.getString("behaviour");
  2733.                     String nomeConnettore = rs.getString("connettore_nome");
  2734.                    
  2735.                     String tipo_soggetto = rs.getString("tipo_soggetto");
  2736.                     String nome_soggetto = rs.getString("nome_soggetto");
  2737.                     String tipo_servizio = rs.getString("tipo_servizio");
  2738.                     String servizio = rs.getString("servizio");
  2739.                     int versione_servizio = rs.getInt("versione_servizio");
  2740.                    
  2741.                     IDServizio idServizio = IDServizioUtils.buildIDServizio(tipo_servizio, servizio,
  2742.                             new IDSoggetto(tipo_soggetto, nome_soggetto),
  2743.                             versione_servizio);
  2744.                    
  2745.                     if(nomeConnettore!=null && !"".equals(nomeConnettore)) {
  2746.                         idServizio.setAzione(nomeConnettore);
  2747.                     }
  2748.                     else {
  2749.                         if(behaviour!=null && !"".equals(behaviour)) {
  2750.                             idServizio.setAzione(CostantiConfigurazione.NOME_CONNETTORE_DEFAULT);
  2751.                         }
  2752.                     }

  2753.                     nomiConnettore.add(idServizio);
  2754.                 }
  2755.                 rs.close(); rs=null;
  2756.                 stm.close(); stm = null;
  2757.                
  2758.                 if(!nomiConnettore.isEmpty() && nomiConnettore.size()==1) {
  2759.                     return nomiConnettore.get(0);
  2760.                 }
  2761.                 // else esistono più associazione e non e' di tipo server ???
  2762.             }
  2763.            
  2764.             return null; // normalizzazione non riuscita, si puo' usare il nome stesso
  2765.            
  2766.         } catch (Exception se) {
  2767.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::findAllAllarmi] Exception: " + se.getMessage(),se);
  2768.         } finally {
  2769.             //Chiudo statement and resultset
  2770.             JDBCUtilities.closeResources(rs, stm);
  2771.             this.driver.closeConnection(con);
  2772.         }
  2773.        
  2774.     }
  2775.    
  2776.     protected ProprietaOggetto getProprietaOggetto(IDServizioApplicativo idServizioApplicativo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2777.        
  2778.         String nomeMetodo = "getProprietaOggetto";
  2779.        
  2780.         IDSoggetto idSoggetto = idServizioApplicativo.getIdSoggettoProprietario();
  2781.         if(idSoggetto==null)throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Soggetto Fruitore non Impostato.");
  2782.         if(idServizioApplicativo.getNome()==null || "".equals(idServizioApplicativo.getNome()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Nome Servizio Applicativo non Impostato.");
  2783.         if(idSoggetto.getNome()==null || "".equals(idSoggetto.getNome()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Nome Soggetto Fruitore non Impostato.");
  2784.         if(idSoggetto.getTipo()==null || "".equals(idSoggetto.getTipo()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Tipo Soggetto Fruitore non Impostato.");

  2785.        
  2786.         Connection con = null;
  2787.         PreparedStatement stm = null;
  2788.         ResultSet rs = null;
  2789.         String sqlQuery = "";

  2790.         if (this.driver.atomica) {
  2791.             try {
  2792.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);

  2793.             } catch (Exception e) {
  2794.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Exception accedendo al datasource :" + e.getMessage(),e);

  2795.             }

  2796.         } else
  2797.             con = this.driver.globalConnection;

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

  2799.         try {
  2800.             long idSog=DBUtils.getIdSoggetto(idSoggetto.getNome(), idSoggetto.getTipo(), con, this.driver.tipoDB,this.driver.tabellaSoggetti);

  2801.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2802.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  2803.             sqlQueryObject.addSelectField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_RICHIEDENTE);
  2804.             sqlQueryObject.addSelectField(CostantiDB.PROPRIETA_OGGETTO_DATA_CREAZIONE);
  2805.             sqlQueryObject.addSelectField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_ULTIMA_MODIFICA);
  2806.             sqlQueryObject.addSelectField(CostantiDB.PROPRIETA_OGGETTO_DATA_ULTIMA_MODIFICA);
  2807.             sqlQueryObject.addWhereCondition("nome = ?");
  2808.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  2809.             sqlQueryObject.setANDLogicOperator(true);
  2810.             sqlQuery = sqlQueryObject.createSQLQuery();
  2811.             stm = con.prepareStatement(sqlQuery);
  2812.             stm.setString(1, idServizioApplicativo.getNome());
  2813.             stm.setLong(2, idSog);
  2814.             this.driver.logDebug("eseguo query: " + DBUtils.formatSQLString(sqlQuery, idServizioApplicativo.getNome(), idSog));
  2815.            
  2816.             rs = stm.executeQuery();

  2817.             ProprietaOggetto proprieta = null;
  2818.             if (rs.next()) {            
  2819.                 proprieta = this.utilsDriver.readProprietaOggetto(rs,false);
  2820.             }
  2821.             else{
  2822.                 throw new DriverConfigurazioneNotFound("ServizioApplicativo ["+idServizioApplicativo.getNome()+"] non esistente");
  2823.             }

  2824.             return proprieta;

  2825.         } catch (SQLException se) {

  2826.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] SqlException: " + se.getMessage(),se);
  2827.         } catch (Exception se) {

  2828.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Exception: " + se.getMessage(),se);
  2829.         }
  2830.         finally {

  2831.             //Chiudo statement and resultset
  2832.             JDBCUtilities.closeResources(rs, stm);
  2833.             this.driver.closeConnection(con);
  2834.         }
  2835.     }
  2836.    
  2837.     protected void updateProprietaOggetto(IDServizioApplicativo idServizioApplicativo, String user) throws DriverConfigurazioneException {
  2838.        
  2839.         String nomeMetodo = "updateProprietaOggettoServizioApplicativo";
  2840.        
  2841.         IDSoggetto idSoggetto = idServizioApplicativo.getIdSoggettoProprietario();
  2842.         if(idSoggetto==null)throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Soggetto Fruitore non Impostato.");
  2843.         if(idServizioApplicativo.getNome()==null || "".equals(idServizioApplicativo.getNome()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Nome Servizio Applicativo non Impostato.");
  2844.         if(idSoggetto.getNome()==null || "".equals(idSoggetto.getNome()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Nome Soggetto Fruitore non Impostato.");
  2845.         if(idSoggetto.getTipo()==null || "".equals(idSoggetto.getTipo()))throw new DriverConfigurazioneException("[DriverConfigurazioneDB::"+nomeMetodo+"] Tipo Soggetto Fruitore non Impostato.");

  2846.        
  2847.         Connection con = null;
  2848.         if (this.driver.atomica) {
  2849.             try {
  2850.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  2851.             } catch (Exception e) {
  2852.                 throw new DriverConfigurazioneException("[DriverConfigurazioneDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  2853.             }

  2854.         } else
  2855.             con = this.driver.globalConnection;

  2856.         this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);
  2857.        
  2858.         PreparedStatement stm = null;
  2859.         try {
  2860.             long idSog=DBUtils.getIdSoggetto(idSoggetto.getNome(), idSoggetto.getTipo(), con, this.driver.tipoDB,this.driver.tabellaSoggetti);
  2861.            
  2862.             ISQLQueryObject sqlQueryObjectUpdate = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  2863.             sqlQueryObjectUpdate.addUpdateTable(CostantiDB.SERVIZI_APPLICATIVI);
  2864.             sqlQueryObjectUpdate.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_ULTIMA_MODIFICA, "?");
  2865.             sqlQueryObjectUpdate.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_DATA_ULTIMA_MODIFICA, "?");
  2866.             sqlQueryObjectUpdate.addWhereCondition("nome = ?");
  2867.             sqlQueryObjectUpdate.addWhereCondition("id_soggetto = ?");
  2868.             sqlQueryObjectUpdate.setANDLogicOperator(true);
  2869.             String updateString = sqlQueryObjectUpdate.createSQLUpdate();
  2870.             stm = con.prepareStatement(updateString);
  2871.             int index = 1;
  2872.             stm.setString(index++, user);
  2873.             stm.setTimestamp(index++, DateManager.getTimestamp());
  2874.             stm.setString(index++, idServizioApplicativo.getNome());
  2875.             stm.setLong(index++, idSog);
  2876.             int n=stm.executeUpdate();
  2877.             stm.close();
  2878.             this.driver.logDebug("Aggiornata "+n+" entry per l'operazione di ultima modifica della tabella '"+CostantiDB.SERVIZI_APPLICATIVI+"' con idSA: "+idServizioApplicativo);
  2879.         } catch (SQLException e) {
  2880.             this.driver.logError("Errore SQL", e);
  2881.             throw new DriverConfigurazioneException(e);
  2882.         }catch (Exception e) {
  2883.             this.driver.logError("Errore", e);
  2884.             throw new DriverConfigurazioneException(e);
  2885.         } finally {
  2886.             JDBCUtilities.closeResources(stm);

  2887.             this.driver.closeConnection(con);
  2888.         }
  2889.     }
  2890. }