DriverRegistroServiziDB_accordiParteSpecificaLIB.java

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



  20. package org.openspcoop2.core.registry.driver.db;

  21. import 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.util.ArrayList;
  30. import java.util.List;

  31. import org.openspcoop2.core.byok.IDriverBYOK;
  32. import org.openspcoop2.core.commons.CoreException;
  33. import org.openspcoop2.core.commons.DBUtils;
  34. import org.openspcoop2.core.constants.CostantiDB;
  35. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  36. import org.openspcoop2.core.id.IDAccordo;
  37. import org.openspcoop2.core.id.IDServizio;
  38. import org.openspcoop2.core.id.IDSoggetto;
  39. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  40. import org.openspcoop2.core.registry.ConfigurazioneServizioAzione;
  41. import org.openspcoop2.core.registry.Connettore;
  42. import org.openspcoop2.core.registry.Documento;
  43. import org.openspcoop2.core.registry.Fruitore;
  44. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  45. import org.openspcoop2.core.registry.constants.ProprietariDocumento;
  46. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  47. import org.openspcoop2.core.registry.constants.StatoFunzionalita;
  48. import org.openspcoop2.core.registry.constants.TipologiaServizio;
  49. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  50. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  51. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  52. import org.openspcoop2.utils.date.DateManager;
  53. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  54. import org.openspcoop2.utils.sql.ISQLQueryObject;
  55. import org.openspcoop2.utils.sql.SQLObjectFactory;

  56. /**
  57.  * Classe utilizzata per effettuare query ad un registro dei servizi openspcoop
  58.  * formato db.
  59.  *
  60.  *
  61.  * @author Sandra Giangrandi (sandra@link.it)
  62.  * @author Stefano Corallo (corallo@link.it)
  63.  * @author $Author$
  64.  * @version $Rev$, $Date$
  65.  */
  66. public class DriverRegistroServiziDB_accordiParteSpecificaLIB {
  67.    
  68.     /**
  69.      * CRUD oggetto AccordoServizioParteSpecifica Non si occupa di chiudere la connessione con
  70.      * il db in caso di errore in quanto verra' gestita dal metodo chiamante
  71.      *
  72.      * @param type
  73.      *            Tipo operazione {1 (CREATE),2 (UPDATE),3 (DELETE)}
  74.      * @param asps
  75.      * @param con
  76.      * @throws DriverRegistroServiziException
  77.      */
  78.     public static long CRUDAccordoServizioParteSpecifica(int type, org.openspcoop2.core.registry.AccordoServizioParteSpecifica asps, Connection con,
  79.             String tipoDatabase, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {
  80.         if (asps == null)
  81.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] asps non valido.");

  82.         String nomeProprietario = asps.getNomeSoggettoErogatore();
  83.         String tipoProprietario = asps.getTipoSoggettoErogatore();
  84.         String nomeServizio = asps.getNome();
  85.         String tipoServizio = asps.getTipo();
  86.         Integer versioneServizio = asps.getVersione();
  87.         String descrizione = asps.getDescrizione();
  88.         String stato = asps.getStatoPackage();

  89.         if (nomeProprietario == null || nomeProprietario.equals(""))
  90.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Parametro Nome Proprietario non valido.");
  91.         if (tipoProprietario == null || tipoProprietario.equals(""))
  92.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Parametro Tipo Proprietario non valido.");
  93.         if (nomeServizio == null || nomeServizio.equals(""))
  94.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Parametro Nome Servizio non valido.");
  95.         if (tipoServizio == null || tipoServizio.equals(""))
  96.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Parametro Tipo Servizio non valido.");
  97.         if (versioneServizio == null)
  98.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Parametro Versione Servizio non valido.");

  99.         Connettore connettore = null;
  100.         if(asps.getConfigurazioneServizio()!=null){
  101.             connettore = asps.getConfigurazioneServizio().getConnettore();
  102.         }

  103.         String wsdlImplementativoErogatore = (asps.getByteWsdlImplementativoErogatore()!=null ? new String(asps.getByteWsdlImplementativoErogatore()) : null );
  104.         String wsdlImplementativoFruitore =  (asps.getByteWsdlImplementativoFruitore()!=null ? new String(asps.getByteWsdlImplementativoFruitore()) : null );
  105.        
  106.         wsdlImplementativoErogatore = wsdlImplementativoErogatore!=null && !"".equals(wsdlImplementativoErogatore.trim().replace("\n", "")) ? wsdlImplementativoErogatore : null;
  107.         wsdlImplementativoFruitore = wsdlImplementativoFruitore!=null && !"".equals(wsdlImplementativoFruitore.trim().replace("\n", "")) ? wsdlImplementativoFruitore : null;
  108.                
  109.         String superUser = asps.getSuperUser();
  110.         StatoFunzionalita servizioCorrelato = (TipologiaServizio.CORRELATO.equals(asps.getTipologiaServizio()) ? CostantiRegistroServizi.ABILITATO : CostantiRegistroServizi.DISABILITATO);
  111.         String portType = (asps.getPortType()!=null ? asps.getPortType() : null );
  112.                
  113.         long idSoggetto = -1;

  114.         // Recupero IDAccordo
  115.         long idAccordoLong = -1;
  116.         try {
  117.             //L accordo mi serve solo in caso di create/update
  118.             if(type!=CostantiDB.DELETE){
  119.                 String uriAccordo = asps.getAccordoServizioParteComune();
  120.                 if(uriAccordo==null || uriAccordo.equals("")) throw new DriverRegistroServiziException("L'uri dell'Accordo di Servizio non puo essere null.");
  121.                 IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(uriAccordo);
  122.                 idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordo, con, DriverRegistroServiziDB_LIB.tipoDB);
  123.             }
  124.         } catch (Exception e) {
  125.             DriverRegistroServiziDB_LIB.logError("Driver Error for get IDAccordo nome:["+asps.getAccordoServizioParteComune()+"].", e);
  126.             throw new DriverRegistroServiziException(e);
  127.         }

  128.         try {
  129.             String nomeS = nomeProprietario;
  130.             String tipoS = tipoProprietario;
  131.             idSoggetto = DBUtils.getIdSoggetto(nomeS, tipoS, con, DriverRegistroServiziDB_LIB.tipoDB);
  132.         } catch (CoreException e) {
  133.             DriverRegistroServiziDB_LIB.logError("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] getIdSoggetto failed: "+e.getMessage(), e);
  134.             throw new DriverRegistroServiziException(e);
  135.         }
  136.         if (idSoggetto <= 0)
  137.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Parametri non validi. Impossibile risalire all'id del soggettoo");      
  138.         //l'id accordo mi serve solo in caso di create/update
  139.         if(idAccordoLong <= 0 && type!=CostantiDB.DELETE)
  140.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Parametri non validi. Impossibile risalire all'id dell'accordo");

  141.         long idConnettore;
  142.         if (connettore == null && type != CostantiDB.CREATE && type!=CostantiDB.DELETE)
  143.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Il Connettore non puo essere nullo.");

  144.         PreparedStatement updateStmt = null;
  145.         ResultSet updateRS = null;
  146.         String updateQuery = "";

  147.         try {
  148.             long idServizio = 0;
  149.             int n = 0;
  150.             int sizeFruitori=0;
  151.             int sizeAzioni=0;
  152.             Fruitore fruitore;

  153.             asps.setIdAccordo(idAccordoLong);
  154.             switch (type) {
  155.             case CREATE:
  156.                 // CREATE

  157.                 if (connettore == null) {
  158.                     connettore = new Connettore();
  159.                     connettore.setNome("CNT_" + tipoProprietario+"/"+nomeProprietario +"_"+ tipoServizio + "/" +nomeServizio+"/"+versioneServizio);
  160.                 }

  161.                 if (connettore.getNome() == null || connettore.getNome().equals("")) {
  162.                     // setto il nome del connettore
  163.                     connettore.setNome("CNT_" + tipoProprietario+"/"+nomeProprietario +"_"+ tipoServizio + "/" +nomeServizio+"/"+versioneServizio );
  164.                 }

  165.                 // creo il connettore del servizio
  166.                 idConnettore = DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(1, connettore, con, driverBYOK);

  167.                 String utenteRichiedente = null;
  168.                 if(asps.getProprietaOggetto()!=null && asps.getProprietaOggetto().getUtenteRichiedente()!=null) {
  169.                     utenteRichiedente = asps.getProprietaOggetto().getUtenteRichiedente();
  170.                 }
  171.                 else {
  172.                     utenteRichiedente = superUser;
  173.                 }
  174.                
  175.                 Timestamp dataCreazione = null;
  176.                 if(asps.getProprietaOggetto()!=null && asps.getProprietaOggetto().getDataCreazione()!=null) {
  177.                     dataCreazione = new Timestamp(asps.getProprietaOggetto().getDataCreazione().getTime());
  178.                 }
  179.                 else if(asps.getOraRegistrazione()!=null){
  180.                     dataCreazione = new Timestamp(asps.getOraRegistrazione().getTime());
  181.                 }
  182.                 else {
  183.                     dataCreazione = DateManager.getTimestamp();
  184.                 }
  185.                
  186.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  187.                 sqlQueryObject.addInsertTable(CostantiDB.SERVIZI);
  188.                 sqlQueryObject.addInsertField("nome_servizio", "?");
  189.                 sqlQueryObject.addInsertField("tipo_servizio", "?");
  190.                 sqlQueryObject.addInsertField("versione_servizio", "?");
  191.                 sqlQueryObject.addInsertField("id_soggetto", "?");
  192.                 sqlQueryObject.addInsertField("id_accordo", "?");
  193.                 sqlQueryObject.addInsertField("servizio_correlato", "?");
  194.                 sqlQueryObject.addInsertField("id_connettore", "?");
  195.                 sqlQueryObject.addInsertField("wsdl_implementativo_erogatore", "?");
  196.                 sqlQueryObject.addInsertField("wsdl_implementativo_fruitore", "?");
  197.                 sqlQueryObject.addInsertField("superuser", "?");
  198.                 sqlQueryObject.addInsertField("privato", "?");
  199.                 sqlQueryObject.addInsertField("port_type", "?");
  200.                 sqlQueryObject.addInsertField("profilo", "?");
  201.                 sqlQueryObject.addInsertField("descrizione", "?");
  202.                 if(stato!=null)
  203.                     sqlQueryObject.addInsertField("stato", "?");
  204.                 if(asps.getOraRegistrazione()!=null)
  205.                     sqlQueryObject.addInsertField("ora_registrazione", "?");
  206.                 sqlQueryObject.addInsertField("message_type", "?");
  207.                 if(utenteRichiedente!=null) {
  208.                     sqlQueryObject.addInsertField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_RICHIEDENTE, "?");
  209.                 }
  210.                 if(dataCreazione!=null) {
  211.                     sqlQueryObject.addInsertField(CostantiDB.PROPRIETA_OGGETTO_DATA_CREAZIONE, "?");
  212.                 }
  213.                
  214.                 updateQuery = sqlQueryObject.createSQLInsert();
  215.                 updateStmt = con.prepareStatement(updateQuery);

  216.                 int index = 1;
  217.                 updateStmt.setString(index++, nomeServizio);
  218.                 updateStmt.setString(index++, tipoServizio);
  219.                 updateStmt.setInt(index++, versioneServizio);
  220.                 updateStmt.setLong(index++, idSoggetto);
  221.                 updateStmt.setLong(index++, idAccordoLong);
  222.                 updateStmt.setString(index++, DriverRegistroServiziDB_LIB.getValue(servizioCorrelato));
  223.                 updateStmt.setLong(index++, idConnettore);
  224.                 updateStmt.setString(index++, wsdlImplementativoErogatore);
  225.                 updateStmt.setString(index++, wsdlImplementativoFruitore);
  226.                 updateStmt.setString(index++, superUser);
  227.                 if(asps.getPrivato()!=null && asps.getPrivato())
  228.                     updateStmt.setInt(index++, 1);
  229.                 else
  230.                     updateStmt.setInt(index++, 0);
  231.                 updateStmt.setString(index++, portType);
  232.                 updateStmt.setString(index++, asps.getVersioneProtocollo());
  233.                 updateStmt.setString(index++, descrizione);
  234.                                
  235.                 if(stato!=null){
  236.                     updateStmt.setString(index++, stato);
  237.                 }
  238.                
  239.                 if(asps.getOraRegistrazione()!=null){
  240.                     updateStmt.setTimestamp(index++, new Timestamp(asps.getOraRegistrazione().getTime()));
  241.                 }
  242.                
  243.                 updateStmt.setString(index++, DriverRegistroServiziDB_LIB.getValue(asps.getMessageType()));
  244.                
  245.                 if(utenteRichiedente!=null) {
  246.                     updateStmt.setString(index++, utenteRichiedente);
  247.                 }
  248.                
  249.                 if(dataCreazione!=null) {
  250.                     updateStmt.setTimestamp(index++, dataCreazione);
  251.                 }
  252.                
  253.                 // eseguo lo statement
  254.                 n = updateStmt.executeUpdate();
  255.                 updateStmt.close();
  256.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecifica CREATE : \n" +
  257.                         DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, nomeServizio, tipoServizio, versioneServizio,
  258.                                 idSoggetto, idAccordoLong, servizioCorrelato, idConnettore, wsdlImplementativoErogatore, wsdlImplementativoFruitore, superUser));
  259.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecifica type = " + type + " row affected =" + n);

  260.                
  261.                 // recupero l'id del servizio inserito
  262.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  263.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  264.                 sqlQueryObject.addSelectField("*");
  265.                 sqlQueryObject.addWhereCondition("nome_servizio = ?");
  266.                 sqlQueryObject.addWhereCondition("tipo_servizio = ?");
  267.                 sqlQueryObject.addWhereCondition("versione_servizio = ?");
  268.                 sqlQueryObject.addWhereCondition("id_soggetto = ?");
  269.                 sqlQueryObject.setANDLogicOperator(true);
  270.                 updateQuery = sqlQueryObject.createSQLQuery();
  271.                 updateStmt = con.prepareStatement(updateQuery);

  272.                 updateStmt.setString(1, nomeServizio);
  273.                 updateStmt.setString(2, tipoServizio);
  274.                 updateStmt.setInt(3, versioneServizio);
  275.                 updateStmt.setLong(4, idSoggetto);

  276.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecifica recupero l'id del servizio appena creato : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, nomeServizio, tipoServizio, idSoggetto));
  277.                 updateRS = updateStmt.executeQuery();

  278.                 if (updateRS.next()) {
  279.                     idServizio = updateRS.getLong("id");
  280.                 }
  281.                 updateRS.close();
  282.                 updateStmt.close();

  283.                 if(idServizio<=0)
  284.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica(addFruitore)] id servizio non recuperato");
  285.                 asps.setId(idServizio);
  286.                                
  287.                
  288.                 // aggiungo fruitori
  289.                 sizeFruitori = asps.sizeFruitoreList();
  290.                 fruitore = null;
  291.                 for (int i = 0; i < sizeFruitori; i++) {
  292.                     fruitore = asps.getFruitore(i);
  293.                     DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaFruitore(1, fruitore, con, asps, driverBYOK);
  294.                 }
  295.                
  296.                 // aggiungo azioni
  297.                 if(asps.getConfigurazioneServizio()!=null){
  298.                     sizeAzioni = asps.getConfigurazioneServizio().sizeConfigurazioneAzioneList();
  299.                     for (int i = 0; i < sizeAzioni; i++) {
  300.                         ConfigurazioneServizioAzione conf = asps.getConfigurazioneServizio().getConfigurazioneAzione(i);
  301.                         DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaAzioni(1, conf, con, asps, driverBYOK);
  302.                     }
  303.                 }
  304.                
  305.                 // Documenti generici servizio
  306.                 List<Documento> documenti = new ArrayList<>();
  307.                 // Allegati
  308.                 for(int i=0; i<asps.sizeAllegatoList(); i++){
  309.                     Documento doc = asps.getAllegato(i);
  310.                     doc.setRuolo(RuoliDocumento.allegato.toString());
  311.                     documenti.add(doc);
  312.                 }
  313.                 // Specifiche Semiformali
  314.                 for(int i=0; i<asps.sizeSpecificaSemiformaleList(); i++){
  315.                     Documento doc = asps.getSpecificaSemiformale(i);
  316.                     doc.setRuolo(RuoliDocumento.specificaSemiformale.toString());
  317.                     documenti.add(doc);
  318.                 }
  319.                 // Specifiche Livelli di Servizio
  320.                 for(int i=0; i<asps.sizeSpecificaLivelloServizioList(); i++){
  321.                     Documento doc = asps.getSpecificaLivelloServizio(i);
  322.                     doc.setRuolo(RuoliDocumento.specificaLivelloServizio.toString());
  323.                     documenti.add(doc);
  324.                 }
  325.                 // Specifiche Sicurezza
  326.                 for(int i=0; i<asps.sizeSpecificaSicurezzaList(); i++){
  327.                     Documento doc = asps.getSpecificaSicurezza(i);
  328.                     doc.setRuolo(RuoliDocumento.specificaSicurezza.toString());
  329.                     documenti.add(doc);
  330.                 }
  331.                 // CRUD
  332.                 DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.CREATE, documenti, idServizio, ProprietariDocumento.servizio, con, tipoDatabase);
  333.                

  334.                 // ProtocolProperties
  335.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.CREATE, asps.getProtocolPropertyList(),
  336.                         idServizio, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  337.                
  338.                
  339.                 break;

  340.             case UPDATE:
  341.                 // UPDATE
  342.                 String oldNomeSoggetto = null;
  343.                 String oldTipoSoggetto = null;
  344.                 String oldNomeServizio = null;
  345.                 String oldTipoServizio = null;
  346.                 Integer oldVersioneServizio = null;
  347.                 if(asps.getOldIDServizioForUpdate()!=null){
  348.                     if(asps.getOldIDServizioForUpdate().getSoggettoErogatore()!=null){
  349.                         oldNomeSoggetto = asps.getOldIDServizioForUpdate().getSoggettoErogatore().getNome();
  350.                         oldTipoSoggetto = asps.getOldIDServizioForUpdate().getSoggettoErogatore().getTipo();
  351.                     }
  352.                     oldNomeServizio = asps.getOldIDServizioForUpdate().getNome();
  353.                     oldTipoServizio = asps.getOldIDServizioForUpdate().getTipo();
  354.                     oldVersioneServizio = asps.getOldIDServizioForUpdate().getVersione();
  355.                 }

  356.                 if (oldNomeServizio == null || oldNomeServizio.equals(""))
  357.                     oldNomeServizio = nomeServizio;
  358.                 if (oldTipoServizio == null || oldTipoServizio.equals(""))
  359.                     oldTipoServizio = tipoServizio;
  360.                 if (oldNomeSoggetto == null || oldNomeSoggetto.equals(""))
  361.                     oldNomeSoggetto = nomeProprietario;
  362.                 if (oldTipoSoggetto == null || oldTipoSoggetto.equals(""))
  363.                     oldTipoSoggetto = tipoProprietario;
  364.                 if (oldVersioneServizio == null)
  365.                     oldVersioneServizio = versioneServizio;

  366.                 //recupero id servizio
  367.                 idServizio = DBUtils.getIdServizio(oldNomeServizio, oldTipoServizio, oldVersioneServizio, oldNomeSoggetto, oldTipoSoggetto, con, DriverRegistroServiziDB_LIB.tipoDB);
  368.                 if (idServizio <= 0){
  369.                     // Puo' darsi che l'old soggetto e il nuovo soggetto siano la stesso soggetto della tabella. E' stato cambiato il nome.
  370.                     idServizio = DBUtils.getIdServizio(oldNomeServizio, oldTipoServizio, oldVersioneServizio, nomeProprietario, tipoProprietario, con, DriverRegistroServiziDB_LIB.tipoDB);
  371.                 }
  372.                 if (idServizio <= 0)
  373.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica(UPDATE)] Id Servizio non valido.");

  374.                 //recupero l'id del connettore
  375.                 idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreServizio(oldNomeServizio, oldTipoServizio, oldVersioneServizio, oldNomeSoggetto, oldTipoSoggetto, con);
  376.                 if (idConnettore <= 0){
  377.                     // Puo' darsi che l'old soggetto e il nuovo soggetto siano la stesso soggetto della tabella. E' stato cambiato il nome.
  378.                     idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreServizio(oldNomeServizio, oldTipoServizio, oldVersioneServizio, nomeProprietario, tipoProprietario, con);
  379.                 }
  380.                 if (idConnettore <= 0)
  381.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] id connettore nullo.");
  382.                 connettore.setId(idConnettore);

  383.                 String utenteUltimaModifica = null;
  384.                 if(asps.getProprietaOggetto()!=null && asps.getProprietaOggetto().getUtenteUltimaModifica()!=null) {
  385.                     utenteUltimaModifica = asps.getProprietaOggetto().getUtenteUltimaModifica();
  386.                 }
  387.                 else {
  388.                     utenteUltimaModifica = superUser;
  389.                 }
  390.                
  391.                 Timestamp dataUltimaModifica = null;
  392.                 if(asps.getProprietaOggetto()!=null && asps.getProprietaOggetto().getDataUltimaModifica()!=null) {
  393.                     dataUltimaModifica = new Timestamp(asps.getProprietaOggetto().getDataUltimaModifica().getTime());
  394.                 }
  395.                 /**else {
  396.                     dataUltimaModifica = DateManager.getTimestamp();
  397.                 } Se presente si aggiorna, altrimenti no, e si mantiene il precedente valore per gestire le modifiche delle fruizioni */
  398.                
  399.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  400.                 sqlQueryObject.addUpdateTable(CostantiDB.SERVIZI);
  401.                 sqlQueryObject.addUpdateField("nome_servizio", "?");
  402.                 sqlQueryObject.addUpdateField("tipo_servizio", "?");
  403.                 sqlQueryObject.addUpdateField("versione_servizio", "?");
  404.                 sqlQueryObject.addUpdateField("id_soggetto", "?");
  405.                 sqlQueryObject.addUpdateField("id_accordo", "?");
  406.                 sqlQueryObject.addUpdateField("servizio_correlato", "?");
  407.                 sqlQueryObject.addUpdateField("id_connettore", "?");
  408.                 sqlQueryObject.addUpdateField("wsdl_implementativo_erogatore", "?");
  409.                 sqlQueryObject.addUpdateField("wsdl_implementativo_fruitore", "?");
  410.                 sqlQueryObject.addUpdateField("superuser", "?");
  411.                 sqlQueryObject.addUpdateField("privato", "?");
  412.                 sqlQueryObject.addUpdateField("port_type", "?");
  413.                 sqlQueryObject.addUpdateField("profilo", "?");
  414.                 sqlQueryObject.addUpdateField("descrizione", "?");
  415.                 if(stato!=null)
  416.                     sqlQueryObject.addUpdateField("stato", "?");
  417.                 if(asps.getOraRegistrazione()!=null)
  418.                     sqlQueryObject.addUpdateField("ora_registrazione", "?");
  419.                 sqlQueryObject.addUpdateField("message_type", "?");
  420.                 if(utenteUltimaModifica!=null) {
  421.                     sqlQueryObject.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_ULTIMA_MODIFICA, "?");
  422.                 }
  423.                 if(dataUltimaModifica!=null) {
  424.                     sqlQueryObject.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_DATA_ULTIMA_MODIFICA, "?");
  425.                 }
  426.                 sqlQueryObject.addWhereCondition("id=?");
  427.                 updateQuery = sqlQueryObject.createSQLUpdate();
  428.                 updateStmt = con.prepareStatement(updateQuery);

  429.                 index = 1;
  430.                
  431.                 updateStmt.setString(index++, nomeServizio);
  432.                 updateStmt.setString(index++, tipoServizio);
  433.                 updateStmt.setInt(index++, versioneServizio);
  434.                 updateStmt.setLong(index++, idSoggetto);
  435.                 updateStmt.setLong(index++, idAccordoLong);
  436.                 updateStmt.setString(index++, DriverRegistroServiziDB_LIB.getValue(servizioCorrelato));
  437.                 updateStmt.setLong(index++, idConnettore);
  438.                 updateStmt.setString(index++, wsdlImplementativoErogatore);
  439.                 updateStmt.setString(index++, wsdlImplementativoFruitore);
  440.                 updateStmt.setString(index++, superUser);
  441.                 if(asps.getPrivato()!=null && asps.getPrivato())
  442.                     updateStmt.setInt(index++, 1);
  443.                 else
  444.                     updateStmt.setInt(index++, 0);
  445.                 updateStmt.setString(index++, portType);
  446.                 updateStmt.setString(index++, asps.getVersioneProtocollo());
  447.                 updateStmt.setString(index++, descrizione);
  448.            
  449.                 if(stato!=null){
  450.                     updateStmt.setString(index++, stato);
  451.                 }
  452.                
  453.                 if(asps.getOraRegistrazione()!=null){
  454.                     updateStmt.setTimestamp(index++, new Timestamp(asps.getOraRegistrazione().getTime()));
  455.                 }
  456.                
  457.                 updateStmt.setString(index++, DriverRegistroServiziDB_LIB.getValue(asps.getMessageType()));
  458.    
  459.                 if(utenteUltimaModifica!=null) {
  460.                     updateStmt.setString(index++, utenteUltimaModifica);
  461.                 }
  462.                
  463.                 if(dataUltimaModifica!=null) {
  464.                     updateStmt.setTimestamp(index++, dataUltimaModifica);
  465.                 }
  466.                
  467.                 updateStmt.setLong(index++, idServizio);


  468.                 // eseguo lo statement
  469.                 n = updateStmt.executeUpdate();
  470.                 updateStmt.close();
  471.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecifica type = " + type + " row affected =" + n);
  472.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecifica UPDATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, nomeServizio, tipoServizio, idSoggetto, idAccordoLong, servizioCorrelato, idConnettore, wsdlImplementativoErogatore, wsdlImplementativoFruitore, superUser, idServizio));

  473.                
  474.                 // aggiorno nome connettore
  475.                 String newNomeConnettore = "CNT_" + tipoProprietario+"/"+nomeProprietario +"_"+ tipoServizio + "/" +nomeServizio+ "/"+versioneServizio;
  476.                 connettore.setNome(newNomeConnettore);
  477.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(2, connettore, con, driverBYOK);

  478.                
  479.                 //aggiorno fruitori
  480.                 //La lista dei fruitori del servizio contiene tutti e soli i fruitori di questo servizio
  481.                 //prima vengono cancellati i fruitori esistenti e poi vengono riaggiunti
  482.                 sizeFruitori = asps.sizeFruitoreList();
  483.                 fruitore = null;
  484.                 // NON POSSO: esistono i mapping
  485. //              //cancellazione
  486. /**             DriverRegistroServiziDB_LIB.deleteAllFruitoriServizio(idServizio, con);
  487. //              //creazione
  488. //              for (int i = 0; i < sizeFruitori; i++) {
  489. //                  fruitore = asps.getFruitore(i);
  490. //                  DriverRegistroServiziDB_LIB.CRUDAccordoServizioParteSpecificaFruitore(1, fruitore, con, servizio);
  491. //              }*/
  492.                 List<Long> idFruitoriEsistenti = new ArrayList<>();
  493.                 for (int i = 0; i < sizeFruitori; i++) {
  494.                     fruitore = asps.getFruitore(i);
  495.                     // i dati del servizio sono gia' stati modificati, devo usare i dati nuovi
  496.                     IDServizio idS = IDServizioFactory.getInstance().getIDServizioFromValues(tipoServizio, nomeServizio,
  497.                                             new IDSoggetto(tipoProprietario, nomeProprietario), versioneServizio);
  498.                     long idFruizione = DBUtils.getIdFruizioneServizio(idS,
  499.                             new IDSoggetto(fruitore.getTipo(), fruitore.getNome()), con, tipoDatabase);
  500.                     int typeFruitore = 1; // create
  501.                     if(idFruizione>0){
  502.                         typeFruitore = 2; // update
  503.                     }
  504.                     DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaFruitore(typeFruitore, fruitore, con, asps, driverBYOK);
  505.                     idFruitoriEsistenti.add(DBUtils.getIdSoggetto(fruitore.getNome(), fruitore.getTipo(), con, tipoDatabase));
  506.                 }
  507.                 DriverRegistroServiziDB_accordiParteSpecificaLIB.deleteAllFruitoriServizio(idServizio, idFruitoriEsistenti, con);
  508.    

  509.                 //aggiorno azioni
  510.                 //La lista delle azioni del servizio contiene tutti e soli le azioni di questo servizio
  511.                 //prima vengono cancellati le azioni esistenti e poi vengono riaggiunte
  512.                 if(asps.getConfigurazioneServizio()!=null){
  513.                     sizeAzioni = asps.getConfigurazioneServizio().sizeConfigurazioneAzioneList();
  514.                     //cancellazione
  515.                     DriverRegistroServiziDB_accordiParteSpecificaLIB.deleteAllAzioniServizio(idServizio, con);
  516.                     //creazione
  517.                     for (int i = 0; i < sizeAzioni; i++) {
  518.                         ConfigurazioneServizioAzione conf = asps.getConfigurazioneServizio().getConfigurazioneAzione(i);
  519.                         DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaAzioni(1, conf, con, asps, driverBYOK);
  520.                     }
  521.                 }
  522.                

  523.                
  524.                 // Documenti generici servizio
  525.                 documenti = new ArrayList<>();
  526.                 // Allegati
  527.                 for(int i=0; i<asps.sizeAllegatoList(); i++){
  528.                     Documento doc = asps.getAllegato(i);
  529.                     doc.setRuolo(RuoliDocumento.allegato.toString());
  530.                     documenti.add(doc);
  531.                 }
  532.                 // Specifiche Semiformali
  533.                 for(int i=0; i<asps.sizeSpecificaSemiformaleList(); i++){
  534.                     Documento doc = asps.getSpecificaSemiformale(i);
  535.                     doc.setRuolo(RuoliDocumento.specificaSemiformale.toString());
  536.                     documenti.add(doc);
  537.                 }
  538.                 // Specifiche Livelli di Servizio
  539.                 for(int i=0; i<asps.sizeSpecificaLivelloServizioList(); i++){
  540.                     Documento doc = asps.getSpecificaLivelloServizio(i);
  541.                     doc.setRuolo(RuoliDocumento.specificaLivelloServizio.toString());
  542.                     documenti.add(doc);
  543.                 }
  544.                 // Specifiche Sicurezza
  545.                 for(int i=0; i<asps.sizeSpecificaSicurezzaList(); i++){
  546.                     Documento doc = asps.getSpecificaSicurezza(i);
  547.                     doc.setRuolo(RuoliDocumento.specificaSicurezza.toString());
  548.                     documenti.add(doc);
  549.                 }
  550.                 // CRUD
  551.                 DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.UPDATE, documenti, idServizio, ProprietariDocumento.servizio, con, tipoDatabase);
  552.                
  553.                
  554.                 // ProtocolProperties
  555.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.UPDATE, asps.getProtocolPropertyList(),
  556.                         idServizio, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  557.                
  558.                
  559.                 break;

  560.             case DELETE:
  561.                 // DELETE
  562.                 idServizio = DBUtils.getIdServizio(nomeServizio, tipoServizio, versioneServizio, nomeProprietario, tipoProprietario, con, DriverRegistroServiziDB_LIB.tipoDB);
  563.                 if (idServizio <= 0)
  564.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica(DELETE)] Id Servizio non valido.");
  565.                 idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreServizio(nomeServizio, tipoServizio, versioneServizio, nomeProprietario, tipoProprietario, con);
  566.                 if (idConnettore <= 0)
  567.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica(DELETE)] Id Connettore non valido.");

  568.                 //  elimino fruitori
  569.                 sizeFruitori = asps.sizeFruitoreList();
  570.                 fruitore = null;
  571.                 for (int i = 0; i < sizeFruitori; i++) {
  572.                     fruitore = asps.getFruitore(i);

  573.                     DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaFruitore(3, fruitore, con, asps, driverBYOK);
  574.                 }
  575.                
  576.                 // elimino azioni
  577.                 if(asps.getConfigurazioneServizio()!=null){
  578.                     sizeAzioni = asps.getConfigurazioneServizio().sizeConfigurazioneAzioneList();
  579.                     for (int i = 0; i < sizeAzioni; i++) {
  580.                         ConfigurazioneServizioAzione conf = asps.getConfigurazioneServizio().getConfigurazioneAzione(i);
  581.                         DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaAzioni(3, conf, con, asps, driverBYOK);
  582.                     }
  583.                 }

  584.                
  585.                 // Documenti generici accordo di servizio
  586.                 // Allegati
  587.                 // Specifiche Semiformali
  588.                 // Specifiche Livelli di Servizio
  589.                 // Specifiche Sicurezza
  590.                 DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.DELETE, null, idServizio, ProprietariDocumento.servizio, con, tipoDatabase);
  591.                
  592.                
  593.                 // ProtocolProperties
  594.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.DELETE, null,
  595.                         idServizio, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  596.                
  597.                
  598.                 // Delete tabella informazioni digest
  599.                 if(CostantiDB.isServiziDigestEnabled()) {
  600.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  601.                     sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_DIGEST_PARAMS);
  602.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_DIGEST_PARAMS_COLUMN_ID_SERVIZIO_REF + "=?");
  603.                     try (PreparedStatement stmt = con.prepareStatement(sqlQueryObject.createSQLDelete())) {
  604.                         stmt.setLong(1, idServizio);
  605.                         n = stmt.executeUpdate();
  606.                     }
  607.                 }

  608.                
  609.                 // Delete servizio
  610.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  611.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI);
  612.                 sqlQueryObject.addWhereCondition("id=?");
  613.                 String sqlQuery = sqlQueryObject.createSQLDelete();
  614.                 updateStmt = con.prepareStatement(sqlQuery);
  615.                 updateStmt.setLong(1, idServizio);
  616.                 n=updateStmt.executeUpdate();
  617.                 updateStmt.close();
  618.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecifica type = " + type + " row affected =" + n);
  619.                 // elimino connettore
  620.                 connettore=new Connettore();
  621.                 connettore.setId(idConnettore);
  622.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(CostantiDB.DELETE, connettore, con, driverBYOK);
  623.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecifica CREATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, idServizio));

  624.                 // nn cancello azioni nn interessa per adesso

  625.                 break;
  626.             }

  627.             return n;

  628.         } catch (CoreException e) {
  629.             throw new DriverRegistroServiziException(e);
  630.         } catch (SQLException se) {
  631.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] SQLException [" + se.getMessage() + "].", se);

  632.         } catch (Exception se) {
  633.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecifica] Exception [" + se.getMessage() + "].", se);

  634.         } finally {
  635.             JDBCUtilities.closeResources(updateRS, updateStmt);
  636.         }

  637.     }

  638.     /**
  639.      * Aggiunge un fruitore di un servizio alla lista dei fruitori dei servizi
  640.      *
  641.      * @param type
  642.      * @param fruitore
  643.      * @param con
  644.      */
  645.     public static long CRUDAccordoServizioParteSpecificaFruitore(int type, Fruitore fruitore, Connection con, AccordoServizioParteSpecifica servizio, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {
  646.         PreparedStatement updateStmt = null;
  647.         String updateQuery;
  648.         PreparedStatement selectStmt = null;
  649.         String selectQuery = "";
  650.         ResultSet selectRS = null;

  651.         long idServizio = -1;
  652.         try{
  653.             String tipoServ = servizio.getTipo();
  654.             String nomeServ = servizio.getNome();
  655.             Integer verServ = servizio.getVersione();
  656.             String tipoSogg = servizio.getTipoSoggettoErogatore();
  657.             String nomeSogg = servizio.getNomeSoggettoErogatore();
  658.            
  659.             idServizio = DBUtils.getIdServizio(nomeServ, tipoServ, verServ, nomeSogg, tipoSogg, con, DriverRegistroServiziDB_LIB.tipoDB);
  660.         } catch (CoreException e1) {
  661.             DriverRegistroServiziDB_LIB.logError("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitore] getIdServizio failed: "+e1.getMessage(), e1);
  662.             throw new DriverRegistroServiziException(e1);
  663.         }

  664.         if (idServizio <= 0)
  665.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitore] ID Servizio non valido.");

  666.         Connettore connettore = fruitore.getConnettore();
  667.         if (connettore == null && type != CostantiDB.CREATE && type!=CostantiDB.DELETE)
  668.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitore] il connettore non puo essere nullo.");

  669.         String nomeSoggetto = fruitore.getNome();
  670.         String tipoSoggetto = fruitore.getTipo();
  671.         if (nomeSoggetto == null || nomeSoggetto.equals(""))
  672.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitore] Nome Fruitore non valido.");
  673.         if (tipoSoggetto == null || tipoSoggetto.equals(""))
  674.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitore] Tipo Fruitore non valido.");

  675.         String stato = fruitore.getStatoPackage();
  676.        
  677.         String descrizione = fruitore.getDescrizione();
  678.        
  679.         long idSoggettoFruitore = -1;
  680.         try {
  681.             idSoggettoFruitore = DBUtils.getIdSoggetto(nomeSoggetto, tipoSoggetto, con, DriverRegistroServiziDB_LIB.tipoDB);
  682.         } catch (CoreException e1) {
  683.             DriverRegistroServiziDB_LIB.logError("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitore] getIdSoggetto failed: "+e1.getMessage(), e1);
  684.             throw new DriverRegistroServiziException(e1);
  685.         }
  686.         if (idSoggettoFruitore <= 0)
  687.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitore] Id Soggetto Fruitore non valido.");
  688.         String wsdlImplementativoErogatore = (fruitore.getByteWsdlImplementativoErogatore()!=null ? new String(fruitore.getByteWsdlImplementativoErogatore()) : null );
  689.         wsdlImplementativoErogatore = wsdlImplementativoErogatore!=null && !"".equals(wsdlImplementativoErogatore.trim().replaceAll("\n", "")) ? wsdlImplementativoErogatore : null;
  690.         String wsdlImplementativoFruitore =  (fruitore.getByteWsdlImplementativoFruitore()!=null ? new String(fruitore.getByteWsdlImplementativoFruitore()) : null );
  691.         wsdlImplementativoFruitore = wsdlImplementativoFruitore!=null && !"".equals(wsdlImplementativoFruitore.trim().replaceAll("\n", "")) ? wsdlImplementativoFruitore : null;
  692.        
  693.         long idFruizione = 0;
  694.         if (CostantiDB.CREATE != type) {
  695.             idFruizione = DriverRegistroServiziDB_LIB.getIdFruizione(idServizio, nomeSoggetto, tipoSoggetto, con);
  696.         }
  697.        
  698.         long idConnettore = 0;
  699.         long n = 0;
  700.         try {
  701.             switch (type) {
  702.             case 1:
  703.                 if (connettore == null) {
  704.                     connettore = new Connettore();
  705.                 }

  706.                 connettore.setNome("CNT_SF_" + tipoSoggetto+"/"+nomeSoggetto + "_" + servizio.getTipoSoggettoErogatore()+"/"+servizio.getNomeSoggettoErogatore() + "_" +
  707.                         servizio.getTipo() +"/"+servizio.getNome()+"/"+servizio.getVersione());
  708.                
  709.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(CostantiDB.CREATE, connettore, con, driverBYOK);
  710.                 idConnettore = connettore.getId();

  711.                 String utenteRichiedente = null;
  712.                 if(fruitore.getProprietaOggetto()!=null && fruitore.getProprietaOggetto().getUtenteRichiedente()!=null) {
  713.                     utenteRichiedente = fruitore.getProprietaOggetto().getUtenteRichiedente();
  714.                 }
  715.                 else {
  716.                     utenteRichiedente = DBUtils.getSuperUserServizioSafe(DriverRegistroServiziDB_LIB.log, "DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitore",
  717.                             idServizio, con, DriverRegistroServiziDB_LIB.tipoDB);
  718.                 }
  719.                
  720.                 Timestamp dataCreazione = null;
  721.                 if(fruitore.getProprietaOggetto()!=null && fruitore.getProprietaOggetto().getDataCreazione()!=null) {
  722.                     dataCreazione = new Timestamp(fruitore.getProprietaOggetto().getDataCreazione().getTime());
  723.                 }
  724.                 else if(fruitore.getOraRegistrazione()!=null){
  725.                     dataCreazione = new Timestamp(fruitore.getOraRegistrazione().getTime());
  726.                 }
  727.                 else {
  728.                     dataCreazione = DateManager.getTimestamp();
  729.                 }
  730.                
  731.                 // create
  732.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  733.                 sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_FRUITORI);
  734.                 sqlQueryObject.addInsertField("id_servizio", "?");
  735.                 sqlQueryObject.addInsertField("id_soggetto", "?");
  736.                 sqlQueryObject.addInsertField("id_connettore", "?");
  737.                 sqlQueryObject.addInsertField("wsdl_implementativo_erogatore", "?");
  738.                 sqlQueryObject.addInsertField("wsdl_implementativo_fruitore", "?");
  739.                 if(stato!=null)
  740.                     sqlQueryObject.addInsertField("stato", "?");
  741.                 if(fruitore.getOraRegistrazione()!=null)
  742.                     sqlQueryObject.addInsertField("ora_registrazione", "?");
  743.                 sqlQueryObject.addInsertField("descrizione", "?");
  744.                 if(utenteRichiedente!=null) {
  745.                     sqlQueryObject.addInsertField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_RICHIEDENTE, "?");
  746.                 }
  747.                 if(dataCreazione!=null) {
  748.                     sqlQueryObject.addInsertField(CostantiDB.PROPRIETA_OGGETTO_DATA_CREAZIONE, "?");
  749.                 }
  750.                 updateQuery = sqlQueryObject.createSQLInsert();
  751.                 updateStmt = con.prepareStatement(updateQuery);

  752.                 updateStmt.setLong(1, idServizio);
  753.                 updateStmt.setLong(2, idSoggettoFruitore);
  754.                 updateStmt.setLong(3, idConnettore);
  755.                 updateStmt.setString(4, wsdlImplementativoErogatore);
  756.                 updateStmt.setString(5, wsdlImplementativoFruitore);
  757.                
  758.                 int index = 6;
  759.                
  760.                 if(stato!=null){
  761.                     updateStmt.setString(index, stato);
  762.                     index++;
  763.                 }
  764.                 if(fruitore.getOraRegistrazione()!=null){
  765.                     updateStmt.setTimestamp(index, new Timestamp(fruitore.getOraRegistrazione().getTime()));
  766.                     index++;
  767.                 }
  768.                
  769.                 updateStmt.setString(index, descrizione);
  770.                 index++;
  771.                
  772.                 if(utenteRichiedente!=null) {
  773.                     updateStmt.setString(index, utenteRichiedente);
  774.                     index++;
  775.                 }
  776.                
  777.                 if(dataCreazione!=null) {
  778.                     updateStmt.setTimestamp(index, dataCreazione);
  779.                     index++;
  780.                 }

  781.                 n = updateStmt.executeUpdate();
  782.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitore CREATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, idServizio, idSoggettoFruitore, idConnettore, wsdlImplementativoErogatore, wsdlImplementativoFruitore));

  783.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  784.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  785.                 sqlQueryObject.addSelectField("id");
  786.                 sqlQueryObject.addWhereCondition("id_servizio = ?");
  787.                 sqlQueryObject.addWhereCondition("id_soggetto = ?");
  788.                 sqlQueryObject.addWhereCondition("id_connettore = ?");
  789.                 sqlQueryObject.setANDLogicOperator(true);
  790.                 selectQuery = sqlQueryObject.createSQLQuery();
  791.                 selectStmt = con.prepareStatement(selectQuery);
  792.                 selectStmt.setLong(1, idServizio);
  793.                 selectStmt.setLong(2, idSoggettoFruitore);
  794.                 selectStmt.setLong(3, idConnettore);

  795.                 selectRS = selectStmt.executeQuery();
  796.                 if (selectRS.next())
  797.                     idFruizione = selectRS.getLong("id");
  798.                
  799.                
  800.                 // aggiungo azioni
  801.                 int sizeAzioni = fruitore.sizeConfigurazioneAzioneList();
  802.                 for (int i = 0; i < sizeAzioni; i++) {
  803.                     ConfigurazioneServizioAzione conf = fruitore.getConfigurazioneAzione(i);
  804.                     DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaFruitoreAzioni(1, conf, con, servizio, fruitore, driverBYOK);
  805.                 }
  806.                
  807.                 // ProtocolProperties
  808.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.UPDATE, fruitore.getProtocolPropertyList(),
  809.                         idFruizione, ProprietariProtocolProperty.FRUITORE, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  810.                
  811.                 break;

  812.             case 2:
  813.                 // update
  814.                 idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreServizioFruitore(idServizio, nomeSoggetto, tipoSoggetto, con);
  815.                 if(idConnettore<0) throw new DriverRegistroServiziException("Il connettore del Fruitore del Servizio e' invalido id<0");
  816.                 connettore.setId(idConnettore);

  817.                 String utenteUltimaModifica = null;
  818.                 if(fruitore.getProprietaOggetto()!=null && fruitore.getProprietaOggetto().getUtenteUltimaModifica()!=null) {
  819.                     utenteUltimaModifica = fruitore.getProprietaOggetto().getUtenteUltimaModifica();
  820.                 }
  821.                
  822.                 Timestamp dataUltimaModifica = null;
  823.                 if(fruitore.getProprietaOggetto()!=null && fruitore.getProprietaOggetto().getDataUltimaModifica()!=null) {
  824.                     dataUltimaModifica = new Timestamp(fruitore.getProprietaOggetto().getDataUltimaModifica().getTime());
  825.                 }
  826.                 /**else {
  827.                     dataUltimaModifica = DateManager.getTimestamp();
  828.                 }Se presente si aggiorna, altrimenti no, e si mantiene il precedente valore per gestire le modifiche delle fruizioni */
  829.                
  830.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  831.                 sqlQueryObject.addUpdateTable(CostantiDB.SERVIZI_FRUITORI);
  832.                 sqlQueryObject.addUpdateField("wsdl_implementativo_erogatore", "?");
  833.                 sqlQueryObject.addUpdateField("wsdl_implementativo_fruitore", "?");
  834.                 if(stato!=null)
  835.                     sqlQueryObject.addUpdateField("stato", "?");
  836.                 if(fruitore.getOraRegistrazione()!=null)
  837.                     sqlQueryObject.addUpdateField("ora_registrazione", "?");
  838.                 sqlQueryObject.addUpdateField("descrizione", "?");
  839.                 if(utenteUltimaModifica!=null) {
  840.                     sqlQueryObject.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_ULTIMA_MODIFICA, "?");
  841.                 }
  842.                 if(dataUltimaModifica!=null) {
  843.                     sqlQueryObject.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_DATA_ULTIMA_MODIFICA, "?");
  844.                 }
  845.                 sqlQueryObject.addWhereCondition("id_servizio=?");
  846.                 sqlQueryObject.addWhereCondition("id_soggetto=?");
  847.                 sqlQueryObject.addWhereCondition("id_connettore=?");
  848.                 sqlQueryObject.setANDLogicOperator(true);
  849.                 updateQuery = sqlQueryObject.createSQLUpdate();
  850.                 updateStmt = con.prepareStatement(updateQuery);

  851.                 updateStmt.setString(1, wsdlImplementativoErogatore);
  852.                 updateStmt.setString(2, wsdlImplementativoFruitore);

  853.                 index = 3;
  854.                
  855.                 if(stato!=null){
  856.                     updateStmt.setString(index, stato);
  857.                     index++;
  858.                 }
  859.                
  860.                 if(fruitore.getOraRegistrazione()!=null){
  861.                     updateStmt.setTimestamp(index, new Timestamp(fruitore.getOraRegistrazione().getTime()));
  862.                     index++;
  863.                 }
  864.                
  865.                 updateStmt.setString(index, descrizione);
  866.                 index++;
  867.                
  868.                 if(utenteUltimaModifica!=null) {
  869.                     updateStmt.setString(index, utenteUltimaModifica);
  870.                     index++;
  871.                 }
  872.                
  873.                 if(dataUltimaModifica!=null) {
  874.                     updateStmt.setTimestamp(index, dataUltimaModifica);
  875.                     index++;
  876.                 }
  877.                    
  878.                 updateStmt.setLong(index,idServizio);
  879.                 index++;
  880.                 updateStmt.setLong(index,idSoggettoFruitore);
  881.                 index++;
  882.                 updateStmt.setLong(index,idConnettore);
  883.                 index++;
  884.                
  885.                 n= updateStmt.executeUpdate();
  886.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitore UPDATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, wsdlImplementativoErogatore, wsdlImplementativoFruitore, idServizio, idSoggettoFruitore, idConnettore));

  887.                 // modifico i dati del connettore
  888.                 //aggiorno nome
  889.                 DriverRegistroServiziDB_LIB.logDebug("Tento aggiornamento connettore id: ["+idConnettore+"] oldNome: ["+connettore.getNome()+"]...");
  890.                 String newNomeConnettore = "CNT_SF_" + tipoSoggetto+"/"+nomeSoggetto + "_" + servizio.getTipoSoggettoErogatore()+"/"+servizio.getNomeSoggettoErogatore() + "_" +
  891.                         servizio.getTipo() +"/"+servizio.getNome()+"/"+servizio.getVersione();
  892.                 connettore.setNome(newNomeConnettore);
  893.                 DriverRegistroServiziDB_LIB.logDebug("nuovo nome connettore ["+newNomeConnettore+"]");
  894.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(2, connettore, con, driverBYOK);
  895.                
  896.                 //aggiorno azioni
  897.                 //La lista delle azioni del servizio contiene tutti e soli le azioni di questo servizio
  898.                 //prima vengono cancellati le azioni esistenti e poi vengono riaggiunte
  899.                 sizeAzioni = fruitore.sizeConfigurazioneAzioneList();
  900.                 //cancellazione
  901.                 DriverRegistroServiziDB_accordiParteSpecificaLIB.deleteAllAzioniFruizioneServizio(idFruizione, con);
  902.                 //creazione
  903.                 for (int i = 0; i < sizeAzioni; i++) {
  904.                     ConfigurazioneServizioAzione conf = fruitore.getConfigurazioneAzione(i);
  905.                     DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaFruitoreAzioni(1, conf, con, servizio, fruitore, driverBYOK);
  906.                 }
  907.                                
  908.                 // ProtocolProperties
  909.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.UPDATE, fruitore.getProtocolPropertyList(),
  910.                         idFruizione, ProprietariProtocolProperty.FRUITORE, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  911.                
  912.                 break;

  913.             case 3:
  914.                
  915.                 // ProtocolProperties
  916.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.DELETE, null,
  917.                         idFruizione, ProprietariProtocolProperty.FRUITORE, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  918.                
  919.                
  920.                 // elimino azioni
  921.                 sizeAzioni = fruitore.sizeConfigurazioneAzioneList();
  922.                 for (int i = 0; i < sizeAzioni; i++) {
  923.                     ConfigurazioneServizioAzione conf = fruitore.getConfigurazioneAzione(i);
  924.                     DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecificaFruitoreAzioni(3, conf, con, servizio, fruitore, driverBYOK);
  925.                 }
  926.                
  927.                 // delete
  928.                 idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreServizioFruitore(idServizio, nomeSoggetto, tipoSoggetto, con);
  929.                 connettore.setId(idConnettore);
  930.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  931.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_FRUITORI);
  932.                 sqlQueryObject.addWhereCondition("id_servizio=?");
  933.                 sqlQueryObject.addWhereCondition("id_soggetto=?");
  934.                 sqlQueryObject.addWhereCondition("id_connettore=?");
  935.                 sqlQueryObject.setANDLogicOperator(true);
  936.                 String sqlQuery = sqlQueryObject.createSQLDelete();
  937.                 updateStmt = con.prepareStatement(sqlQuery);
  938.                 updateStmt.setLong(1, idServizio);
  939.                 updateStmt.setLong(2, idSoggettoFruitore);
  940.                 updateStmt.setLong(3, idConnettore);
  941.                 n=updateStmt.executeUpdate();
  942.                 updateStmt.close();
  943.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitore DELETE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idServizio, idSoggettoFruitore, idConnettore));

  944.                 // elimino il connettore
  945.                 connettore=new Connettore();
  946.                 connettore.setId(idConnettore);
  947.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(3, connettore, con, driverBYOK);

  948.                 break;
  949.             }

  950.             DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitore type = " + type + " row affected =" + n);

  951.             if (CostantiDB.CREATE == type) {
  952.                 return idFruizione;
  953.             }

  954.             return n;

  955.         } catch (SQLException se) {
  956.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDFruitore] SQLException : " + se.getMessage(),se);
  957.         }  catch (Exception se) {
  958.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDFruitore] Exception : " + se.getMessage(),se);
  959.         }finally {
  960.             JDBCUtilities.closeResources(selectRS, selectStmt);
  961.             JDBCUtilities.closeResources(updateStmt);
  962.         }
  963.     }
  964.    
  965.    
  966.     public static long CRUDAccordoServizioParteSpecificaAzioni(int type, ConfigurazioneServizioAzione conf, Connection con, AccordoServizioParteSpecifica servizio, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {
  967.         PreparedStatement updateStmt = null;
  968.         String updateQuery;
  969.         PreparedStatement selectStmt = null;
  970.         String selectQuery = "";
  971.         ResultSet selectRS = null;

  972.         long idServizio = -1;
  973.         try{
  974.             String tipoServ = servizio.getTipo();
  975.             String nomeServ = servizio.getNome();
  976.             Integer verServ = servizio.getVersione();
  977.             String tipoSogg = servizio.getTipoSoggettoErogatore();
  978.             String nomeSogg = servizio.getNomeSoggettoErogatore();
  979.            
  980.             idServizio = DBUtils.getIdServizio(nomeServ, tipoServ, verServ, nomeSogg, tipoSogg, con, DriverRegistroServiziDB_LIB.tipoDB);
  981.         } catch (CoreException e1) {
  982.             DriverRegistroServiziDB_LIB.logError("Driver Error.", e1);
  983.             throw new DriverRegistroServiziException(e1);
  984.         }

  985.         if (idServizio <= 0)
  986.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaAzioni] ID Servizio non valido.");

  987.         Connettore connettore = conf.getConnettore();
  988.         if (connettore == null && type != CostantiDB.CREATE && type!=CostantiDB.DELETE)
  989.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaAzioni] il connettore non puo essere nullo.");

  990.         if(conf.sizeAzioneList()<=0) {
  991.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaAzioni] la configurazione non contiene azioni??");
  992.         }
  993.        
  994.         String azioneValue = conf.getAzione(0); // prendo la prima, tanto devono essere tutte diverse tra le varie configurazioni
  995.         if (azioneValue == null || azioneValue.equals(""))
  996.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaAzioni] Azione non valida.");

  997.         String nomeConnettore = "CNT_SAZIONE_" + servizio.getTipoSoggettoErogatore()+"/"+servizio.getNomeSoggettoErogatore() +"_"+ servizio.getTipo() +"/"+servizio.getNome()+"/"+servizio.getVersione()+"_"+azioneValue;
  998.         if (connettore == null) {
  999.             connettore = new Connettore();
  1000.         }
  1001.         connettore.setNome(nomeConnettore);
  1002.        
  1003.         long idConnettore = 0;
  1004.         long n = 0;
  1005.         try {
  1006.             switch (type) {
  1007.             case 1:
  1008.                
  1009.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(CostantiDB.CREATE, connettore, con, driverBYOK);
  1010.                 idConnettore = connettore.getId();

  1011.                 // create
  1012.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1013.                 sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_AZIONI);
  1014.                 sqlQueryObject.addInsertField("id_servizio", "?");
  1015.                 sqlQueryObject.addInsertField("id_connettore", "?");
  1016.                 updateQuery = sqlQueryObject.createSQLInsert();
  1017.                 updateStmt = con.prepareStatement(updateQuery);
  1018.                 updateStmt.setLong(1, idServizio);
  1019.                 updateStmt.setLong(2, idConnettore);
  1020.                 n = updateStmt.executeUpdate();
  1021.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaAzioni CREATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, idServizio, idConnettore));
  1022.                 updateStmt.close();
  1023.                
  1024.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1025.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_AZIONI);
  1026.                 sqlQueryObject.addSelectField("id");
  1027.                 sqlQueryObject.addWhereCondition("id_servizio = ?");
  1028.                 sqlQueryObject.addWhereCondition("id_connettore = ?"); // idconnettore sara' univoco!
  1029.                 sqlQueryObject.setANDLogicOperator(true);
  1030.                 selectQuery = sqlQueryObject.createSQLQuery();
  1031.                 selectStmt = con.prepareStatement(selectQuery);
  1032.                 selectStmt.setLong(1, idServizio);
  1033.                 selectStmt.setLong(2, idConnettore);
  1034.                 selectRS = selectStmt.executeQuery();
  1035.                 long idServizioAzione = -1;
  1036.                 if (selectRS.next()) {
  1037.                     idServizioAzione = selectRS.getLong("id");
  1038.                 }
  1039.                 selectRS.close();
  1040.                 selectStmt.close();
  1041.                 if(idServizioAzione<=0) {
  1042.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaAzioni] Recuro id per idServizio["+idServizio+"] idConnettore["+idConnettore+"] non riuscito");
  1043.                 }
  1044.                
  1045.                 for (String azione : conf.getAzioneList()) {
  1046.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1047.                     sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_AZIONE);
  1048.                     sqlQueryObject.addInsertField("nome_azione", "?");
  1049.                     sqlQueryObject.addInsertField("id_servizio_azioni", "?");
  1050.                     updateQuery = sqlQueryObject.createSQLInsert();
  1051.                     updateStmt = con.prepareStatement(updateQuery);
  1052.                     updateStmt.setString(1, azione);
  1053.                     updateStmt.setLong(2, idServizioAzione);
  1054.                     n = updateStmt.executeUpdate();
  1055.                     DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaAzione CREATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, azione, idServizioAzione));
  1056.                     updateStmt.close();
  1057.                 }
  1058.                
  1059.                 break;

  1060.             case 2:
  1061.                 // update
  1062.                 idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreServizioAzione(idServizio, azioneValue, con);
  1063.                 if(idConnettore<0) throw new DriverRegistroServiziException("Il connettore dell'azione ["+azioneValue+"] del Servizio e' invalido id<0");
  1064.                 connettore.setId(idConnettore);

  1065.                 // modifico i dati del connettore
  1066.                 //aggiorno nome
  1067.                 DriverRegistroServiziDB_LIB.logDebug("Tento aggiornamento connettore id: ["+idConnettore+"] oldNome: ["+connettore.getNome()+"]...");
  1068.                 DriverRegistroServiziDB_LIB.logDebug("nuovo nome connettore ["+connettore.getNome()+"]");
  1069.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(2, connettore, con, driverBYOK);

  1070.                 break;

  1071.             case 3:
  1072.                 // delete
  1073.                 idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreServizioAzione(idServizio, azioneValue, con);
  1074.                 connettore.setId(idConnettore);
  1075.                
  1076.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1077.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_AZIONI);
  1078.                 sqlQueryObject.addSelectField("id");
  1079.                 sqlQueryObject.addWhereCondition("id_servizio = ?");
  1080.                 sqlQueryObject.addWhereCondition("id_connettore = ?"); // idconnettore sara' univoco!
  1081.                 sqlQueryObject.setANDLogicOperator(true);
  1082.                 selectQuery = sqlQueryObject.createSQLQuery();
  1083.                 selectStmt = con.prepareStatement(selectQuery);
  1084.                 selectStmt.setLong(1, idServizio);
  1085.                 selectStmt.setLong(2, idConnettore);
  1086.                 selectRS = selectStmt.executeQuery();
  1087.                 idServizioAzione = -1;
  1088.                 if (selectRS.next()) {
  1089.                     idServizioAzione = selectRS.getLong("id");
  1090.                 }
  1091.                 selectRS.close();
  1092.                 selectStmt.close();
  1093.                 if(idServizioAzione<=0) {
  1094.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaAzioni] Recuro id per idServizio["+idServizio+"] idConnettore["+idConnettore+"] non riuscito");
  1095.                 }
  1096.                    
  1097.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1098.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_AZIONE);
  1099.                 sqlQueryObject.addWhereCondition("id_servizio_azioni=?");
  1100.                 sqlQueryObject.setANDLogicOperator(true);
  1101.                 String sqlQuery = sqlQueryObject.createSQLDelete();
  1102.                 updateStmt = con.prepareStatement(sqlQuery);
  1103.                 updateStmt.setLong(1, idServizioAzione);
  1104.                 n=updateStmt.executeUpdate();
  1105.                 updateStmt.close();
  1106.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaAzioni DELETE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idServizioAzione));

  1107.                
  1108.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1109.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_AZIONI);
  1110.                 sqlQueryObject.addWhereCondition("id=?");
  1111.                 sqlQueryObject.setANDLogicOperator(true);
  1112.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1113.                 updateStmt = con.prepareStatement(sqlQuery);
  1114.                 updateStmt.setLong(1, idServizioAzione);
  1115.                 n=updateStmt.executeUpdate();
  1116.                 updateStmt.close();
  1117.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaAzioni DELETE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery,idServizioAzione));

  1118.                 // elimino il connettore
  1119.                 connettore=new Connettore();
  1120.                 connettore.setId(idConnettore);
  1121.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(3, connettore, con, driverBYOK);

  1122.                 break;
  1123.             }

  1124.             DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaAzioni type = " + type + " row affected =" + n);

  1125.             return n;

  1126.         } catch (SQLException se) {
  1127.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaAzioni] SQLException : " + se.getMessage(),se);
  1128.         }  catch (Exception se) {
  1129.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaAzioni] Exception : " + se.getMessage(),se);
  1130.         }finally {
  1131.             JDBCUtilities.closeResources(selectRS, selectStmt);
  1132.             JDBCUtilities.closeResources(updateStmt);
  1133.         }
  1134.     }
  1135.    
  1136.     public static long CRUDAccordoServizioParteSpecificaFruitoreAzioni(int type, ConfigurazioneServizioAzione conf, Connection con,
  1137.             AccordoServizioParteSpecifica servizio, Fruitore fruitore, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {
  1138.         PreparedStatement updateStmt = null;
  1139.         String updateQuery;
  1140.         PreparedStatement selectStmt = null;
  1141.         String selectQuery = "";
  1142.         ResultSet selectRS = null;
  1143.        
  1144.         long idFruizione = -1;
  1145.         try{
  1146.             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(servizio);
  1147.             IDSoggetto idFruitore = new IDSoggetto(fruitore.getTipo(), fruitore.getNome());
  1148.             idFruizione = DBUtils.getIdFruizioneServizio(idServizio, idFruitore, con, DriverRegistroServiziDB_LIB.tipoDB);
  1149.         } catch (CoreException e1) {
  1150.             DriverRegistroServiziDB_LIB.logError("Driver Error.", e1);
  1151.             throw new DriverRegistroServiziException(e1);
  1152.         }
  1153.         if (idFruizione <= 0)
  1154.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitoreAzioni] ID Servizio non valido.");
  1155.        
  1156.         Connettore connettore = conf.getConnettore();
  1157.         if (connettore == null && type != CostantiDB.CREATE && type!=CostantiDB.DELETE)
  1158.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitoreAzioni] il connettore non puo essere nullo.");

  1159.         if(conf.sizeAzioneList()<=0) {
  1160.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitoreAzioni] la configurazione non contiene azioni??");
  1161.         }
  1162.        
  1163.         String azioneValue = conf.getAzione(0); // prendo la prima, tanto devono essere tutte diverse tra le varie configurazioni
  1164.         if (azioneValue == null || azioneValue.equals(""))
  1165.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitoreAzioni] Azione non valida.");

  1166.         String nomeConnettore = "CNT_SF_AZIONE_" + fruitore.getTipo()+"/"+fruitore.getNome()+"_"+  servizio.getTipoSoggettoErogatore()+"/"+servizio.getNomeSoggettoErogatore() +"_"+ servizio.getTipo() +"/"+servizio.getNome()+"/"+servizio.getVersione()+"_"+azioneValue;
  1167.         if (connettore == null) {
  1168.             connettore = new Connettore();
  1169.         }
  1170.         connettore.setNome(nomeConnettore);
  1171.        
  1172.         long idConnettore = 0;
  1173.         long n = 0;
  1174.         try {
  1175.             switch (type) {
  1176.             case 1:
  1177.                
  1178.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(CostantiDB.CREATE, connettore, con, driverBYOK);
  1179.                 idConnettore = connettore.getId();

  1180.                 // create
  1181.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1182.                 sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_FRUITORI_AZIONI);
  1183.                 sqlQueryObject.addInsertField("id_fruizione", "?");
  1184.                 sqlQueryObject.addInsertField("id_connettore", "?");
  1185.                 updateQuery = sqlQueryObject.createSQLInsert();
  1186.                 updateStmt = con.prepareStatement(updateQuery);
  1187.                 updateStmt.setLong(1, idFruizione);
  1188.                 updateStmt.setLong(2, idConnettore);
  1189.                 n = updateStmt.executeUpdate();
  1190.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitoreAzioni CREATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, idFruizione, idConnettore));
  1191.                 updateStmt.close();
  1192.                
  1193.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1194.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI_AZIONI);
  1195.                 sqlQueryObject.addSelectField("id");
  1196.                 sqlQueryObject.addWhereCondition("id_fruizione = ?");
  1197.                 sqlQueryObject.addWhereCondition("id_connettore = ?"); // idconnettore sara' univoco!
  1198.                 sqlQueryObject.setANDLogicOperator(true);
  1199.                 selectQuery = sqlQueryObject.createSQLQuery();
  1200.                 selectStmt = con.prepareStatement(selectQuery);
  1201.                 selectStmt.setLong(1, idFruizione);
  1202.                 selectStmt.setLong(2, idConnettore);
  1203.                 selectRS = selectStmt.executeQuery();
  1204.                 long idFruizioneAzione = -1;
  1205.                 if (selectRS.next()) {
  1206.                     idFruizioneAzione = selectRS.getLong("id");
  1207.                 }
  1208.                 selectRS.close();
  1209.                 selectStmt.close();
  1210.                 if(idFruizioneAzione<=0) {
  1211.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitoreAzioni] Recuro id per idFruizione["+idFruizione+"] idConnettore["+idConnettore+"] non riuscito");
  1212.                 }
  1213.                
  1214.                 for (String azione : conf.getAzioneList()) {
  1215.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1216.                     sqlQueryObject.addInsertTable(CostantiDB.SERVIZI_FRUITORI_AZIONE);
  1217.                     sqlQueryObject.addInsertField("nome_azione", "?");
  1218.                     sqlQueryObject.addInsertField("id_fruizione_azioni", "?");
  1219.                     updateQuery = sqlQueryObject.createSQLInsert();
  1220.                     updateStmt = con.prepareStatement(updateQuery);
  1221.                     updateStmt.setString(1, azione);
  1222.                     updateStmt.setLong(2, idFruizioneAzione);
  1223.                     n = updateStmt.executeUpdate();
  1224.                     DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitoreAzioni CREATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, azione, idFruizioneAzione));
  1225.                     updateStmt.close();
  1226.                 }
  1227.                
  1228.                 break;

  1229.             case 2:
  1230.                 // update
  1231.                 idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreFruizioneServizioAzione(idFruizione, azioneValue, con);
  1232.                 if(idConnettore<0) throw new DriverRegistroServiziException("Il connettore dell'azione ["+azioneValue+"] della fruizione di Servizio e' invalido id<0");
  1233.                 connettore.setId(idConnettore);

  1234.                 // modifico i dati del connettore
  1235.                 //aggiorno nome
  1236.                 DriverRegistroServiziDB_LIB.logDebug("Tento aggiornamento connettore id: ["+idConnettore+"] oldNome: ["+connettore.getNome()+"]...");
  1237.                 DriverRegistroServiziDB_LIB.logDebug("nuovo nome connettore ["+connettore.getNome()+"]");
  1238.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(2, connettore, con, driverBYOK);

  1239.                 break;

  1240.             case 3:
  1241.                 // delete
  1242.                 idConnettore = DriverRegistroServiziDB_LIB.getIdConnettoreFruizioneServizioAzione(idFruizione, azioneValue, con);
  1243.                 connettore.setId(idConnettore);
  1244.                
  1245.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1246.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI_AZIONI);
  1247.                 sqlQueryObject.addSelectField("id");
  1248.                 sqlQueryObject.addWhereCondition("id_fruizione = ?");
  1249.                 sqlQueryObject.addWhereCondition("id_connettore = ?"); // idconnettore sara' univoco!
  1250.                 sqlQueryObject.setANDLogicOperator(true);
  1251.                 selectQuery = sqlQueryObject.createSQLQuery();
  1252.                 selectStmt = con.prepareStatement(selectQuery);
  1253.                 selectStmt.setLong(1, idFruizione);
  1254.                 selectStmt.setLong(2, idConnettore);
  1255.                 selectRS = selectStmt.executeQuery();
  1256.                 idFruizioneAzione = -1;
  1257.                 if (selectRS.next()) {
  1258.                     idFruizioneAzione = selectRS.getLong("id");
  1259.                 }
  1260.                 selectRS.close();
  1261.                 selectStmt.close();
  1262.                 if(idFruizioneAzione<=0) {
  1263.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitoreAzioni] Recuro id per idFruizione["+idFruizione+"] idConnettore["+idConnettore+"] non riuscito");
  1264.                 }
  1265.                    
  1266.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1267.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_FRUITORI_AZIONE);
  1268.                 sqlQueryObject.addWhereCondition("id_fruizione_azioni=?");
  1269.                 sqlQueryObject.setANDLogicOperator(true);
  1270.                 String sqlQuery = sqlQueryObject.createSQLDelete();
  1271.                 updateStmt = con.prepareStatement(sqlQuery);
  1272.                 updateStmt.setLong(1, idFruizioneAzione);
  1273.                 n=updateStmt.executeUpdate();
  1274.                 updateStmt.close();
  1275.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitoreAzioni DELETE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idFruizioneAzione));

  1276.                
  1277.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1278.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_FRUITORI_AZIONI);
  1279.                 sqlQueryObject.addWhereCondition("id=?");
  1280.                 sqlQueryObject.setANDLogicOperator(true);
  1281.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1282.                 updateStmt = con.prepareStatement(sqlQuery);
  1283.                 updateStmt.setLong(1, idFruizioneAzione);
  1284.                 n=updateStmt.executeUpdate();
  1285.                 updateStmt.close();
  1286.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitoreAzioni DELETE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery,idFruizioneAzione));

  1287.                 // elimino il connettore
  1288.                 connettore=new Connettore();
  1289.                 connettore.setId(idConnettore);
  1290.                 DriverRegistroServiziDB_connettoriLIB.CRUDConnettore(3, connettore, con, driverBYOK);

  1291.                 break;
  1292.             }

  1293.             DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoServizioParteSpecificaFruitoreAzioni type = " + type + " row affected =" + n);

  1294.             return n;

  1295.         } catch (SQLException se) {
  1296.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitoreAzioni] SQLException : " + se.getMessage(),se);
  1297.         }  catch (Exception se) {
  1298.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioParteSpecificaFruitoreAzioni] Exception : " + se.getMessage(),se);
  1299.         }finally {
  1300.             JDBCUtilities.closeResources(selectRS, selectStmt);
  1301.             JDBCUtilities.closeResources(updateStmt);
  1302.         }
  1303.     }

  1304.    
  1305.     /**
  1306.      * Cancella tutti i fruitori di un servizio e i connettori associati ai fruitori
  1307.      * @param idServizio
  1308.      * @param con
  1309.      * @throws DriverRegistroServiziException
  1310.      */
  1311.     private static void deleteAllFruitoriServizio(long idServizio, List<Long> idFruitoriEsistenti, Connection con) throws DriverRegistroServiziException {
  1312.         PreparedStatement stm = null;
  1313.         ResultSet rs = null;
  1314.         try {

  1315.             ArrayList<Long> listaFruizioniDaEliminare = new ArrayList<>();
  1316.             ArrayList<Long> listaFruizioniDaEliminareConnettori = new ArrayList<>();

  1317.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1318.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  1319.             sqlQueryObject.addSelectField("*");
  1320.             sqlQueryObject.addWhereCondition("id_servizio = ?");
  1321.             String query = sqlQueryObject.createSQLQuery();
  1322.             stm = con.prepareStatement(query);
  1323.             stm.setLong(1, idServizio);

  1324.             rs=stm.executeQuery();
  1325.             //recupero i connettori da cancellare
  1326.             while(rs.next()){
  1327.                 long idSoggettoFruitore = rs.getLong("id_soggetto");
  1328.                 boolean find = false;
  1329.                 for (int i = 0; i < idFruitoriEsistenti.size(); i++) {
  1330.                     if(idSoggettoFruitore == idFruitoriEsistenti.get(i)){
  1331.                         find = true;
  1332.                         break;
  1333.                     }
  1334.                 }
  1335.                 if(!find){
  1336.                     listaFruizioniDaEliminare.add(rs.getLong("id"));
  1337.                     listaFruizioniDaEliminareConnettori.add(rs.getLong("id_connettore"));
  1338.                 }
  1339.             }
  1340.             rs.close();
  1341.             stm.close();

  1342.             for (int i = 0; i < listaFruizioniDaEliminare.size(); i++) {
  1343.            
  1344.                 long idFruizione = listaFruizioniDaEliminare.get(i);
  1345.                
  1346.                 // ProtocolProperties
  1347.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.DELETE, null,
  1348.                         idFruizione, ProprietariProtocolProperty.FRUITORE, con, DriverRegistroServiziDB_LIB.tipoDB, null);
  1349.                
  1350.                 //cancellazione azioni
  1351.                 DriverRegistroServiziDB_accordiParteSpecificaLIB.deleteAllAzioniFruizioneServizio(idFruizione, con);
  1352.                
  1353.                 //elimino prima le entry nella tab servizi_fruitori per rispettare le dipendenze
  1354.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1355.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_FRUITORI);
  1356.                 sqlQueryObject.addWhereCondition("id=?");
  1357.                 String sqlQuery = sqlQueryObject.createSQLDelete();
  1358.                 stm = con.prepareStatement(sqlQuery);
  1359.                 stm.setLong(1, idFruizione);
  1360.                 int n=stm.executeUpdate();
  1361.                 stm.close();
  1362.                 DriverRegistroServiziDB_LIB.logDebug("Cancellata (row:"+n+") fruizione con id:"+idFruizione);
  1363.    
  1364.             }
  1365.            
  1366.             for (int i = 0; i < listaFruizioniDaEliminareConnettori.size(); i++) {
  1367.                
  1368.                 long idFruizione = listaFruizioniDaEliminare.get(i);
  1369.                 long idConnettore = listaFruizioniDaEliminareConnettori.get(i);
  1370.                
  1371.                 //cancello adesso i connettori custom
  1372.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1373.                 sqlQueryObject.addDeleteTable(CostantiDB.CONNETTORI_CUSTOM);
  1374.                 sqlQueryObject.addWhereCondition("id_connettore=?");
  1375.                 String sqlQuery = sqlQueryObject.createSQLDelete();
  1376.                 stm = con.prepareStatement(sqlQuery);
  1377.                 stm.setLong(1, idConnettore);
  1378.                 stm.executeUpdate();
  1379.                 stm.close();
  1380.                 DriverRegistroServiziDB_LIB.logDebug("Cancellato connettore custom associato al connettore con id:"+idConnettore+" associato alla fruizione con id:"+idFruizione);
  1381.                
  1382.                 //cancello adesso i connettori
  1383.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1384.                 sqlQueryObject.addDeleteTable(CostantiDB.CONNETTORI);
  1385.                 sqlQueryObject.addWhereCondition("id=?");
  1386.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1387.                 stm = con.prepareStatement(sqlQuery);
  1388.                 stm.setLong(1, idConnettore);
  1389.                 stm.executeUpdate();
  1390.                 stm.close();
  1391.                 DriverRegistroServiziDB_LIB.logDebug("Cancellati connettoro con id:"+idConnettore+" associato alla fruizione con id:"+idFruizione);
  1392.                
  1393.             }



  1394.         } catch (SQLException e) {
  1395.             DriverRegistroServiziDB_LIB.logError("Errore SQL", e);
  1396.             throw new DriverRegistroServiziException(e);
  1397.         }catch (Exception e) {
  1398.             DriverRegistroServiziDB_LIB.logError("Errore", e);
  1399.             throw new DriverRegistroServiziException(e);
  1400.         } finally {
  1401.             JDBCUtilities.closeResources(stm);
  1402.         }
  1403.     }
  1404.    
  1405.    
  1406.     /**
  1407.      * Cancella tutti le azioni di un servizio e i connettori associati alle azioni
  1408.      * @param idServizio
  1409.      * @param con
  1410.      * @throws DriverRegistroServiziException
  1411.      */
  1412.     private static void deleteAllAzioniServizio(long idServizio, Connection con) throws DriverRegistroServiziException {
  1413.         PreparedStatement stm = null;
  1414.         ResultSet rs = null;
  1415.         try {

  1416.             ArrayList<Long> listaConnettori = new ArrayList<>();
  1417.             ArrayList<Long> listaConfigurazioni = new ArrayList<>();

  1418.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1419.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_AZIONI);
  1420.             sqlQueryObject.addSelectField("*");
  1421.             sqlQueryObject.addWhereCondition("id_servizio = ?");
  1422.             String query = sqlQueryObject.createSQLQuery();
  1423.             stm = con.prepareStatement(query);
  1424.             stm.setLong(1, idServizio);

  1425.             rs=stm.executeQuery();
  1426.             //recupero i connettori da cancellare
  1427.             while(rs.next()){
  1428.                 listaConnettori.add(rs.getLong("id_connettore"));
  1429.                 listaConfigurazioni.add(rs.getLong("id"));
  1430.             }
  1431.             rs.close();
  1432.             stm.close();

  1433.             //elimino prima le entry nella tab servizi_azione per rispettare le dipendenze
  1434.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1435.             sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_AZIONE);
  1436.             sqlQueryObject.addWhereCondition("id_servizio_azioni=?");
  1437.             String sqlQuery = sqlQueryObject.createSQLDelete();
  1438.             stm = con.prepareStatement(sqlQuery);
  1439.             for (Long idConfigurazione : listaConfigurazioni) {
  1440.                 stm.setLong(1, idConfigurazione);
  1441.                 int n=stm.executeUpdate();
  1442.                 DriverRegistroServiziDB_LIB.logDebug("Cancellati "+n+" Azioni della configurazione del servizio "+idConfigurazione);
  1443.             }
  1444.             stm.close();
  1445.                        
  1446.             //elimino prima le entry nella tab servizi_azioni per rispettare le dipendenze
  1447.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1448.             sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_AZIONI);
  1449.             sqlQueryObject.addWhereCondition("id_servizio=?");
  1450.             sqlQuery = sqlQueryObject.createSQLDelete();
  1451.             stm = con.prepareStatement(sqlQuery);
  1452.             stm.setLong(1, idServizio);
  1453.             int n=stm.executeUpdate();
  1454.             stm.close();
  1455.             DriverRegistroServiziDB_LIB.logDebug("Cancellati "+n+" Azioni del servizio "+idServizio);

  1456.             //cancello adesso i connettori custom
  1457.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1458.             sqlQueryObject.addDeleteTable(CostantiDB.CONNETTORI_CUSTOM);
  1459.             sqlQueryObject.addWhereCondition("id_connettore=?");
  1460.             sqlQuery = sqlQueryObject.createSQLDelete();
  1461.             stm = con.prepareStatement(sqlQuery);
  1462.             for (Long idConnettore : listaConnettori) {
  1463.                 stm.setLong(1, idConnettore);
  1464.                 stm.executeUpdate();
  1465.             }
  1466.             stm.close();
  1467.             DriverRegistroServiziDB_LIB.logDebug("Cancellati connettori "+listaConnettori.toString()+" associati alle azioni del servizio "+idServizio);
  1468.            
  1469.             //cancello adesso i connettori
  1470.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1471.             sqlQueryObject.addDeleteTable(CostantiDB.CONNETTORI);
  1472.             sqlQueryObject.addWhereCondition("id=?");
  1473.             sqlQuery = sqlQueryObject.createSQLDelete();
  1474.             stm = con.prepareStatement(sqlQuery);
  1475.             for (Long idConnettore : listaConnettori) {
  1476.                 stm.setLong(1, idConnettore);
  1477.                 stm.executeUpdate();
  1478.             }
  1479.             stm.close();
  1480.             DriverRegistroServiziDB_LIB.logDebug("Cancellati connettori "+listaConnettori.toString()+" associati ai Fruitori del servizio "+idServizio);



  1481.         } catch (SQLException e) {
  1482.             DriverRegistroServiziDB_LIB.logError("Errore SQL", e);
  1483.             throw new DriverRegistroServiziException(e);
  1484.         }catch (Exception e) {
  1485.             DriverRegistroServiziDB_LIB.logError("Errore", e);
  1486.             throw new DriverRegistroServiziException(e);
  1487.         } finally {
  1488.             JDBCUtilities.closeResources(stm);
  1489.         }
  1490.     }

  1491.    
  1492.     private static void deleteAllAzioniFruizioneServizio(long idFruizione, Connection con) throws DriverRegistroServiziException {
  1493.         PreparedStatement stm = null;
  1494.         ResultSet rs = null;
  1495.         try {

  1496.             ArrayList<Long> listaConnettori = new ArrayList<>();
  1497.             ArrayList<Long> listaConfigurazioni = new ArrayList<>();

  1498.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1499.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI_AZIONI);
  1500.             sqlQueryObject.addSelectField("*");
  1501.             sqlQueryObject.addWhereCondition("id_fruizione = ?");
  1502.             String query = sqlQueryObject.createSQLQuery();
  1503.             stm = con.prepareStatement(query);
  1504.             stm.setLong(1, idFruizione);

  1505.             rs=stm.executeQuery();
  1506.             //recupero i connettori da cancellare
  1507.             while(rs.next()){
  1508.                 listaConnettori.add(rs.getLong("id_connettore"));
  1509.                 listaConfigurazioni.add(rs.getLong("id"));
  1510.             }
  1511.             rs.close();
  1512.             stm.close();

  1513.             //elimino prima le entry nella tab servizi_azione per rispettare le dipendenze
  1514.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1515.             sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_FRUITORI_AZIONE);
  1516.             sqlQueryObject.addWhereCondition("id_fruizione_azioni=?");
  1517.             String sqlQuery = sqlQueryObject.createSQLDelete();
  1518.             stm = con.prepareStatement(sqlQuery);
  1519.             for (Long idConfigurazione : listaConfigurazioni) {
  1520.                 stm.setLong(1, idConfigurazione);
  1521.                 int n=stm.executeUpdate();
  1522.                 DriverRegistroServiziDB_LIB.logDebug("Cancellati "+n+" Azioni della configurazione della fruizione del servizio "+idConfigurazione);
  1523.             }
  1524.             stm.close();
  1525.                        
  1526.             //elimino prima le entry nella tab servizi_azioni per rispettare le dipendenze
  1527.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1528.             sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_FRUITORI_AZIONI);
  1529.             sqlQueryObject.addWhereCondition("id_fruizione=?");
  1530.             sqlQuery = sqlQueryObject.createSQLDelete();
  1531.             stm = con.prepareStatement(sqlQuery);
  1532.             stm.setLong(1, idFruizione);
  1533.             int n=stm.executeUpdate();
  1534.             stm.close();
  1535.             DriverRegistroServiziDB_LIB.logDebug("Cancellati "+n+" Azioni della fruizione del servizio "+idFruizione);

  1536.             //cancello adesso i connettori custom
  1537.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1538.             sqlQueryObject.addDeleteTable(CostantiDB.CONNETTORI_CUSTOM);
  1539.             sqlQueryObject.addWhereCondition("id_connettore=?");
  1540.             sqlQuery = sqlQueryObject.createSQLDelete();
  1541.             stm = con.prepareStatement(sqlQuery);
  1542.             for (Long idConnettore : listaConnettori) {
  1543.                 stm.setLong(1, idConnettore);
  1544.                 stm.executeUpdate();
  1545.             }
  1546.             stm.close();
  1547.             DriverRegistroServiziDB_LIB.logDebug("Cancellati connettori "+listaConnettori.toString()+" associati alle azioni della fruizione del servizio "+idFruizione);
  1548.            
  1549.             //cancello adesso i connettori
  1550.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1551.             sqlQueryObject.addDeleteTable(CostantiDB.CONNETTORI);
  1552.             sqlQueryObject.addWhereCondition("id=?");
  1553.             sqlQuery = sqlQueryObject.createSQLDelete();
  1554.             stm = con.prepareStatement(sqlQuery);
  1555.             for (Long idConnettore : listaConnettori) {
  1556.                 stm.setLong(1, idConnettore);
  1557.                 stm.executeUpdate();
  1558.             }
  1559.             stm.close();
  1560.             DriverRegistroServiziDB_LIB.logDebug("Cancellati connettori "+listaConnettori.toString()+" associati ai Fruitori della fruizione del servizio "+idFruizione);



  1561.         } catch (SQLException e) {
  1562.             DriverRegistroServiziDB_LIB.logError("Errore SQL", e);
  1563.             throw new DriverRegistroServiziException(e);
  1564.         }catch (Exception e) {
  1565.             DriverRegistroServiziDB_LIB.logError("Errore", e);
  1566.             throw new DriverRegistroServiziException(e);
  1567.         } finally {
  1568.             JDBCUtilities.closeResources(stm);
  1569.         }
  1570.     }
  1571.    
  1572.    
  1573. }