DriverConfigurazioneDB_serviziApplicativiLIB.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 static org.openspcoop2.core.constants.CostantiDB.CREATE;
  22. import static org.openspcoop2.core.constants.CostantiDB.DELETE;
  23. import static org.openspcoop2.core.constants.CostantiDB.UPDATE;

  24. import java.sql.Connection;
  25. import java.sql.PreparedStatement;
  26. import java.sql.ResultSet;
  27. import java.sql.SQLException;
  28. import java.sql.Timestamp;
  29. import java.text.MessageFormat;
  30. import java.util.List;

  31. import org.openspcoop2.core.byok.BYOKUtilities;
  32. import org.openspcoop2.core.byok.BYOKWrappedValue;
  33. import org.openspcoop2.core.byok.IDriverBYOK;
  34. import org.openspcoop2.core.commons.CoreException;
  35. import org.openspcoop2.core.commons.DBUtils;
  36. import org.openspcoop2.core.config.Connettore;
  37. import org.openspcoop2.core.config.Credenziali;
  38. import org.openspcoop2.core.config.InvocazioneCredenziali;
  39. import org.openspcoop2.core.config.InvocazionePorta;
  40. import org.openspcoop2.core.config.InvocazionePortaGestioneErrore;
  41. import org.openspcoop2.core.config.InvocazioneServizio;
  42. import org.openspcoop2.core.config.Proprieta;
  43. import org.openspcoop2.core.config.RispostaAsincrona;
  44. import org.openspcoop2.core.config.Ruolo;
  45. import org.openspcoop2.core.config.ServizioApplicativo;
  46. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  47. import org.openspcoop2.core.config.constants.TipologiaErogazione;
  48. import org.openspcoop2.core.config.constants.TipologiaFruizione;
  49. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  50. import org.openspcoop2.core.constants.CostantiDB;
  51. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  52. import org.openspcoop2.core.constants.TipiConnettore;
  53. import org.openspcoop2.utils.certificate.CertificateUtils;
  54. import org.openspcoop2.utils.certificate.PrincipalType;
  55. import org.openspcoop2.utils.date.DateManager;
  56. import org.openspcoop2.utils.jdbc.IJDBCAdapter;
  57. import org.openspcoop2.utils.jdbc.JDBCAdapterFactory;
  58. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  59. import org.openspcoop2.utils.sql.ISQLQueryObject;
  60. import org.openspcoop2.utils.sql.SQLObjectFactory;

  61. /**
  62.  * DriverConfigurazioneDB_serviziApplicativiLIB
  63.  *
  64.  * @author Stefano Corallo - corallo@link.it
  65.  * @author $Author$
  66.  * @version $Rev$, $Date$
  67.  */
  68. public class DriverConfigurazioneDB_serviziApplicativiLIB {


  69.    
  70.     /**
  71.      *
  72.      * @param type
  73.      * @param aSA
  74.      * @param con
  75.      * @return id
  76.      * @throws DriverConfigurazioneException
  77.      */
  78.     public static long CRUDServizioApplicativo(int type, ServizioApplicativo aSA, Connection con, IDriverBYOK driverBYOK) throws DriverConfigurazioneException {
  79.         if (aSA == null)
  80.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDServizioApplicativo] Servizio Applicativo non valido.");

  81.         String nomeSA = aSA.getNome();
  82.         String tipoProprietario = aSA.getTipoSoggettoProprietario();
  83.         String nomeProprietario = aSA.getNomeSoggettoProprietario();

  84.         if (nomeSA == null || nomeSA.equals(""))
  85.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDServizioApplicativo] Nome Servizio Applicativo non valido.");
  86.         if (tipoProprietario == null || tipoProprietario.equals(""))
  87.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDServizioApplicativo] Tipo Proprietario Servizio Applicativo non valido.");
  88.         if (nomeProprietario == null || nomeProprietario.equals(""))
  89.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDServizioApplicativo] Nome Proprietario Servizio Applicativo non valido.");

  90.         PreparedStatement stm = null;
  91.         String sqlQuery;
  92.         PreparedStatement stmQuery = null;
  93.         ResultSet rs = null;
  94.         PreparedStatement stm2 = null;
  95.         int n = 0;

  96.         try {
  97.             String tipoSA = aSA.getTipo();
  98.             int useAsClient = aSA.getUseAsClient() ? CostantiDB.TRUE : CostantiDB.FALSE;
  99.             String descrizione = aSA.getDescrizione();
  100.             DriverConfigurazioneDBLib.logDebug("get ID Soggetto con tipo["+tipoProprietario+"] e nome["+nomeProprietario+"]");
  101.             long idProprietario = DBUtils.getIdSoggetto(nomeProprietario, tipoProprietario, con, DriverConfigurazioneDBLib.tipoDB,DriverConfigurazioneDBLib.tabellaSoggetti);
  102.             DriverConfigurazioneDBLib.logDebug("get ID Soggetto con tipo["+tipoProprietario+"] e nome["+nomeProprietario+"] : "+idProprietario);
  103.             InvocazionePorta invPorta = aSA.getInvocazionePorta();
  104.             InvocazioneServizio invServizio = aSA.getInvocazioneServizio();
  105.             RispostaAsincrona ricezione = aSA.getRispostaAsincrona();
  106.             List<Proprieta> proprieta = aSA.getProprietaList();

  107.             Connettore connettoreRisp = null;
  108.             Connettore connettoreInv = null;
  109.             long idConnettoreRisp = 0;
  110.             long idConnettoreInv = 0;
  111.             long idServizioApplicativo = 0;
  112.             Credenziali credenzialiInvocazionePorta = null;
  113.             InvocazioneCredenziali credenzialiInvocazione = null;
  114.             InvocazionePortaGestioneErrore gestErr = null;
  115.             String fault = null;

  116.             switch (type) {
  117.             case CREATE:
  118.                
  119.                 String utenteRichiedente = null;
  120.                 if(aSA.getProprietaOggetto()!=null && aSA.getProprietaOggetto().getUtenteRichiedente()!=null) {
  121.                     utenteRichiedente = aSA.getProprietaOggetto().getUtenteRichiedente();
  122.                 }
  123.                 else {
  124.                     utenteRichiedente = DBUtils.getSuperUserSoggettoSafe(DriverConfigurazioneDBLib.log, "CRUDPortaApplicativa",
  125.                             idProprietario, con, DriverConfigurazioneDBLib.tipoDB,DriverConfigurazioneDBLib.tabellaSoggetti);
  126.                 }
  127.                
  128.                 Timestamp dataCreazione = null;
  129.                 if(aSA.getProprietaOggetto()!=null && aSA.getProprietaOggetto().getDataCreazione()!=null) {
  130.                     dataCreazione = new Timestamp(aSA.getProprietaOggetto().getDataCreazione().getTime());
  131.                 }
  132.                 else if(aSA.getOraRegistrazione()!=null){
  133.                     dataCreazione = new Timestamp(aSA.getOraRegistrazione().getTime());
  134.                 }
  135.                 else {
  136.                     dataCreazione = DateManager.getTimestamp();
  137.                 }
  138.                
  139.                 // create
  140.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  141.                 sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_APPLICATIVI);
  142.                 sqlQueryObject.addInsertField("nome", "?");
  143.                 sqlQueryObject.addInsertField("tipo", "?");
  144.                 sqlQueryObject.addInsertField("as_client", "?");
  145.                 sqlQueryObject.addInsertField("descrizione", "?");
  146.                 sqlQueryObject.addInsertField("sbustamentorisp", "?");
  147.                 sqlQueryObject.addInsertField("sbustamento_protocol_info_risp", "?");
  148.                 sqlQueryObject.addInsertField("getmsgrisp", "?");
  149.                 sqlQueryObject.addInsertField("tipoauthrisp", "?");
  150.                 sqlQueryObject.addInsertField("utenterisp", "?");
  151.                 sqlQueryObject.addInsertField("passwordrisp", "?");
  152.                 sqlQueryObject.addInsertField("enc_passwordrisp", "?");
  153.                 sqlQueryObject.addInsertField("id_connettore_risp", "?");
  154.                 sqlQueryObject.addInsertField("sbustamentoinv", "?");
  155.                 sqlQueryObject.addInsertField("sbustamento_protocol_info_inv", "?");
  156.                 sqlQueryObject.addInsertField("getmsginv", "?");
  157.                 sqlQueryObject.addInsertField("tipoauthinv", "?");
  158.                 sqlQueryObject.addInsertField("utenteinv", "?");
  159.                 sqlQueryObject.addInsertField("passwordinv", "?");
  160.                 sqlQueryObject.addInsertField("enc_passwordinv", "?");
  161.                 sqlQueryObject.addInsertField("id_connettore_inv", "?");
  162.                 sqlQueryObject.addInsertField("id_soggetto", "?");
  163.                 sqlQueryObject.addInsertField("fault", "?");
  164.                 sqlQueryObject.addInsertField("tipoauth", "?");
  165.                 sqlQueryObject.addInsertField("utente", "?");
  166.                 sqlQueryObject.addInsertField("password", "?");
  167.                 sqlQueryObject.addInsertField("subject", "?");
  168.                 sqlQueryObject.addInsertField("cn_subject", "?");
  169.                 sqlQueryObject.addInsertField("issuer", "?");
  170.                 sqlQueryObject.addInsertField("cn_issuer", "?");
  171.                 sqlQueryObject.addInsertField("certificate", "?");
  172.                 sqlQueryObject.addInsertField("cert_strict_verification", "?");
  173.                 sqlQueryObject.addInsertField("token_policy", "?");
  174.                 sqlQueryObject.addInsertField("invio_x_rif_inv", "?");
  175.                 sqlQueryObject.addInsertField("risposta_x_rif_inv", "?");
  176.                 sqlQueryObject.addInsertField("invio_x_rif", "?");
  177.                 sqlQueryObject.addInsertField("invio_x_rif_risp", "?");
  178.                 sqlQueryObject.addInsertField("risposta_x_rif_risp", "?");
  179.                 sqlQueryObject.addInsertField("sbustamento_protocol_info", "?");
  180.                 sqlQueryObject.addInsertField("fault_actor", "?");
  181.                 sqlQueryObject.addInsertField("generic_fault_code", "?");
  182.                 sqlQueryObject.addInsertField("prefix_fault_code", "?");
  183.                 sqlQueryObject.addInsertField("tipologia_fruizione", "?");
  184.                 sqlQueryObject.addInsertField("tipologia_erogazione", "?");
  185.                 if(utenteRichiedente!=null) {
  186.                     sqlQueryObject.addInsertField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_RICHIEDENTE, "?");
  187.                 }
  188.                 if(dataCreazione!=null) {
  189.                     sqlQueryObject.addInsertField(CostantiDB.PROPRIETA_OGGETTO_DATA_CREAZIONE, "?");
  190.                 }
  191.                 sqlQuery = sqlQueryObject.createSQLInsert();
  192.                 stm = con.prepareStatement(sqlQuery);

  193.                 // creo i connettori, ma disabilitati

  194.                 // connettore risp
  195.                 //il nome del connettore deve essere univoco Connettore[RISP o INV]_nomeSA+tipoSoggetto+nomeSoggetto
  196.                 connettoreRisp = new Connettore();
  197.                 connettoreRisp.setNome("ConnettoreRISP_" + aSA.getNome()+"_"+aSA.getTipoSoggettoProprietario()+aSA.getNomeSoggettoProprietario());
  198.                 connettoreRisp.setTipo(TipiConnettore.DISABILITATO.getNome());
  199.                 //Creo il connettore disabilitato
  200.                 idConnettoreRisp = DriverConfigurazioneDB_connettoriLIB.CRUDConnettore(1, connettoreRisp, con, driverBYOK);
  201.                 //Se il connettore mi era stato passato allora devo aggiornare il connettore con i dati giusti
  202.                 if(ricezione!=null && ricezione.getConnettore()!=null){
  203.                     Connettore connettore= ricezione.getConnettore();
  204.                     //setto l'id del connettore e il nome che aveva prima
  205.                     connettore.setId(idConnettoreRisp);
  206.                     connettore.setNome(connettoreRisp.getNome());//il nome DEVE essere quello creato in precedenza per assicurarsi che sia univoco
  207.                     DriverConfigurazioneDB_connettoriLIB.CRUDConnettore(CostantiDB.UPDATE, connettore, con, driverBYOK);
  208.                 }

  209.                 // connettore inv
  210.                 connettoreInv = new Connettore();
  211.                 connettoreInv.setNome("ConnettoreINV_" + aSA.getNome()+"_"+aSA.getTipoSoggettoProprietario()+aSA.getNomeSoggettoProprietario());
  212.                 connettoreInv.setTipo(TipiConnettore.DISABILITATO.getNome());
  213.                 idConnettoreInv = DriverConfigurazioneDB_connettoriLIB.CRUDConnettore(1, connettoreInv, con, driverBYOK);

  214.                 //setto i valori corretti del connettore se mi era stato passato
  215.                 if(invServizio!=null && invServizio.getConnettore()!=null){
  216.                     Connettore connettore = invServizio.getConnettore();
  217.                     connettore.setId(idConnettoreInv);
  218.                     connettore.setNome(connettoreInv.getNome());//il nome DEVE essere quello creato in precedenza per assicurarsi che sia univoco
  219.                     DriverConfigurazioneDB_connettoriLIB.CRUDConnettore(CostantiDB.UPDATE, connettore, con, driverBYOK);
  220.                 }

  221.                 int index = 1;
  222.                
  223.                 stm.setString(index++, nomeSA);
  224.                 stm.setString(index++, tipoSA);
  225.                 stm.setInt(index++, useAsClient);
  226.                 stm.setString(index++, descrizione);

  227.                 // RicezioneRisposta
  228.                 stm.setInt(index++, (ricezione != null && (CostantiConfigurazione.ABILITATO.equals(ricezione.getSbustamentoSoap())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  229.                 stm.setInt(index++, (ricezione != null && (!CostantiConfigurazione.DISABILITATO.equals(ricezione.getSbustamentoInformazioniProtocollo())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  230.                 stm.setString(index++, ricezione != null ? DriverConfigurazioneDBLib.getValue(ricezione.getGetMessage()) : null);
  231.                 // setto credenziali risp
  232.                 credenzialiInvocazione = ricezione != null ? ricezione.getCredenziali() : null;
  233.                 stm.setString(index++, (ricezione != null ? DriverConfigurazioneDBLib.getValue(ricezione.getAutenticazione()) : null)); //l'autenticazione e' quella della risposta asincrona
  234.                 stm.setString(index++, (credenzialiInvocazione != null ? credenzialiInvocazione.getUser() : null));
  235.                
  236.                 String plainValue = (credenzialiInvocazione != null ? credenzialiInvocazione.getPassword() : null);
  237.                 String encValue = null;
  238.                 if(driverBYOK!=null && plainValue!=null) {
  239.                     BYOKWrappedValue byokValue = driverBYOK.wrap(plainValue);
  240.                     if(byokValue!=null) {
  241.                         encValue = byokValue.getWrappedValue();
  242.                         plainValue = byokValue.getWrappedPlainValue();
  243.                     }
  244.                 }
  245.                 stm.setString(index++, plainValue);
  246.                 stm.setString(index++, encValue);
  247.                
  248.                 // setto idconnettore risp
  249.                 stm.setLong(index++, idConnettoreRisp);

  250.                 // InvocazioneServizio
  251.                 stm.setInt(index++, (invServizio != null && (CostantiConfigurazione.ABILITATO.equals(invServizio.getSbustamentoSoap())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  252.                 stm.setInt(index++, (invServizio != null && (!CostantiConfigurazione.DISABILITATO.equals(invServizio.getSbustamentoInformazioniProtocollo())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  253.                 stm.setString(index++, invServizio != null ? DriverConfigurazioneDBLib.getValue(invServizio.getGetMessage()) : null);
  254.                 // setto credenziali inv
  255.                 credenzialiInvocazione = invServizio != null ? invServizio.getCredenziali() : null;
  256.                 stm.setString(index++, (invServizio != null ? DriverConfigurazioneDBLib.getValue(invServizio.getAutenticazione()) : null));//l'autenticazione e' quella dell invocazione servizio
  257.                 stm.setString(index++, (credenzialiInvocazione != null ? credenzialiInvocazione.getUser() : null));
  258.                
  259.                 plainValue = (credenzialiInvocazione != null ? credenzialiInvocazione.getPassword() : null);
  260.                 encValue = null;
  261.                 if(driverBYOK!=null && plainValue!=null) {
  262.                     BYOKWrappedValue byokValue = driverBYOK.wrap(plainValue);
  263.                     if(byokValue!=null) {
  264.                         encValue = byokValue.getWrappedValue();
  265.                         plainValue = byokValue.getWrappedPlainValue();
  266.                     }
  267.                 }
  268.                 stm.setString(index++, plainValue);
  269.                 stm.setString(index++, encValue);
  270.                
  271.                 // setto idconnettore inv
  272.                 stm.setLong(index++, idConnettoreInv);

  273.                 // idsoggetto proprietario
  274.                 stm.setLong(index++, idProprietario);

  275.                 // InvocazionePorta
  276.                 gestErr = invPorta != null ? invPorta.getGestioneErrore() : null;
  277.                 fault = (gestErr != null ? DriverConfigurazioneDBLib.getValue(gestErr.getFault()) : null);
  278.                 stm.setString(index++, fault);
  279.                 // setto credenziali invocaizone porta
  280.                 // per il momento c'e' soltato una credenziale,quindi un solo
  281.                 // oggetto nella lista
  282.                 credenzialiInvocazionePorta = (invPorta != null && invPorta.sizeCredenzialiList() > 0 ? invPorta.getCredenziali(0) : null);
  283.                 stm.setString(index++, (credenzialiInvocazionePorta != null ? DriverConfigurazioneDBLib.getValue(credenzialiInvocazionePorta.getTipo()) : null));
  284.                 stm.setString(index++, (credenzialiInvocazionePorta != null ? credenzialiInvocazionePorta.getUser() : null));
  285.                 stm.setString(index++, (credenzialiInvocazionePorta != null ? credenzialiInvocazionePorta.getPassword() : null));
  286.                
  287.                 String subject = null;
  288.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getSubject()!=null && !"".equals(credenzialiInvocazionePorta.getSubject()))
  289.                     subject = credenzialiInvocazionePorta.getSubject();
  290.                 stm.setString(index++, (subject != null ? CertificateUtils.formatPrincipal(subject, PrincipalType.SUBJECT) : null));
  291.                 String subjectCN = null;
  292.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getCnSubject()!=null && !"".equals(credenzialiInvocazionePorta.getCnSubject()))
  293.                     subjectCN = credenzialiInvocazionePorta.getCnSubject();
  294.                 stm.setString(index++, subjectCN);
  295.                
  296.                 String issuer = null;
  297.                 if(credenzialiInvocazionePorta != null && org.openspcoop2.core.config.constants.CredenzialeTipo.APIKEY.equals(credenzialiInvocazionePorta.getTipo())) {
  298.                     stm.setString(index++, CostantiDB.getIssuerApiKey(credenzialiInvocazionePorta.isAppId()));
  299.                 }
  300.                 else {
  301.                     if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getIssuer()!=null && !"".equals(credenzialiInvocazionePorta.getIssuer()))
  302.                         issuer = credenzialiInvocazionePorta.getIssuer();
  303.                     stm.setString(index++, (issuer != null ? CertificateUtils.formatPrincipal(issuer, PrincipalType.ISSUER) : null));
  304.                 }
  305.                 String issuerCN = null;
  306.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getCnIssuer()!=null && !"".equals(credenzialiInvocazionePorta.getCnIssuer()))
  307.                     issuerCN = credenzialiInvocazionePorta.getCnIssuer();
  308.                 stm.setString(index++, issuerCN);
  309.                
  310.                 byte [] certificate = null;
  311.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getCertificate()!=null) {
  312.                     certificate = credenzialiInvocazionePorta.getCertificate();
  313.                 }
  314.                 IJDBCAdapter jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(DriverConfigurazioneDBLib.tipoDB);
  315.                 jdbcAdapter.setBinaryData(stm, index++, certificate);
  316.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.isCertificateStrictVerification()) {
  317.                     stm.setInt(index++, CostantiDB.TRUE);
  318.                 }              
  319.                 else {
  320.                     stm.setInt(index++, CostantiDB.FALSE);
  321.                 }
  322.                
  323.                 stm.setString(index++, credenzialiInvocazionePorta!=null ? credenzialiInvocazionePorta.getTokenPolicy() : null);

  324.                 // aggiungo gestione invio/risposta per riferimento
  325.                 // invocazione servizio
  326.                 stm.setString(index++, invServizio != null ? DriverConfigurazioneDBLib.getValue(invServizio.getInvioPerRiferimento()) : null);
  327.                 stm.setString(index++, invServizio != null ? DriverConfigurazioneDBLib.getValue(invServizio.getRispostaPerRiferimento()) : null);
  328.                 // invocazione porta
  329.                 stm.setString(index++, invPorta != null ? DriverConfigurazioneDBLib.getValue(invPorta.getInvioPerRiferimento()) : null);
  330.                 // ricezione risposta
  331.                 stm.setString(index++, ricezione != null ? DriverConfigurazioneDBLib.getValue(ricezione.getInvioPerRiferimento()) : null);
  332.                 stm.setString(index++, ricezione != null ? DriverConfigurazioneDBLib.getValue(ricezione.getRispostaPerRiferimento()) : null);
  333.                 // sbustamento info protocolo
  334.                 stm.setInt(index++, (invPorta != null && (!CostantiConfigurazione.DISABILITATO.equals(invPorta.getSbustamentoInformazioniProtocollo())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  335.                 //Invocazione Porta : fault_actor, generic_fault_code, prefix_fault_code
  336.                 stm.setString(index++, gestErr!=null ? gestErr.getFaultActor() : null);
  337.                 stm.setString(index++, gestErr!=null ? DriverConfigurazioneDBLib.getValue(gestErr.getGenericFaultCode()) : null);
  338.                 stm.setString(index++, gestErr!=null ? gestErr.getPrefixFaultCode() : null);
  339.                                
  340.                 //tipologia erogazione/fruizione
  341.                 stm.setString(index++, aSA.getTipologiaFruizione()!=null ? TipologiaFruizione.valueOf(aSA.getTipologiaFruizione().toUpperCase()).toString() : TipologiaFruizione.DISABILITATO.toString());
  342.                 stm.setString(index++, aSA.getTipologiaErogazione()!=null ? TipologiaErogazione.valueOf(aSA.getTipologiaErogazione().toUpperCase()).toString() : TipologiaErogazione.DISABILITATO.toString());
  343.                
  344.                 if(utenteRichiedente!=null) {
  345.                     stm.setString(index++, utenteRichiedente);
  346.                 }
  347.                
  348.                 if(dataCreazione!=null) {
  349.                     stm.setTimestamp(index++, dataCreazione);
  350.                 }
  351.                
  352.                 n = stm.executeUpdate();
  353.                 stm.close();
  354.                 DriverConfigurazioneDBLib.logDebug("Inserted " + n + " row(s)");

  355.                 try {
  356.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  357.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  358.                     sqlQueryObject.addSelectField("id");
  359.                     sqlQueryObject.addWhereCondition("id_soggetto = ?");
  360.                     sqlQueryObject.addWhereCondition("nome = ?");
  361.                     sqlQueryObject.setANDLogicOperator(true);
  362.                     sqlQuery = sqlQueryObject.createSQLQuery();
  363.                     stmQuery = con.prepareStatement(sqlQuery);
  364.                     stmQuery.setLong(1, idProprietario);
  365.                     stmQuery.setString(2, nomeSA);
  366.    
  367.                     rs = stmQuery.executeQuery();
  368.    
  369.                     if (rs.next()) {
  370.                         idServizioApplicativo = rs.getLong("id");
  371.                         aSA.setId(idServizioApplicativo);
  372.                     } else {
  373.                         throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDServizioApplicativo(CREATE)] Impossibile trovare il servizio appena creato.");
  374.                     }
  375.                 }finally {
  376.                     if(rs!=null) {
  377.                         rs.close();
  378.                         rs = null;
  379.                     }
  380.                     if(stmQuery!=null) {
  381.                         stmQuery.close();
  382.                         stmQuery = null;
  383.                     }
  384.                 }
  385.                
  386.                 // GestioneErrore
  387.                 if(aSA.getRispostaAsincrona()!=null && aSA.getRispostaAsincrona().getGestioneErrore()!=null){
  388.                    
  389.                     DriverConfigurazioneDB_gestioneErroreLIB.CRUDGestioneErroreServizioApplicativo(CostantiDB.CREATE,
  390.                             aSA.getRispostaAsincrona().getGestioneErrore(), idProprietario, idServizioApplicativo, false, con);
  391.                    
  392.                     try {
  393.                         ISQLQueryObject sqlQueryObjectUpdate = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  394.                         sqlQueryObjectUpdate.addUpdateTable(CostantiDB.SERVIZI_APPLICATIVI);
  395.                         sqlQueryObjectUpdate.addUpdateField("id_gestione_errore_risp", "?");
  396.                         sqlQueryObjectUpdate.addWhereCondition("id = ?");
  397.                         stm2 = con.prepareStatement(sqlQueryObjectUpdate.createSQLUpdate());
  398.                         stm2.setLong(1, aSA.getRispostaAsincrona().getGestioneErrore().getId());
  399.                         stm2.setLong(2, idServizioApplicativo);
  400.                         stm2.executeUpdate();
  401.                     }finally {
  402.                         if(stm2!=null) {
  403.                             stm2.close();
  404.                             stm2 = null;
  405.                         }
  406.                     }
  407.                    
  408.                 }
  409.                
  410.                 // GestioneErrore
  411.                 if(aSA.getInvocazioneServizio()!=null && aSA.getInvocazioneServizio().getGestioneErrore()!=null){
  412.                    
  413.                     DriverConfigurazioneDB_gestioneErroreLIB.CRUDGestioneErroreServizioApplicativo(CostantiDB.CREATE,
  414.                             aSA.getInvocazioneServizio().getGestioneErrore(), idProprietario, idServizioApplicativo, true, con);
  415.                    
  416.                     try {
  417.                         ISQLQueryObject sqlQueryObjectUpdate = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  418.                         sqlQueryObjectUpdate.addUpdateTable(CostantiDB.SERVIZI_APPLICATIVI);
  419.                         sqlQueryObjectUpdate.addUpdateField("id_gestione_errore_inv", "?");
  420.                         sqlQueryObjectUpdate.addWhereCondition("id = ?");
  421.                         stm2 = con.prepareStatement(sqlQueryObjectUpdate.createSQLUpdate());
  422.                         stm2.setLong(1, aSA.getInvocazioneServizio().getGestioneErrore().getId());
  423.                         stm2.setLong(2, idServizioApplicativo);
  424.                         stm2.executeUpdate();
  425.                     }finally {
  426.                         if(stm2!=null) {
  427.                             stm2.close();
  428.                             stm2 = null;
  429.                         }
  430.                     }
  431.                 }
  432.                
  433.                 // Ruoli
  434.                 n=0;
  435.                 if(invPorta!=null && invPorta.getRuoli()!=null && invPorta.getRuoli().sizeRuoloList()>0){
  436.                     for (int i = 0; i < invPorta.getRuoli().sizeRuoloList(); i++) {
  437.                         Ruolo ruolo = invPorta.getRuoli().getRuolo(i);
  438.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  439.                         sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_APPLICATIVI_RUOLI);
  440.                         sqlQueryObject.addInsertField("id_servizio_applicativo", "?");
  441.                         sqlQueryObject.addInsertField("ruolo", "?");
  442.                         sqlQuery = sqlQueryObject.createSQLInsert();
  443.                         stm = con.prepareStatement(sqlQuery);
  444.                         stm.setLong(1, aSA.getId());
  445.                         stm.setString(2, ruolo.getNome());
  446.                         stm.executeUpdate();
  447.                         stm.close();
  448.                         n++;
  449.                         DriverConfigurazioneDBLib.logDebug("Aggiunto ruolo[" + ruolo.getNome() + "] al servizioApplicativo "+idServizioApplicativo);
  450.                     }
  451.                 }
  452.                
  453.                 DriverConfigurazioneDBLib.logDebug("Aggiunti " + n + " ruoli al servizioApplicativo "+idServizioApplicativo);
  454.                
  455.                
  456.                 // Credenziali (le credenziali in questa tabella partono dal numero maggiore di 1)
  457.                 n=0;
  458.                 if(invPorta!=null && invPorta.sizeCredenzialiList()>1){
  459.                     for (int i = 1; i < invPorta.sizeCredenzialiList(); i++) {
  460.                         Credenziali credenziale = invPorta.getCredenziali(i);
  461.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  462.                         sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  463.                         sqlQueryObject.addInsertField("id_servizio_applicativo", "?");
  464.                         sqlQueryObject.addInsertField("subject", "?");
  465.                         sqlQueryObject.addInsertField("cn_subject", "?");
  466.                         sqlQueryObject.addInsertField("issuer", "?");
  467.                         sqlQueryObject.addInsertField("cn_issuer", "?");
  468.                         sqlQueryObject.addInsertField("certificate", "?");
  469.                         sqlQueryObject.addInsertField("cert_strict_verification", "?");
  470.                         sqlQuery = sqlQueryObject.createSQLInsert();
  471.                         stm = con.prepareStatement(sqlQuery);
  472.                        
  473.                         index = 1;
  474.                         stm.setLong(index++, aSA.getId());
  475.                        
  476.                         String subjectCredenziale = null;
  477.                         if(credenziale!=null && credenziale.getSubject()!=null && !"".equals(credenziale.getSubject()))
  478.                             subjectCredenziale = credenziale.getSubject();
  479.                         stm.setString(index++, (subjectCredenziale != null ? CertificateUtils.formatPrincipal(subjectCredenziale, PrincipalType.SUBJECT) : null));
  480.                         String subjectCredenzialeCN = null;
  481.                         if(credenziale!=null && credenziale.getCnSubject()!=null && !"".equals(credenziale.getCnSubject()))
  482.                             subjectCredenzialeCN = credenziale.getCnSubject();
  483.                         stm.setString(index++, subjectCredenzialeCN);
  484.                        
  485.                         String issuerCredenziale = null;
  486.                         if(credenziale != null && org.openspcoop2.core.config.constants.CredenzialeTipo.APIKEY.equals(credenziale.getTipo())) {
  487.                             stm.setString(index++, CostantiDB.getIssuerApiKey(credenziale.isAppId()));
  488.                         }
  489.                         else {
  490.                             if(credenziale!=null && credenziale.getIssuer()!=null && !"".equals(credenziale.getIssuer()))
  491.                                 issuerCredenziale = credenziale.getIssuer();
  492.                             stm.setString(index++, (issuerCredenziale != null ? CertificateUtils.formatPrincipal(issuerCredenziale, PrincipalType.ISSUER) : null));
  493.                         }
  494.                         String issuerCredenzialeCN = null;
  495.                         if(credenziale!=null && credenziale.getCnIssuer()!=null && !"".equals(credenziale.getCnIssuer()))
  496.                             issuerCredenzialeCN = credenziale.getCnIssuer();
  497.                         stm.setString(index++, issuerCredenzialeCN);
  498.                        
  499.                         byte [] certificateCredenziale = null;
  500.                         if(credenziale!=null && credenziale.getCertificate()!=null) {
  501.                             certificateCredenziale = credenziale.getCertificate();
  502.                         }
  503.                         jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(DriverConfigurazioneDBLib.tipoDB);
  504.                         jdbcAdapter.setBinaryData(stm, index++, certificateCredenziale);
  505.                         if(credenziale!=null && credenziale.isCertificateStrictVerification()) {
  506.                             stm.setInt(index++, CostantiDB.TRUE);
  507.                         }              
  508.                         else {
  509.                             stm.setInt(index++, CostantiDB.FALSE);
  510.                         }
  511.                        
  512.                         stm.executeUpdate();
  513.                         stm.close();
  514.                         n++;
  515.                         DriverConfigurazioneDBLib.logDebug("Aggiunta credenziale al servizioApplicativo "+idServizioApplicativo);
  516.                     }
  517.                 }
  518.                
  519.                 DriverConfigurazioneDBLib.logDebug("Aggiunte " + n + " credenziali al servizioApplicativo "+idServizioApplicativo);
  520.                
  521.                
  522.                 // Proprieta
  523.                 n=0;
  524.                 if(proprieta!=null && !proprieta.isEmpty()){
  525.                     for (int i = 0; i < proprieta.size(); i++) {
  526.                         Proprieta prop = proprieta.get(i);
  527.                        
  528.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  529.                         sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_APPLICATIVI_PROPS);
  530.                         sqlQueryObject.addInsertField("id_servizio_applicativo", "?");
  531.                         sqlQueryObject.addInsertField("nome", "?");
  532.                         sqlQueryObject.addInsertField("valore", "?");
  533.                         sqlQueryObject.addInsertField("enc_value", "?");
  534.                         sqlQuery = sqlQueryObject.createSQLInsert();
  535.                         stm = con.prepareStatement(sqlQuery);
  536.                        
  537.                         int indexP = 1;
  538.                         stm.setLong(indexP++, aSA.getId());
  539.                         stm.setString(indexP++, prop.getNome());
  540.                        
  541.                         String plainValueP = prop.getValore();
  542.                         String encValueP = null;
  543.                         if(driverBYOK!=null && BYOKUtilities.isWrappedValue(plainValueP) ) {
  544.                             BYOKWrappedValue byokValue = driverBYOK.wrap(plainValueP);
  545.                             if(byokValue!=null) {
  546.                                 encValueP = byokValue.getWrappedValue();
  547.                                 plainValueP = byokValue.getWrappedPlainValue();
  548.                             }
  549.                         }
  550.                        
  551.                         stm.setString(indexP++, plainValueP);
  552.                         stm.setString(indexP++, encValueP);
  553.                        
  554.                         stm.executeUpdate();
  555.                         stm.close();
  556.                         n++;
  557.                         DriverConfigurazioneDBLib.logDebug("Aggiunta proprieta' [" + prop.getNome() + "] al servizioApplicativo "+idServizioApplicativo);
  558.                     }
  559.                 }
  560.                
  561.                 DriverConfigurazioneDBLib.logDebug("Aggiunte " + n + " proprieta' al servizioApplicativo "+idServizioApplicativo);
  562.                
  563.                
  564.                 // ProtocolProperties
  565.                 DriverConfigurazioneDBLib.crudProtocolProperty(CostantiDB.CREATE, aSA.getProtocolPropertyList(),
  566.                         idServizioApplicativo, ProprietariProtocolProperty.SERVIZIO_APPLICATIVO, con, DriverConfigurazioneDBLib.tipoDB, driverBYOK);
  567.                
  568.                
  569.                 break;

  570.             case UPDATE:
  571.                 String oldNomeSA = null;
  572.                 String oldNomeProprietario = null;
  573.                 String oldTipoProprietario = null;
  574.                 if(aSA.getOldIDServizioApplicativoForUpdate()!=null){
  575.                     oldNomeSA = aSA.getOldIDServizioApplicativoForUpdate().getNome();
  576.                     if(aSA.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario()!=null){
  577.                         oldNomeProprietario = aSA.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getNome();
  578.                         oldTipoProprietario = aSA.getOldIDServizioApplicativoForUpdate().getIdSoggettoProprietario().getTipo();
  579.                     }
  580.                 }

  581.                 if (oldNomeSA == null || oldNomeSA.equals(""))
  582.                     oldNomeSA = nomeSA;
  583.                 if (oldNomeProprietario == null || oldNomeProprietario.equals(""))
  584.                     oldNomeProprietario = nomeProprietario;
  585.                 if (oldTipoProprietario == null || oldTipoProprietario.equals(""))
  586.                     oldTipoProprietario = tipoProprietario;

  587.                 long oldIdProprietario = DBUtils.getIdSoggetto(oldNomeProprietario, oldTipoProprietario, con, DriverConfigurazioneDBLib.tipoDB,DriverConfigurazioneDBLib.tabellaSoggetti);
  588.                 // Puo' darsi che l'old soggetto e il nuovo soggetto siano la stesso soggetto della tabella. E' stato cambiato il nome.
  589.                 if(oldIdProprietario <=0) {
  590.                     oldIdProprietario = DBUtils.getIdSoggetto(nomeProprietario, tipoProprietario, con, DriverConfigurazioneDBLib.tipoDB,DriverConfigurazioneDBLib.tabellaSoggetti);
  591.                 }
  592.                 if(oldIdProprietario <=0)
  593.                     throw new DriverConfigurazioneException("Impossibile recuperare l'id del Soggetto Proprietario del Servizio Applicativo");
  594.                
  595.                 String utenteUltimaModifica = null;
  596.                 if(aSA.getProprietaOggetto()!=null && aSA.getProprietaOggetto().getUtenteUltimaModifica()!=null) {
  597.                     utenteUltimaModifica = aSA.getProprietaOggetto().getUtenteUltimaModifica();
  598.                 }
  599.                
  600.                 Timestamp dataUltimaModifica = null;
  601.                 if(aSA.getProprietaOggetto()!=null && aSA.getProprietaOggetto().getDataUltimaModifica()!=null) {
  602.                     dataUltimaModifica = new Timestamp(aSA.getProprietaOggetto().getDataUltimaModifica().getTime());
  603.                 }
  604.                 else {
  605.                     dataUltimaModifica = DateManager.getTimestamp();
  606.                 }
  607.                
  608.                
  609.                 // update
  610.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  611.                 sqlQueryObject.addUpdateTable(CostantiDB.SERVIZI_APPLICATIVI);
  612.                 sqlQueryObject.addUpdateField("tipo", "?");
  613.                 sqlQueryObject.addUpdateField("as_client", "?");
  614.                 sqlQueryObject.addUpdateField("descrizione", "?");
  615.                 sqlQueryObject.addUpdateField("sbustamentorisp", "?");
  616.                 sqlQueryObject.addUpdateField("sbustamento_protocol_info_risp", "?");
  617.                 sqlQueryObject.addUpdateField("getmsgrisp", "?");
  618.                 sqlQueryObject.addUpdateField("tipoauthrisp", "?");
  619.                 sqlQueryObject.addUpdateField("utenterisp", "?");
  620.                 sqlQueryObject.addUpdateField("passwordrisp", "?");
  621.                 sqlQueryObject.addUpdateField("enc_passwordrisp", "?");
  622.                 sqlQueryObject.addUpdateField("id_connettore_risp", "?");
  623.                 sqlQueryObject.addUpdateField("sbustamentoinv", "?");
  624.                 sqlQueryObject.addUpdateField("sbustamento_protocol_info_inv", "?");
  625.                 sqlQueryObject.addUpdateField("getmsginv", "?");
  626.                 sqlQueryObject.addUpdateField("tipoauthinv", "?");
  627.                 sqlQueryObject.addUpdateField("utenteinv", "?");
  628.                 sqlQueryObject.addUpdateField("passwordinv", "?");
  629.                 sqlQueryObject.addUpdateField("enc_passwordinv", "?");
  630.                 sqlQueryObject.addUpdateField("id_connettore_inv", "?");
  631.                 sqlQueryObject.addUpdateField("fault", "?");
  632.                 sqlQueryObject.addUpdateField("tipoauth", "?");
  633.                 sqlQueryObject.addUpdateField("utente", "?");
  634.                 sqlQueryObject.addUpdateField("password", "?");
  635.                 sqlQueryObject.addUpdateField("subject", "?");
  636.                 sqlQueryObject.addUpdateField("cn_subject", "?");
  637.                 sqlQueryObject.addUpdateField("issuer", "?");
  638.                 sqlQueryObject.addUpdateField("cn_issuer", "?");
  639.                 sqlQueryObject.addUpdateField("certificate", "?");
  640.                 sqlQueryObject.addUpdateField("cert_strict_verification", "?");
  641.                 sqlQueryObject.addUpdateField("token_policy", "?");
  642.                 sqlQueryObject.addUpdateField("invio_x_rif_inv", "?");
  643.                 sqlQueryObject.addUpdateField("risposta_x_rif_inv", "?");
  644.                 sqlQueryObject.addUpdateField("invio_x_rif", "?");
  645.                 sqlQueryObject.addUpdateField("invio_x_rif_risp", "?");
  646.                 sqlQueryObject.addUpdateField("risposta_x_rif_risp", "?");
  647.                 sqlQueryObject.addUpdateField("sbustamento_protocol_info", "?");
  648.                 sqlQueryObject.addUpdateField("fault_actor", "?");
  649.                 sqlQueryObject.addUpdateField("generic_fault_code", "?");
  650.                 sqlQueryObject.addUpdateField("prefix_fault_code", "?");
  651.                 sqlQueryObject.addUpdateField("nome", "?");
  652.                 sqlQueryObject.addUpdateField("id_soggetto", "?");
  653.                 if(aSA.getRispostaAsincrona()!=null && aSA.getRispostaAsincrona().getGestioneErrore()!=null){
  654.                     sqlQueryObject.addUpdateField("id_gestione_errore_risp", "?");
  655.                 }
  656.                 if(aSA.getInvocazioneServizio()!=null && aSA.getInvocazioneServizio().getGestioneErrore()!=null){
  657.                     sqlQueryObject.addUpdateField("id_gestione_errore_inv", "?");
  658.                 }
  659.                 sqlQueryObject.addUpdateField("tipologia_fruizione", "?");
  660.                 sqlQueryObject.addUpdateField("tipologia_erogazione", "?");
  661.                 if(utenteUltimaModifica!=null) {
  662.                     sqlQueryObject.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_ULTIMA_MODIFICA, "?");
  663.                 }
  664.                 if(dataUltimaModifica!=null) {
  665.                     sqlQueryObject.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_DATA_ULTIMA_MODIFICA, "?");
  666.                 }
  667.                 sqlQueryObject.addWhereCondition("id=?");
  668.                 sqlQueryObject.addWhereCondition("nome=?");
  669.                 sqlQueryObject.addWhereCondition("id_soggetto=?");
  670.                 sqlQueryObject.setANDLogicOperator(true);
  671.                 sqlQuery = sqlQueryObject.createSQLUpdate();
  672.                 stm = con.prepareStatement(sqlQuery);

  673.                 idServizioApplicativo = getIdServizioApplicativo(oldNomeSA, oldTipoProprietario, oldNomeProprietario, con, DriverConfigurazioneDBLib.tipoDB,DriverConfigurazioneDBLib.tabellaSoggetti);
  674.                 // Puo' darsi che l'old soggetto e il nuovo soggetto siano la stesso soggetto della tabella. E' stato cambiato il nome.
  675.                 if(idServizioApplicativo<=0) {
  676.                     idServizioApplicativo = getIdServizioApplicativo(oldNomeSA, tipoProprietario, nomeProprietario, con, DriverConfigurazioneDBLib.tipoDB,DriverConfigurazioneDBLib.tabellaSoggetti);
  677.                 }
  678.                 if (idServizioApplicativo <= 0)
  679.                     throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDServizioApplicativo(UPDATE)] ID del ServizioApplicativo necessario per l'aggiornamento.");
  680.                 // recupero i connettori

  681.                 // connettore risp asinc                
  682.                 RispostaAsincrona rispAsin = aSA.getRispostaAsincrona();
  683.                 connettoreRisp = rispAsin != null ? rispAsin.getConnettore() : new Connettore();
  684.                 String newNomeConnettoreRisp = "ConnettoreRISP_"+nomeSA+"_"+tipoProprietario+nomeProprietario;
  685.                 idConnettoreRisp = DriverConfigurazioneDB_connettoriLIB.getIdConnettoreSARISP(idServizioApplicativo, con);
  686.                
  687.                 // connettore inv servizio
  688.                 InvocazioneServizio invServ = aSA.getInvocazioneServizio();
  689.                 connettoreInv = invServ != null ? invServizio.getConnettore() : new Connettore();
  690.                 String newNomeConnettoreInv = "ConnettoreINV_"+nomeSA+"_"+tipoProprietario+nomeProprietario;
  691.                 idConnettoreInv = DriverConfigurazioneDB_connettoriLIB.getIdConnettoreSAINV(idServizioApplicativo, con);
  692.                
  693.                 //Controllo consistenza degli id dei connettori in quanto devono essere specificati
  694.                 //e quindi maggiori di 0
  695.                 if(idConnettoreInv <=0 || idConnettoreRisp<=0) throw new DriverConfigurazioneException("I connettori del servizio applicativo sono invalidi");
  696.                
  697.                 /*
  698.                  * Problema:
  699.                  *  Se il nuovo connettore e' disabilitato (e il nome del connettore non cambia)
  700.                  *  il valore presente sul db non cambia anche se questo valore e' != da DISABILITATO
  701.                  * Fix:
  702.                  *  I valori del nuovo connettore devono essere sempre aggiornati
  703.                  *  
  704.                  */

  705.                 String nomeConnettoreRisp = DriverConfigurazioneDB_connettoriLIB.getConnettore(idConnettoreRisp, con, null).getNome();
  706.                 String nomeConnettoreInv = DriverConfigurazioneDB_connettoriLIB.getConnettore(idConnettoreInv, con, null).getNome();

  707.                 String pattern = "Aggiorno Connettore [{0}] : id [{1}] oldNome [{2}] newNome [{2}]";

  708.                 DriverConfigurazioneDBLib.logDebug(MessageFormat.format(pattern, "Risposta Asincrona",idConnettoreRisp, nomeConnettoreRisp, newNomeConnettoreRisp));
  709.                 //aggiorno connettore risp
  710.                 connettoreRisp.setNome(newNomeConnettoreRisp);
  711.                 connettoreRisp.setId(idConnettoreRisp);
  712.                 DriverConfigurazioneDB_connettoriLIB.CRUDConnettore(CostantiDB.UPDATE, connettoreRisp, con, driverBYOK);

  713.                 //aggiorno connettore inv
  714.                 DriverConfigurazioneDBLib.logDebug(MessageFormat.format(pattern, "Invocazione Servizio",idConnettoreInv, nomeConnettoreInv, newNomeConnettoreInv));
  715.                 connettoreInv.setNome(newNomeConnettoreInv);
  716.                 connettoreInv.setId(idConnettoreInv);
  717.                 DriverConfigurazioneDB_connettoriLIB.CRUDConnettore(CostantiDB.UPDATE, connettoreInv, con, driverBYOK);


  718.                 // Setto i dati del ServizioApplicativo

  719.                 index = 1;
  720.                
  721.                 stm.setString(index++, tipoSA);
  722.                 stm.setInt(index++, useAsClient);
  723.                 stm.setString(index++, descrizione);

  724.                 // RicezioneRisposta
  725.                 stm.setInt(index++, (ricezione != null && (CostantiConfigurazione.ABILITATO.equals(ricezione.getSbustamentoSoap())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  726.                 stm.setInt(index++, (ricezione != null && (!CostantiConfigurazione.DISABILITATO.equals(ricezione.getSbustamentoInformazioniProtocollo())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  727.                 stm.setString(index++, ricezione != null ? DriverConfigurazioneDBLib.getValue(ricezione.getGetMessage()) : null);
  728.                 // setto credenziali risp
  729.                 credenzialiInvocazione = ricezione != null ? ricezione.getCredenziali() : null;
  730.                 stm.setString(index++, (ricezione != null ? DriverConfigurazioneDBLib.getValue(ricezione.getAutenticazione()) : null));
  731.                 stm.setString(index++, (credenzialiInvocazione != null ? credenzialiInvocazione.getUser() : null));
  732.                
  733.                 plainValue = (credenzialiInvocazione != null ? credenzialiInvocazione.getPassword() : null);
  734.                 encValue = null;
  735.                 if(driverBYOK!=null && plainValue!=null) {
  736.                     BYOKWrappedValue byokValue = driverBYOK.wrap(plainValue);
  737.                     if(byokValue!=null) {
  738.                         encValue = byokValue.getWrappedValue();
  739.                         plainValue = byokValue.getWrappedPlainValue();
  740.                     }
  741.                 }
  742.                 stm.setString(index++, plainValue);
  743.                 stm.setString(index++, encValue);
  744.                
  745.                 // setto idconnettore risp
  746.                 stm.setLong(index++, idConnettoreRisp);

  747.                 // InvocazioneServizio
  748.                 stm.setInt(index++, (invServizio != null && (CostantiConfigurazione.ABILITATO.equals(invServizio.getSbustamentoSoap())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  749.                 stm.setInt(index++, (invServizio != null && (!CostantiConfigurazione.DISABILITATO.equals(invServizio.getSbustamentoInformazioniProtocollo())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  750.                 stm.setString(index++, invServizio != null ? DriverConfigurazioneDBLib.getValue(invServizio.getGetMessage()) : null);
  751.                 // setto credenziali inv
  752.                 credenzialiInvocazione = invServizio != null ? invServizio.getCredenziali() : null;
  753.                 stm.setString(index++, (invServizio != null ? DriverConfigurazioneDBLib.getValue(invServizio.getAutenticazione()) : null));
  754.                 stm.setString(index++, (credenzialiInvocazione != null ? credenzialiInvocazione.getUser() : null));
  755.                
  756.                 plainValue = (credenzialiInvocazione != null ? credenzialiInvocazione.getPassword() : null);
  757.                 encValue = null;
  758.                 if(driverBYOK!=null && plainValue!=null) {
  759.                     BYOKWrappedValue byokValue = driverBYOK.wrap(plainValue);
  760.                     if(byokValue!=null) {
  761.                         encValue = byokValue.getWrappedValue();
  762.                         plainValue = byokValue.getWrappedPlainValue();
  763.                     }
  764.                 }
  765.                 stm.setString(index++, plainValue);
  766.                 stm.setString(index++, encValue);
  767.                
  768.                 // setto idconnettore inv
  769.                 stm.setLong(index++, idConnettoreInv);

  770.                 // InvocazionePorta
  771.                 gestErr = invPorta != null ? invPorta.getGestioneErrore() : null;
  772.                 fault = (gestErr != null ? DriverConfigurazioneDBLib.getValue(gestErr.getFault()) : null);
  773.                 stm.setString(index++, fault);
  774.                 // setto credenziali invocaizone porta
  775.                 // per il momento c'e' soltato una credenziale,quindi un solo
  776.                 // oggetto nella lista
  777.                 credenzialiInvocazionePorta = (invPorta != null && invPorta.sizeCredenzialiList() > 0 ? invPorta.getCredenziali(0) : null);
  778.                 stm.setString(index++, (credenzialiInvocazionePorta != null ? DriverConfigurazioneDBLib.getValue(credenzialiInvocazionePorta.getTipo()) : null));
  779.                 stm.setString(index++, (credenzialiInvocazionePorta != null ? credenzialiInvocazionePorta.getUser() : null));
  780.                 stm.setString(index++, (credenzialiInvocazionePorta != null ? credenzialiInvocazionePorta.getPassword() : null));
  781.                
  782.                 subject = null;
  783.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getSubject()!=null && !"".equals(credenzialiInvocazionePorta.getSubject()))
  784.                     subject = credenzialiInvocazionePorta.getSubject();
  785.                 stm.setString(index++, (subject != null ? CertificateUtils.formatPrincipal(subject, PrincipalType.SUBJECT) : null));
  786.                 subjectCN = null;
  787.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getCnSubject()!=null && !"".equals(credenzialiInvocazionePorta.getCnSubject()))
  788.                     subjectCN = credenzialiInvocazionePorta.getCnSubject();
  789.                 stm.setString(index++, subjectCN);
  790.                
  791.                 issuer = null;
  792.                 if(credenzialiInvocazionePorta != null && org.openspcoop2.core.config.constants.CredenzialeTipo.APIKEY.equals(credenzialiInvocazionePorta.getTipo())) {
  793.                     stm.setString(index++, CostantiDB.getIssuerApiKey(credenzialiInvocazionePorta.isAppId()));
  794.                 }
  795.                 else {
  796.                     if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getIssuer()!=null && !"".equals(credenzialiInvocazionePorta.getIssuer()))
  797.                         issuer = credenzialiInvocazionePorta.getIssuer();
  798.                     stm.setString(index++, (issuer != null ? CertificateUtils.formatPrincipal(issuer, PrincipalType.ISSUER) : null));
  799.                 }
  800.                 issuerCN = null;
  801.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getCnIssuer()!=null && !"".equals(credenzialiInvocazionePorta.getCnIssuer()))
  802.                     issuerCN = credenzialiInvocazionePorta.getCnIssuer();
  803.                 stm.setString(index++, issuerCN);
  804.                
  805.                 certificate = null;
  806.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.getCertificate()!=null) {
  807.                     certificate = credenzialiInvocazionePorta.getCertificate();
  808.                 }
  809.                 jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(DriverConfigurazioneDBLib.tipoDB);
  810.                 jdbcAdapter.setBinaryData(stm, index++, certificate);
  811.                 if(credenzialiInvocazionePorta!=null && credenzialiInvocazionePorta.isCertificateStrictVerification()) {
  812.                     stm.setInt(index++, CostantiDB.TRUE);
  813.                 }              
  814.                 else {
  815.                     stm.setInt(index++, CostantiDB.FALSE);
  816.                 }
  817.                
  818.                 stm.setString(index++, credenzialiInvocazionePorta!=null ? credenzialiInvocazionePorta.getTokenPolicy() : null);

  819.                 // aggiungo gestione invio/risposta per riferimento
  820.                 // invocazione servizio
  821.                 stm.setString(index++, invServizio != null ? DriverConfigurazioneDBLib.getValue(invServizio.getInvioPerRiferimento()) : null);
  822.                 stm.setString(index++, invServizio != null ? DriverConfigurazioneDBLib.getValue(invServizio.getRispostaPerRiferimento()) : null);
  823.                 // invocazione porta
  824.                 stm.setString(index++, invPorta != null ? DriverConfigurazioneDBLib.getValue(invPorta.getInvioPerRiferimento()) : null);
  825.                 // ricezione risposta
  826.                 stm.setString(index++, ricezione != null ? DriverConfigurazioneDBLib.getValue(ricezione.getInvioPerRiferimento()) : null);
  827.                 stm.setString(index++, ricezione != null ? DriverConfigurazioneDBLib.getValue(ricezione.getRispostaPerRiferimento()) : null);
  828.                 // protocol info
  829.                 stm.setInt(index++, (invPorta != null && (!CostantiConfigurazione.DISABILITATO.equals(invPorta.getSbustamentoInformazioniProtocollo())) ? CostantiDB.TRUE : CostantiDB.FALSE));
  830.                 //Invocazione Porta : fault_actor, generic_fault_code, prefix_fault_code
  831.                 stm.setString(index++, gestErr!=null ? gestErr.getFaultActor() : null);
  832.                 stm.setString(index++, gestErr!=null ? DriverConfigurazioneDBLib.getValue(gestErr.getGenericFaultCode()) : null);
  833.                 stm.setString(index++, gestErr!=null ? gestErr.getPrefixFaultCode() : null);
  834.                 //Aggiorno nome servizio applicativo
  835.                 stm.setString(index++, nomeSA);
  836.                 //Aggiorno il proprietario
  837.                 stm.setLong(index++, idProprietario<0 ? oldIdProprietario : idProprietario);

  838.                 // GestioneErrore risposta asincrona
  839.                 if(aSA.getRispostaAsincrona() !=null && aSA.getRispostaAsincrona().getGestioneErrore()!=null){
  840.                     DriverConfigurazioneDB_gestioneErroreLIB.CRUDGestioneErroreServizioApplicativo(CostantiDB.UPDATE,
  841.                             aSA.getRispostaAsincrona().getGestioneErrore(), idProprietario, idServizioApplicativo, false, con);
  842.                     stm.setLong(index++, aSA.getRispostaAsincrona().getGestioneErrore().getId());
  843.                 }
  844.                 //  GestioneErrore invocazione servizio
  845.                 if(aSA.getInvocazioneServizio() !=null && aSA.getInvocazioneServizio().getGestioneErrore()!=null){
  846.                     DriverConfigurazioneDB_gestioneErroreLIB.CRUDGestioneErroreServizioApplicativo(CostantiDB.UPDATE,
  847.                             aSA.getInvocazioneServizio().getGestioneErrore(), idProprietario, idServizioApplicativo, true, con);
  848.                     stm.setLong(index++, aSA.getInvocazioneServizio().getGestioneErrore().getId());
  849.                 }
  850.                
  851.                 //tipologia erogazione/fruizione
  852.                 stm.setString(index++, aSA.getTipologiaFruizione()!=null ? TipologiaFruizione.valueOf(aSA.getTipologiaFruizione().toUpperCase()).toString() : TipologiaFruizione.DISABILITATO.toString());
  853.                 stm.setString(index++, aSA.getTipologiaErogazione()!=null ? TipologiaErogazione.valueOf(aSA.getTipologiaErogazione().toUpperCase()).toString() : TipologiaErogazione.DISABILITATO.toString());
  854.                
  855.                 if(utenteUltimaModifica!=null) {
  856.                     stm.setString(index++, utenteUltimaModifica);
  857.                 }
  858.                
  859.                 if(dataUltimaModifica!=null) {
  860.                     stm.setTimestamp(index++, dataUltimaModifica);
  861.                 }
  862.                
  863.                 // where
  864.                 stm.setLong(index++, idServizioApplicativo);
  865.                 stm.setString(index++, oldNomeSA);
  866.                 stm.setLong(index++, oldIdProprietario);

  867.                 n = stm.executeUpdate();
  868.                 stm.close();
  869.                 DriverConfigurazioneDBLib.logDebug("Updated " + n + " row(s)");

  870.                
  871.                
  872.                 // Ruoli
  873.                
  874.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  875.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_APPLICATIVI_RUOLI);
  876.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  877.                 sqlQuery = sqlQueryObject.createSQLDelete();
  878.                 stm = con.prepareStatement(sqlQuery);
  879.                 stm.setLong(1, aSA.getId());
  880.                 n=stm.executeUpdate();
  881.                 stm.close();
  882.                 DriverConfigurazioneDBLib.logDebug("Cancellati "+n+" ruoli associati al servizioApplicativo "+idServizioApplicativo);
  883.                
  884.                 n=0;
  885.                 if(invPorta!=null && invPorta.getRuoli()!=null && invPorta.getRuoli().sizeRuoloList()>0){
  886.                     for (int i = 0; i < invPorta.getRuoli().sizeRuoloList(); i++) {
  887.                         Ruolo ruolo = invPorta.getRuoli().getRuolo(i);
  888.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  889.                         sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_APPLICATIVI_RUOLI);
  890.                         sqlQueryObject.addInsertField("id_servizio_applicativo", "?");
  891.                         sqlQueryObject.addInsertField("ruolo", "?");
  892.                         sqlQuery = sqlQueryObject.createSQLInsert();
  893.                         stm = con.prepareStatement(sqlQuery);
  894.                         stm.setLong(1, aSA.getId());
  895.                         stm.setString(2, ruolo.getNome());
  896.                         stm.executeUpdate();
  897.                         stm.close();
  898.                         n++;
  899.                         DriverConfigurazioneDBLib.logDebug("Aggiunto ruolo[" + ruolo.getNome() + "] al servizioApplicativo "+idServizioApplicativo);
  900.                     }
  901.                 }
  902.                
  903.                 DriverConfigurazioneDBLib.logDebug("Aggiunti " + n + " ruoli al servizioApplicativo "+idServizioApplicativo);
  904.                
  905.                
  906.                
  907.                
  908.                
  909.                
  910.                
  911.                 // Credenziali  (le credenziali in questa tabella partono dal numero maggiore di 1)
  912.                
  913.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  914.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  915.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  916.                 sqlQuery = sqlQueryObject.createSQLDelete();
  917.                 stm = con.prepareStatement(sqlQuery);
  918.                 stm.setLong(1, aSA.getId());
  919.                 n=stm.executeUpdate();
  920.                 stm.close();
  921.                 DriverConfigurazioneDBLib.logDebug("Cancellate "+n+" credenziali associate al servizioApplicativo "+idServizioApplicativo);
  922.                
  923.                 n=0;
  924.                 if(invPorta!=null && invPorta.sizeCredenzialiList()>1){
  925.                     for (int i = 1; i < invPorta.sizeCredenzialiList(); i++) {
  926.                         Credenziali credenziale = invPorta.getCredenziali(i);
  927.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  928.                         sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  929.                         sqlQueryObject.addInsertField("id_servizio_applicativo", "?");
  930.                         sqlQueryObject.addInsertField("subject", "?");
  931.                         sqlQueryObject.addInsertField("cn_subject", "?");
  932.                         sqlQueryObject.addInsertField("issuer", "?");
  933.                         sqlQueryObject.addInsertField("cn_issuer", "?");
  934.                         sqlQueryObject.addInsertField("certificate", "?");
  935.                         sqlQueryObject.addInsertField("cert_strict_verification", "?");
  936.                         sqlQuery = sqlQueryObject.createSQLInsert();
  937.                         stm = con.prepareStatement(sqlQuery);
  938.                        
  939.                         index = 1;
  940.                         stm.setLong(index++, aSA.getId());
  941.                        
  942.                         String subjectCredenziale = null;
  943.                         if(credenziale!=null && credenziale.getSubject()!=null && !"".equals(credenziale.getSubject()))
  944.                             subjectCredenziale = credenziale.getSubject();
  945.                         stm.setString(index++, (subjectCredenziale != null ? CertificateUtils.formatPrincipal(subjectCredenziale, PrincipalType.SUBJECT) : null));
  946.                         String subjectCredenzialeCN = null;
  947.                         if(credenziale!=null && credenziale.getCnSubject()!=null && !"".equals(credenziale.getCnSubject()))
  948.                             subjectCredenzialeCN = credenziale.getCnSubject();
  949.                         stm.setString(index++, subjectCredenzialeCN);
  950.                        
  951.                         String issuerCredenziale = null;
  952.                         if(credenziale != null && org.openspcoop2.core.config.constants.CredenzialeTipo.APIKEY.equals(credenziale.getTipo())) {
  953.                             stm.setString(index++, CostantiDB.getIssuerApiKey(credenziale.isAppId()));
  954.                         }
  955.                         else {
  956.                             if(credenziale!=null && credenziale.getIssuer()!=null && !"".equals(credenziale.getIssuer()))
  957.                                 issuerCredenziale = credenziale.getIssuer();
  958.                             stm.setString(index++, (issuerCredenziale != null ? CertificateUtils.formatPrincipal(issuerCredenziale, PrincipalType.ISSUER) : null));
  959.                         }
  960.                         String issuerCredenzialeCN = null;
  961.                         if(credenziale!=null && credenziale.getCnIssuer()!=null && !"".equals(credenziale.getCnIssuer()))
  962.                             issuerCredenzialeCN = credenziale.getCnIssuer();
  963.                         stm.setString(index++, issuerCredenzialeCN);
  964.                        
  965.                         byte [] certificateCredenziale = null;
  966.                         if(credenziale!=null && credenziale.getCertificate()!=null) {
  967.                             certificateCredenziale = credenziale.getCertificate();
  968.                         }
  969.                         jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(DriverConfigurazioneDBLib.tipoDB);
  970.                         jdbcAdapter.setBinaryData(stm, index++, certificateCredenziale);
  971.                         if(credenziale!=null && credenziale.isCertificateStrictVerification()) {
  972.                             stm.setInt(index++, CostantiDB.TRUE);
  973.                         }              
  974.                         else {
  975.                             stm.setInt(index++, CostantiDB.FALSE);
  976.                         }
  977.                        
  978.                         stm.executeUpdate();
  979.                         stm.close();
  980.                         n++;
  981.                         DriverConfigurazioneDBLib.logDebug("Aggiunta credenziale al servizioApplicativo "+idServizioApplicativo);
  982.                     }
  983.                 }
  984.                
  985.                 DriverConfigurazioneDBLib.logDebug("Aggiunte " + n + " credenziali al servizioApplicativo "+idServizioApplicativo);
  986.                
  987.                
  988.                
  989.                 // Proprieta
  990.                
  991.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  992.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_APPLICATIVI_PROPS);
  993.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  994.                 sqlQuery = sqlQueryObject.createSQLDelete();
  995.                 stm = con.prepareStatement(sqlQuery);
  996.                 stm.setLong(1, aSA.getId());
  997.                 n=stm.executeUpdate();
  998.                 stm.close();
  999.                 DriverConfigurazioneDBLib.logDebug("Cancellate "+n+" proprieta' associate al servizioApplicativo "+idServizioApplicativo);
  1000.                
  1001.                 n=0;
  1002.                 if(proprieta!=null && !proprieta.isEmpty()){
  1003.                     for (int i = 0; i < proprieta.size(); i++) {
  1004.                         Proprieta prop = proprieta.get(i);
  1005.                        
  1006.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  1007.                         sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_APPLICATIVI_PROPS);
  1008.                         sqlQueryObject.addInsertField("id_servizio_applicativo", "?");
  1009.                         sqlQueryObject.addInsertField("nome", "?");
  1010.                         sqlQueryObject.addInsertField("valore", "?");
  1011.                         sqlQueryObject.addInsertField("enc_value", "?");
  1012.                         sqlQuery = sqlQueryObject.createSQLInsert();
  1013.                         stm = con.prepareStatement(sqlQuery);
  1014.                        
  1015.                         int indexP = 1;
  1016.                         stm.setLong(indexP++, aSA.getId());
  1017.                         stm.setString(indexP++, prop.getNome());
  1018.                        
  1019.                         String plainValueP = prop.getValore();
  1020.                         String encValueP = null;
  1021.                         if(driverBYOK!=null && BYOKUtilities.isWrappedValue(plainValueP) ) {
  1022.                             BYOKWrappedValue byokValue = driverBYOK.wrap(plainValueP);
  1023.                             if(byokValue!=null) {
  1024.                                 encValueP = byokValue.getWrappedValue();
  1025.                                 plainValueP = byokValue.getWrappedPlainValue();
  1026.                             }
  1027.                         }
  1028.                        
  1029.                         stm.setString(indexP++, plainValueP);
  1030.                         stm.setString(indexP++, encValueP);
  1031.                        
  1032.                         stm.executeUpdate();
  1033.                         stm.close();
  1034.                         n++;
  1035.                         DriverConfigurazioneDBLib.logDebug("Aggiunta proprieta' [" + prop.getNome() + "] al servizioApplicativo "+idServizioApplicativo);
  1036.                     }
  1037.                 }
  1038.                
  1039.                 DriverConfigurazioneDBLib.logDebug("Aggiunte " + n + " proprieta' al servizioApplicativo "+idServizioApplicativo);
  1040.                
  1041.                
  1042.                
  1043.                
  1044.                 // ProtocolProperties
  1045.                 DriverConfigurazioneDBLib.crudProtocolProperty(CostantiDB.UPDATE, aSA.getProtocolPropertyList(),
  1046.                         idServizioApplicativo, ProprietariProtocolProperty.SERVIZIO_APPLICATIVO, con, DriverConfigurazioneDBLib.tipoDB, driverBYOK);
  1047.                
  1048.                 break;

  1049.             case DELETE:
  1050.                 // delete
  1051.                 /** if(aSA.getId()==null || aSA.getId()<=0) throw new
  1052.                 // DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDServizioApplicativo(DELETE)]
  1053.                 // id del ServizioApplicativo non valida.");*/

  1054.                 DriverConfigurazioneDBLib.logDebug("get ID Servizio Applicativo con nome["+nomeSA+"] tipoProprietario["+tipoProprietario+"] nomeProprietario["+nomeProprietario+"]");
  1055.                 idServizioApplicativo = getIdServizioApplicativo(nomeSA, tipoProprietario, nomeProprietario, con, DriverConfigurazioneDBLib.tipoDB,DriverConfigurazioneDBLib.tabellaSoggetti);
  1056.                 DriverConfigurazioneDBLib.logDebug("get ID Servizio Applicativo: "+idServizioApplicativo);

  1057.                 // ProtocolProperties
  1058.                 DriverConfigurazioneDBLib.crudProtocolProperty(CostantiDB.DELETE, null,
  1059.                         idServizioApplicativo, ProprietariProtocolProperty.SERVIZIO_APPLICATIVO, con, DriverConfigurazioneDBLib.tipoDB, driverBYOK);
  1060.                
  1061.                 // proprieta'
  1062.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  1063.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_APPLICATIVI_PROPS);
  1064.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1065.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1066.                 stm = con.prepareStatement(sqlQuery);
  1067.                 stm.setLong(1, idServizioApplicativo);
  1068.                 n=stm.executeUpdate();
  1069.                 stm.close();
  1070.                 if (n > 0)
  1071.                     DriverConfigurazioneDBLib.logDebug("Deleted " + n + " proprieta' associate al ServizioApplicativo[" + idServizioApplicativo + "]");
  1072.                
  1073.                 // credenziali
  1074.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  1075.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_APPLICATIVI_CREDENZIALI);
  1076.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1077.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1078.                 stm = con.prepareStatement(sqlQuery);
  1079.                 stm.setLong(1, idServizioApplicativo);
  1080.                 n=stm.executeUpdate();
  1081.                 stm.close();
  1082.                 if (n > 0)
  1083.                     DriverConfigurazioneDBLib.logDebug("Deleted " + n + " credenziali associate al ServizioApplicativo[" + idServizioApplicativo + "]");
  1084.                
  1085.                 // ruoli
  1086.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  1087.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_APPLICATIVI_RUOLI);
  1088.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1089.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1090.                 stm = con.prepareStatement(sqlQuery);
  1091.                 stm.setLong(1, idServizioApplicativo);
  1092.                 n=stm.executeUpdate();
  1093.                 stm.close();
  1094.                 if (n > 0)
  1095.                     DriverConfigurazioneDBLib.logDebug("Deleted " + n + " ruoli associati al ServizioApplicativo[" + idServizioApplicativo + "]");
  1096.                
  1097.                 /*
  1098.                  * BUG Devo prima eliminare l'associazione
  1099.                  */
  1100.                 /**
  1101.                 // cancello anche le associazioni delle porteapplicative
  1102.                 // associate a questo servizio
  1103.                 // serviziapplicativi
  1104.                
  1105.                 List<Long> idsPA_SA = new ArrayList<>();
  1106.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDB_LIB.tipoDB);
  1107.                 sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE_SA);
  1108.                 sqlQueryObject.addSelectField("id");
  1109.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1110.                 sqlQueryObject.setANDLogicOperator(true);
  1111.                 sqlQuery = sqlQueryObject.createSQLQuery();
  1112.                 stm = con.prepareStatement(sqlQuery);
  1113.                 stm.setLong(1, idServizioApplicativo);
  1114.                 rs = stm.executeQuery();
  1115.                 while(rs.next()) {
  1116.                     idsPA_SA.add(rs.getLong("id"));
  1117.                 }
  1118.                 rs.close();
  1119.                 stm.close();
  1120.                
  1121.                 if(!idsPA_SA.isEmpty()) {
  1122.                     for (Long idsapa : idsPA_SA) {
  1123.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDB_LIB.tipoDB);
  1124.                         sqlQueryObject.addDeleteTable(CostantiDB.PORTE_APPLICATIVE_SA_PROPS);
  1125.                         sqlQueryObject.addWhereCondition("id_porta=?");
  1126.                         sqlQuery = sqlQueryObject.createSQLDelete();
  1127.                         stm = con.prepareStatement(sqlQuery);
  1128.                         stm.setLong(1, idsapa);
  1129.                         n=stm.executeUpdate();
  1130.                         stm.close();
  1131.                         DriverConfigurazioneDB_LIB.logDebug("Eliminate "+n+" proprieta relative all'associazione '"+idsapa+"' (SA "+idServizioApplicativo+")");
  1132.                     }
  1133.                 }
  1134.                
  1135.                 DriverConfigurazioneDB_LIB.logDebug("Deleted PA associazioni...");
  1136.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDB_LIB.tipoDB);
  1137.                 sqlQueryObject.addDeleteTable(CostantiDB.PORTE_APPLICATIVE_SA);
  1138.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1139.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1140.                 stm = con.prepareStatement(sqlQuery);
  1141.                 stm.setLong(1, idServizioApplicativo);
  1142.                 n=stm.executeUpdate();
  1143.                 stm.close();
  1144.                 if (n > 0)
  1145.                     DriverConfigurazioneDB_LIB.logDebug("Deleted " + n + " associazioni di PortaApplicativa<->ServizioApplicativo associate al ServizioApplicativo[" + idServizioApplicativo + "]");

  1146.                 // faccio lo stesso per le portedelegate
  1147.                 DriverConfigurazioneDB_LIB.logDebug("Deleted PD associazioni...");
  1148.                 DriverConfigurazioneDB_LIB.logDebug("Deleted PA associazioni...");
  1149.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDB_LIB.tipoDB);
  1150.                 sqlQueryObject.addDeleteTable(CostantiDB.PORTE_DELEGATE_SA);
  1151.                 sqlQueryObject.addWhereCondition("id_servizio_applicativo=?");
  1152.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1153.                 stm = con.prepareStatement(sqlQuery);
  1154.                 stm.setLong(1, idServizioApplicativo);
  1155.                 n=stm.executeUpdate();
  1156.                 stm.close();
  1157.                 if (n > 0)
  1158.                     DriverConfigurazioneDB_LIB.logDebug("Deleted " + n + " associazioni di PortaDelegata<->ServizioApplicativo associate al ServizioApplicativo[" + idServizioApplicativo + "]");
  1159.                  */


  1160.                 DriverConfigurazioneDBLib.logDebug("Deleted ...");
  1161.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  1162.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_APPLICATIVI);
  1163.                 sqlQueryObject.addWhereCondition("id=?");
  1164.                 sqlQueryObject.addWhereCondition("nome=?");
  1165.                 sqlQueryObject.addWhereCondition("id_soggetto=?");
  1166.                 sqlQueryObject.setANDLogicOperator(true);
  1167.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1168.                 stm = con.prepareStatement(sqlQuery);
  1169.                 stm.setLong(1, idServizioApplicativo);
  1170.                 stm.setString(2, nomeSA);
  1171.                 stm.setLong(3, idProprietario);
  1172.                 DriverConfigurazioneDBLib.logDebug("eseguo query : " + DBUtils.formatSQLString(sqlQuery, idServizioApplicativo,nomeSA,idProprietario));
  1173.                 n=stm.executeUpdate();
  1174.                 stm.close();
  1175.                 DriverConfigurazioneDBLib.logDebug("Deleted " + n + " row(s)");


  1176.                 //cancello i connettori

  1177.                 // Connettore asincrono
  1178.                 DriverConfigurazioneDBLib.logDebug("Recupero connettore asincrono ...");
  1179.                 if(aSA.getRispostaAsincrona()!=null && aSA.getRispostaAsincrona().getConnettore()!=null){
  1180.                     connettoreRisp=aSA.getRispostaAsincrona().getConnettore();
  1181.                 }else{
  1182.                     connettoreRisp = new Connettore();
  1183.                     connettoreRisp.setTipo(TipiConnettore.DISABILITATO.getNome());
  1184.                 }
  1185.                 nomeConnettoreRisp = "ConnettoreRISP_" + aSA.getNome()+"_"+aSA.getTipoSoggettoProprietario()+aSA.getNomeSoggettoProprietario();
  1186.                 connettoreRisp.setNome(nomeConnettoreRisp);
  1187.                 idConnettoreRisp = DBUtils.getIdConnettore(nomeConnettoreRisp, con, DriverConfigurazioneDBLib.tipoDB);
  1188.                 DriverConfigurazioneDBLib.logDebug("Recupero connettore asincrono id["+idConnettoreRisp+"]");
  1189.                 connettoreRisp.setId(idConnettoreRisp);


  1190.                 // Connettore inv servizio
  1191.                 DriverConfigurazioneDBLib.logDebug("Recupero connettore invocazione servizio ...");
  1192.                 if(aSA.getInvocazioneServizio()!=null && aSA.getInvocazioneServizio().getConnettore()!=null){
  1193.                     connettoreInv=aSA.getInvocazioneServizio().getConnettore();
  1194.                 }else{
  1195.                     connettoreInv = new Connettore();
  1196.                     connettoreInv.setTipo(TipiConnettore.DISABILITATO.getNome());
  1197.                 }
  1198.                 nomeConnettoreInv = "ConnettoreINV_" + aSA.getNome()+"_"+aSA.getTipoSoggettoProprietario()+aSA.getNomeSoggettoProprietario();
  1199.                 connettoreInv.setNome(nomeConnettoreInv);
  1200.                 idConnettoreInv = DBUtils.getIdConnettore(nomeConnettoreInv, con, DriverConfigurazioneDBLib.tipoDB);
  1201.                 DriverConfigurazioneDBLib.logDebug("Recupero connettore invocazione servizio id["+idConnettoreInv+"]");
  1202.                 connettoreInv.setId(idConnettoreInv);


  1203.                 //Controllo consistenza degli id dei connettori in quanto devono essere specificati
  1204.                 //e quindi maggiori di 0
  1205.                 if(idConnettoreInv <=0 || idConnettoreRisp<=0) throw new DriverConfigurazioneException("I connettori del servizio applicativo sono invalidi");

  1206.                 // se il connettore e' abilitato allora propago le modifiche al
  1207.                 // connettore
  1208.                 DriverConfigurazioneDBLib.logDebug("Delete connettore asincrono ...");
  1209.                 DriverConfigurazioneDB_connettoriLIB.CRUDConnettore(CostantiDB.DELETE, connettoreRisp, con, driverBYOK);
  1210.                 DriverConfigurazioneDBLib.logDebug("Delete connettore invocazione servizio ...");
  1211.                 DriverConfigurazioneDB_connettoriLIB.CRUDConnettore(CostantiDB.DELETE, connettoreInv, con, driverBYOK);

  1212.                
  1213.                 // Delete gestione errore risposta asincrona
  1214.                 if(aSA.getRispostaAsincrona() !=null && aSA.getRispostaAsincrona().getGestioneErrore()!=null){
  1215.                     DriverConfigurazioneDB_gestioneErroreLIB.CRUDGestioneErroreServizioApplicativo(CostantiDB.DELETE,
  1216.                             aSA.getRispostaAsincrona().getGestioneErrore(), idProprietario, idServizioApplicativo, false, con);
  1217.                 }
  1218.                
  1219.                
  1220.                 // Delete gestione errore invocazione servizio
  1221.                 if(aSA.getInvocazioneServizio() !=null && aSA.getInvocazioneServizio().getGestioneErrore()!=null){
  1222.                     DriverConfigurazioneDB_gestioneErroreLIB.CRUDGestioneErroreServizioApplicativo(CostantiDB.DELETE,
  1223.                             aSA.getInvocazioneServizio().getGestioneErrore(), idProprietario, idServizioApplicativo, true, con);
  1224.                 }
  1225.                

  1226.                 break;

  1227.             }

  1228.             return idServizioApplicativo;
  1229.         } catch (DriverConfigurazioneException e) {
  1230.             throw e;
  1231.         } catch (SQLException se) {
  1232.             throw new DriverConfigurazioneException("SQLException : " + se.getMessage(),se);
  1233.         } catch (Exception se) {
  1234.             throw new DriverConfigurazioneException("Exception : " + se.getMessage(),se);
  1235.         } finally {
  1236.             //Chiudo statement and resultset
  1237.             JDBCUtilities.closeResources(rs, stmQuery);
  1238.             JDBCUtilities.closeResources(stm);
  1239.             JDBCUtilities.closeResources(stm2);
  1240.         }
  1241.     }

  1242.    
  1243.    
  1244.    
  1245.     public static long getIdServizioApplicativo(String nomeServizioApplicativo, String tipoProprietario,String nomeProprietario,
  1246.             Connection con, String tipoDB) throws CoreException
  1247.     {
  1248.         return getIdServizioApplicativo(nomeServizioApplicativo, tipoProprietario, nomeProprietario, con, tipoDB, CostantiDB.SOGGETTI);
  1249.     }
  1250.     public static long getIdServizioApplicativo(String nomeServizioApplicativo, String tipoProprietario,String nomeProprietario,
  1251.             Connection con, String tipoDB,String tabellaSoggetti) throws CoreException
  1252.     {
  1253.         PreparedStatement stm = null;
  1254.         ResultSet rs = null;
  1255.         long idSoggetto;
  1256.         long idServizioApplicativo=-1;

  1257.         try
  1258.         {
  1259.             idSoggetto = DBUtils.getIdSoggetto(nomeProprietario, tipoProprietario, con, tipoDB,tabellaSoggetti);

  1260.             //recupero l'id della porta applicativa appena inserita
  1261.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
  1262.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  1263.             sqlQueryObject.addSelectField("id");
  1264.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  1265.             sqlQueryObject.addWhereCondition("nome = ?");
  1266.             sqlQueryObject.setANDLogicOperator(true);
  1267.             String sqlQuery = sqlQueryObject.createSQLQuery();
  1268.             stm=con.prepareStatement(sqlQuery);
  1269.             stm.setLong(1, idSoggetto);
  1270.             stm.setString(2, nomeServizioApplicativo);

  1271.             rs=stm.executeQuery();

  1272.             if(rs.next())
  1273.             {
  1274.                 idServizioApplicativo=rs.getLong("id");
  1275.             }
  1276.             return idServizioApplicativo;
  1277.         }catch (Exception e) {
  1278.             throw new CoreException(e);
  1279.         }finally
  1280.         {
  1281.             //Chiudo statement and resultset
  1282.             JDBCUtilities.closeResources(rs, stm);

  1283.         }
  1284.     }
  1285.    
  1286. }