DriverRegistroServiziDB_accordiLIB.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.DBUtils;
  33. import org.openspcoop2.core.constants.CostantiDB;
  34. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  35. import org.openspcoop2.core.id.IDAccordo;
  36. import org.openspcoop2.core.id.IDGruppo;
  37. import org.openspcoop2.core.id.IDSoggetto;
  38. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  39. import org.openspcoop2.core.registry.Azione;
  40. import org.openspcoop2.core.registry.Documento;
  41. import org.openspcoop2.core.registry.GruppoAccordo;
  42. import org.openspcoop2.core.registry.PortType;
  43. import org.openspcoop2.core.registry.Resource;
  44. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  45. import org.openspcoop2.core.registry.constants.FormatoSpecifica;
  46. import org.openspcoop2.core.registry.constants.MessageType;
  47. import org.openspcoop2.core.registry.constants.ProfiloCollaborazione;
  48. import org.openspcoop2.core.registry.constants.ProprietariDocumento;
  49. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  50. import org.openspcoop2.core.registry.constants.ServiceBinding;
  51. import org.openspcoop2.core.registry.constants.StatoFunzionalita;
  52. import org.openspcoop2.core.registry.driver.BeanUtilities;
  53. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  54. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  55. import org.openspcoop2.utils.date.DateManager;
  56. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  57. import org.openspcoop2.utils.sql.ISQLQueryObject;
  58. import org.openspcoop2.utils.sql.SQLObjectFactory;
  59. import org.slf4j.Logger;

  60. /**
  61.  * Classe utilizzata per effettuare query ad un registro dei servizi openspcoop
  62.  * formato db.
  63.  *
  64.  *
  65.  * @author Sandra Giangrandi (sandra@link.it)
  66.  * @author Stefano Corallo (corallo@link.it)
  67.  * @author $Author$
  68.  * @version $Rev$, $Date$
  69.  */
  70. public class DriverRegistroServiziDB_accordiLIB {
  71.    
  72.     private DriverRegistroServiziDB_accordiLIB() {}
  73.    
  74.     private static final String ACCORDO_DIVERSO_NULL = "L'accordo non può essere null.";
  75.     private static final String NOME_ACCORDO_NON_VALIDO = "Il nome dell'accordo non è valido.";
  76.    
  77.     private static void logDebug(Logger log, String msg) {
  78.         if(log!=null) {
  79.             log.debug(msg);
  80.         }
  81.     }
  82.    
  83.     private static void logError(Logger log, String msg, Exception e) {
  84.         if(log!=null) {
  85.             log.error(msg,e);
  86.         }
  87.     }
  88.    
  89.     public static void createAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio,
  90.             Connection con, String tabellaSoggetti, Logger log, IDAccordoFactory idAccordoFactory, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {

  91.         if (accordoServizio == null)
  92.             throw new DriverRegistroServiziException(ACCORDO_DIVERSO_NULL);

  93.         String nome = accordoServizio.getNome();
  94.         if (nome == null || nome.equals(""))
  95.             throw new DriverRegistroServiziException(NOME_ACCORDO_NON_VALIDO);

  96.         ServiceBinding serviceBinding = accordoServizio.getServiceBinding();
  97.         MessageType messageType = accordoServizio.getMessageType();
  98.        
  99.         StatoFunzionalita confermaRicezione = accordoServizio.getConfermaRicezione();
  100.         StatoFunzionalita conegnaInOrdine = accordoServizio.getConsegnaInOrdine();
  101.         String descrizione = accordoServizio.getDescrizione();
  102.         StatoFunzionalita filtroDuplicati = accordoServizio.getFiltroDuplicati();
  103.         StatoFunzionalita identificativoCollaborazione = accordoServizio.getIdCollaborazione();
  104.         StatoFunzionalita identificativoRiferimentoRichiesta = accordoServizio.getIdRiferimentoRichiesta();

  105.         ProfiloCollaborazione profiloCollaborazione = accordoServizio.getProfiloCollaborazione();
  106.         String scadenza = accordoServizio.getScadenza();
  107.         boolean utilizzioSenzaAzione = accordoServizio.getUtilizzoSenzaAzione();
  108.         String wsdlConcettuale = (accordoServizio.getByteWsdlConcettuale()!=null ? new String(accordoServizio.getByteWsdlConcettuale()) : null);
  109.         String wsdlDefinitorio = (accordoServizio.getByteWsdlDefinitorio()!=null ? new String(accordoServizio.getByteWsdlDefinitorio()) : null);
  110.         String wsdlLogicoErogatore = (accordoServizio.getByteWsdlLogicoErogatore()!=null ? new String(accordoServizio.getByteWsdlLogicoErogatore()) : null);
  111.         String wsdlLogicoFruitore = (accordoServizio.getByteWsdlLogicoFruitore()!=null ? new String(accordoServizio.getByteWsdlLogicoFruitore()) : null);
  112.         String conversazioneConcettuale = (accordoServizio.getByteSpecificaConversazioneConcettuale()!=null ? new String(accordoServizio.getByteSpecificaConversazioneConcettuale()) : null);
  113.         String conversazioneErogatore = (accordoServizio.getByteSpecificaConversazioneErogatore()!=null ? new String(accordoServizio.getByteSpecificaConversazioneErogatore()) : null);
  114.         String conversazioneFruitore = (accordoServizio.getByteSpecificaConversazioneFruitore()!=null ? new String(accordoServizio.getByteSpecificaConversazioneFruitore()) : null);
  115.         String superUser = accordoServizio.getSuperUser();

  116.         FormatoSpecifica formatoSpecifica = accordoServizio.getFormatoSpecifica();
  117.         wsdlConcettuale = wsdlConcettuale!=null && !"".equals(wsdlConcettuale.trim().replace("\n", "")) ? wsdlConcettuale : null;
  118.         wsdlDefinitorio = wsdlDefinitorio!=null && !"".equals(wsdlDefinitorio.trim().replace("\n", "")) ? wsdlDefinitorio : null;
  119.         wsdlLogicoErogatore = wsdlLogicoErogatore!=null && !"".equals(wsdlLogicoErogatore.trim().replace("\n", "")) ? wsdlLogicoErogatore : null;
  120.         wsdlLogicoFruitore = wsdlLogicoFruitore!=null && !"".equals(wsdlLogicoFruitore.trim().replace("\n", "")) ? wsdlLogicoFruitore : null;
  121.         conversazioneConcettuale = conversazioneConcettuale!=null && !"".equals(conversazioneConcettuale.trim().replace("\n", "")) ? conversazioneConcettuale : null;
  122.         conversazioneErogatore = conversazioneErogatore!=null && !"".equals(conversazioneErogatore.trim().replace("\n", "")) ? conversazioneErogatore : null;
  123.         conversazioneFruitore = conversazioneFruitore!=null && !"".equals(conversazioneFruitore.trim().replace("\n", "")) ? conversazioneFruitore : null;

  124.         String utenteRichiedente = null;
  125.         if(accordoServizio.getProprietaOggetto()!=null && accordoServizio.getProprietaOggetto().getUtenteRichiedente()!=null) {
  126.             utenteRichiedente = accordoServizio.getProprietaOggetto().getUtenteRichiedente();
  127.         }
  128.         else {
  129.             utenteRichiedente = superUser;
  130.         }
  131.        
  132.         Timestamp dataCreazione = null;
  133.         if(accordoServizio.getProprietaOggetto()!=null && accordoServizio.getProprietaOggetto().getDataCreazione()!=null) {
  134.             dataCreazione = new Timestamp(accordoServizio.getProprietaOggetto().getDataCreazione().getTime());
  135.         }
  136.         else if(accordoServizio.getOraRegistrazione()!=null){
  137.             dataCreazione = new Timestamp(accordoServizio.getOraRegistrazione().getTime());
  138.         }
  139.         else {
  140.             dataCreazione = DateManager.getTimestamp();
  141.         }
  142.        
  143.         String sqlQuery = "";

  144.         PreparedStatement stm = null;
  145.        
  146.         try {
  147.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  148.             sqlQueryObject.addInsertTable(CostantiDB.ACCORDI);
  149.             sqlQueryObject.addInsertField("service_binding", "?");
  150.             sqlQueryObject.addInsertField("message_type", "?");
  151.             sqlQueryObject.addInsertField("conferma_ricezione", "?");
  152.             sqlQueryObject.addInsertField("consegna_in_ordine", "?");
  153.             sqlQueryObject.addInsertField("descrizione", "?");
  154.             sqlQueryObject.addInsertField("filtro_duplicati", "?");
  155.             sqlQueryObject.addInsertField("identificativo_collaborazione", "?");
  156.             sqlQueryObject.addInsertField("id_riferimento_richiesta", "?");
  157.             sqlQueryObject.addInsertField("nome", "?");
  158.             sqlQueryObject.addInsertField("profilo_collaborazione", "?");
  159.             sqlQueryObject.addInsertField("scadenza", "?");
  160.             sqlQueryObject.addInsertField("formato_specifica", "?");
  161.             sqlQueryObject.addInsertField("wsdl_concettuale", "?");
  162.             sqlQueryObject.addInsertField("wsdl_definitorio", "?");
  163.             sqlQueryObject.addInsertField("wsdl_logico_erogatore", "?");
  164.             sqlQueryObject.addInsertField("wsdl_logico_fruitore", "?");
  165.             sqlQueryObject.addInsertField("spec_conv_concettuale", "?");
  166.             sqlQueryObject.addInsertField("spec_conv_erogatore", "?");
  167.             sqlQueryObject.addInsertField("spec_conv_fruitore", "?");
  168.             sqlQueryObject.addInsertField("superuser", "?");
  169.             sqlQueryObject.addInsertField("utilizzo_senza_azione", "?");
  170.             sqlQueryObject.addInsertField("privato", "?");
  171.             if(accordoServizio.getStatoPackage()!=null)
  172.                 sqlQueryObject.addInsertField("stato", "?");
  173.             sqlQueryObject.addInsertField("canale", "?");
  174.             if(accordoServizio.getSoggettoReferente()!=null)
  175.                 sqlQueryObject.addInsertField("id_referente", "?");
  176.             sqlQueryObject.addInsertField("versione", "?");
  177.             if(accordoServizio.getOraRegistrazione()!=null)
  178.                 sqlQueryObject.addInsertField("ora_registrazione", "?");
  179.             if(utenteRichiedente!=null) {
  180.                 sqlQueryObject.addInsertField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_RICHIEDENTE, "?");
  181.             }
  182.             if(dataCreazione!=null) {
  183.                 sqlQueryObject.addInsertField(CostantiDB.PROPRIETA_OGGETTO_DATA_CREAZIONE, "?");
  184.             }
  185.             sqlQuery = sqlQueryObject.createSQLInsert();
  186.             stm = con.prepareStatement(sqlQuery);
  187.             int index = 1;
  188.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(serviceBinding));
  189.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(messageType));
  190.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(confermaRicezione));
  191.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(conegnaInOrdine));
  192.             stm.setString(index++, descrizione);
  193.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(filtroDuplicati));
  194.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(identificativoCollaborazione));
  195.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(identificativoRiferimentoRichiesta));
  196.             stm.setString(index++, nome);
  197.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(profiloCollaborazione));
  198.             stm.setString(index++, scadenza);
  199.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(formatoSpecifica));
  200.             stm.setString(index++, wsdlConcettuale!=null && !wsdlConcettuale.trim().equals("") ? wsdlConcettuale : null);
  201.             stm.setString(index++, wsdlDefinitorio!=null && !wsdlDefinitorio.trim().equals("") ? wsdlDefinitorio : null );
  202.             stm.setString(index++ ,wsdlLogicoErogatore!=null && !wsdlLogicoErogatore.trim().equals("") ? wsdlLogicoErogatore : null );
  203.             stm.setString(index++, wsdlLogicoFruitore!=null && !wsdlLogicoFruitore.trim().equals("") ? wsdlLogicoFruitore : null );
  204.             stm.setString(index++, conversazioneConcettuale!=null && !conversazioneConcettuale.trim().equals("") ? conversazioneConcettuale : null);
  205.             stm.setString(index++ ,conversazioneErogatore!=null && !conversazioneErogatore.trim().equals("") ? conversazioneErogatore : null );
  206.             stm.setString(index++, conversazioneFruitore!=null && !conversazioneFruitore.trim().equals("") ? conversazioneFruitore : null );
  207.             stm.setString(index++, superUser);
  208.             stm.setInt(index++, utilizzioSenzaAzione ? CostantiDB.TRUE : CostantiDB.FALSE);
  209.             if (accordoServizio.getPrivato()!=null && accordoServizio.getPrivato())
  210.                 stm.setInt(index++, 1);
  211.             else
  212.                 stm.setInt(index++, 0);
  213.             if(accordoServizio.getStatoPackage()!=null){
  214.                 stm.setString(index, accordoServizio.getStatoPackage());
  215.                 index++;
  216.             }
  217.             stm.setString(index, accordoServizio.getCanale());
  218.             index++;
  219.            
  220.             long idReferente = -1;
  221.             if(accordoServizio.getSoggettoReferente()!=null){
  222.                 idReferente = DBUtils.getIdSoggetto(accordoServizio.getSoggettoReferente().getNome(), accordoServizio.getSoggettoReferente().getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB, tabellaSoggetti);
  223.                 if(idReferente<=0){
  224.                     throw new DriverRegistroServiziException("Soggetto Referente ["+accordoServizio.getSoggettoReferente().getTipo()+"/"+accordoServizio.getSoggettoReferente().getNome()+"] non trovato");
  225.                 }
  226.                 stm.setLong(index, idReferente);
  227.                 index++;
  228.             }

  229.             stm.setInt(index, accordoServizio.getVersione());
  230.             index++;

  231.             if(accordoServizio.getOraRegistrazione()!=null){
  232.                 stm.setTimestamp(index, new Timestamp(accordoServizio.getOraRegistrazione().getTime()));
  233.                 index++;
  234.             }
  235.            
  236.             if(utenteRichiedente!=null) {
  237.                 stm.setString(index, utenteRichiedente);
  238.                 index++;
  239.             }
  240.            
  241.             if(dataCreazione!=null) {
  242.                 stm.setTimestamp(index, dataCreazione);
  243.                 index++;
  244.             }

  245.             String msgDebug = "inserisco accordoServizio : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery,
  246.                     serviceBinding, messageType,
  247.                     confermaRicezione, conegnaInOrdine, descrizione,
  248.                     filtroDuplicati, identificativoCollaborazione, identificativoRiferimentoRichiesta, nome, profiloCollaborazione, scadenza,
  249.                     wsdlConcettuale, wsdlDefinitorio, wsdlLogicoErogatore, wsdlLogicoFruitore,
  250.                     conversazioneConcettuale, conversazioneErogatore, conversazioneFruitore,
  251.                     superUser, accordoServizio.getUtilizzoSenzaAzione(),
  252.                     (accordoServizio.getPrivato()!=null && accordoServizio.getPrivato()));
  253.             log.debug(msgDebug);

  254.             // eseguo la query
  255.             stm.executeUpdate();
  256.             stm.close();
  257.             // recupero l-id dell'accordo appena inserito
  258.             IDSoggetto soggettoReferente = null;
  259.             if(accordoServizio.getSoggettoReferente()!=null){
  260.                 soggettoReferente = new IDSoggetto(accordoServizio.getSoggettoReferente().getTipo(),accordoServizio.getSoggettoReferente().getNome());
  261.             }
  262.             IDAccordo idAccordoObject = idAccordoFactory.getIDAccordoFromValues(accordoServizio.getNome(),soggettoReferente,accordoServizio.getVersione());
  263.             long idAccordo = DBUtils.getIdAccordoServizioParteComune(idAccordoObject, con, DriverRegistroServiziDB_LIB.tipoDB);
  264.             if (idAccordo<=0) {
  265.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::createAccordoServizio] non riesco a trovare l'id del'Accordo inserito");
  266.             }
  267.             accordoServizio.setId(idAccordo);
  268.             // aggiungo le eventuali azioni che c-erano
  269.            
  270.             Azione azione = null;
  271.             for (int i = 0; i < accordoServizio.sizeAzioneList(); i++) {
  272.                 azione = accordoServizio.getAzione(i);
  273.                 DriverRegistroServiziDB_accordiSoapLIB.CRUDAzione(CostantiDB.CREATE,accordoServizio, azione, con, idAccordo, driverBYOK);

  274.             }
  275.             logDebug(log, "inserite " + accordoServizio.sizeAzioneList() + " azioni relative all'accordo :" + nome + " id :" + idAccordo);

  276.             PortType pt = null;
  277.             for (int i = 0; i < accordoServizio.sizePortTypeList(); i++) {
  278.                 pt = accordoServizio.getPortType(i);
  279.                 DriverRegistroServiziDB_accordiSoapLIB.CRUDPortType(CostantiDB.CREATE,accordoServizio,pt, con, idAccordo, driverBYOK);
  280.             }
  281.             logDebug(log, "inserite " + accordoServizio.sizePortTypeList() + " porttype relative all'accordo :" + nome + " id :" + idAccordo);

  282.             Resource resource = null;
  283.             for (int i = 0; i < accordoServizio.sizeResourceList(); i++) {
  284.                 resource = accordoServizio.getResource(i);
  285.                 DriverRegistroServiziDB_accordiRestLIB.CRUDResource(CostantiDB.CREATE,accordoServizio,resource, con, idAccordo, driverBYOK);
  286.             }
  287.             logDebug(log, "inserite " + accordoServizio.sizeResourceList() + " resources relative all'accordo :" + nome + " id :" + idAccordo);
  288.            
  289.             // Gruppi
  290.             if(accordoServizio.getGruppi()!=null && accordoServizio.getGruppi().sizeGruppoList()>0) {
  291.                 for (int i = 0; i < accordoServizio.getGruppi().sizeGruppoList(); i++) {
  292.                     GruppoAccordo gruppo = accordoServizio.getGruppi().getGruppo(i);
  293.                     DriverRegistroServiziDB_accordiLIB.CRUDAccordoGruppo(CostantiDB.CREATE,accordoServizio, gruppo, con, idAccordo);
  294.                 }
  295.                 logDebug(log, "inserite " + accordoServizio.sizeAzioneList() + " gruppi relative all'accordo :" + nome + " id :" + idAccordo);
  296.             }
  297.            
  298.             // Accordo servizio composto
  299.             if(accordoServizio.getServizioComposto()!=null){
  300.                 DriverRegistroServiziDB_accordiCooperazioneLIB.CRUDAccordoServizioParteComuneServizioComposto(CostantiDB.CREATE,
  301.                         accordoServizio.getServizioComposto(), con, idAccordo);
  302.             }


  303.             // Documenti generici accordo di servizio
  304.             List<Documento> documenti = new ArrayList<>();
  305.             // Allegati
  306.             for(int i=0; i<accordoServizio.sizeAllegatoList(); i++){
  307.                 Documento doc = accordoServizio.getAllegato(i);
  308.                 doc.setRuolo(RuoliDocumento.allegato.toString());
  309.                 documenti.add(doc);
  310.             }
  311.             // Specifiche Semiformali
  312.             for(int i=0; i<accordoServizio.sizeSpecificaSemiformaleList(); i++){
  313.                 Documento doc = accordoServizio.getSpecificaSemiformale(i);
  314.                 doc.setRuolo(RuoliDocumento.specificaSemiformale.toString());
  315.                 documenti.add(doc);
  316.             }
  317.             // Specifiche Coordinamento
  318.             if(accordoServizio.getServizioComposto()!=null){
  319.                 for(int i=0; i<accordoServizio.getServizioComposto().sizeSpecificaCoordinamentoList(); i++){
  320.                     Documento doc = accordoServizio.getServizioComposto().getSpecificaCoordinamento(i);
  321.                     doc.setRuolo(RuoliDocumento.specificaCoordinamento.toString());
  322.                     documenti.add(doc);
  323.                 }
  324.             }
  325.             // CRUD
  326.             DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.CREATE, documenti, idAccordo, ProprietariDocumento.accordoServizio, con, DriverRegistroServiziDB_LIB.tipoDB);
  327.            
  328.             // ProtocolProperties
  329.             DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.CREATE, accordoServizio.getProtocolPropertyList(),
  330.                     idAccordo, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_COMUNE, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  331.            

  332.         } catch (SQLException se) {
  333.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::createAccordoServizioParteComune] SQLException [" + se.getMessage() + "].",se);
  334.         } catch (DriverRegistroServiziException e) {
  335.             throw new DriverRegistroServiziException(e.getMessage(),e);
  336.         }catch (Exception e) {
  337.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::createAccordoServizioParteComune] Exception [" + e.getMessage() + "].",e);
  338.         }finally {
  339.             JDBCUtilities.closeResources(stm);
  340.         }

  341.     }
  342.    
  343.    
  344.    
  345.     public static void updateAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio,
  346.             Connection con, String tabellaSoggetti, Logger log, IDAccordoFactory idAccordoFactory, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {

  347.         if (accordoServizio == null)
  348.             throw new DriverRegistroServiziException(ACCORDO_DIVERSO_NULL);

  349.         String nome = accordoServizio.getNome();
  350.         if (nome == null || nome.equals(""))
  351.             throw new DriverRegistroServiziException(NOME_ACCORDO_NON_VALIDO);

  352.         PreparedStatement stm = null;
  353.         ResultSet rs =null;
  354.         String sqlQuery = "";

  355.         ServiceBinding serviceBinding = accordoServizio.getServiceBinding();
  356.         MessageType messageType = accordoServizio.getMessageType();
  357.        
  358.         StatoFunzionalita confermaRicezione = accordoServizio.getConfermaRicezione();
  359.         StatoFunzionalita conegnaInOrdine = accordoServizio.getConsegnaInOrdine();
  360.         String descrizione = accordoServizio.getDescrizione();
  361.         StatoFunzionalita filtroDuplicati = accordoServizio.getFiltroDuplicati();
  362.         StatoFunzionalita identificativoCollaborazione = accordoServizio.getIdCollaborazione();
  363.         StatoFunzionalita identificativoRiferimentoRichiesta = accordoServizio.getIdRiferimentoRichiesta();

  364.         ProfiloCollaborazione profiloCollaborazione = accordoServizio.getProfiloCollaborazione();
  365.         String scadenza = accordoServizio.getScadenza();
  366.         boolean utilizzioSenzaAzione = accordoServizio.getUtilizzoSenzaAzione();

  367.         FormatoSpecifica formatoSpecifica = accordoServizio.getFormatoSpecifica();
  368.        
  369.         String wsdlConcettuale = (accordoServizio.getByteWsdlConcettuale()!=null ? new String(accordoServizio.getByteWsdlConcettuale()) : null);
  370.         String wsdlDefinitorio = (accordoServizio.getByteWsdlDefinitorio()!=null ? new String(accordoServizio.getByteWsdlDefinitorio()) : null);
  371.         String wsdlLogicoErogatore = (accordoServizio.getByteWsdlLogicoErogatore()!=null ? new String(accordoServizio.getByteWsdlLogicoErogatore()) : null);
  372.         String wsdlLogicoFruitore = (accordoServizio.getByteWsdlLogicoFruitore()!=null ? new String(accordoServizio.getByteWsdlLogicoFruitore()) : null);
  373.         String conversazioneConcettuale = (accordoServizio.getByteSpecificaConversazioneConcettuale()!=null ? new String(accordoServizio.getByteSpecificaConversazioneConcettuale()) : null);
  374.         String conversazioneErogatore = (accordoServizio.getByteSpecificaConversazioneErogatore()!=null ? new String(accordoServizio.getByteSpecificaConversazioneErogatore()) : null);
  375.         String conversazioneFruitore = (accordoServizio.getByteSpecificaConversazioneFruitore()!=null ? new String(accordoServizio.getByteSpecificaConversazioneFruitore()) : null);
  376.         String superUser = accordoServizio.getSuperUser();

  377.         wsdlConcettuale = wsdlConcettuale!=null && !"".equals(wsdlConcettuale.trim().replace("\n", "")) ? wsdlConcettuale : null;
  378.         wsdlDefinitorio = wsdlDefinitorio!=null && !"".equals(wsdlDefinitorio.trim().replace("\n", "")) ? wsdlDefinitorio : null;
  379.         wsdlLogicoErogatore = wsdlLogicoErogatore!=null && !"".equals(wsdlLogicoErogatore.trim().replace("\n", "")) ? wsdlLogicoErogatore : null;
  380.         wsdlLogicoFruitore = wsdlLogicoFruitore!=null && !"".equals(wsdlLogicoFruitore.trim().replace("\n", "")) ? wsdlLogicoFruitore : null;
  381.         conversazioneConcettuale = conversazioneConcettuale!=null && !"".equals(conversazioneConcettuale.trim().replace("\n", "")) ? conversazioneConcettuale : null;
  382.         conversazioneErogatore = conversazioneErogatore!=null && !"".equals(conversazioneErogatore.trim().replace("\n", "")) ? conversazioneErogatore : null;
  383.         conversazioneFruitore = conversazioneFruitore!=null && !"".equals(conversazioneFruitore.trim().replace("\n", "")) ? conversazioneFruitore : null;

  384.         try {

  385.             IDAccordo idAccordoAttualeInseritoDB = null;
  386.             if(accordoServizio.getOldIDAccordoForUpdate()!=null){
  387.                 idAccordoAttualeInseritoDB = accordoServizio.getOldIDAccordoForUpdate();
  388.             }else{
  389.                 idAccordoAttualeInseritoDB = idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);
  390.             }

  391.             long idAccordoLong = -1;
  392.             try{
  393.                 idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordoAttualeInseritoDB, con,DriverRegistroServiziDB_LIB.tipoDB);
  394.             }catch(Exception e){
  395.                 if(accordoServizio.getOldIDAccordoForUpdate()!=null){
  396.                     // Provo con soggetto attuale
  397.                     if(accordoServizio.getSoggettoReferente()!=null){
  398.                         idAccordoAttualeInseritoDB = idAccordoFactory.getIDAccordoFromValues(idAccordoAttualeInseritoDB.getNome(),
  399.                                 new IDSoggetto(accordoServizio.getSoggettoReferente().getTipo(),
  400.                                         accordoServizio.getSoggettoReferente().getNome()),
  401.                                         idAccordoAttualeInseritoDB.getVersione());
  402.                     }else{
  403.                         idAccordoAttualeInseritoDB = idAccordoFactory.getIDAccordoFromValues(idAccordoAttualeInseritoDB.getNome(),null,
  404.                                 idAccordoAttualeInseritoDB.getVersione());
  405.                     }
  406.                     idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordoAttualeInseritoDB, con,DriverRegistroServiziDB_LIB.tipoDB);
  407.                 }else{
  408.                     throw e;
  409.                 }
  410.             }
  411.             if (idAccordoLong <= 0)
  412.                 throw new DriverRegistroServiziException("Impossibile recuperare l'id dell'Accordo di Servizio : " + nome);

  413.             String utenteUltimaModifica = null;
  414.             if(accordoServizio.getProprietaOggetto()!=null && accordoServizio.getProprietaOggetto().getUtenteUltimaModifica()!=null) {
  415.                 utenteUltimaModifica = accordoServizio.getProprietaOggetto().getUtenteUltimaModifica();
  416.             }
  417.             else {
  418.                 utenteUltimaModifica = superUser;
  419.             }
  420.            
  421.             Timestamp dataUltimaModifica = null;
  422.             if(accordoServizio.getProprietaOggetto()!=null && accordoServizio.getProprietaOggetto().getDataUltimaModifica()!=null) {
  423.                 dataUltimaModifica = new Timestamp(accordoServizio.getProprietaOggetto().getDataUltimaModifica().getTime());
  424.             }
  425.             else {
  426.                 dataUltimaModifica = DateManager.getTimestamp();
  427.             }
  428.            
  429.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  430.             sqlQueryObject.addUpdateTable(CostantiDB.ACCORDI);
  431.             sqlQueryObject.addUpdateField("service_binding", "?");
  432.             sqlQueryObject.addUpdateField("message_type", "?");
  433.             sqlQueryObject.addUpdateField("conferma_ricezione", "?");
  434.             sqlQueryObject.addUpdateField("consegna_in_ordine", "?");
  435.             sqlQueryObject.addUpdateField("descrizione", "?");
  436.             sqlQueryObject.addUpdateField("filtro_duplicati", "?");
  437.             sqlQueryObject.addUpdateField("identificativo_collaborazione", "?");
  438.             sqlQueryObject.addUpdateField("id_riferimento_richiesta", "?");
  439.             sqlQueryObject.addUpdateField("nome", "?");
  440.             sqlQueryObject.addUpdateField("profilo_collaborazione", "?");
  441.             sqlQueryObject.addUpdateField("scadenza", "?");
  442.             sqlQueryObject.addUpdateField("formato_specifica", "?");
  443.             sqlQueryObject.addUpdateField("wsdl_concettuale", "?");
  444.             sqlQueryObject.addUpdateField("wsdl_definitorio", "?");
  445.             sqlQueryObject.addUpdateField("wsdl_logico_erogatore", "?");
  446.             sqlQueryObject.addUpdateField("wsdl_logico_fruitore", "?");
  447.             sqlQueryObject.addUpdateField("spec_conv_concettuale", "?");
  448.             sqlQueryObject.addUpdateField("spec_conv_erogatore", "?");
  449.             sqlQueryObject.addUpdateField("spec_conv_fruitore", "?");
  450.             sqlQueryObject.addUpdateField("superuser", "?");
  451.             sqlQueryObject.addUpdateField("utilizzo_senza_azione", "?");
  452.             sqlQueryObject.addUpdateField("privato", "?");

  453.             if(accordoServizio.getStatoPackage()!=null){
  454.                 sqlQueryObject.addUpdateField("stato", "?");
  455.             }

  456.             sqlQueryObject.addUpdateField("canale", "?");
  457.            
  458.             if(accordoServizio.getOraRegistrazione()!=null)
  459.                 sqlQueryObject.addUpdateField("ora_registrazione", "?");

  460.             sqlQueryObject.addUpdateField("id_referente", "?");
  461.             sqlQueryObject.addUpdateField("versione", "?");
  462.            
  463.             if(utenteUltimaModifica!=null) {
  464.                 sqlQueryObject.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_ULTIMA_MODIFICA, "?");
  465.             }
  466.             if(dataUltimaModifica!=null) {
  467.                 sqlQueryObject.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_DATA_ULTIMA_MODIFICA, "?");
  468.             }

  469.             sqlQueryObject.addWhereCondition("id=?");
  470.             sqlQuery = sqlQueryObject.createSQLUpdate();

  471.             stm = con.prepareStatement(sqlQuery);
  472.             int index = 1;
  473.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(serviceBinding));
  474.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(messageType));
  475.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(confermaRicezione));
  476.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(conegnaInOrdine));
  477.             stm.setString(index++, descrizione);
  478.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(filtroDuplicati));
  479.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(identificativoCollaborazione));
  480.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(identificativoRiferimentoRichiesta));
  481.             stm.setString(index++, nome);
  482.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(profiloCollaborazione));
  483.             stm.setString(index++, scadenza);
  484.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(formatoSpecifica));
  485.             stm.setString(index++, wsdlConcettuale);
  486.             stm.setString(index++, wsdlDefinitorio);
  487.             stm.setString(index++, wsdlLogicoErogatore);
  488.             stm.setString(index++, wsdlLogicoFruitore);
  489.             stm.setString(index++, conversazioneConcettuale);
  490.             stm.setString(index++, conversazioneErogatore);
  491.             stm.setString(index++, conversazioneFruitore);
  492.             stm.setString(index++, superUser);
  493.             stm.setInt(index++, utilizzioSenzaAzione ? CostantiDB.TRUE : CostantiDB.FALSE);
  494.             if(accordoServizio.getPrivato()!=null && accordoServizio.getPrivato())
  495.                 stm.setInt(index++, 1);
  496.             else
  497.                 stm.setInt(index++, 0);

  498.             if(accordoServizio.getStatoPackage()!=null){
  499.                 stm.setString(index++, accordoServizio.getStatoPackage());
  500.             }

  501.             stm.setString(index++, accordoServizio.getCanale());
  502.            
  503.             if(accordoServizio.getOraRegistrazione()!=null){
  504.                 stm.setTimestamp(index++, new Timestamp(accordoServizio.getOraRegistrazione().getTime()));
  505.             }

  506.             if(accordoServizio.getSoggettoReferente()!=null) {
  507.                 long idSRef = DBUtils.getIdSoggetto(accordoServizio.getSoggettoReferente().getNome(),
  508.                         accordoServizio.getSoggettoReferente().getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB,tabellaSoggetti);
  509.                 stm.setLong(index++, idSRef);
  510.             }else{
  511.                 stm.setLong(index++, CostantiRegistroServizi.SOGGETTO_REFERENTE_DEFAULT);
  512.             }
  513.             stm.setInt(index++, accordoServizio.getVersione());

  514.             if(utenteUltimaModifica!=null) {
  515.                 stm.setString(index++, utenteUltimaModifica);
  516.             }
  517.            
  518.             if(dataUltimaModifica!=null) {
  519.                 stm.setTimestamp(index++, dataUltimaModifica);
  520.             }
  521.            
  522.             stm.setLong(index++, idAccordoLong);

  523.             String msgDebug = "update accordoServizio : " +
  524.                     DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery,
  525.                             serviceBinding, messageType,
  526.                             confermaRicezione, conegnaInOrdine, descrizione,
  527.                             filtroDuplicati, identificativoCollaborazione, identificativoRiferimentoRichiesta, nome, profiloCollaborazione, scadenza,
  528.                             wsdlConcettuale, wsdlDefinitorio, wsdlLogicoErogatore, wsdlLogicoFruitore,
  529.                             conversazioneConcettuale, conversazioneErogatore, conversazioneFruitore,
  530.                             superUser,utilizzioSenzaAzione, idAccordoLong);
  531.             logDebug(log, msgDebug);

  532.             stm.executeUpdate();
  533.             stm.close();

  534.             //aggiorno le azioni
  535.             //possibile ottimizzazione
  536.             //la lista contiene tutte e sole le azioni necessarie
  537.             //prima cancello le azioni e poi reinserisco quelle nuove
  538.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  539.             sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_AZIONI);
  540.             sqlQueryObject.addWhereCondition("id_accordo=?");
  541.             String updateString = sqlQueryObject.createSQLDelete();
  542.             stm = con.prepareStatement(updateString);
  543.             stm.setLong(1, idAccordoLong);
  544.             int n=stm.executeUpdate();
  545.             stm.close();
  546.             logDebug(log, "Cancellate "+n+" azioni associate all'accordo "+idAccordoLong);

  547.             for (int i = 0; i < accordoServizio.sizeAzioneList(); i++) {
  548.                 Azione azione = accordoServizio.getAzione(i);
  549.                 String profiloAzione = azione.getProfAzione();
  550.                 //se profilo azione = default allora utilizzo il profilo collaborazione dell'accordo
  551.                 if(profiloAzione!=null && profiloAzione.equals(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT))
  552.                 {
  553.                     azione.setProfiloCollaborazione(profiloCollaborazione);
  554.                 }
  555.                 DriverRegistroServiziDB_accordiSoapLIB.CRUDAzione(CostantiDB.CREATE, accordoServizio,azione, con, idAccordoLong, driverBYOK);
  556.             }
  557.             logDebug(log, "Inserite "+accordoServizio.sizeAzioneList()+" azioni associate all'accordo "+idAccordoLong);

  558.             //aggiorno i port type
  559.             //la lista contiene tutte e soli i port type necessari
  560.             //prima cancello i port type e poi reinserisco quelle nuove

  561.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  562.             sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
  563.             sqlQueryObject.addSelectField("id");
  564.             sqlQueryObject.addWhereCondition("id_accordo = ?");
  565.             sqlQuery = sqlQueryObject.createSQLQuery();
  566.             stm=con.prepareStatement(sqlQuery);
  567.             stm.setLong(1, idAccordoLong);
  568.             rs=stm.executeQuery();
  569.             List<Long> idPT = new ArrayList<>();
  570.             while(rs.next()){
  571.                 idPT.add(rs.getLong("id"));
  572.             }
  573.             rs.close();
  574.             stm.close();
  575.             logDebug(log, "Trovati "+idPT.size()+" port type...");

  576.             while(!idPT.isEmpty()){
  577.                 Long idPortType = idPT.remove(0);

  578.                 // Seleziono id port type azione
  579.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  580.                 sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  581.                 sqlQueryObject.addSelectField("id");
  582.                 sqlQueryObject.addWhereCondition("id_port_type=?");
  583.                 sqlQueryObject.setANDLogicOperator(true);
  584.                 sqlQuery = sqlQueryObject.createSQLQuery();
  585.                 stm=con.prepareStatement(sqlQuery);
  586.                 stm.setLong(1, idPortType);
  587.                 rs=stm.executeQuery();
  588.                 List<Long> idPTAzione = new ArrayList<>();
  589.                 while(rs.next()){
  590.                     idPTAzione.add(rs.getLong("id"));
  591.                 }
  592.                 rs.close();
  593.                 stm.close();

  594.                 logDebug(log, "Trovati "+idPTAzione.size()+" port type azioni...");

  595.                 // Elimino i messages
  596.                 while(!idPTAzione.isEmpty()){
  597.                     Long idPortTypeAzione = idPTAzione.remove(0);
  598.                     logDebug(log, "Eliminazione message con id["+idPortTypeAzione+"]...");
  599.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  600.                     sqlQueryObject.addDeleteTable(CostantiDB.PORT_TYPE_AZIONI_OPERATION_MESSAGES);
  601.                     sqlQueryObject.addWhereCondition("id_port_type_azione=?");
  602.                     sqlQueryObject.setANDLogicOperator(true);
  603.                     sqlQuery = sqlQueryObject.createSQLDelete();
  604.                     stm=con.prepareStatement(sqlQuery);
  605.                     stm.setLong(1, idPortTypeAzione);
  606.                     n=stm.executeUpdate();
  607.                     stm.close();
  608.                     logDebug(log, "Cancellate "+n+" messages di un'azione con id["+idPortTypeAzione+"] del port type ["+idPortType+"] associate all'accordo "+idAccordoLong);
  609.                 }

  610.                 logDebug(log, "Elimino port type azione del port types ["+idPortType+"]...");

  611.                 // Elimino port types azioni
  612.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  613.                 sqlQueryObject.addDeleteTable(CostantiDB.PORT_TYPE_AZIONI);
  614.                 sqlQueryObject.addWhereCondition("id_port_type=?");
  615.                 sqlQueryObject.setANDLogicOperator(true);
  616.                 sqlQuery = sqlQueryObject.createSQLDelete();
  617.                 stm=con.prepareStatement(sqlQuery);
  618.                 stm.setLong(1, idPortType);
  619.                 n=stm.executeUpdate();
  620.                 stm.close();
  621.                 logDebug(log, "Cancellate "+n+" azioni del port type ["+idPortType+"] associate all'accordo "+idAccordoLong);
  622.             }

  623.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  624.             sqlQueryObject.addDeleteTable(CostantiDB.PORT_TYPE);
  625.             sqlQueryObject.addWhereCondition("id_accordo=?");
  626.             sqlQueryObject.setANDLogicOperator(true);
  627.             sqlQuery = sqlQueryObject.createSQLDelete();
  628.             stm=con.prepareStatement(sqlQuery);
  629.             stm.setLong(1, idAccordoLong);
  630.             n=stm.executeUpdate();
  631.             stm.close();
  632.             logDebug(log, "Cancellate "+n+" port type associate all'accordo "+idAccordoLong);

  633.             PortType pt = null;
  634.             for (int i = 0; i < accordoServizio.sizePortTypeList(); i++) {
  635.                 pt = accordoServizio.getPortType(i);
  636.                 DriverRegistroServiziDB_accordiSoapLIB.CRUDPortType(CostantiDB.CREATE,accordoServizio,pt, con, idAccordoLong, driverBYOK);
  637.             }
  638.             logDebug(log, "inserite " + accordoServizio.sizePortTypeList() + " porttype relative all'accordo :" + nome + " id :" + idAccordoLong);

  639.             // risorse
  640.             //la lista contiene tutte e sole le risorse necessarie
  641.             //prima cancello le risorse e poi reinserisco quelle nuove
  642.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  643.             sqlQueryObject.addFromTable(CostantiDB.API_RESOURCES);
  644.             sqlQueryObject.addSelectField("id");
  645.             sqlQueryObject.addWhereCondition("id_accordo = ?");
  646.             sqlQuery = sqlQueryObject.createSQLQuery();
  647.             stm=con.prepareStatement(sqlQuery);
  648.             stm.setLong(1, idAccordoLong);
  649.             rs=stm.executeQuery();
  650.             List<Long> idResources = new ArrayList<>();
  651.             while(rs.next()){
  652.                 idResources.add(rs.getLong("id"));
  653.             }
  654.             rs.close();
  655.             stm.close();
  656.    
  657.             n=0;
  658.             while(!idResources.isEmpty()){
  659.                 Long idR = idResources.remove(0);
  660.                 Resource resource = new Resource();
  661.                 resource.setId(idR);
  662.                 n = n + DriverRegistroServiziDB_accordiRestLIB.CRUDResource(CostantiDB.DELETE, accordoServizio, resource, con, idAccordoLong, driverBYOK);
  663.             }
  664.             logDebug(log, "Cancellate "+n+" resources associate all'accordo :" + nome + " id :" + idAccordoLong);
  665.            
  666.             Resource resource = null;
  667.             for (int i = 0; i < accordoServizio.sizeResourceList(); i++) {
  668.                 resource = accordoServizio.getResource(i);
  669.                 DriverRegistroServiziDB_accordiRestLIB.CRUDResource(CostantiDB.CREATE,accordoServizio,resource, con, idAccordoLong, driverBYOK);
  670.             }
  671.             logDebug(log, "inserite " + accordoServizio.sizeResourceList() + " resources relative all'accordo :" + nome + " id :" + idAccordoLong);
  672.            
  673.            
  674.            
  675.             // Gruppi
  676.             //la lista contiene tutte e sole le risorse necessarie
  677.             //prima cancello le risorse e poi reinserisco quelle nuove
  678.            
  679.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  680.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI_GRUPPI);
  681.             sqlQueryObject.addFromTable(CostantiDB.GRUPPI);
  682.             sqlQueryObject.addSelectAliasField(CostantiDB.GRUPPI, "id", "identificativoGruppo");
  683.             sqlQueryObject.addSelectAliasField(CostantiDB.GRUPPI, "nome", "nomeGruppo");
  684.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_gruppo = "+CostantiDB.GRUPPI+".id");
  685.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_accordo = ?");
  686.             sqlQueryObject.setANDLogicOperator(true);
  687.             sqlQuery = sqlQueryObject.createSQLQuery();
  688.             stm=con.prepareStatement(sqlQuery);
  689.             stm.setLong(1, idAccordoLong);
  690.             rs=stm.executeQuery();
  691.             List<GruppoAccordo> gruppi = new ArrayList<>();
  692.             while(rs.next()){
  693.                 GruppoAccordo gruppo = new GruppoAccordo();
  694.                 gruppo.setNome(rs.getString("nomeGruppo"));
  695.                 gruppo.setId(rs.getLong("identificativoGruppo"));
  696.                 gruppi.add(gruppo);
  697.             }
  698.             rs.close();
  699.             stm.close();
  700.    
  701.             while(!gruppi.isEmpty()){
  702.                 GruppoAccordo gruppo = gruppi.remove(0);
  703.                 DriverRegistroServiziDB_accordiLIB.CRUDAccordoGruppo(CostantiDB.DELETE, accordoServizio, gruppo, con, idAccordoLong);
  704.             }
  705.             logDebug(log, "Cancellate "+n+" resources associate all'accordo :" + nome + " id :" + idAccordoLong);
  706.            
  707.             if(accordoServizio.getGruppi()!=null && accordoServizio.getGruppi().sizeGruppoList()>0) {
  708.                 for (int i = 0; i < accordoServizio.getGruppi().sizeGruppoList(); i++) {
  709.                     GruppoAccordo gruppo = accordoServizio.getGruppi().getGruppo(i);
  710.                     DriverRegistroServiziDB_accordiLIB.CRUDAccordoGruppo(CostantiDB.CREATE,accordoServizio, gruppo, con, idAccordoLong);
  711.                 }
  712.                 logDebug(log, "inserite " + accordoServizio.sizeAzioneList() + " gruppi relative all'accordo :" + nome + " id :" + idAccordoLong);
  713.             }
  714.            
  715.            
  716.            
  717.             // Accordo servizio composto
  718.             if(accordoServizio.getServizioComposto()!=null){
  719.                 // Elimino eventualmente se prima era presente
  720.                 DriverRegistroServiziDB_accordiCooperazioneLIB.CRUDAccordoServizioParteComuneServizioComposto(CostantiDB.DELETE,
  721.                         null, con, idAccordoLong);

  722.                 DriverRegistroServiziDB_accordiCooperazioneLIB.CRUDAccordoServizioParteComuneServizioComposto(CostantiDB.CREATE,
  723.                         accordoServizio.getServizioComposto(), con, idAccordoLong);
  724.             }else{
  725.                 // Elimino eventualmente se prima era presente
  726.                 DriverRegistroServiziDB_accordiCooperazioneLIB.CRUDAccordoServizioParteComuneServizioComposto(CostantiDB.DELETE,
  727.                         null, con, idAccordoLong);
  728.             }


  729.             // Documenti generici accordo di servizio
  730.             List<Documento> documenti = new ArrayList<Documento>();
  731.             // Allegati
  732.             for(int i=0; i<accordoServizio.sizeAllegatoList(); i++){
  733.                 Documento doc = accordoServizio.getAllegato(i);
  734.                 doc.setRuolo(RuoliDocumento.allegato.toString());
  735.                 documenti.add(doc);
  736.             }
  737.             // Specifiche Semiformali
  738.             for(int i=0; i<accordoServizio.sizeSpecificaSemiformaleList(); i++){
  739.                 Documento doc = accordoServizio.getSpecificaSemiformale(i);
  740.                 doc.setRuolo(RuoliDocumento.specificaSemiformale.toString());
  741.                 documenti.add(doc);
  742.             }
  743.             // Specifiche Coordinamento
  744.             if(accordoServizio.getServizioComposto()!=null){
  745.                 for(int i=0; i<accordoServizio.getServizioComposto().sizeSpecificaCoordinamentoList(); i++){
  746.                     Documento doc = accordoServizio.getServizioComposto().getSpecificaCoordinamento(i);
  747.                     doc.setRuolo(RuoliDocumento.specificaCoordinamento.toString());
  748.                     documenti.add(doc);
  749.                 }
  750.             }

  751.             // CRUD
  752.             DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.UPDATE, documenti, idAccordoLong, ProprietariDocumento.accordoServizio, con, DriverRegistroServiziDB_LIB.tipoDB);

  753.            
  754.             // ProtocolProperties
  755.             DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.UPDATE, accordoServizio.getProtocolPropertyList(),
  756.                     idAccordoLong, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_COMUNE, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  757.            
  758.            
  759.         }catch (SQLException se) {
  760.             logError(log, se.getMessage(),se);
  761.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::updateAccordoServizio] SQLException [" + se.getMessage() + "].",se);
  762.         }
  763.         catch (Exception se) {
  764.             logError(log, se.getMessage(),se);
  765.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::updateAccordoServizio] Exception [" + se.getMessage() + "].",se);
  766.         }finally {
  767.             JDBCUtilities.closeResources(rs, stm);
  768.         }

  769.     }
  770.    
  771.    
  772.    
  773.     public static long CRUDAccordoGruppo(int type, AccordoServizioParteComune as,GruppoAccordo gruppo, Connection con, long idAccordo) throws DriverRegistroServiziException {
  774.         PreparedStatement updateStmt = null;
  775.         String updateQuery;
  776.         long n = 0;
  777.         if (idAccordo <= 0)
  778.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoGruppo] ID Accordo non valido.");
  779.        
  780.         try {
  781.            
  782.             IDGruppo idGruppo = new IDGruppo(gruppo.getNome());
  783.             long idGruppoLong = DBUtils.getIdGruppo(idGruppo, con, DriverRegistroServiziDB_LIB.tipoDB);
  784.             if(idGruppoLong<=0) {
  785.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoGruppo] Gruppo con nome '"+idGruppo.getNome()+"' non esistente.");
  786.             }
  787.            
  788.             switch (type) {
  789.             case CREATE:
  790.                                
  791.                 // create
  792.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  793.                 sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_GRUPPI);
  794.                 sqlQueryObject.addInsertField("id_accordo", "?");
  795.                 sqlQueryObject.addInsertField("id_gruppo", "?");
  796.                 updateQuery = sqlQueryObject.createSQLInsert();
  797.                 updateStmt = con.prepareStatement(updateQuery);
  798.                 int index = 1;
  799.                 updateStmt.setLong(index++, idAccordo);
  800.                 updateStmt.setLong(index++, idGruppoLong);

  801.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoGruppo CREATE :\n"+
  802.                         DriverRegistroServiziDB_LIB.formatSQLString(updateQuery,idAccordo,idGruppoLong));
  803.                 n = updateStmt.executeUpdate();
  804.                 updateStmt.close();
  805.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoGruppo type = " + type + " row affected =" + n);

  806.                 break;

  807.             case UPDATE:
  808.                
  809.                 throw new DriverRegistroServiziException("Non supportato");

  810.             case DELETE:
  811.                 // delete

  812.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  813.                 sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_GRUPPI);
  814.                 sqlQueryObject.addWhereCondition("id_accordo=?");
  815.                 sqlQueryObject.addWhereCondition("id_gruppo=?");
  816.                 sqlQueryObject.setANDLogicOperator(true);
  817.                 String sqlQuery = sqlQueryObject.createSQLDelete();
  818.                 updateStmt = con.prepareStatement(sqlQuery);
  819.                 index = 1;
  820.                 updateStmt.setLong(index++, idAccordo);
  821.                 updateStmt.setLong(index++, idGruppoLong);
  822.                 n=updateStmt.executeUpdate();
  823.                 updateStmt.close();
  824.                 DriverRegistroServiziDB_LIB.logDebug("CRUDAccordoGruppo type = " + type + " row affected =" + n);
  825.                
  826.                 break;
  827.             }

  828.             return n;

  829.         } catch (SQLException se) {
  830.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoGruppo] SQLException : " + se.getMessage(),se);
  831.         } catch (Exception se) {
  832.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoGruppo] Exception : " + se.getMessage(),se);
  833.         } finally {
  834.             JDBCUtilities.closeResources(updateStmt);
  835.         }
  836.     }
  837.    
  838.    

  839.    
  840.     public static ISQLQueryObject getSQLRicercaAccordiValidi() throws Exception{
  841.         ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  842.        
  843.         sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  844.        
  845.         sqlQueryObject.addWhereExistsCondition(false, DriverRegistroServiziDB_accordiLIB.getSQLRicercaServiziValidi(CostantiDB.ACCORDI+".id",false));
  846.        
  847.         return sqlQueryObject;
  848.     }
  849.    
  850.     /**
  851.      *
  852.      * @return Ritorna l' ISQLQueryObject con ? settato come id accordo, in modo da poterlo usare con il setParameter dello statement
  853.      * @throws Exception
  854.      */
  855.    
  856.     public static ISQLQueryObject getSQLRicercaServiziValidiByIdAccordo(boolean isErogazione) throws Exception{
  857.         return DriverRegistroServiziDB_accordiLIB.getSQLRicercaServiziValidi("?",isErogazione);
  858.     }
  859.    
  860.     private static ISQLQueryObject getSQLRicercaServiziValidi(String idAccordo,boolean isErogazione) throws Exception{
  861.         ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  862.        
  863.         // select * from port_type where
  864.         sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
  865.         // port_type.id_accordo=8
  866.         sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE+".id_accordo="+idAccordo);
  867.         //  (EXISTS (select * from port_type_azioni where port_type_azioni.id_port_type=port_type.id))  
  868.         ISQLQueryObject sqlQueryObjectExistsAlmenoUnAzione = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  869.         sqlQueryObjectExistsAlmenoUnAzione.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  870.         sqlQueryObjectExistsAlmenoUnAzione.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
  871.         sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsAlmenoUnAzione);
  872.         // Gestione profili di collaborazione
  873.         ISQLQueryObject sqlQueryServiziValidi = DriverRegistroServiziDB_accordiLIB.getSQLIndividuazioneServiziValidi(DriverRegistroServiziDB_LIB.tipoDB,isErogazione);
  874.         sqlQueryObject.addWhereCondition("( "+sqlQueryServiziValidi.createSQLConditions()+" )");
  875.         // And tra le condizioni
  876.         sqlQueryObject.setANDLogicOperator(true);
  877.         return sqlQueryObject;
  878.     }
  879.    
  880.     public static ISQLQueryObject getSQLIndividuazioneServiziValidi(String tipoDatabase,boolean isErogazione) throws Exception{
  881.         ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  882.        
  883.        
  884.         // (port_type.profilo_collaborazione='oneway')
  885.         sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE+".profilo_collaborazione='oneway'");
  886.        
  887.        
  888.         // (port_type.profilo_collaborazione='sincrono')
  889.         sqlQueryObject.addWhereCondition(CostantiDB.PORT_TYPE+".profilo_collaborazione='sincrono'");
  890.        
  891.        
  892.         // (      
  893.         //    port_type.profilo_collaborazione='asincronoAsimmetrico' AND
  894.         //        
  895.         //    EXISTS (select * from port_type_azioni where port_type_azioni.id_port_type=port_type.id AND
  896.         //                                                 port_type_azioni.correlata_servizio is null AND
  897.         //                                                 port_type_azioni.correlata is null
  898.         //            ) AND
  899.         //
  900.         //    EXISTS (select * from port_type_azioni where port_type_azioni.id_port_type=port_type.id AND
  901.         //                                                 port_type_azioni.correlata_servizio is not null AND
  902.         //                                                 port_type_azioni.correlata_servizio=port_type.nome AND
  903.         //                                                 port_type_azioni.correlata is not null AND
  904.         //                                                 port_type_azioni.correlata IN (
  905.         //                                                      select nome from port_type_azioni where port_type_azioni.id_port_type=port_type.id)
  906.         //                                                 )
  907.         //           )
  908.         // )
  909.         ISQLQueryObject sqlQueryObjectExistsAsinAsimRichiesta = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  910.         sqlQueryObjectExistsAsinAsimRichiesta.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  911.         sqlQueryObjectExistsAsinAsimRichiesta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
  912.         sqlQueryObjectExistsAsinAsimRichiesta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata_servizio is null");
  913.         sqlQueryObjectExistsAsinAsimRichiesta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata is null");
  914.         sqlQueryObjectExistsAsinAsimRichiesta.setANDLogicOperator(true);
  915.        
  916.         ISQLQueryObject sqlQueryObjectExistsAsinAsimRisposta = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  917.         sqlQueryObjectExistsAsinAsimRisposta.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  918.         sqlQueryObjectExistsAsinAsimRisposta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
  919.         sqlQueryObjectExistsAsinAsimRisposta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata_servizio is not null");
  920.         sqlQueryObjectExistsAsinAsimRisposta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata_servizio="+CostantiDB.PORT_TYPE+".nome");
  921.         sqlQueryObjectExistsAsinAsimRisposta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata is not null");
  922.         ISQLQueryObject sqlQueryObjectExistsAsinAsimRispostaCheckCorrelata = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  923.         sqlQueryObjectExistsAsinAsimRispostaCheckCorrelata.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  924.         sqlQueryObjectExistsAsinAsimRispostaCheckCorrelata.addSelectField(CostantiDB.PORT_TYPE_AZIONI, "nome");
  925.         sqlQueryObjectExistsAsinAsimRispostaCheckCorrelata.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
  926.         sqlQueryObjectExistsAsinAsimRisposta.addWhereINSelectSQLCondition(false, CostantiDB.PORT_TYPE_AZIONI+".correlata", sqlQueryObjectExistsAsinAsimRispostaCheckCorrelata);
  927.         sqlQueryObjectExistsAsinAsimRisposta.setANDLogicOperator(true);
  928.    
  929.         sqlQueryObject.addWhereCondition(true,
  930.                 CostantiDB.PORT_TYPE+".profilo_collaborazione='asincronoAsimmetrico'",
  931.                 sqlQueryObject.getWhereExistsCondition(false, sqlQueryObjectExistsAsinAsimRichiesta),
  932.                 sqlQueryObject.getWhereExistsCondition(false,sqlQueryObjectExistsAsinAsimRisposta));    
  933.        
  934.        
  935.        
  936.         /** (
  937.         //   port_type.profilo_collaborazione='asincronoSimmetrico' AND
  938.         //
  939.         //   EXISTS (select * from port_type_azioni where port_type_azioni.id_port_type=port_type.id AND
  940.         //                                               port_type_azioni.correlata is null AND
  941.         //                                               port_type_azioni.correlata_servizio is null
  942.         //          ) AND
  943.         //
  944.         //   EXISTS (select * from port_type as ptRicerca2,port_type_azioni where
  945.         //                                    ptRicerca2.id_accordo=port_type.id_accordo AND
  946.         //                                    ptRicerca2.profilo_collaborazione='asincronoSimmetrico' AND
  947.         //                                    ptRicerca2.nome <> port_type.nome AND
  948.         //                                    port_type_azioni.id_port_type=ptRicerca2.id AND
  949.         //                                    port_type_azioni.correlata_servizio is not null AND
  950.         //                                    port_type_azioni.correlata_servizio=port_type.nome AND
  951.         //                                    port_type_azioni.correlata is not null AND
  952.         //                                    port_type_azioni.correlata IN (
  953.         //                                        select nome from port_type_azioni where port_type_azioni.id_port_type=port_type.id
  954.         //                                    )
  955.         //           )
  956.         // )*/
  957.        
  958.         ISQLQueryObject sqlQueryObjectExistsAsinSimRichiesta = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  959.         sqlQueryObjectExistsAsinSimRichiesta.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  960.         sqlQueryObjectExistsAsinSimRichiesta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
  961.         sqlQueryObjectExistsAsinSimRichiesta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata_servizio is null");
  962.         sqlQueryObjectExistsAsinSimRichiesta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata is null");
  963.         sqlQueryObjectExistsAsinSimRichiesta.setANDLogicOperator(true);
  964.        
  965.         ISQLQueryObject sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  966.         String portTypeAliasRicerca = "ptRicerca2";
  967.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addFromTable(CostantiDB.PORT_TYPE+" as "+portTypeAliasRicerca);
  968.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  969.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addWhereCondition(portTypeAliasRicerca+".id_accordo="+CostantiDB.PORT_TYPE+".id_accordo");
  970.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addWhereCondition(portTypeAliasRicerca+".profilo_collaborazione='asincronoSimmetrico'");
  971.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addWhereCondition(portTypeAliasRicerca+".nome <> "+CostantiDB.PORT_TYPE+".nome");
  972.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+portTypeAliasRicerca+".id");
  973.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata_servizio is not null");
  974.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata_servizio="+CostantiDB.PORT_TYPE+".nome");
  975.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata is not null");
  976.         ISQLQueryObject sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazioneCheckAzione = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  977.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazioneCheckAzione.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  978.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazioneCheckAzione.addSelectField(CostantiDB.PORT_TYPE_AZIONI, "nome");
  979.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazioneCheckAzione.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
  980.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.addWhereINSelectSQLCondition(false, CostantiDB.PORT_TYPE_AZIONI+".correlata", sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazioneCheckAzione);
  981.         sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione.setANDLogicOperator(true);
  982.            
  983.         sqlQueryObject.addWhereCondition(true,
  984.                 CostantiDB.PORT_TYPE+".profilo_collaborazione='asincronoSimmetrico'",
  985.                 sqlQueryObject.getWhereExistsCondition(false, sqlQueryObjectExistsAsinSimRichiesta),
  986.                 sqlQueryObject.getWhereExistsCondition(false,sqlQueryObjectExistsAsinSimRichiestaCheckCorrelazione));
  987.        
  988.        
  989.        
  990.         /** (
  991.         //    port_type.profilo_collaborazione='asincronoSimmetrico' AND
  992.         //
  993.         //    EXISTS (select * from port_type_azioni where port_type_azioni.id_port_type=port_type.id AND
  994.         //                                                 port_type_azioni.correlata is not null AND
  995.         //                                                 port_type_azioni.correlata_servizio is not null AND
  996.         //                                                 EXISTS (select * from port_type as ptRicerca2,port_type_azioni ptAzioniRicerca2 where
  997.         //                                                          ptRicerca2.id_accordo=port_type.id_accordo AND
  998.         //                                                          ptRicerca2.profilo_collaborazione='asincronoSimmetrico' AND
  999.         //                                                          ptRicerca2.nome <> port_type.nome AND
  1000.         //                                                          ptAzioniRicerca2.id_port_type=ptRicerca2.id AND
  1001.         //                                                          ptAzioniRicerca2.correlata_servizio is null AND
  1002.         //                                                          ptRicerca2.nome=port_type_azioni.correlata_servizio AND
  1003.         //                                                          ptAzioniRicerca2.correlata is null AND
  1004.         //                                                          ptAzioniRicerca2.nome=port_type_azioni.correlata
  1005.         //                                                  )
  1006.         //           )
  1007.         // )*/
  1008.         if(!isErogazione){
  1009.             ISQLQueryObject sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  1010.             String portTypeAliasRicercaAs = "ptRicerca2";
  1011.             String portTypeAzioniAliasRicercaAs = "ptAzioniRicerca2";
  1012.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addFromTable(CostantiDB.PORT_TYPE+" as "+portTypeAliasRicercaAs);
  1013.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addFromTable(CostantiDB.PORT_TYPE_AZIONI+" as "+portTypeAzioniAliasRicercaAs);
  1014.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addWhereCondition(portTypeAliasRicercaAs+".id_accordo="+CostantiDB.PORT_TYPE+".id_accordo");
  1015.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addWhereCondition(portTypeAliasRicercaAs+".profilo_collaborazione='asincronoSimmetrico'");
  1016.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addWhereCondition(portTypeAliasRicercaAs+".nome <> "+CostantiDB.PORT_TYPE+".nome");
  1017.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addWhereCondition(portTypeAzioniAliasRicercaAs+".id_port_type="+portTypeAliasRicercaAs+".id");
  1018.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addWhereCondition(portTypeAzioniAliasRicercaAs+".correlata_servizio is null");
  1019.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addWhereCondition(portTypeAliasRicercaAs+".nome="+CostantiDB.PORT_TYPE_AZIONI+".correlata_servizio");
  1020.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addWhereCondition(portTypeAzioniAliasRicercaAs+".correlata is null");
  1021.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.addWhereCondition(portTypeAzioniAliasRicercaAs+".nome="+CostantiDB.PORT_TYPE_AZIONI+".correlata");
  1022.            
  1023.             sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione.setANDLogicOperator(true);
  1024.            
  1025.             ISQLQueryObject sqlQueryObjectExistsAsinSimRisposta = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  1026.             sqlQueryObjectExistsAsinSimRisposta.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  1027.             sqlQueryObjectExistsAsinSimRisposta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
  1028.             sqlQueryObjectExistsAsinSimRisposta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata is not null");
  1029.             sqlQueryObjectExistsAsinSimRisposta.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".correlata_servizio is not null");
  1030.             sqlQueryObjectExistsAsinSimRisposta.addWhereExistsCondition(false, sqlQueryObjectExistsAsinSimRispostaCheckCorrelazione);
  1031.             sqlQueryObjectExistsAsinSimRisposta.setANDLogicOperator(true);
  1032.            
  1033.             sqlQueryObject.addWhereCondition(true,
  1034.                     CostantiDB.PORT_TYPE+".profilo_collaborazione='asincronoSimmetrico'",
  1035.                     sqlQueryObject.getWhereExistsCondition(false, sqlQueryObjectExistsAsinSimRisposta));
  1036.         }
  1037.                
  1038.        
  1039.         // OR tra le condizioni
  1040.         sqlQueryObject.setANDLogicOperator(false);
  1041.        
  1042.         return sqlQueryObject;  
  1043.              
  1044.     }
  1045.    
  1046.    
  1047.    
  1048.     public static void deleteAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio,
  1049.             Connection con, String tabellaSoggetti, Logger log, IDAccordoFactory idAccordoFactory, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {

  1050.         if(tabellaSoggetti!=null) {
  1051.             // nop
  1052.         }
  1053.        
  1054.         if (accordoServizio == null)
  1055.             throw new DriverRegistroServiziException(ACCORDO_DIVERSO_NULL);

  1056.         String nome = accordoServizio.getNome();
  1057.         if (nome == null || nome.equals(""))
  1058.             throw new DriverRegistroServiziException(NOME_ACCORDO_NON_VALIDO);

  1059.         PreparedStatement stm = null;
  1060.         ResultSet rs = null;
  1061.         String sqlQuery = "";

  1062.        

  1063.         try {

  1064.             IDAccordo idAccordo = idAccordoFactory.getIDAccordoFromValues(nome,BeanUtilities.getSoggettoReferenteID(accordoServizio.getSoggettoReferente()),accordoServizio.getVersione());
  1065.             long idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordo, con, DriverRegistroServiziDB_LIB.tipoDB);
  1066.             if (idAccordoLong <= 0)
  1067.                 throw new DriverRegistroServiziException("Impossibile recuperare l'id dell'Accordo di Servizio : " + nome);

  1068.             // elimino tutte le azioni correlate con questo accordo
  1069.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1070.             sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_AZIONI);
  1071.             sqlQueryObject.addWhereCondition("id_accordo=?");
  1072.             String updateString = sqlQueryObject.createSQLDelete();
  1073.             stm = con.prepareStatement(updateString);
  1074.             stm.setLong(1, idAccordoLong);
  1075.             logDebug(log, "delete azioni :" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idAccordoLong));
  1076.             int n=stm.executeUpdate();
  1077.             stm.close();
  1078.             logDebug(log, "cancellate " + n + " azioni.");

  1079.            
  1080.             // elimino tutte i port type e struttura interna
  1081.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1082.             sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
  1083.             sqlQueryObject.addSelectField("id");
  1084.             sqlQueryObject.addWhereCondition("id_accordo = ?");
  1085.             sqlQuery = sqlQueryObject.createSQLQuery();
  1086.             stm=con.prepareStatement(sqlQuery);
  1087.             stm.setLong(1, idAccordoLong);
  1088.             rs=stm.executeQuery();
  1089.             List<Long> idPT = new ArrayList<>();
  1090.             while(rs.next()){
  1091.                 idPT.add(rs.getLong("id"));
  1092.             }
  1093.             rs.close();
  1094.             stm.close();

  1095.             while(!idPT.isEmpty()){
  1096.                 Long idPortType = idPT.remove(0);

  1097.                 // gestione operation_messages
  1098.                 List<Long> idPortTypeAzioni = new ArrayList<>();
  1099.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1100.                 sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  1101.                 sqlQueryObject.addSelectField("id");
  1102.                 sqlQueryObject.addWhereCondition("id_port_type=?");
  1103.                 sqlQuery = sqlQueryObject.createSQLQuery();
  1104.                 stm=con.prepareStatement(sqlQuery);
  1105.                 stm.setLong(1, idPortType);
  1106.                 rs=stm.executeQuery();
  1107.                 while(rs.next()){
  1108.                     idPortTypeAzioni.add(rs.getLong("id"));
  1109.                 }
  1110.                 rs.close();
  1111.                 stm.close();

  1112.                 while(!idPortTypeAzioni.isEmpty()){
  1113.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1114.                     sqlQueryObject.addDeleteTable(CostantiDB.PORT_TYPE_AZIONI_OPERATION_MESSAGES);
  1115.                     sqlQueryObject.addWhereCondition("id_port_type_azione=?");
  1116.                     sqlQueryObject.setANDLogicOperator(true);
  1117.                     sqlQuery = sqlQueryObject.createSQLDelete();
  1118.                     stm=con.prepareStatement(sqlQuery);
  1119.                     stm.setLong(1, idPortTypeAzioni.remove(0));
  1120.                     n=stm.executeUpdate();
  1121.                     stm.close();
  1122.                 }

  1123.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1124.                 sqlQueryObject.addDeleteTable(CostantiDB.PORT_TYPE_AZIONI);
  1125.                 sqlQueryObject.addWhereCondition("id_port_type=?");
  1126.                 sqlQueryObject.setANDLogicOperator(true);
  1127.                 sqlQuery = sqlQueryObject.createSQLDelete();
  1128.                 stm=con.prepareStatement(sqlQuery);
  1129.                 stm.setLong(1, idPortType);
  1130.                 n=stm.executeUpdate();
  1131.                 stm.close();
  1132.                 logDebug(log, "Cancellate "+n+" azioni del port type ["+idPortType+"] associate all'accordo "+idAccordoLong);
  1133.             }

  1134.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1135.             sqlQueryObject.addDeleteTable(CostantiDB.PORT_TYPE);
  1136.             sqlQueryObject.addWhereCondition("id_accordo=?");
  1137.             sqlQueryObject.setANDLogicOperator(true);
  1138.             sqlQuery = sqlQueryObject.createSQLDelete();
  1139.             stm=con.prepareStatement(sqlQuery);
  1140.             stm.setLong(1, idAccordoLong);
  1141.             n=stm.executeUpdate();
  1142.             stm.close();
  1143.             logDebug(log, "Cancellate "+n+" port type associate all'accordo "+idAccordoLong);

  1144.            
  1145.            
  1146.             // Risorse
  1147.             // elimino tutte le risorse api comprese di struttura interna
  1148.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1149.             sqlQueryObject.addFromTable(CostantiDB.API_RESOURCES);
  1150.             sqlQueryObject.addSelectField("id");
  1151.             sqlQueryObject.addWhereCondition("id_accordo = ?");
  1152.             sqlQuery = sqlQueryObject.createSQLQuery();
  1153.             stm=con.prepareStatement(sqlQuery);
  1154.             stm.setLong(1, idAccordoLong);
  1155.             rs=stm.executeQuery();
  1156.             List<Long> idResources = new ArrayList<>();
  1157.             while(rs.next()){
  1158.                 idResources.add(rs.getLong("id"));
  1159.             }
  1160.             rs.close();
  1161.             stm.close();
  1162.    
  1163.             while(!idResources.isEmpty()){
  1164.                 Long idR = idResources.remove(0);
  1165.                 Resource resource = new Resource();
  1166.                 resource.setId(idR);
  1167.                 DriverRegistroServiziDB_accordiRestLIB.CRUDResource(CostantiDB.DELETE, accordoServizio, resource, con, idAccordoLong, driverBYOK);
  1168.             }
  1169.            
  1170.            
  1171.             // Gruppi
  1172.             //la lista contiene tutte e sole le risorse necessarie
  1173.             //prima cancello le risorse e poi reinserisco quelle nuove
  1174.            
  1175.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1176.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI_GRUPPI);
  1177.             sqlQueryObject.addFromTable(CostantiDB.GRUPPI);
  1178.             sqlQueryObject.addSelectAliasField(CostantiDB.GRUPPI, "id", "identificativoGruppo");
  1179.             sqlQueryObject.addSelectAliasField(CostantiDB.GRUPPI, "nome", "nomeGruppo");
  1180.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_gruppo = "+CostantiDB.GRUPPI+".id");
  1181.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_accordo = ?");
  1182.             sqlQueryObject.setANDLogicOperator(true);
  1183.             sqlQuery = sqlQueryObject.createSQLQuery();
  1184.             stm=con.prepareStatement(sqlQuery);
  1185.             stm.setLong(1, idAccordoLong);
  1186.             rs=stm.executeQuery();
  1187.             List<GruppoAccordo> gruppi = new ArrayList<>();
  1188.             while(rs.next()){
  1189.                 GruppoAccordo gruppo = new GruppoAccordo();
  1190.                 gruppo.setNome(rs.getString("nomeGruppo"));
  1191.                 gruppo.setId(rs.getLong("identificativoGruppo"));
  1192.                 gruppi.add(gruppo);
  1193.             }
  1194.             rs.close();
  1195.             stm.close();
  1196.    
  1197.             while(!gruppi.isEmpty()){
  1198.                 GruppoAccordo gruppo = gruppi.remove(0);
  1199.                 DriverRegistroServiziDB_accordiLIB.CRUDAccordoGruppo(CostantiDB.DELETE, accordoServizio, gruppo, con, idAccordoLong);
  1200.             }
  1201.             logDebug(log, "Cancellate "+n+" resources associate all'accordo :" + nome + " id :" + idAccordoLong);
  1202.            
  1203.            
  1204.            
  1205.             // Documenti generici accordo di servizio
  1206.             // Allegati
  1207.             // Specifiche Semiformali
  1208.             // Speficiche Coordinamento
  1209.             DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.DELETE, null, idAccordoLong, ProprietariDocumento.accordoServizio, con, DriverRegistroServiziDB_LIB.tipoDB);


  1210.             // Accordo servizio composto
  1211.             if(accordoServizio.getServizioComposto()!=null){
  1212.                 DriverRegistroServiziDB_accordiCooperazioneLIB.CRUDAccordoServizioParteComuneServizioComposto(CostantiDB.DELETE,
  1213.                         accordoServizio.getServizioComposto(), con, idAccordoLong);
  1214.             }else{
  1215.                 DriverRegistroServiziDB_accordiCooperazioneLIB.CRUDAccordoServizioParteComuneServizioComposto(CostantiDB.DELETE,
  1216.                         null, con, idAccordoLong);
  1217.             }

  1218.            
  1219.             // ProtocolProperties
  1220.             DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.DELETE, null,
  1221.                     idAccordoLong, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_COMUNE, con, DriverRegistroServiziDB_LIB.tipoDB, driverBYOK);
  1222.            

  1223.             // elimino accordoservizio
  1224.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1225.             sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI);
  1226.             sqlQueryObject.addWhereCondition("id=?");
  1227.             updateString = sqlQueryObject.createSQLDelete();
  1228.             stm = con.prepareStatement(updateString);
  1229.             stm.setLong(1, idAccordoLong);
  1230.             logDebug(log, "delete accordoServizio :" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idAccordoLong));
  1231.             stm.executeUpdate();
  1232.             stm.close();


  1233.         } catch (SQLException se) {
  1234.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::deleteAccordoServizio] SQLException [" + se.getMessage() + "].",se);
  1235.         } catch (Exception se) {
  1236.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::deleteAccordoServizio] Exception [" + se.getMessage() + "].",se);
  1237.         }finally {
  1238.             JDBCUtilities.closeResources(rs, stm);
  1239.         }
  1240.     }
  1241.    
  1242. }