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.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  600.                 sqlQueryObject.addDeleteTable(CostantiDB.SERVIZI_DIGEST_PARAMS);
  601.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_DIGEST_PARAMS_COLUMN_ID_SERVIZIO_REF + "=?");
  602.                 try (PreparedStatement stmt = con.prepareStatement(sqlQueryObject.createSQLDelete())) {
  603.                     stmt.setLong(1, idServizio);
  604.                     n = stmt.executeUpdate();
  605.                 }

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

  622.                 // nn cancello azioni nn interessa per adesso

  623.                 break;
  624.             }

  625.             return n;

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

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

  632.         } finally {
  633.             JDBCUtilities.closeResources(updateRS, updateStmt);
  634.         }

  635.     }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  849.                 updateStmt.setString(1, wsdlImplementativoErogatore);
  850.                 updateStmt.setString(2, wsdlImplementativoFruitore);

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

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

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

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

  946.                 break;
  947.             }

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

  949.             if (CostantiDB.CREATE == type) {
  950.                 return idFruizione;
  951.             }

  952.             return n;

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

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

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

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

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

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

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

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

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

  1068.                 break;

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

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

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

  1120.                 break;
  1121.             }

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

  1123.             return n;

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

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

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

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

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

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

  1237.                 break;

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

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

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

  1289.                 break;
  1290.             }

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

  1292.             return n;

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

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

  1313.             ArrayList<Long> listaFruizioniDaEliminare = new ArrayList<>();
  1314.             ArrayList<Long> listaFruizioniDaEliminareConnettori = new ArrayList<>();

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

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

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



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

  1414.             ArrayList<Long> listaConnettori = new ArrayList<>();
  1415.             ArrayList<Long> listaConfigurazioni = new ArrayList<>();

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

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

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

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



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

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

  1494.             ArrayList<Long> listaConnettori = new ArrayList<>();
  1495.             ArrayList<Long> listaConfigurazioni = new ArrayList<>();

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

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

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

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



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