DriverRegistroServiziDB_accordiCooperazioneLIB.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.IDAccordoCooperazione;
  37. import org.openspcoop2.core.id.IDSoggetto;
  38. import org.openspcoop2.core.registry.AccordoCooperazionePartecipanti;
  39. import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioComposto;
  40. import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
  41. import org.openspcoop2.core.registry.Documento;
  42. import org.openspcoop2.core.registry.IdSoggetto;
  43. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  44. import org.openspcoop2.core.registry.constants.ProprietariDocumento;
  45. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  46. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  47. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  48. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  49. import org.openspcoop2.utils.sql.ISQLQueryObject;
  50. import org.openspcoop2.utils.sql.SQLObjectFactory;

  51. /**
  52.  * Classe utilizzata per effettuare query ad un registro dei servizi openspcoop
  53.  * formato db.
  54.  *
  55.  *
  56.  * @author Sandra Giangrandi (sandra@link.it)
  57.  * @author Stefano Corallo (corallo@link.it)
  58.  * @author $Author$
  59.  * @version $Rev$, $Date$
  60.  */
  61. public class DriverRegistroServiziDB_accordiCooperazioneLIB {
  62.    
  63.        
  64.    
  65.     public static void CRUDAccordoServizioParteComuneServizioComposto(int type, AccordoServizioParteComuneServizioComposto asServComposto, Connection con, long idAccordo) throws DriverRegistroServiziException {
  66.         PreparedStatement updateStmt = null;
  67.         String updateQuery;
  68.         PreparedStatement selectStmt = null;
  69.         ResultSet selectRS = null;
  70.         if (idAccordo <= 0)
  71.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID Accordo non valido.");
  72.        
  73. //      if(asServComposto!=null){
  74. //          if (asServComposto.getIdAccordoCooperazione() <= 0 && (type==CostantiDB.CREATE || type==CostantiDB.UPDATE)){
  75. //              
  76. //          }
  77. //              new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID Accordo Cooperazione non valido.");
  78. //      }
  79.        
  80.         try {
  81.             switch (type) {
  82.             case CREATE:
  83.                 // create
  84.                
  85.                 if (asServComposto == null)
  86.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] Accordo Cooperazione non valido.");
  87.                
  88.                 long idAccordoCooperazione = -1;
  89.                 if(asServComposto.getIdAccordoCooperazione()!=null){
  90.                     idAccordoCooperazione = asServComposto.getIdAccordoCooperazione();
  91.                 }
  92.                 //if(idAccordoCooperazione<=0){
  93.                 // Necessario sempre per la sincronizzazione
  94.                 if(asServComposto.getAccordoCooperazione()!=null){
  95.                     idAccordoCooperazione =
  96.                             DBUtils.getIdAccordoCooperazione(IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromUri(asServComposto.getAccordoCooperazione()),
  97.                                 con, DriverRegistroServiziDB_LIB.tipoDB);
  98.                 }
  99.                 //}
  100.                 if(idAccordoCooperazione<=0){
  101.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] idAccordoCooperazione non fornito");
  102.                 }
  103.                
  104.                 // Servizio composto
  105.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  106.                 sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  107.                 sqlQueryObject.addInsertField("id_accordo", "?");
  108.                 sqlQueryObject.addInsertField("id_accordo_cooperazione", "?");
  109.                 updateQuery = sqlQueryObject.createSQLInsert();
  110.                 updateStmt = con.prepareStatement(updateQuery);
  111.                 updateStmt.setLong(1, idAccordo);
  112.                 updateStmt.setLong(2, idAccordoCooperazione);
  113.                 updateStmt.executeUpdate();
  114.                 updateStmt.close();
  115.                 DriverRegistroServiziDB_LIB.log.debug("Aggiungo acc servizio composto");

  116.                 // Recupero id
  117.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  118.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  119.                 sqlQueryObject.addSelectField("id");
  120.                 sqlQueryObject.addWhereCondition("id_accordo=?");
  121.                 sqlQueryObject.setANDLogicOperator(true);
  122.                 updateQuery = sqlQueryObject.createSQLQuery();
  123.                 updateStmt = con.prepareStatement(updateQuery);
  124.                 updateStmt.setLong(1, idAccordo);
  125.                 selectRS = updateStmt.executeQuery();
  126.                 long idAccServComposto = -1;
  127.                 if(selectRS.next()){
  128.                     idAccServComposto = selectRS.getLong("id");
  129.                     asServComposto.setId(idAccServComposto);
  130.                 }else{
  131.                     throw new  DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID AccordoServizioComposto inserito non recuperato.");
  132.                 }
  133.                 selectRS.close();
  134.                 updateStmt.close();
  135.                
  136.                 // Servizio componenti
  137.                 for(int i=0; i< asServComposto.sizeServizioComponenteList(); i++){
  138.                
  139.                     AccordoServizioParteComuneServizioCompostoServizioComponente tmp = asServComposto.getServizioComponente(i);
  140.                     long idServizioComponente = -1;
  141.                     //if(idServizioComponente<=0){
  142.                     // Necessario sempre per la sincronizzazione
  143.                     // Provo a prenderlo attraverso la uri dell'accordo
  144.                     if(tmp.getTipoSoggetto()!=null && tmp.getNomeSoggetto()!=null && tmp.getTipo()!=null && tmp.getNome()!=null){
  145.                         // Provo a prenderlo attraverso la uri dell'accordo
  146.                         DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id del servizio con tipo/nome soggetto erogatore ["+tmp.getTipoSoggetto()+"/"+tmp.getNomeSoggetto()
  147.                                 +"] e tipo/nome servizio ["+tmp.getTipo()+"/"+tmp.getNome()+"]");
  148.                         if(tmp.getTipoSoggetto()!=null && tmp.getNomeSoggetto()!=null && tmp.getTipo()!=null  &&  tmp.getNome()!=null)
  149.                             idServizioComponente = DBUtils.getIdServizio(tmp.getNome(), tmp.getTipo(), tmp.getVersione(), tmp.getNomeSoggetto(), tmp.getTipoSoggetto(), con, DriverRegistroServiziDB_LIB.tipoDB);
  150.                     }
  151.                     if(idServizioComponente<=0){
  152.                         idServizioComponente = tmp.getIdServizioComponente();
  153.                     }
  154.                     //}
  155.                     if(idServizioComponente <=0 )
  156.                         throw new  DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID ServizioComponente non definito.");
  157.                            
  158.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  159.                     sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
  160.                     sqlQueryObject.addInsertField("id_servizio_composto", "?");
  161.                     sqlQueryObject.addInsertField("id_servizio_componente", "?");
  162.                     sqlQueryObject.addInsertField("azione", "?");
  163.                     updateQuery = sqlQueryObject.createSQLInsert();
  164.                     updateStmt = con.prepareStatement(updateQuery);
  165.                     updateStmt.setLong(1, idAccServComposto);
  166.                     updateStmt.setLong(2, idServizioComponente);
  167.                     updateStmt.setString(3, tmp.getAzione());
  168.                     updateStmt.executeUpdate();
  169.                     updateStmt.close();
  170.                     DriverRegistroServiziDB_LIB.log.debug("Aggiunto acc servizio componente");
  171.                    
  172.                 }

  173.                                
  174.                 break;

  175.             case UPDATE:
  176.                 // update
  177.                
  178.                 if (asServComposto == null)
  179.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] Accordo Cooperazione non valido.");
  180.                
  181.                 idAccServComposto = asServComposto.getId();
  182.                 if(idAccServComposto <=0 )
  183.                     throw new  DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID AccordoServizioComposto non definito.");
  184.                
  185.                
  186.                 idAccordoCooperazione = -1;
  187.                 if(asServComposto.getIdAccordoCooperazione()!=null){
  188.                     idAccordoCooperazione = asServComposto.getIdAccordoCooperazione();
  189.                 }
  190.                 //if(idAccordoCooperazione<=0){
  191.                 // Necessario sempre per la sincronizzazione
  192.                 if(asServComposto.getAccordoCooperazione()!=null){
  193.                     idAccordoCooperazione =
  194.                             DBUtils.getIdAccordoCooperazione(IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromUri(asServComposto.getAccordoCooperazione()),
  195.                                 con, DriverRegistroServiziDB_LIB.tipoDB);
  196.                 }
  197.                 //}
  198.                 if(idAccordoCooperazione<=0){
  199.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] idAccordoCooperazione non fornito");
  200.                 }
  201.                
  202.                
  203.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  204.                 sqlQueryObject.addUpdateTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  205.                 sqlQueryObject.addUpdateField("id_accordo_cooperazione", "?");
  206.                 sqlQueryObject.addWhereCondition("id=?");
  207.                 sqlQueryObject.setANDLogicOperator(true);
  208.                 updateQuery = sqlQueryObject.createSQLUpdate();
  209.                 updateStmt = con.prepareStatement(updateQuery);
  210.                 updateStmt.setLong(1, idAccordoCooperazione);
  211.                 updateStmt.executeUpdate();
  212.                 updateStmt.close();
  213.                 DriverRegistroServiziDB_LIB.log.debug("Aggiornato acc servizio composto");
  214.                
  215.                 // Elimino vecchi servizi componenti
  216.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  217.                 sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
  218.                 sqlQueryObject.addWhereCondition("id_servizio_composto=?");
  219.                 sqlQueryObject.setANDLogicOperator(true);
  220.                 updateQuery = sqlQueryObject.createSQLDelete();
  221.                 updateStmt = con.prepareStatement(updateQuery);
  222.                 updateStmt.setLong(1, idAccServComposto);
  223.                 updateStmt.executeUpdate();
  224.                 updateStmt.close();

  225.                 // Inserisco nuovi servizi componenti
  226.                 for(int i=0; i< asServComposto.sizeServizioComponenteList(); i++){
  227.                    
  228.                     AccordoServizioParteComuneServizioCompostoServizioComponente tmp = asServComposto.getServizioComponente(i);
  229.                     long idServizioComponente = -1;
  230.                     //if(idServizioComponente<=0){
  231.                     // Necessario sempre per la sincronizzazione
  232.                     // Provo a prenderlo attraverso la uri dell'accordo
  233.                     if(tmp.getTipoSoggetto()!=null && tmp.getNomeSoggetto()!=null && tmp.getTipo()!=null && tmp.getNome()!=null){
  234.                         // Provo a prenderlo attraverso la uri dell'accordo
  235.                         DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id del servizio con tipo/nome soggetto erogatore ["+tmp.getTipoSoggetto()+"/"+tmp.getNomeSoggetto()
  236.                                 +"] e tipo/nome servizio ["+tmp.getTipo()+"/"+tmp.getNome()+"]");
  237.                         if(tmp.getTipoSoggetto()!=null && tmp.getNomeSoggetto()!=null && tmp.getTipo()!=null  &&  tmp.getNome()!=null)
  238.                             idServizioComponente = DBUtils.getIdServizio(tmp.getNome(), tmp.getTipo(), tmp.getVersione(), tmp.getNomeSoggetto(), tmp.getTipoSoggetto(), con, DriverRegistroServiziDB_LIB.tipoDB);
  239.                     }
  240.                     if(idServizioComponente<=0){
  241.                         idServizioComponente = tmp.getIdServizioComponente();
  242.                     }
  243.                     if(idServizioComponente <=0 )
  244.                         throw new  DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID ServizioComponente non definito.");
  245.                        
  246.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  247.                     sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
  248.                     sqlQueryObject.addInsertField("id_servizio_composto", "?");
  249.                     sqlQueryObject.addInsertField("id_servizio_componente", "?");
  250.                     sqlQueryObject.addInsertField("azione", "?");
  251.                     updateQuery = sqlQueryObject.createSQLInsert();
  252.                     updateStmt = con.prepareStatement(updateQuery);
  253.                     updateStmt.setLong(1, idAccServComposto);
  254.                     updateStmt.setLong(2, idServizioComponente);
  255.                     updateStmt.setString(3, tmp.getAzione());
  256.                     updateStmt.executeUpdate();
  257.                     updateStmt.close();
  258.                     DriverRegistroServiziDB_LIB.log.debug("Aggiungo acc servizio componente");
  259.                    
  260.                 }
  261.                
  262.                 break;

  263.             case DELETE:
  264.                 // delete

  265.                 idAccServComposto = -1;
  266.                
  267.                 if(asServComposto!=null){
  268.                     idAccServComposto = asServComposto.getId();
  269.                     if(idAccServComposto <=0 ){
  270.                         //throw new  DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID AccordoServizioComposto non definito.");
  271.                        
  272.                         // lo cerco
  273.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  274.                         sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  275.                         sqlQueryObject.addSelectField("id");
  276.                         sqlQueryObject.addWhereCondition("id_accordo=?");
  277.                         updateQuery = sqlQueryObject.createSQLQuery();
  278.                         updateStmt = con.prepareStatement(updateQuery);
  279.                         updateStmt.setLong(1, idAccordo);
  280.                         selectRS = updateStmt.executeQuery();
  281.                         if(selectRS.next()){
  282.                             idAccServComposto = selectRS.getLong("id");
  283.                         }
  284.                         selectRS.close();
  285.                         updateStmt.close();
  286.                        
  287.                         if(idAccServComposto <=0 ){
  288.                             throw new  DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID AccordoServizioComposto non definito e non recuperabile.");
  289.                         }
  290.                     }
  291.                 }else{
  292.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  293.                     sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  294.                     sqlQueryObject.addSelectField("id");
  295.                     sqlQueryObject.addWhereCondition("id_accordo=?");
  296.                     updateQuery = sqlQueryObject.createSQLQuery();
  297.                     updateStmt = con.prepareStatement(updateQuery);
  298.                     updateStmt.setLong(1, idAccordo);
  299.                     selectRS = updateStmt.executeQuery();
  300.                     if(selectRS.next()){
  301.                         idAccServComposto = selectRS.getLong("id");
  302.                     }
  303.                     selectRS.close();
  304.                     updateStmt.close();
  305.                 }
  306.                
  307.                 if(idAccServComposto>0){
  308.                
  309.                     // Elimino vecchi servizi componenti
  310.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  311.                     sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
  312.                     sqlQueryObject.addWhereCondition("id_servizio_composto=?");
  313.                     sqlQueryObject.setANDLogicOperator(true);
  314.                     updateQuery = sqlQueryObject.createSQLDelete();
  315.                     updateStmt = con.prepareStatement(updateQuery);
  316.                     updateStmt.setLong(1, idAccServComposto);
  317.                     updateStmt.executeUpdate();
  318.                     updateStmt.close();
  319.                    
  320.                     // Elimino servizio composto
  321.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  322.                     sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  323.                     sqlQueryObject.addWhereCondition("id=?");
  324.                     sqlQueryObject.setANDLogicOperator(true);
  325.                     updateQuery = sqlQueryObject.createSQLDelete();
  326.                     updateStmt = con.prepareStatement(updateQuery);
  327.                     updateStmt.setLong(1, idAccServComposto);
  328.                     updateStmt.executeUpdate();
  329.                     updateStmt.close();

  330.                 }
  331.                
  332.                 break;
  333.             }

  334.         } catch (SQLException se) {
  335.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] SQLException : " + se.getMessage(),se);
  336.         } catch (Exception se) {
  337.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] Exception : " + se.getMessage(),se);
  338.         } finally {
  339.             JDBCUtilities.closeResources(selectRS, selectStmt);
  340.             JDBCUtilities.closeResources(updateStmt);
  341.         }
  342.     }
  343.    
  344.    
  345.    
  346.    
  347.    
  348.    
  349.     /**
  350.      * Accordo di Cooperazione CRUD
  351.      */
  352.     public static void CRUDAccordoCooperazione(int type, org.openspcoop2.core.registry.AccordoCooperazione accordoCooperazione,
  353.             Connection con, String tipoDatabase, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {
  354.         if (accordoCooperazione == null)
  355.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoCooperazione] Accordo di Cooperazione non valido.");

  356.         String nome = accordoCooperazione.getNome();
  357.         String descrizione = accordoCooperazione.getDescrizione();
  358.        
  359.         String stato = accordoCooperazione.getStatoPackage();
  360.         boolean privato = accordoCooperazione.getPrivato()!=null && accordoCooperazione.getPrivato();
  361.         String superUser = accordoCooperazione.getSuperUser();  
  362.        
  363.         if (nome == null || nome.equals(""))
  364.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoCooperazione] Parametro Nome non valido.");
  365.        
  366.         IDSoggetto soggettoReferente = null;
  367.         if(accordoCooperazione.getSoggettoReferente()!=null){
  368.             soggettoReferente = new IDSoggetto(accordoCooperazione.getSoggettoReferente().getTipo(), accordoCooperazione.getSoggettoReferente().getNome());
  369.         }
  370.        
  371.         PreparedStatement updateStmt = null;
  372.         ResultSet updateRS = null;
  373.         try {
  374.            
  375.             switch (type) {
  376.             case CREATE:
  377.                 // CREATE

  378.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  379.                 sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_COOPERAZIONE);
  380.                 sqlQueryObject.addInsertField("nome", "?");
  381.                 sqlQueryObject.addInsertField("descrizione", "?");
  382.                 sqlQueryObject.addInsertField("versione", "?");
  383.                 sqlQueryObject.addInsertField("privato", "?");
  384.                 sqlQueryObject.addInsertField("superuser", "?");
  385.                 if(stato!=null)
  386.                     sqlQueryObject.addInsertField("stato", "?");
  387.                 if(accordoCooperazione.getSoggettoReferente()!=null)
  388.                     sqlQueryObject.addInsertField("id_referente", "?");
  389.                 if(accordoCooperazione.getOraRegistrazione()!=null)
  390.                     sqlQueryObject.addInsertField("ora_registrazione", "?");
  391.                
  392.                 String updateQuery = sqlQueryObject.createSQLInsert();
  393.                 updateStmt = con.prepareStatement(updateQuery);

  394.                 updateStmt.setString(1, nome);
  395.                 updateStmt.setString(2, descrizione);
  396.                
  397.                 updateStmt.setInt(3, accordoCooperazione.getVersione());
  398.                
  399.                 if(privato)
  400.                     updateStmt.setInt(4, 1);
  401.                 else
  402.                     updateStmt.setInt(4, 0);
  403.                 updateStmt.setString(5, superUser);
  404.                
  405.                 int index = 6;
  406.                
  407.                 if(stato!=null){
  408.                     updateStmt.setString(index, stato);
  409.                     index++;
  410.                 }
  411.                
  412.                 if(accordoCooperazione.getSoggettoReferente()!=null){
  413.                     long idReferente = DBUtils.getIdSoggetto(accordoCooperazione.getSoggettoReferente().getNome(), accordoCooperazione.getSoggettoReferente().getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB);
  414.                     if(idReferente<=0){
  415.                         throw new DriverRegistroServiziException("Soggetto Referente ["+accordoCooperazione.getSoggettoReferente().getTipo()+"/"+accordoCooperazione.getSoggettoReferente().getNome()+"] non trovato");
  416.                     }
  417.                     updateStmt.setLong(index, idReferente);
  418.                     index++;
  419.                 }
  420.                
  421.                 if(accordoCooperazione.getOraRegistrazione()!=null){
  422.                     updateStmt.setTimestamp(index, new Timestamp(accordoCooperazione.getOraRegistrazione().getTime()));
  423.                     index++;
  424.                 }
  425.                
  426.                 // eseguo lo statement
  427.                 int n = updateStmt.executeUpdate();
  428.                 updateStmt.close();
  429.                 DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoServizioParteSpecifica CREATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, nome, descrizione));
  430.                 DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoServizioParteSpecifica type = " + type + " row affected =" + n);

  431.                
  432.                 // recupero l-id dell'accordo appena inserito
  433.                 IDAccordoCooperazione idAccordoObject = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromValues(accordoCooperazione.getNome(),
  434.                         soggettoReferente, accordoCooperazione.getVersione());
  435.                 long idAccordoCooperazione = DBUtils.getIdAccordoCooperazione(idAccordoObject, con, DriverRegistroServiziDB_LIB.tipoDB);
  436.                 if (idAccordoCooperazione<=0) {
  437.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB::CRUDAccordoCooperazione] non riesco a trovare l'id del'Accordo inserito");
  438.                 }
  439.                 accordoCooperazione.setId(idAccordoCooperazione);
  440.                                
  441.                
  442.                 // aggiungo partecipanti
  443.                 if(accordoCooperazione.getElencoPartecipanti()!=null){
  444.                     AccordoCooperazionePartecipanti partecipanti = accordoCooperazione.getElencoPartecipanti();
  445.                     for(int i=0; i<partecipanti.sizeSoggettoPartecipanteList(); i++){
  446.                        
  447.                         IdSoggetto soggettoPartecipante = partecipanti.getSoggettoPartecipante(i);
  448.                         long idSoggettoPartecipante = -1;
  449.                         if(idSoggettoPartecipante <=0 ){
  450.                             // Provo a prenderlo attraverso il tipo/nome
  451.                             DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id del soggetto con tipo/nome ["+soggettoPartecipante.getTipo()+"]/["+soggettoPartecipante.getNome()+"]");
  452.                             if(soggettoPartecipante.getTipo()!=null && soggettoPartecipante.getNome()!=null)
  453.                                 idSoggettoPartecipante = DBUtils.getIdSoggetto(soggettoPartecipante.getNome(),soggettoPartecipante.getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB);
  454.                         }
  455.                         if(idSoggettoPartecipante<=0){
  456.                             idSoggettoPartecipante = soggettoPartecipante.getIdSoggetto();
  457.                         }
  458.                         if(idSoggettoPartecipante<=0)
  459.                             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::CRUDAccordoCooperazione] idSoggettoPartecipante non presente");
  460.                        
  461.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  462.                         sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
  463.                         sqlQueryObject.addInsertField("id_accordo_cooperazione", "?");
  464.                         sqlQueryObject.addInsertField("id_soggetto", "?");
  465.                         updateQuery = sqlQueryObject.createSQLInsert();
  466.                         updateStmt = con.prepareStatement(updateQuery);
  467.    
  468.                         updateStmt.setLong(1, idAccordoCooperazione);
  469.                         updateStmt.setLong(2, idSoggettoPartecipante);
  470.                        
  471.                         n = updateStmt.executeUpdate();
  472.                         updateStmt.close();
  473.                         DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoCooperazione (servizioComposto) type = " + type + " row affected =" + n);
  474.                     }
  475.                 }
  476.                
  477.                
  478.                 // Documenti generici servizio
  479.                 List<Documento> documenti = new ArrayList<Documento>();
  480.                 // Allegati
  481.                 for(int i=0; i<accordoCooperazione.sizeAllegatoList(); i++){
  482.                     Documento doc = accordoCooperazione.getAllegato(i);
  483.                     doc.setRuolo(RuoliDocumento.allegato.toString());
  484.                     documenti.add(doc);
  485.                 }
  486.                 // Specifiche Semiformali
  487.                 for(int i=0; i<accordoCooperazione.sizeSpecificaSemiformaleList(); i++){
  488.                     Documento doc = accordoCooperazione.getSpecificaSemiformale(i);
  489.                     doc.setRuolo(RuoliDocumento.specificaSemiformale.toString());
  490.                     documenti.add(doc);
  491.                 }
  492.                 // CRUD
  493.                 DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.CREATE, documenti, idAccordoCooperazione, ProprietariDocumento.accordoCooperazione, con, tipoDatabase);
  494.                
  495.                
  496.                 // ProtocolProperties
  497.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.CREATE, accordoCooperazione.getProtocolPropertyList(),
  498.                         idAccordoCooperazione, ProprietariProtocolProperty.ACCORDO_COOPERAZIONE, con, tipoDatabase, driverBYOK);
  499.                

  500.                 break;

  501.             case UPDATE:
  502.                 // UPDATE
  503.                
  504.                 IDAccordoCooperazione idAccordoAttualeInseritoDB = null;
  505.                 if(accordoCooperazione.getOldIDAccordoForUpdate()!=null){
  506.                     idAccordoAttualeInseritoDB = accordoCooperazione.getOldIDAccordoForUpdate();
  507.                 }else{
  508.                     idAccordoAttualeInseritoDB = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromAccordo(accordoCooperazione);
  509.                 }
  510.                
  511.                 long idAccordoLong = DBUtils.getIdAccordoCooperazione(idAccordoAttualeInseritoDB, con,DriverRegistroServiziDB_LIB.tipoDB);

  512.                 if (idAccordoLong <= 0)
  513.                     throw new DriverRegistroServiziException("Impossibile recuperare l'id dell'Accordo di Cooperazione : " + nome);
  514.                
  515.                
  516.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  517.                 sqlQueryObject.addUpdateTable(CostantiDB.ACCORDI_COOPERAZIONE);
  518.                 sqlQueryObject.addUpdateField("nome", "?");
  519.                 sqlQueryObject.addUpdateField("descrizione", "?");
  520.                 sqlQueryObject.addUpdateField("versione", "?");
  521.                 sqlQueryObject.addUpdateField("privato", "?");
  522.                 sqlQueryObject.addUpdateField("superuser", "?");
  523.                 sqlQueryObject.addUpdateField("id_referente", "?");
  524.                 if(stato!=null)
  525.                     sqlQueryObject.addUpdateField("stato", "?");
  526.                 if(accordoCooperazione.getOraRegistrazione()!=null)
  527.                     sqlQueryObject.addUpdateField("ora_registrazione", "?");
  528.                 sqlQueryObject.addWhereCondition("id=?");
  529.                
  530.                 updateQuery = sqlQueryObject.createSQLUpdate();
  531.                 updateStmt = con.prepareStatement(updateQuery);
  532.                
  533.                 updateStmt.setString(1, nome);
  534.                 updateStmt.setString(2, descrizione);
  535.                
  536.                 updateStmt.setInt(3, accordoCooperazione.getVersione());
  537.                
  538.                 if(privato)
  539.                     updateStmt.setInt(4, 1);
  540.                 else
  541.                     updateStmt.setInt(4, 0);
  542.                 updateStmt.setString(5, superUser);
  543.                
  544.                 index = 6;
  545.                
  546.                 if(accordoCooperazione.getSoggettoReferente()!=null) {
  547.                     long idSRef = DBUtils.getIdSoggetto(accordoCooperazione.getSoggettoReferente().getNome(),
  548.                             accordoCooperazione.getSoggettoReferente().getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB);
  549.                     updateStmt.setLong(index, idSRef);
  550.                 }else{
  551.                     updateStmt.setLong(index, CostantiRegistroServizi.SOGGETTO_REFERENTE_DEFAULT);
  552.                 }
  553.                 index++;
  554.                
  555.                 if(stato!=null){
  556.                     updateStmt.setString(index, stato);
  557.                     index++;
  558.                 }
  559.                
  560.                 if(accordoCooperazione.getOraRegistrazione()!=null){
  561.                     updateStmt.setTimestamp(index, new Timestamp(accordoCooperazione.getOraRegistrazione().getTime()));
  562.                     index++;
  563.                 }
  564.                
  565.                 updateStmt.setLong(index, idAccordoLong);
  566.                
  567.                 n = updateStmt.executeUpdate();
  568.                 updateStmt.close();
  569.                 DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoCooperazione type = " + type + " row affected =" + n);
  570.                
  571.                
  572.                 /*
  573.                 // update servizi componenti, elimino i vecchi e riaggiungo i nuovi
  574.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  575.                 sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE_SERVIZI_COMPOSTI);
  576.                 sqlQueryObject.addWhereCondition("id_accordo_cooperazione=?");
  577.                 sqlQueryObject.setANDLogicOperator(true);
  578.                 updateQuery = sqlQueryObject.createSQLDelete();
  579.                 updateStmt = con.prepareStatement(updateQuery);
  580.                 updateStmt.setLong(1, idAccordoLong);
  581.                 updateStmt.executeUpdate();
  582.                 updateStmt.close();
  583.                
  584.                 // aggiungo servizi componenti
  585.                 for(int i=0; i<accordoCooperazione.sizeServizioCompostoList(); i++){
  586.                    
  587.                     AccordoCooperazioneServizioComposto sComposto = accordoCooperazione.getServizioComposto(i);
  588.                     long idAccordoServizioComposto = sComposto.getIdAccordo();
  589.                     if(idAccordoServizioComposto <=0 ){
  590.                         // Provo a prenderlo attraverso la uri dell'accordo
  591.                         DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id dell'accordo di servizio con uri ["+sComposto.getNomeAccordoServizio()+"]");
  592.                         if(sComposto.getNomeAccordoServizio()!=null)
  593.                             idAccordoServizioComposto = DBUtils.getIdAccordoServizio(IDAccordo.getIDAccordoFromUri(sComposto.getNomeAccordoServizio()), con, DriverRegistroServiziDB_LIB.tipoDB);
  594.                     }
  595.                     if(idAccordoServizioComposto<=0)
  596.                         throw new DriverRegistroServiziException("[DriverRegistroServiziDB::CRUDAccordoCooperazione] idAccordoServizio composto non presente");
  597.                    
  598.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  599.                     sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_COOPERAZIONE_SERVIZI_COMPOSTI);
  600.                     sqlQueryObject.addInsertField("id_accordo_cooperazione", "?");
  601.                     sqlQueryObject.addInsertField("id_accordo_servizio", "?");
  602.                     updateQuery = sqlQueryObject.createSQLInsert();
  603.                     updateStmt = con.prepareStatement(updateQuery);

  604.                     updateStmt.setLong(1, idAccordoLong);
  605.                     updateStmt.setLong(2, idAccordoServizioComposto);
  606.                    
  607.                     n = updateStmt.executeUpdate();
  608.                     updateStmt.close();
  609.                     DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoCooperazione (Partecipante) type = " + type + " row affected =" + n);
  610.                 }*/
  611.                
  612.                
  613.                 // update partecipanti, elimino i vecchi e riaggiungo i nuovi
  614.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  615.                 sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
  616.                 sqlQueryObject.addWhereCondition("id_accordo_cooperazione=?");
  617.                 sqlQueryObject.setANDLogicOperator(true);
  618.                 updateQuery = sqlQueryObject.createSQLDelete();
  619.                 updateStmt = con.prepareStatement(updateQuery);
  620.                 updateStmt.setLong(1, idAccordoLong);
  621.                 updateStmt.executeUpdate();
  622.                 updateStmt.close();
  623.                
  624.                 // aggiungo partecipanti
  625.                 if(accordoCooperazione.getElencoPartecipanti()!=null){
  626.                     AccordoCooperazionePartecipanti partecipanti = accordoCooperazione.getElencoPartecipanti();
  627.                     for(int i=0; i<partecipanti.sizeSoggettoPartecipanteList(); i++){
  628.                        
  629.                         IdSoggetto soggettoPartecipante = partecipanti.getSoggettoPartecipante(i);
  630.                    
  631.                         Long idSoggettoPartecipante = -1L;
  632.                         if(idSoggettoPartecipante==null || idSoggettoPartecipante <=0 ){
  633.                             // Provo a prenderlo attraverso il tipo/nome
  634.                             DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id del soggetto con tipo/nome ["+soggettoPartecipante.getTipo()+"]/["+soggettoPartecipante.getNome()+"]");
  635.                             if(soggettoPartecipante.getTipo()!=null && soggettoPartecipante.getNome()!=null)
  636.                                 idSoggettoPartecipante = DBUtils.getIdSoggetto(soggettoPartecipante.getNome(),soggettoPartecipante.getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB);
  637.                         }
  638.                         if(idSoggettoPartecipante<=0){
  639.                             idSoggettoPartecipante = soggettoPartecipante.getIdSoggetto();
  640.                         }
  641.                         if(idSoggettoPartecipante<=0)
  642.                             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::CRUDAccordoCooperazione] idSoggettoPartecipante non presente");
  643.                        
  644.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  645.                         sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
  646.                         sqlQueryObject.addInsertField("id_accordo_cooperazione", "?");
  647.                         sqlQueryObject.addInsertField("id_soggetto", "?");
  648.                         updateQuery = sqlQueryObject.createSQLInsert();
  649.                         updateStmt = con.prepareStatement(updateQuery);
  650.    
  651.                         updateStmt.setLong(1, idAccordoLong);
  652.                         updateStmt.setLong(2, idSoggettoPartecipante);
  653.                        
  654.                         n = updateStmt.executeUpdate();
  655.                         updateStmt.close();
  656.                         DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoCooperazione (servizioComposto) type = " + type + " row affected =" + n);
  657.                     }
  658.                 }
  659.                
  660.                
  661.                 // Documenti generici servizio
  662.                 documenti = new ArrayList<Documento>();
  663.                 // Allegati
  664.                 for(int i=0; i<accordoCooperazione.sizeAllegatoList(); i++){
  665.                     Documento doc = accordoCooperazione.getAllegato(i);
  666.                     doc.setRuolo(RuoliDocumento.allegato.toString());
  667.                     documenti.add(doc);
  668.                 }
  669.                 // Specifiche Semiformali
  670.                 for(int i=0; i<accordoCooperazione.sizeSpecificaSemiformaleList(); i++){
  671.                     Documento doc = accordoCooperazione.getSpecificaSemiformale(i);
  672.                     doc.setRuolo(RuoliDocumento.specificaSemiformale.toString());
  673.                     documenti.add(doc);
  674.                 }
  675.                 // CRUD
  676.                 DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.UPDATE, documenti, idAccordoLong, ProprietariDocumento.accordoCooperazione, con,tipoDatabase);
  677.                
  678.                
  679.                 // ProtocolProperties
  680.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.UPDATE, accordoCooperazione.getProtocolPropertyList(),
  681.                         idAccordoLong, ProprietariProtocolProperty.ACCORDO_COOPERAZIONE, con, tipoDatabase, driverBYOK);
  682.                
  683.                
  684.                
  685.                 break;

  686.             case DELETE:
  687.                 // DELETE
  688.                
  689.                 IDAccordoCooperazione idAccordo = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromValues(nome,soggettoReferente,accordoCooperazione.getVersione());
  690.                 idAccordoLong = DBUtils.getIdAccordoCooperazione(idAccordo, con, DriverRegistroServiziDB_LIB.tipoDB);
  691.                 if (idAccordoLong <= 0)
  692.                     throw new DriverRegistroServiziException("Impossibile recuperare l'id dell'Accordo di Cooperazione : " + nome);
  693.                
  694.                 /*
  695.                 // delete servizi componenti
  696.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  697.                 sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE_SERVIZI_COMPOSTI);
  698.                 sqlQueryObject.addWhereCondition("id_accordo_cooperazione=?");
  699.                 sqlQueryObject.setANDLogicOperator(true);
  700.                 updateQuery = sqlQueryObject.createSQLDelete();
  701.                 updateStmt = con.prepareStatement(updateQuery);
  702.                 updateStmt.setLong(1, idAccordoLong);
  703.                 updateStmt.executeUpdate();
  704.                 updateStmt.close();
  705.                 */
  706.                
  707.                 // delete partecipanti
  708.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  709.                 sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
  710.                 sqlQueryObject.addWhereCondition("id_accordo_cooperazione=?");
  711.                 sqlQueryObject.setANDLogicOperator(true);
  712.                 updateQuery = sqlQueryObject.createSQLDelete();
  713.                 updateStmt = con.prepareStatement(updateQuery);
  714.                 updateStmt.setLong(1, idAccordoLong);
  715.                 updateStmt.executeUpdate();
  716.                 updateStmt.close();
  717.                
  718.                 // Documenti generici accordo di servizio
  719.                 // Allegati
  720.                 // Specifiche Semiformali
  721.                 DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.DELETE, null, idAccordoLong, ProprietariDocumento.accordoCooperazione, con,tipoDatabase);
  722.                
  723.                
  724.                 // ProtocolProperties
  725.                 DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.DELETE, null,
  726.                         idAccordoLong, ProprietariProtocolProperty.ACCORDO_COOPERAZIONE, con, tipoDatabase, driverBYOK);
  727.                
  728.                
  729.                 // delete Accordo di Cooperazione
  730.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  731.                 sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE);
  732.                 sqlQueryObject.addWhereCondition("id=?");
  733.                 sqlQueryObject.setANDLogicOperator(true);
  734.                 updateQuery = sqlQueryObject.createSQLDelete();
  735.                 updateStmt = con.prepareStatement(updateQuery);
  736.                 updateStmt.setLong(1, idAccordoLong);
  737.                 updateStmt.executeUpdate();
  738.                 updateStmt.close();

  739.                 break;
  740.             }

  741.         } catch (CoreException e) {
  742.             throw new DriverRegistroServiziException(e);
  743.         } catch (SQLException se) {
  744.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoCooperazione] SQLException [" + se.getMessage() + "].", se);

  745.         } catch (Exception se) {
  746.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoCooperazione] Exception [" + se.getMessage() + "].", se);

  747.         } finally {
  748.             JDBCUtilities.closeResources(updateRS, updateStmt);
  749.         }

  750.     }
  751.    
  752. }