DriverRegistroServiziDB_accordiDriver.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 java.sql.Connection;
  22. import java.sql.Date;
  23. import java.sql.PreparedStatement;
  24. import java.sql.ResultSet;
  25. import java.sql.SQLException;
  26. import java.util.ArrayList;
  27. import java.util.List;

  28. import org.openspcoop2.core.commons.DBUtils;
  29. import org.openspcoop2.core.commons.Filtri;
  30. import org.openspcoop2.core.commons.ISearch;
  31. import org.openspcoop2.core.commons.Liste;
  32. import org.openspcoop2.core.commons.SearchUtils;
  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.IDServizio;
  37. import org.openspcoop2.core.id.IDSoggetto;
  38. import org.openspcoop2.core.registry.AccordoCooperazione;
  39. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  40. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  41. import org.openspcoop2.core.registry.Documento;
  42. import org.openspcoop2.core.registry.IdSoggetto;
  43. import org.openspcoop2.core.registry.Operation;
  44. import org.openspcoop2.core.registry.PortType;
  45. import org.openspcoop2.core.registry.ProtocolProperty;
  46. import org.openspcoop2.core.registry.Soggetto;
  47. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  48. import org.openspcoop2.core.registry.constants.ProfiloCollaborazione;
  49. import org.openspcoop2.core.registry.constants.ProprietariDocumento;
  50. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  51. import org.openspcoop2.core.registry.constants.ServiceBinding;
  52. import org.openspcoop2.core.registry.constants.StatiAccordo;
  53. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  54. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  55. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  56. import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
  57. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  58. import org.openspcoop2.utils.sql.ISQLQueryObject;
  59. import org.openspcoop2.utils.sql.SQLObjectFactory;

  60. /**
  61.  * DriverRegistroServiziDB_accordiDriver
  62.  *
  63.  *
  64.  * @author Sandra Giangrandi (sandra@link.it)
  65.  * @author Stefano Corallo (corallo@link.it)
  66.  * @author $Author$
  67.  * @version $Rev$, $Date$
  68.  */
  69. public class DriverRegistroServiziDB_accordiDriver {

  70.     private DriverRegistroServiziDB driver = null;
  71.     private DriverRegistroServiziDB_accordiSoapDriver driverSoap = null;
  72.     private DriverRegistroServiziDB_accordiRestDriver driverRest = null;
  73.     private DriverRegistroServiziDB_accordiGruppiDriver driverGruppi = null;
  74.     private DriverRegistroServiziDB_accordiServiziCompostiDriver driverAccordiServiziComposti = null;
  75.    
  76.     protected DriverRegistroServiziDB_accordiDriver(DriverRegistroServiziDB driver) {
  77.         this.driver = driver;
  78.         this.driverSoap = new DriverRegistroServiziDB_accordiSoapDriver(driver);
  79.         this.driverRest = new DriverRegistroServiziDB_accordiRestDriver(driver);
  80.         this.driverGruppi = new DriverRegistroServiziDB_accordiGruppiDriver(driver);
  81.         this.driverAccordiServiziComposti = new DriverRegistroServiziDB_accordiServiziCompostiDriver(driver);
  82.     }
  83.    

  84.     protected int getAccordoServizioParteComuneNextVersion(IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  85.         // conrollo consistenza
  86.         if (idAccordo == null)
  87.             throw new DriverRegistroServiziException("[getAccordoServizioParteComuneNextVersion] Parametro idAccordo is null");
  88.         if (idAccordo.getNome() == null)
  89.             throw new DriverRegistroServiziException("[getAccordoServizioParteComuneNextVersion] Parametro idAccordo.getNome is null");
  90.         if (idAccordo.getNome().trim().equals(""))
  91.             throw new DriverRegistroServiziException("[getAccordoServizioParteComuneNextVersion] Parametro idAccordo.getNome non e' definito");

  92.         this.driver.logDebug("richiesto getAccordoServizioParteComuneNextVersion: " + idAccordo.toString());

  93.         int nextVersion = -1;
  94.         Connection con = null;
  95.         try {
  96.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  97.             // prendo la connessione dal pool
  98.             if (this.driver.atomica)
  99.                 con = this.driver.getConnectionFromDatasource("getAccordoServizioParteComuneNextVersion(idAccordo)");
  100.             else
  101.                 con = this.driver.globalConnection;
  102.            
  103.             nextVersion = DBUtils.getAccordoServizioParteComuneNextVersion(idAccordo, con, this.driver.tipoDB);
  104.         }catch (Exception se) {
  105.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteComuneNextVersion] Exception :" + se.getMessage(),se);
  106.         } finally {
  107.             this.driver.closeConnection(con);
  108.         }
  109.         return nextVersion;
  110.     }
  111.    
  112.     protected org.openspcoop2.core.registry.AccordoServizioParteComune getAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  113.         return getAccordoServizioParteComune(idAccordo,false,false);
  114.     }
  115.     protected org.openspcoop2.core.registry.AccordoServizioParteComune getAccordoServizioParteComune(IDAccordo idAccordo,boolean readContenutoAllegati,boolean readDatiRegistro) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  116.         // conrollo consistenza
  117.         if (idAccordo == null)
  118.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Parametro idAccordo is null");
  119.         if (idAccordo.getNome() == null)
  120.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Parametro idAccordo.getNome is null");
  121.         if (idAccordo.getNome().trim().equals(""))
  122.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Parametro idAccordo.getNome non e' definito");

  123.         this.driver.logDebug("richiesto getAccordoServizioParteComune: " + idAccordo.toString());

  124.         org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio = null;
  125.         Connection con = null;
  126.         PreparedStatement stm = null;
  127.         ResultSet rs = null;

  128.         try {

  129.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  130.             // prendo la connessione dal pool
  131.             if (this.driver.atomica)
  132.                 con = this.driver.getConnectionFromDatasource("getAccordoServizioParteComune(idAccordo)");
  133.             else
  134.                 con = this.driver.globalConnection;

  135.             long idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordo, con, this.driver.tipoDB);
  136.             if(idAccordoLong<=0){
  137.                 throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getAccordoServizioParteComune] Accordo non trovato (id:"+idAccordo+")");
  138.             }


  139.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  140.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  141.             sqlQueryObject.addSelectField("*");
  142.             sqlQueryObject.addWhereCondition("id = ?");
  143.             sqlQueryObject.setANDLogicOperator(true);
  144.             String sqlQuery = sqlQueryObject.createSQLQuery();



  145.             stm = con.prepareStatement(sqlQuery);

  146.             stm.setLong(1, idAccordoLong);


  147.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idAccordoLong));
  148.             rs = stm.executeQuery();

  149.             if (rs.next()) {
  150.                 accordoServizio = new org.openspcoop2.core.registry.AccordoServizioParteComune();

  151.                 accordoServizio.setId(rs.getLong("id"));

  152.                 String tmp = rs.getString("nome");
  153.                 // se tmp==null oppure tmp=="" then setNome(null) else
  154.                 // setNome(tmp)
  155.                 accordoServizio.setNome(((tmp == null || tmp.equals("")) ? null : tmp));

  156.                 tmp = rs.getString("descrizione");
  157.                 accordoServizio.setDescrizione(((tmp == null || tmp.equals("")) ? null : tmp));

  158.                 tmp = rs.getString("service_binding");
  159.                 accordoServizio.setServiceBinding(DriverRegistroServiziDB_LIB.getEnumServiceBinding((tmp == null || tmp.equals("")) ? null : tmp));
  160.                
  161.                 tmp = rs.getString("message_type");
  162.                 accordoServizio.setMessageType(DriverRegistroServiziDB_LIB.getEnumMessageType((tmp == null || tmp.equals("")) ? null : tmp));
  163.                
  164.                 // controllare i vari casi di profcoll (one-way....)
  165.                 tmp = rs.getString("profilo_collaborazione");
  166.                 accordoServizio.setProfiloCollaborazione(DriverRegistroServiziDB_LIB.getEnumProfiloCollaborazione((tmp == null || tmp.equals("")) ? null : tmp));
  167.                 if(accordoServizio.getProfiloCollaborazione()==null){
  168.                     // puo' essere null se e' stato ridefinito nei port type e nelle operation
  169.                     // inserisco comunque un default (usato anche nelle interfacce)
  170.                     accordoServizio.setProfiloCollaborazione(ProfiloCollaborazione.ONEWAY);
  171.                 }

  172.                 //      if (tmp == null || tmp.equals(""))
  173.                 //          accordoServizio.setProfiloCollaborazione(null);
  174.                 //      if (tmp.equals("oneway"))
  175.                 //          accordoServizio
  176.                 //              .setProfiloCollaborazione(CostantiRegistroServizi.ONEWAY);
  177.                 //      if (tmp.equals("sincrono"))
  178.                 //          accordoServizio
  179.                 //              .setProfiloCollaborazione(CostantiRegistroServizi.SINCRONO);
  180.                 //      if (tmp.equals("asincrono-simmetrico"))
  181.                 //          accordoServizio
  182.                 //              .setProfiloCollaborazione(CostantiRegistroServizi.ASINCRONO_SIMMETRICO);
  183.                 //      if (tmp.equals("asincrono-asimmetrico"))
  184.                 //          accordoServizio
  185.                 //              .setProfiloCollaborazione(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO);

  186.                 tmp = rs.getString("formato_specifica");
  187.                 accordoServizio.setFormatoSpecifica(DriverRegistroServiziDB_LIB.getEnumFormatoSpecifica((tmp == null || tmp.equals("")) ? null : tmp));
  188.                
  189.                 tmp = rs.getString("wsdl_definitorio");
  190.                 accordoServizio.setByteWsdlDefinitorio(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));

  191.                 tmp = rs.getString("wsdl_concettuale");
  192.                 accordoServizio.setByteWsdlConcettuale(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));

  193.                 tmp = rs.getString("wsdl_logico_erogatore");
  194.                 accordoServizio.setByteWsdlLogicoErogatore(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));

  195.                 tmp = rs.getString("wsdl_logico_fruitore");
  196.                 accordoServizio.setByteWsdlLogicoFruitore(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));

  197.                 tmp = rs.getString("spec_conv_concettuale");
  198.                 accordoServizio.setByteSpecificaConversazioneConcettuale(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));

  199.                 tmp = rs.getString("spec_conv_erogatore");
  200.                 accordoServizio.setByteSpecificaConversazioneErogatore(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));

  201.                 tmp = rs.getString("spec_conv_fruitore");
  202.                 accordoServizio.setByteSpecificaConversazioneFruitore(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));

  203.                 accordoServizio.setUtilizzoSenzaAzione(rs.getInt("utilizzo_senza_azione") == CostantiDB.TRUE ? true : false);

  204.                 tmp = rs.getString("filtro_duplicati");
  205.                 accordoServizio.setFiltroDuplicati(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));

  206.                 tmp = rs.getString("conferma_ricezione");
  207.                 accordoServizio.setConfermaRicezione(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));

  208.                 tmp = rs.getString("identificativo_collaborazione");
  209.                 accordoServizio.setIdCollaborazione(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
  210.                
  211.                 tmp = rs.getString("id_riferimento_richiesta");
  212.                 accordoServizio.setIdRiferimentoRichiesta(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
  213.                
  214.                 tmp = rs.getString("consegna_in_ordine");
  215.                 accordoServizio.setConsegnaInOrdine(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
  216.                
  217.                 tmp = rs.getString("scadenza");
  218.                 accordoServizio.setScadenza(((tmp == null || tmp.equals("")) ? null : tmp));

  219.                 tmp = rs.getString("superuser");
  220.                 accordoServizio.setSuperUser(((tmp == null || tmp.equals("")) ? null : tmp));

  221.                 if(rs.getInt("privato")==1)
  222.                     accordoServizio.setPrivato(true);
  223.                 else
  224.                     accordoServizio.setPrivato(false);

  225.                 // Ora Registrazione
  226.                 if(rs.getTimestamp("ora_registrazione")!=null){
  227.                     accordoServizio.setOraRegistrazione(new Date(rs.getTimestamp("ora_registrazione").getTime()));
  228.                 }

  229.                 // Soggetto referente
  230.                 long idReferente = rs.getLong("id_referente");
  231.                 if(idReferente>0) {
  232.                     IDSoggetto soggettoReferente = null;
  233.                     try {
  234.                         soggettoReferente = this.driver.getIdSoggetto(idReferente,con);
  235.                         if(soggettoReferente==null){
  236.                             throw new DriverRegistroServiziNotFound ("non esiste");
  237.                         }
  238.                     }catch(DriverRegistroServiziNotFound notFound) {
  239.                         throw new Exception ("Soggetto referente ["+idReferente+"] dell'accordo non esiste");
  240.                     }
  241.                     IdSoggetto assr = new IdSoggetto();
  242.                     assr.setTipo(soggettoReferente.getTipo());
  243.                     assr.setNome(soggettoReferente.getNome());
  244.                     assr.setId(idReferente);
  245.                     accordoServizio.setSoggettoReferente(assr);
  246.                 }

  247.                 //Versione
  248.                 if(rs.getString("versione")!=null && !"".equals(rs.getString("versione")))
  249.                     accordoServizio.setVersione(rs.getInt("versione"));

  250.                 // Stato
  251.                 tmp = rs.getString("stato");
  252.                 accordoServizio.setStatoPackage(((tmp == null || tmp.equals("")) ? null : tmp));

  253.                 // Canali
  254.                 String canale = rs.getString("canale");
  255.                 accordoServizio.setCanale(canale);
  256.                
  257.                 // Proprieta Oggetto
  258.                 accordoServizio.setProprietaOggetto(DriverRegistroServiziDB_utilsDriver.readProprietaOggetto(rs,false));
  259.                
  260.                 rs.close();
  261.                 stm.close();


  262.                 // Aggiungo azione

  263.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  264.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI_AZIONI);
  265.                 sqlQueryObject.addSelectField("*");
  266.                 sqlQueryObject.addWhereCondition("id_accordo = ?");
  267.                 sqlQueryObject.setANDLogicOperator(true);
  268.                 sqlQueryObject.addOrderBy("nome");
  269.                 sqlQueryObject.setSortType(true);
  270.                 sqlQuery = sqlQueryObject.createSQLQuery();

  271.                 stm = con.prepareStatement(sqlQuery);
  272.                 stm.setLong(1, idAccordoLong);

  273.                 this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idAccordoLong));

  274.                 rs = stm.executeQuery();

  275.                 org.openspcoop2.core.registry.Azione azione = null;
  276.                 while (rs.next()) {

  277.                     azione = new org.openspcoop2.core.registry.Azione();

  278.                     tmp = rs.getString("conferma_ricezione");
  279.                     azione.setConfermaRicezione(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));

  280.                     tmp = rs.getString("consegna_in_ordine");
  281.                     azione.setConsegnaInOrdine(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));

  282.                     tmp = rs.getString("filtro_duplicati");
  283.                     azione.setFiltroDuplicati(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));

  284.                     tmp = rs.getString("identificativo_collaborazione");
  285.                     azione.setIdCollaborazione(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));

  286.                     tmp = rs.getString("id_riferimento_richiesta");
  287.                     azione.setIdRiferimentoRichiesta(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
  288.                    
  289.                     tmp = rs.getString("nome");
  290.                     azione.setNome(((tmp == null || tmp.equals("")) ? null : tmp));

  291.                     tmp = rs.getString("scadenza");
  292.                     azione.setScadenza(((tmp == null || tmp.equals("")) ? null : tmp));

  293.                     tmp = rs.getString("profilo_collaborazione");
  294.                     azione.setProfiloCollaborazione(DriverRegistroServiziDB_LIB.getEnumProfiloCollaborazione(((tmp == null || tmp.equals("")) ? null : tmp)));

  295.                     tmp = rs.getString("correlata");
  296.                     azione.setCorrelata(((tmp == null || tmp.equals("")) ? null : tmp));

  297.                     tmp = rs.getString("profilo_azione");
  298.                     if (tmp == null || tmp.equals(""))
  299.                         azione.setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT);
  300.                     else
  301.                         azione.setProfAzione(tmp);

  302.                     long idAzione = rs.getLong("id");
  303.                     azione.setId(idAzione);

  304.                    
  305.                     // Protocol Properties
  306.                     try{
  307.                         List<ProtocolProperty> listPP = DriverRegistroServiziDB_LIB.getListaProtocolProperty(idAzione, ProprietariProtocolProperty.AZIONE_ACCORDO, con,
  308.                                 this.driver.tipoDB, this.driver.getDriverUnwrapBYOK());
  309.                         if(listPP!=null && !listPP.isEmpty()){
  310.                             for (ProtocolProperty protocolProperty : listPP) {
  311.                                 azione.addProtocolProperty(protocolProperty);
  312.                             }
  313.                         }
  314.                     }catch(DriverRegistroServiziNotFound dNotFound){
  315.                         // ignore
  316.                     }
  317.                    
  318.                     accordoServizio.addAzione(azione);

  319.                 }
  320.                 rs.close();
  321.                 stm.close();


  322.                 // read port type
  323.                 this.driverSoap.readPortTypes(accordoServizio,con);
  324.                
  325.                 // read resources
  326.                 this.driverRest.readResources(accordoServizio,con,readDatiRegistro);
  327.                
  328.                 // read gruppi
  329.                 this.driverGruppi.readAccordiGruppi(accordoServizio,con);

  330.                 // read AccordoServizioComposto
  331.                 this.driverAccordiServiziComposti.readAccordoServizioComposto(accordoServizio , con);


  332.                 // read Documenti generici: i bytes non vengono ritornati se readContenutoAllegati==false, utilizzare il metodo apposta per averli:
  333.                 //                                               DriverRegistroServiziDB_LIB.getDocumento(id, readBytes, connection);
  334.                 try{
  335.                     List<?> allegati = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.allegato.toString(), idAccordoLong,
  336.                             ProprietariDocumento.accordoServizio,readContenutoAllegati, con, this.driver.tipoDB);
  337.                     for(int i=0; i<allegati.size();i++){
  338.                         accordoServizio.addAllegato((Documento) allegati.get(i));
  339.                     }
  340.                 }catch(DriverRegistroServiziNotFound dNotFound){}
  341.                 try{
  342.                     List<?> specificheSemiformali = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.specificaSemiformale.toString(),
  343.                             idAccordoLong, ProprietariDocumento.accordoServizio,readContenutoAllegati, con, this.driver.tipoDB);
  344.                     for(int i=0; i<specificheSemiformali.size();i++){  
  345.                         accordoServizio.addSpecificaSemiformale((Documento) specificheSemiformali.get(i));
  346.                     }
  347.                 }catch(DriverRegistroServiziNotFound dNotFound){}
  348.                 if(accordoServizio.getServizioComposto()!=null){
  349.                     // read Documenti generici: i bytes non vengono ritornati se readContenutoAllegati==false, utilizzare il metodo apposta per averli:
  350.                     /**                                               DriverRegistroServiziDB_LIB.getDocumento(id, readBytes, connection);*/
  351.                     try{
  352.                         List<?> specificheCoordinamento = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.specificaCoordinamento.toString(),
  353.                                 idAccordoLong, ProprietariDocumento.accordoServizio,readContenutoAllegati, con, this.driver.tipoDB);
  354.                         for(int i=0; i<specificheCoordinamento.size();i++){
  355.                             accordoServizio.getServizioComposto().addSpecificaCoordinamento((Documento) specificheCoordinamento.get(i));
  356.                         }
  357.                     }catch(DriverRegistroServiziNotFound dNotFound){}
  358.                 }

  359.                
  360.                 // Protocol Properties
  361.                 try{
  362.                     List<ProtocolProperty> listPP = DriverRegistroServiziDB_LIB.getListaProtocolProperty(idAccordoLong, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_COMUNE, con,
  363.                             this.driver.tipoDB, this.driver.getDriverUnwrapBYOK());
  364.                     if(listPP!=null && !listPP.isEmpty()){
  365.                         for (ProtocolProperty protocolProperty : listPP) {
  366.                             accordoServizio.addProtocolProperty(protocolProperty);
  367.                         }
  368.                     }
  369.                 }catch(DriverRegistroServiziNotFound dNotFound){
  370.                     // ignore
  371.                 }
  372.                
  373.                
  374.             } else {
  375.                 throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getAccordoServizioParteComune] rs.next non ha restituito valori con la seguente interrogazione :\n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idAccordoLong));
  376.             }


  377. /**         if(accordoServizio!=null){
  378. //              // nomiAzione setting
  379. //              accordoServizio.setNomiAzione(accordoServizio.readNomiAzione());
  380. //          }*/
  381.             return accordoServizio;

  382.         }catch (DriverRegistroServiziNotFound e) {
  383.             throw e;
  384.         }catch (Exception se) {
  385.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteComune] Exception :" + se.getMessage(),se);
  386.         } finally {

  387.             JDBCUtilities.closeResources(rs, stm);

  388.             this.driver.closeConnection(con);

  389.         }
  390.     }
  391.    
  392.    
  393.    
  394.    
  395.     protected AccordoServizioParteComune getAccordoServizioParteComune(long id) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  396.         return getAccordoServizioParteComune(id,false,false,null);
  397.     }
  398.     protected AccordoServizioParteComune getAccordoServizioParteComune(long id, boolean readContenutoAllegati,boolean readDatiRegistro) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  399.         return getAccordoServizioParteComune(id,readContenutoAllegati,readDatiRegistro,null);
  400.     }
  401.     protected AccordoServizioParteComune getAccordoServizioParteComune(long id,Connection conParam) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  402.         return getAccordoServizioParteComune(id,false,false,conParam);
  403.     }
  404.     protected AccordoServizioParteComune getAccordoServizioParteComune(long id, boolean readContenutoAllegati,boolean readDatiRegistro,Connection conParam) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  405.         this.driver.logDebug("richiesto getAccordoServizio: " + id);
  406.         // conrollo consistenza
  407.         if (id <= 0)
  408.             return null;

  409.         Connection con = null;
  410.         PreparedStatement stm = null;
  411.         ResultSet rs = null;

  412.         IDAccordo idAccordo = null;
  413.         try {
  414.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  415.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  416.             sqlQueryObject.addSelectField("*");
  417.             sqlQueryObject.addWhereCondition("id = ?");
  418.             String sqlQuery = sqlQueryObject.createSQLQuery();

  419.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  420.             // prendo la connessione dal pool
  421.             if(conParam!=null){
  422.                 con = conParam;
  423.             }
  424.             else if (this.driver.atomica)
  425.                 con = this.driver.getConnectionFromDatasource("getAccordoServizioParteComune(longId)");
  426.             else
  427.                 con = this.driver.globalConnection;

  428.             stm = con.prepareStatement(sqlQuery);

  429.             stm.setLong(1, id);

  430.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
  431.             rs = stm.executeQuery();


  432.             if (rs.next()) {

  433.                 IDSoggetto referente = null;
  434.                 long idReferente = rs.getLong("id_referente");
  435.                 if(idReferente>0){
  436.                     try {
  437.                         referente = this.driver.getIdSoggetto(idReferente,con);
  438.                         if(referente==null){
  439.                             throw new DriverRegistroServiziNotFound ("non esiste");
  440.                         }
  441.                     }catch(DriverRegistroServiziNotFound notFound) {
  442.                         throw new Exception ("Soggetto referente ["+idReferente+"] dell'accordo non esiste");
  443.                     }
  444.                 }

  445.                 idAccordo = this.driver.idAccordoFactory.getIDAccordoFromValues(rs.getString("nome"),referente,rs.getInt("versione"));

  446.             } else {
  447.                 rs.close();
  448.                 stm.close();
  449.                 throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getAccordoServizio] rs.next non ha restituito valori con la seguente interrogazione :\n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
  450.             }

  451.             rs.close();
  452.             stm.close();

  453.         } catch (SQLException se) {
  454.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizio] SQLException :" + se.getMessage(),se);
  455.         }catch (DriverRegistroServiziNotFound e) {
  456.             throw e;
  457.         }catch (Exception se) {
  458.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizio] Exception :" + se.getMessage(),se);
  459.         } finally {

  460.             //Chiudo statement and resultset
  461.             JDBCUtilities.closeResources(rs, stm);

  462.             this.driver.closeConnection(conParam, con);

  463.         }

  464.         return this.getAccordoServizioParteComune(idAccordo, readContenutoAllegati, readDatiRegistro);
  465.     }
  466.    
  467.    
  468.    
  469.    
  470.    
  471.     protected List<AccordoServizioParteComune> accordiCompatibiliList(ISearch ricerca) throws DriverRegistroServiziException {
  472.         String nomeMetodo = "accordiCompatibiliList";
  473.         int idLista = Liste.ACCORDI;
  474.         int offset;
  475.         int limit;
  476.         String search;
  477.         String queryString;

  478.         limit = ricerca.getPageSize(idLista);
  479.         offset = ricerca.getIndexIniziale(idLista);
  480.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
  481.         ricerca.getSearchString(idLista);

  482.         this.driver.logDebug("search : " + search);

  483.         Connection con = null;
  484.         PreparedStatement stmt = null;
  485.         ResultSet risultato = null;

  486.         ArrayList<AccordoServizioParteComune> lista = new ArrayList<AccordoServizioParteComune>();

  487.         if (this.driver.atomica) {
  488.             try {
  489.                 con = this.driver.getConnectionFromDatasource("accordiCompatibiliList");

  490.             } catch (Exception e) {
  491.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  492.             }

  493.         } else
  494.             con = this.driver.globalConnection;

  495.         this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);

  496.         try {

  497.             ISQLQueryObject sqlquery = DriverRegistroServiziDB_accordiLIB.getSQLRicercaAccordiValidi();
  498.             sqlquery.setANDLogicOperator(true);

  499.             ISQLQueryObject sqlQueryObjectSoggetti = null;
  500.             if (!search.equals("")) {
  501.                 sqlQueryObjectSoggetti = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  502.                 sqlQueryObjectSoggetti.addFromTable(CostantiDB.SOGGETTI);
  503.                 sqlQueryObjectSoggetti.addSelectField(CostantiDB.SOGGETTI, "nome_soggetto");
  504.                 sqlQueryObjectSoggetti.addWhereCondition(true,
  505.                         sqlQueryObjectSoggetti.getWhereLikeCondition("nome_soggetto", search, true, true),
  506.                         CostantiDB.ACCORDI+".id_referente="+CostantiDB.SOGGETTI+".id");
  507.             }


  508.             if (!search.equals("")) {
  509.                 //query con search
  510.                 sqlquery.addSelectCountField("*", "cont");
  511.                 sqlquery.addWhereCondition(false,
  512.                         sqlquery.getWhereLikeCondition("nome", search, true, true),
  513.                         sqlquery.getWhereLikeCondition("versione", search, true, true),
  514.                         sqlquery.getWhereExistsCondition(false, sqlQueryObjectSoggetti));
  515.                 queryString = sqlquery.createSQLQuery();
  516.             } else {
  517.                 sqlquery.addSelectCountField("*", "cont");
  518.                 queryString = sqlquery.createSQLQuery();
  519.             }

  520.             stmt = con.prepareStatement(queryString);
  521.             risultato = stmt.executeQuery();
  522.             if (risultato.next())
  523.                 ricerca.setNumEntries(idLista,risultato.getInt(1));
  524.             risultato.close();
  525.             stmt.close();

  526.             //resetto query
  527.             sqlquery = DriverRegistroServiziDB_accordiLIB.getSQLRicercaAccordiValidi();
  528.             sqlquery.setANDLogicOperator(true);
  529.             // ricavo le entries
  530.             if (limit == 0) // con limit
  531.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
  532.             if (!search.equals("")) { // con search

  533.                 sqlquery.addSelectField("id");
  534.                 sqlquery.addSelectField("nome");
  535.                 sqlquery.addSelectField("descrizione");
  536.                 sqlquery.addSelectField("id_referente");
  537.                 sqlquery.addSelectField("versione");
  538.                 sqlquery.addSelectField("stato");
  539.                 sqlquery.addWhereCondition(false,
  540.                         sqlquery.getWhereLikeCondition("nome", search, true, true),
  541.                         sqlquery.getWhereLikeCondition("versione", search, true, true),
  542.                         sqlquery.getWhereExistsCondition(false, sqlQueryObjectSoggetti));
  543.                 sqlquery.addOrderBy("nome");
  544.                 sqlquery.addOrderBy("versione");
  545.                 sqlquery.addOrderBy("id_referente");
  546.                 sqlquery.setSortType(true);
  547.                 sqlquery.setLimit(limit);
  548.                 sqlquery.setOffset(offset);
  549.                 queryString = sqlquery.createSQLQuery();
  550.             } else {
  551.                 // senza search
  552.                 sqlquery.addSelectField("id");
  553.                 sqlquery.addSelectField("nome");
  554.                 sqlquery.addSelectField("descrizione");
  555.                 sqlquery.addSelectField("id_referente");
  556.                 sqlquery.addSelectField("versione");
  557.                 sqlquery.addSelectField("stato");
  558.                 sqlquery.addOrderBy("nome");
  559.                 sqlquery.addOrderBy("versione");
  560.                 sqlquery.addOrderBy("id_referente");
  561.                 sqlquery.setSortType(true);
  562.                 sqlquery.setLimit(limit);
  563.                 sqlquery.setOffset(offset);
  564.                 queryString = sqlquery.createSQLQuery();
  565.             }


  566.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(queryString));

  567.             stmt = con.prepareStatement(queryString);
  568.             risultato = stmt.executeQuery();

  569.             AccordoServizioParteComune accordo = null;

  570.             while (risultato.next()) {

  571.                 accordo = new AccordoServizioParteComune();

  572.                 accordo.setId(risultato.getLong("id"));
  573.                 accordo.setNome(risultato.getString("nome"));
  574.                 accordo.setDescrizione(risultato.getString("descrizione"));
  575.                 accordo.setStatoPackage(risultato.getString("stato"));
  576.                 accordo.setVersione(risultato.getInt("versione"));

  577.                 // Soggetto referente
  578.                 long id_referente = risultato.getLong("id_referente");
  579.                 IDSoggetto soggettoReferente = null;
  580.                 if(id_referente>0){
  581.                     try {
  582.                         soggettoReferente = this.driver.getIdSoggetto(id_referente,con);
  583.                         if(soggettoReferente==null){
  584.                             throw new DriverRegistroServiziNotFound ("non esiste");
  585.                         }
  586.                     }catch(DriverRegistroServiziNotFound notFound) {
  587.                         throw new Exception ("Soggetto referente ["+id_referente+"] dell'accordo non esiste");
  588.                     }
  589.                     IdSoggetto assr = new IdSoggetto();
  590.                     assr.setTipo(soggettoReferente.getTipo());
  591.                     assr.setNome(soggettoReferente.getNome());
  592.                     accordo.setSoggettoReferente(assr);
  593.                 }
  594.                
  595.                 lista.add(accordo);

  596.                 this.driverAccordiServiziComposti.readAccordoServizioComposto(accordo, con);

  597.             }


  598.         }catch (Exception se) {

  599.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  600.         } finally {

  601.             //Chiudo statement and resultset
  602.             JDBCUtilities.closeResources(risultato, stmt);
  603.            
  604.             this.driver.closeConnection(con);
  605.         }
  606.         return lista;
  607.     }
  608.    
  609.    
  610.     protected void createAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException {

  611.         Connection connection = null;
  612.         boolean error = false;

  613.         if (this.driver.atomica) {
  614.             try {
  615.                 connection = this.driver.getConnectionFromDatasource("createAccordoServizioParteComune");
  616.                 connection.setAutoCommit(false);
  617.             } catch (Exception e) {
  618.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::createAccordoServizioParteComune] Exception accedendo al datasource :" + e.getMessage(),e);

  619.             }

  620.         } else
  621.             connection = this.driver.globalConnection;

  622.         this.driver.logDebug("operazione atomica = " + this.driver.atomica);

  623.         try {
  624.             DriverRegistroServiziDB_accordiLIB.createAccordoServizioParteComune(accordoServizio, connection, this.driver.tabellaSoggetti, this.driver.log,
  625.                     this.driver.idAccordoFactory, this.driver.getDriverWrapBYOK());
  626.         } catch (DriverRegistroServiziException e) {
  627.             error = true;
  628.             throw e;
  629.         }catch (Exception e) {
  630.             error = true;
  631.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::createAccordoServizioParteComune] Exception [" + e.getMessage() + "].",e);
  632.         }finally {
  633.             this.driver.closeConnection(error, connection);
  634.         }

  635.     }
  636.    
  637.     protected void updateAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException {

  638.         Connection connection = null;
  639.         boolean error = false;

  640.         if (this.driver.atomica) {
  641.             try {
  642.                 connection = this.driver.getConnectionFromDatasource("updateAccordoServizioParteComune");
  643.                 connection.setAutoCommit(false);
  644.             } catch (Exception e) {
  645.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::createAccordoServizio] Exception accedendo al datasource :" + e.getMessage(),e);

  646.             }

  647.         } else
  648.             connection = this.driver.globalConnection;

  649.         this.driver.logDebug("operazione atomica = " + this.driver.atomica);

  650.         try {
  651.             DriverRegistroServiziDB_accordiLIB.updateAccordoServizioParteComune(accordoServizio, connection, this.driver.tabellaSoggetti, this.driver.log,
  652.                     this.driver.idAccordoFactory, this.driver.getDriverWrapBYOK());
  653.         }catch (DriverRegistroServiziException se) {
  654.             this.driver.log.error(se.getMessage(),se);
  655.             error = true;
  656.             throw se;
  657.         }
  658.         catch (Exception se) {
  659.             this.driver.log.error(se.getMessage(),se);
  660.             error = true;
  661.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::updateAccordoServizio] Exception [" + se.getMessage() + "].",se);
  662.         }finally {
  663.             this.driver.closeConnection(error, connection);
  664.         }

  665.     }
  666.    

  667.     protected void deleteAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException {

  668.         Connection connection = null;
  669.        
  670.         boolean error = false;

  671.         if (this.driver.atomica) {
  672.             try {
  673.                 connection = this.driver.getConnectionFromDatasource("deleteAccordoServizioParteComune");
  674.                 connection.setAutoCommit(false);
  675.             } catch (Exception e) {
  676.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::deleteAccordoServizioParteComune] Exception accedendo al datasource :" + e.getMessage(),e);

  677.             }

  678.         } else
  679.             connection = this.driver.globalConnection;

  680.         this.driver.logDebug("operazione atomica = " + this.driver.atomica);

  681.         try {

  682.             DriverRegistroServiziDB_accordiLIB.deleteAccordoServizioParteComune(accordoServizio, connection, this.driver.tabellaSoggetti, this.driver.log,
  683.                     this.driver.idAccordoFactory, this.driver.getDriverWrapBYOK());

  684.         } catch (DriverRegistroServiziException se) {

  685.             error = true;
  686.             throw se;
  687.         } catch (Exception se) {

  688.             error = true;
  689.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::deleteAccordoServizio] Exception [" + se.getMessage() + "].",se);
  690.         }finally {
  691.             this.driver.closeConnection(error, connection);
  692.         }
  693.     }
  694.    
  695.    
  696.     protected List<IDAccordoDB> idAccordiList(String superuser, ISearch ricerca,
  697.             boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
  698.         return idAccordiListEngine(superuser,ricerca,false,false,
  699.                 soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  700.     }
  701.     protected List<IDAccordoDB> idAccordiServizioParteComuneList(String superuser, ISearch ricerca,
  702.             boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
  703.         return idAccordiListEngine(superuser,ricerca,false,true,
  704.                 soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  705.     }
  706.     protected List<IDAccordoDB> idAccordiServizioCompostiList(String superuser, ISearch ricerca,
  707.             boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
  708.         return idAccordiListEngine(superuser,ricerca,true,false,
  709.                 soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  710.     }
  711.     private List<IDAccordoDB> idAccordiListEngine(String superuser, ISearch ricerca,boolean excludeASParteComune,boolean excludeASComposti,
  712.             boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
  713.         String nomeMetodo = "idAccordiList";
  714.         int idLista = Liste.ACCORDI;
  715.         int offset;
  716.         int limit;
  717.         String search;
  718.         String queryString;

  719.         limit = ricerca.getPageSize(idLista);
  720.         offset = ricerca.getIndexIniziale(idLista);
  721.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
  722.        
  723.         String filterProtocollo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROTOCOLLO);
  724.         String filterProtocolli = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROTOCOLLI);
  725.         List<String> tipoSoggettiProtocollo = null;
  726.         try {
  727.             tipoSoggettiProtocollo = Filtri.convertToTipiSoggetti(filterProtocollo, filterProtocolli);
  728.         }catch(Exception e) {
  729.             throw new DriverRegistroServiziException(e.getMessage(),e);
  730.         }
  731.         boolean searchByTipoSoggetto = (tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0);
  732.        
  733.         String filterTipoAPI = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_SERVICE_BINDING);
  734.        
  735.         String filterStatoAccordo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_STATO_ACCORDO);
  736.        
  737.         String filterGruppo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_GRUPPO);

  738.         String filterCanale = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_CANALE);
  739.         boolean searchCanale = false;
  740.         boolean canaleDefault = false;
  741.         if(filterCanale!=null && !filterCanale.equals("")) {
  742.             searchCanale = true;
  743.             if(filterCanale.startsWith(Filtri.PREFIX_VALUE_CANALE_DEFAULT)) {
  744.                 filterCanale = filterCanale.substring(Filtri.PREFIX_VALUE_CANALE_DEFAULT.length());
  745.                 canaleDefault = true;
  746.             }
  747.         }
  748.        
  749.         this.driver.logDebug("search : " + search);
  750.         this.driver.logDebug("filterProtocollo : " + filterProtocollo);
  751.         this.driver.logDebug("filterProtocolli : " + filterProtocolli);
  752.         this.driver.logDebug("filterTipoAPI : " + filterTipoAPI);
  753.         this.driver.logDebug("filterStatoAccordo : " + filterStatoAccordo);
  754.         this.driver.logDebug("filterGruppo : " + filterGruppo);
  755.         this.driver.logDebug("filterCanale : " + filterCanale);

  756.         Connection con = null;
  757.         PreparedStatement stmt = null;
  758.         ResultSet risultato = null;

  759.         ArrayList<IDAccordoDB> lista = new ArrayList<IDAccordoDB>();

  760.         if (this.driver.atomica) {
  761.             try {
  762.                 con = this.driver.getConnectionFromDatasource("accordiListEngine");

  763.             } catch (Exception e) {
  764.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  765.             }

  766.         } else
  767.             con = this.driver.globalConnection;

  768.         this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);

  769.         try {

  770.             if(excludeASComposti && excludeASParteComune){
  771.                 throw new Exception("Non e' possibile invocare il metodo accordiListEngine con entrambi i parametri excludeASParteComune,excludeASComposti impostati al valore true");
  772.             }


  773.             ISQLQueryObject sqlQueryObjectExclude = null;
  774.             if(excludeASComposti || excludeASParteComune){
  775.                 sqlQueryObjectExclude = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  776.                 sqlQueryObjectExclude.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  777.                 sqlQueryObjectExclude.addSelectField(CostantiDB.ACCORDI_SERVIZI_COMPOSTO, "id_accordo");
  778.                 sqlQueryObjectExclude.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPOSTO+".id_accordo="+CostantiDB.ACCORDI+".id");
  779.             }

  780.             ISQLQueryObject sqlQueryObjectExistsResource = null;
  781.             if(soloAccordiConsistentiRest) {
  782.                 sqlQueryObjectExistsResource = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  783.                 sqlQueryObjectExistsResource.addFromTable(CostantiDB.API_RESOURCES);
  784.                 sqlQueryObjectExistsResource.addSelectField(CostantiDB.API_RESOURCES, "id_accordo");
  785.                 sqlQueryObjectExistsResource.addWhereCondition(CostantiDB.API_RESOURCES+".id_accordo="+CostantiDB.ACCORDI+".id");
  786.                 sqlQueryObjectExistsResource.setANDLogicOperator(true);
  787.             }
  788.            
  789.             ISQLQueryObject sqlQueryObjectExistsPortTypeConAzioni = null;
  790.             if(soloAccordiConsistentiSoap){
  791.                 ISQLQueryObject sqlQueryObjectExistsPortTypeCheckAzioni = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  792.                 sqlQueryObjectExistsPortTypeCheckAzioni.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
  793.                 sqlQueryObjectExistsPortTypeCheckAzioni.addSelectField(CostantiDB.PORT_TYPE_AZIONI, "id_port_type");
  794.                 sqlQueryObjectExistsPortTypeCheckAzioni.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
  795.                 sqlQueryObjectExistsPortTypeCheckAzioni.setANDLogicOperator(true);
  796.                
  797.                 sqlQueryObjectExistsPortTypeConAzioni = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  798.                 sqlQueryObjectExistsPortTypeConAzioni.addFromTable(CostantiDB.PORT_TYPE);
  799.                 sqlQueryObjectExistsPortTypeConAzioni.addSelectField(CostantiDB.PORT_TYPE, "id_accordo");
  800.                 sqlQueryObjectExistsPortTypeConAzioni.addWhereCondition(CostantiDB.PORT_TYPE+".id_accordo="+CostantiDB.ACCORDI+".id");
  801.                 sqlQueryObjectExistsPortTypeConAzioni.addWhereExistsCondition(false, sqlQueryObjectExistsPortTypeCheckAzioni);
  802.                 sqlQueryObjectExistsPortTypeConAzioni.setANDLogicOperator(true);
  803.             }
  804.            
  805.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  806.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  807.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  808.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".id_referente="+CostantiDB.SOGGETTI+".id");
  809.             sqlQueryObject.addSelectCountField("*", "cont");
  810.             if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  811.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".superuser = ?");
  812.            
  813.             //query con search
  814.             if (!search.equals("")) {
  815.                 sqlQueryObject.addWhereCondition(false,
  816.                         sqlQueryObject.getWhereLikeCondition(CostantiDB.ACCORDI+".nome", search, true, true));
  817.                         //sqlQueryObject.getWhereLikeCondition("versione", search, true, true), // la versione e' troppo, tutte hanno 1 ....
  818.                         //sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".nome_soggetto", search, true, true));  // fa confusone nei protocolli che non supportano il referente
  819.             }
  820.             if (searchByTipoSoggetto) {
  821.                 sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));      
  822.             }
  823.            
  824.             if(excludeASParteComune){
  825.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExclude);
  826.             }
  827.             if(excludeASComposti){
  828.                 sqlQueryObject.addWhereExistsCondition(true, sqlQueryObjectExclude);
  829.             }
  830.            
  831.             if(filterTipoAPI!=null && !filterTipoAPI.equals("")) {
  832.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".service_binding = ?");
  833.             }
  834.             if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  835.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".stato = ?");
  836.             }
  837.             if(filterGruppo!=null && !filterGruppo.equals("")) {
  838.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI_GRUPPI);
  839.                 sqlQueryObject.addFromTable(CostantiDB.GRUPPI);
  840.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_accordo="+CostantiDB.ACCORDI+".id");
  841.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_gruppo="+CostantiDB.GRUPPI+".id");
  842.                 sqlQueryObject.addWhereCondition(CostantiDB.GRUPPI+".nome = ?");
  843.             }
  844.            
  845.             if(soloAccordiConsistentiRest && soloAccordiConsistentiSoap) {
  846.                 sqlQueryObject.addWhereCondition(false,
  847.                         sqlQueryObjectExistsResource.getWhereExistsCondition(false, sqlQueryObjectExistsResource),
  848.                         sqlQueryObjectExistsPortTypeConAzioni.getWhereExistsCondition(false, sqlQueryObjectExistsPortTypeConAzioni));
  849.             }
  850.             else if(soloAccordiConsistentiRest) {
  851.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsResource);
  852.             }
  853.             else if(soloAccordiConsistentiSoap) {
  854.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsPortTypeConAzioni);
  855.             }
  856.            
  857.             if(searchCanale) {
  858.                 if(canaleDefault) {
  859.                     sqlQueryObject.addWhereCondition(false, CostantiDB.ACCORDI+".canale = ?", CostantiDB.ACCORDI+".canale is null");
  860.                 }
  861.                 else {
  862.                     sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".canale = ?");
  863.                 }
  864.             }
  865.            
  866.             sqlQueryObject.setANDLogicOperator(true);
  867.             queryString = sqlQueryObject.createSQLQuery();
  868.             stmt = con.prepareStatement(queryString);
  869.             int index = 1;
  870.             if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  871.                 stmt.setString(index++, superuser);
  872.             if(filterTipoAPI!=null && !filterTipoAPI.equals("")) {
  873.                 stmt.setString(index++, filterTipoAPI);
  874.             }
  875.             if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  876.                 stmt.setString(index++, filterStatoAccordo);
  877.             }
  878.             if(filterGruppo!=null && !filterGruppo.equals("")) {
  879.                 stmt.setString(index++, filterGruppo);
  880.             }
  881.             if(searchCanale) {
  882.                 stmt.setString(index++, filterCanale);
  883.             }
  884.            
  885.             risultato = stmt.executeQuery();
  886.             if (risultato.next())
  887.                 ricerca.setNumEntries(idLista,risultato.getInt(1));
  888.             risultato.close();
  889.             stmt.close();

  890.             // ricavo le entries
  891.             if (limit == 0) // con limit
  892.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
  893.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  894.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  895.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  896.             sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI, "id", "idAccordo");
  897.             sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI, "nome", "nomeAccordo");
  898.             sqlQueryObject.addSelectField(CostantiDB.ACCORDI, "versione");
  899.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI, "tipo_soggetto");
  900.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI, "nome_soggetto");
  901.             sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI, "id", "idSoggetto");
  902.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".id_referente="+CostantiDB.SOGGETTI+".id");
  903.             //sqlQueryObject.addSelectField("id_referente");
  904.             if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  905.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".superuser = ?");
  906.            
  907.             if (!search.equals("")) { // con search
  908.                 sqlQueryObject.addWhereCondition(false,
  909.                         sqlQueryObject.getWhereLikeCondition(CostantiDB.ACCORDI+".nome", search, true, true));
  910.                 //sqlQueryObject.getWhereLikeCondition("versione", search, true, true), // la versione e' troppo, tutte hanno 1 ....
  911.                 //sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".nome_soggetto", search, true, true));  // fa confusone nei protocolli che non supportano il referente
  912.             }
  913.             if (searchByTipoSoggetto) {
  914.                 sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));      
  915.             }

  916.             if(excludeASParteComune){
  917.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExclude);
  918.             }
  919.             if(excludeASComposti){
  920.                 sqlQueryObject.addWhereExistsCondition(true, sqlQueryObjectExclude);
  921.             }
  922.            
  923.             if(filterTipoAPI!=null && !filterTipoAPI.equals("")) { // con filter
  924.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".service_binding = ?");
  925.             }
  926.             if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  927.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".stato = ?");
  928.             }
  929.             if(filterGruppo!=null && !filterGruppo.equals("")) {
  930.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI_GRUPPI);
  931.                 sqlQueryObject.addFromTable(CostantiDB.GRUPPI);
  932.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_accordo="+CostantiDB.ACCORDI+".id");
  933.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_gruppo="+CostantiDB.GRUPPI+".id");
  934.                 sqlQueryObject.addWhereCondition(CostantiDB.GRUPPI+".nome = ?");
  935.             }
  936.                        
  937.             if(soloAccordiConsistentiRest && soloAccordiConsistentiSoap) {
  938.                 sqlQueryObject.addWhereCondition(false,
  939.                         sqlQueryObjectExistsResource.getWhereExistsCondition(false, sqlQueryObjectExistsResource),
  940.                         sqlQueryObjectExistsPortTypeConAzioni.getWhereExistsCondition(false, sqlQueryObjectExistsPortTypeConAzioni));
  941.             }
  942.             else if(soloAccordiConsistentiRest) {
  943.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsResource);
  944.             }
  945.             else if(soloAccordiConsistentiSoap) {
  946.                 sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsPortTypeConAzioni);
  947.             }
  948.            
  949.             if(searchCanale) {
  950.                 if(canaleDefault) {
  951.                     sqlQueryObject.addWhereCondition(false, CostantiDB.ACCORDI+".canale = ?", CostantiDB.ACCORDI+".canale is null");
  952.                 }
  953.                 else {
  954.                     sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".canale = ?");
  955.                 }
  956.             }
  957.            
  958.             sqlQueryObject.setANDLogicOperator(true);
  959.             sqlQueryObject.addOrderBy("nomeAccordo");
  960.             sqlQueryObject.addOrderBy("versione");
  961.             sqlQueryObject.addOrderBy("nome_soggetto");
  962.             sqlQueryObject.addOrderBy("tipo_soggetto");
  963.             sqlQueryObject.setSortType(true);
  964.             sqlQueryObject.setLimit(limit);
  965.             sqlQueryObject.setOffset(offset);
  966.             queryString = sqlQueryObject.createSQLQuery();

  967.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(queryString));

  968.             stmt = con.prepareStatement(queryString);
  969.             index = 1;
  970.             if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
  971.                 stmt.setString(index++, superuser);
  972.             if(filterTipoAPI!=null && !filterTipoAPI.equals("")) {
  973.                 stmt.setString(index++, filterTipoAPI);
  974.             }
  975.             if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  976.                 stmt.setString(index++, filterStatoAccordo);
  977.             }
  978.             if(filterGruppo!=null && !filterGruppo.equals("")) {
  979.                 stmt.setString(index++, filterGruppo);
  980.             }
  981.             if(searchCanale) {
  982.                 stmt.setString(index++, filterCanale);
  983.             }
  984.             risultato = stmt.executeQuery();

  985.             while (risultato.next()) {

  986.                 IDSoggettoDB idSoggettoDB = new IDSoggettoDB(risultato.getString("tipo_soggetto"), risultato.getString("nome_soggetto"));
  987.                 idSoggettoDB.setId(risultato.getLong("idSoggetto"));
  988.                
  989.                 IDAccordoDB idAccordoDB = new IDAccordoDB(risultato.getString("nomeAccordo"), idSoggettoDB, risultato.getInt("versione"));
  990.                 idAccordoDB.setId(risultato.getLong("idAccordo"));
  991.                
  992.                 lista.add(idAccordoDB);

  993.             }

  994.             this.driver.logDebug("size lista :" + ((lista == null) ? null : lista.size()));

  995.             return lista;

  996.         } catch (Exception se) {

  997.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  998.         } finally {

  999.             //Chiudo statement and resultset
  1000.             JDBCUtilities.closeResources(risultato, stmt);

  1001.             this.driver.closeConnection(con);
  1002.         }
  1003.     }
  1004.    
  1005.     protected AccordoServizioParteComune[] getAllIdAccordiWithSoggettoReferente(IDSoggetto idsoggetto) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  1006.         Connection con = null;
  1007.         PreparedStatement stm = null;
  1008.         ResultSet rs = null;

  1009.         this.driver.logDebug("getAllIdAccordiWithSoggettoReferente...");

  1010.         try {
  1011.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  1012.             // prendo la connessione dal pool
  1013.             if (this.driver.atomica)
  1014.                 con = this.driver.getConnectionFromDatasource("getAllIdAccordiWithSoggettoReferente");
  1015.             else
  1016.                 con = this.driver.globalConnection;

  1017.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1018.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  1019.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1020.             sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI,"id","idAccordo");
  1021.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".id_referente="+CostantiDB.SOGGETTI+".id");
  1022.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto=?");
  1023.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto=?");
  1024.             sqlQueryObject.setANDLogicOperator(true);
  1025.             String sqlQuery = sqlQueryObject.createSQLQuery();
  1026.             this.driver.logDebug("eseguo query : " + sqlQuery );
  1027.             stm = con.prepareStatement(sqlQuery);
  1028.             stm.setString(1, idsoggetto.getTipo());
  1029.             stm.setString(2, idsoggetto.getNome());
  1030.             rs = stm.executeQuery();
  1031.             List<AccordoServizioParteComune> accordi = new ArrayList<AccordoServizioParteComune>();
  1032.             while (rs.next()) {
  1033.                 accordi.add(this.getAccordoServizioParteComune(rs.getLong("idAccordo")));
  1034.             }
  1035.             if(accordi.size()==0){
  1036.                 throw new DriverRegistroServiziNotFound("Accordi non trovati con soggetto referente ["+idsoggetto+"]");
  1037.             }else{
  1038.                 AccordoServizioParteComune [] res = new AccordoServizioParteComune[1];
  1039.                 return accordi.toArray(res);
  1040.             }
  1041.         }catch(DriverRegistroServiziNotFound de){
  1042.             throw de;
  1043.         }
  1044.         catch(Exception e){
  1045.             throw new DriverRegistroServiziException("getAllIdAccordiWithSoggettoReferente error",e);
  1046.         } finally {

  1047.             //Chiudo statement and resultset
  1048.             JDBCUtilities.closeResources(rs, stm);

  1049.             this.driver.closeConnection(con);

  1050.         }
  1051.     }
  1052.    
  1053.    
  1054.     protected IDAccordo getIdAccordoServizioParteComune(long id) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  1055.         return getIdAccordoServizioParteComune(id,null);
  1056.     }
  1057.     protected IDAccordo getIdAccordoServizioParteComune(long id,Connection conParam) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  1058.         this.driver.logDebug("richiesto getIdAccordoServizioParteComune: " + id);
  1059.         // conrollo consistenza
  1060.         if (id <= 0)
  1061.             return null;

  1062.         Connection con = null;
  1063.         PreparedStatement stm = null;
  1064.         ResultSet rs = null;

  1065.         IDAccordo idAccordo = null;
  1066.         try {
  1067.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1068.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  1069.             sqlQueryObject.addSelectField("nome");
  1070.             sqlQueryObject.addSelectField("id_referente");
  1071.             sqlQueryObject.addSelectField("versione");
  1072.             sqlQueryObject.addWhereCondition("id = ?");
  1073.             String sqlQuery = sqlQueryObject.createSQLQuery();

  1074.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  1075.             // prendo la connessione dal pool
  1076.             if(conParam!=null){
  1077.                 con = conParam;
  1078.             }
  1079.             else if (this.driver.atomica)
  1080.                 con = this.driver.getConnectionFromDatasource("getIdAccordoServizioParteComune(longId)");
  1081.             else
  1082.                 con = this.driver.globalConnection;

  1083.             stm = con.prepareStatement(sqlQuery);

  1084.             stm.setLong(1, id);

  1085.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
  1086.             rs = stm.executeQuery();


  1087.             if (rs.next()) {

  1088.                 IDSoggetto referente = null;
  1089.                 long idReferente = rs.getLong("id_referente");
  1090.                 if(idReferente>0){
  1091.                     referente = this.driver.getIdSoggetto(idReferente,con);
  1092.                     if(referente==null){
  1093.                         throw new Exception("Soggetto referente non presente?");
  1094.                     }
  1095.                 }

  1096.                 idAccordo = this.driver.idAccordoFactory.getIDAccordoFromValues(rs.getString("nome"),referente,rs.getInt("versione"));

  1097.             } else {
  1098.                 rs.close();
  1099.                 stm.close();
  1100.                 throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getIdAccordoServizioParteComune] rs.next non ha restituito valori con la seguente interrogazione :\n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
  1101.             }

  1102.             rs.close();
  1103.             stm.close();

  1104.         } catch (SQLException se) {
  1105.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getIdAccordoServizioParteComune] SQLException :" + se.getMessage(),se);
  1106.         }catch (DriverRegistroServiziNotFound e) {
  1107.             throw e;
  1108.         }catch (Exception se) {
  1109.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getIdAccordoServizioParteComune] Exception :" + se.getMessage(),se);
  1110.         } finally {

  1111.             //Chiudo statement and resultset
  1112.             JDBCUtilities.closeResources(rs, stm);

  1113.             this.driver.closeConnection(conParam, con);

  1114.         }

  1115.         return idAccordo;
  1116.     }
  1117.    
  1118.     protected List<Documento> accordiAllegatiList(long idAccordo, ISearch ricerca) throws DriverRegistroServiziException {
  1119.         String nomeMetodo = "accordiAllegatiList";
  1120.         int idLista = Liste.ACCORDI_ALLEGATI;
  1121.         int offset;
  1122.         int limit;
  1123.         String search;
  1124.         String queryString;

  1125.         limit = ricerca.getPageSize(idLista);
  1126.         offset = ricerca.getIndexIniziale(idLista);
  1127.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
  1128.         ricerca.getSearchString(idLista);

  1129.         Connection con = null;
  1130.         PreparedStatement stmt = null;
  1131.         ResultSet risultato = null;

  1132.         ArrayList<Documento> lista = new ArrayList<Documento>();

  1133.         if (this.driver.atomica) {
  1134.             try {
  1135.                 con = this.driver.getConnectionFromDatasource("accordiAllegatiList");

  1136.             } catch (Exception e) {
  1137.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1138.             }

  1139.         } else
  1140.             con = this.driver.globalConnection;

  1141.         try {

  1142.             if (!search.equals("")) {
  1143.                 //query con search
  1144.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1145.                 sqlQueryObject.addFromTable(CostantiDB.DOCUMENTI);
  1146.                 sqlQueryObject.addSelectCountField("*", "cont");
  1147.                 sqlQueryObject.addWhereCondition("id_proprietario = ?");
  1148.                 sqlQueryObject.addWhereCondition("tipo_proprietario = ?");
  1149.                 sqlQueryObject.addWhereCondition(false,
  1150.                         //sqlQueryObject.getWhereLikeCondition("ruolo",search,true,true),
  1151.                         sqlQueryObject.getWhereLikeCondition("nome",search,true,true));
  1152.                 sqlQueryObject.setANDLogicOperator(true);
  1153.                 queryString = sqlQueryObject.createSQLQuery();
  1154.             } else {
  1155.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1156.                 sqlQueryObject.addFromTable(CostantiDB.DOCUMENTI);
  1157.                 sqlQueryObject.addSelectCountField("*", "cont");
  1158.                 sqlQueryObject.addWhereCondition("id_proprietario = ?");
  1159.                 sqlQueryObject.addWhereCondition("tipo_proprietario = ?");
  1160.                 sqlQueryObject.setANDLogicOperator(true);
  1161.                 queryString = sqlQueryObject.createSQLQuery();
  1162.             }

  1163.             stmt = con.prepareStatement(queryString);
  1164.             stmt.setLong(1,idAccordo);
  1165.             stmt.setString(2, ProprietariDocumento.accordoServizio.toString());
  1166.             risultato = stmt.executeQuery();
  1167.             if (risultato.next())
  1168.                 ricerca.setNumEntries(idLista,risultato.getInt("cont"));
  1169.             risultato.close();
  1170.             stmt.close();

  1171.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1172.             sqlQueryObject.addFromTable(CostantiDB.DOCUMENTI);
  1173.             sqlQueryObject.addSelectField("id");
  1174.             sqlQueryObject.addSelectField("nome");
  1175.             sqlQueryObject.addSelectField("ruolo");
  1176.             sqlQueryObject.addSelectField("id_proprietario");
  1177.             sqlQueryObject.addSelectField("tipo_proprietario");
  1178.             //where
  1179.             sqlQueryObject.addWhereCondition("id_proprietario = ?");
  1180.             sqlQueryObject.addWhereCondition("tipo_proprietario = ?");

  1181.             // ricavo le entries
  1182.             if (limit == 0) // con limit
  1183.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;

  1184.             if (!search.equals("")) { // con search
  1185.                 sqlQueryObject.addWhereCondition(false,
  1186.                         //sqlQueryObject.getWhereLikeCondition("ruolo",search,true,true),
  1187.                         sqlQueryObject.getWhereLikeCondition("nome",search,true,true));
  1188.             }

  1189.             sqlQueryObject.setANDLogicOperator(true);
  1190.             sqlQueryObject.addOrderBy("nome");
  1191.             sqlQueryObject.setSortType(true);
  1192.             sqlQueryObject.setLimit(limit);
  1193.             sqlQueryObject.setOffset(offset);
  1194.             queryString = sqlQueryObject.createSQLQuery();

  1195.             stmt = con.prepareStatement(queryString);
  1196.             stmt.setLong(1, idAccordo);
  1197.             stmt.setString(2, ProprietariDocumento.accordoServizio.toString());
  1198.             risultato = stmt.executeQuery();

  1199.             while(risultato.next()){
  1200.                 Documento doc = DriverRegistroServiziDB_documentiLIB.getDocumento(risultato.getLong("id"),false, con, this.driver.tipoDB);
  1201.                 lista.add(doc);
  1202.             }

  1203.             return lista;

  1204.         } catch (Exception se) {

  1205.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  1206.         } finally {
  1207.             //Chiudo statement and resultset
  1208.             JDBCUtilities.closeResources(risultato, stmt);
  1209.            
  1210.             this.driver.closeConnection(con);
  1211.         }
  1212.     }
  1213.    
  1214.     protected List<IDServizio> getIdServiziWithAccordo(IDAccordo idAccordo,boolean checkPTisNull) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  1215.         String nomeMetodo = "getIdServiziWithPortType";

  1216.         Connection con = null;
  1217.         PreparedStatement stmt = null;
  1218.         ResultSet rs = null;
  1219.         String queryString;

  1220.         if (this.driver.atomica) {
  1221.             try {
  1222.                 con = this.driver.getConnectionFromDatasource("getIdServiziWithAccordo");

  1223.             } catch (Exception e) {
  1224.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(), e);

  1225.             }

  1226.         } else {
  1227.             con = this.driver.globalConnection;
  1228.         }

  1229.         this.driver.logDebug("operazione this.atomica = " + this.driver.atomica);

  1230.         List<IDServizio> idServizi = new ArrayList<IDServizio>();
  1231.         try {

  1232.             //recupero idAccordo
  1233.             long idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordo, con, this.driver.tipoDB);
  1234.             // Controllo che il pdd non sia in uso
  1235.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1236.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  1237.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1238.             sqlQueryObject.addSelectField("nome_servizio");
  1239.             sqlQueryObject.addSelectField("tipo_servizio");
  1240.             sqlQueryObject.addSelectField("versione_servizio");
  1241.             sqlQueryObject.addSelectField("nome_soggetto");
  1242.             sqlQueryObject.addSelectField("tipo_soggetto");
  1243.             sqlQueryObject.setANDLogicOperator(true);
  1244.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo=?");
  1245.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  1246.             if(checkPTisNull){
  1247.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".port_type is null");
  1248.             }
  1249.             queryString = sqlQueryObject.createSQLQuery();
  1250.             stmt = con.prepareStatement(queryString);
  1251.             stmt.setLong(1, idAccordoLong);

  1252.             rs = stmt.executeQuery();
  1253.             while (rs.next()) {
  1254.                 IDSoggetto soggettoErogatore = new IDSoggetto(rs.getString("tipo_soggetto"), rs.getString("nome_soggetto"));
  1255.                 IDServizio idServizio =
  1256.                         this.driver.idServizioFactory.getIDServizioFromValues(rs.getString("tipo_servizio"),
  1257.                                 rs.getString("nome_servizio"), soggettoErogatore, rs.getInt("versione_servizio"));
  1258.                 idServizi.add(idServizio);
  1259.             }

  1260.             if(idServizi.size()<=0){
  1261.                 throw new DriverRegistroServiziNotFound("Servizi non trovato che implementano l'accordo di servizio "+idAccordo.toString());
  1262.             }
  1263.             else{
  1264.                 return idServizi;
  1265.             }

  1266.         }catch(DriverRegistroServiziNotFound dNot){
  1267.             throw dNot;
  1268.         }catch (Exception se) {
  1269.             throw new DriverRegistroServiziException("[DriverRegistroServiziException::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  1270.         } finally {
  1271.             // Chiudo statement and resultset
  1272.             JDBCUtilities.closeResources(rs, stmt);
  1273.            
  1274.             this.driver.closeConnection(con);
  1275.         }
  1276.     }
  1277.    
  1278.    
  1279.     protected void validaStatoAccordoServizio(AccordoServizioParteComune as,boolean utilizzoAzioniDiretteInAccordoAbilitato) throws ValidazioneStatoPackageException{

  1280.         ValidazioneStatoPackageException erroreValidazione =
  1281.                 new ValidazioneStatoPackageException("AccordoServizio",as.getStatoPackage(),null);

  1282.         try{

  1283.             // Controlli di visibilita
  1284.             if(as.getPrivato()==null || as.getPrivato()==false){
  1285.                 if(as.getSoggettoReferente()!=null){
  1286.                     IDSoggetto idS = new IDSoggetto(as.getSoggettoReferente().getTipo(),as.getSoggettoReferente().getNome());
  1287.                     try{
  1288.                         Soggetto s = this.driver.getSoggetto(idS);
  1289.                         if(s.getPrivato()!=null && s.getPrivato()){
  1290.                             erroreValidazione.addErroreValidazione("soggetto referente ["+idS+"] con visibilita' privata, in un accordo di servizio con visibilita' pubblica");
  1291.                         }
  1292.                     }catch(DriverRegistroServiziNotFound dNot){}
  1293.                 }
  1294.             }
  1295.             if(as.getServizioComposto()!=null){
  1296.                 if(as.getServizioComposto().getIdAccordoCooperazione()>0){
  1297.                     try{
  1298.                         AccordoCooperazione ac = this.driver.getAccordoCooperazione(as.getServizioComposto().getIdAccordoCooperazione());
  1299.                         if(as.getPrivato()==null || as.getPrivato()==false){
  1300.                             if(ac.getPrivato()!=null && ac.getPrivato()){
  1301.                                 erroreValidazione.addErroreValidazione("accordo di cooperazione ["+this.driver.idAccordoCooperazioneFactory.getUriFromAccordo(ac)+"] con visibilita' privata, in un accordo di servizio con visibilita' pubblica");
  1302.                             }
  1303.                         }
  1304.                     }catch(DriverRegistroServiziNotFound dNot){}
  1305.                 }
  1306.                 if(as.getServizioComposto().sizeServizioComponenteList()>=2){
  1307.                     for(int i=0; i<as.getServizioComposto().sizeServizioComponenteList(); i++){
  1308.                         if(as.getServizioComposto().getServizioComponente(i).getId()>0){
  1309.                             try{
  1310.                                 AccordoServizioParteSpecifica sc = this.driver.getAccordoServizioParteSpecifica(as.getServizioComposto().getServizioComponente(i).getId());
  1311.                                 if(as.getPrivato()==null || as.getPrivato()==false){
  1312.                                     if(sc.getPrivato()!=null && sc.getPrivato()){
  1313.                                         String uriServizioComponente = this.driver.idServizioFactory.getUriFromAccordo(sc);
  1314.                                         erroreValidazione.addErroreValidazione("servizio componente ["+uriServizioComponente+"] con visibilita' privata, in un accordo di servizio con visibilita' pubblica");
  1315.                                     }
  1316.                                 }
  1317.                             }catch(DriverRegistroServiziNotFound dNot){}
  1318.                         }
  1319.                     }
  1320.                 }
  1321.             }

  1322.             if(ServiceBinding.SOAP.equals(as.getServiceBinding())) {

  1323.                 // Controlli di stato
  1324.                 if(StatiAccordo.bozza.toString().equals(as.getStatoPackage()) == false){
  1325.    
  1326.                     // Validazione necessaria sia ad uno stato operativo che finale
  1327.                     if(utilizzoAzioniDiretteInAccordoAbilitato==false){
  1328.                         if(as.sizePortTypeList()==0){
  1329.                             erroreValidazione.addErroreValidazione("non sono definiti Servizi");
  1330.                         }
  1331.                         for(int j=0; j<as.sizePortTypeList(); j++){
  1332.                             if(as.getPortType(j).sizeAzioneList()==0){
  1333.                                 erroreValidazione.addErroreValidazione("servizio["+as.getPortType(j).getNome()+"] non possiede azioni");
  1334.                             }
  1335.                         }
  1336.                     }else{
  1337.                         if(as.sizePortTypeList()==0 && as.sizeAzioneList()==0 && as.getUtilizzoSenzaAzione()==false){
  1338.                             erroreValidazione.addErroreValidazione("non sono definite ne Azioni (utilizzoSenzaAzione=false) ne Servizi");
  1339.                         }
  1340.                         if(as.sizePortTypeList()!=0){
  1341.                             for(int j=0; j<as.sizePortTypeList(); j++){
  1342.                                 if(as.getPortType(j).sizeAzioneList()==0){
  1343.                                     erroreValidazione.addErroreValidazione("servizio["+as.getPortType(j).getNome()+"] non possiede azioni");
  1344.                                 }
  1345.                             }
  1346.                         }
  1347.                         if(as.sizePortTypeList()!=0){
  1348.                             for(int j=0; j<as.sizePortTypeList(); j++){
  1349.                                 PortType pt = as.getPortType(j);
  1350.                                 for(int k=0;k<pt.sizeAzioneList();k++){
  1351.                                     Operation op = pt.getAzione(k);
  1352.                                     ProfiloCollaborazione profiloCollaborazioneOP = op.getProfiloCollaborazione();
  1353.                                     if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(op.getProfAzione())){
  1354.                                         profiloCollaborazioneOP = pt.getProfiloCollaborazione();
  1355.                                         if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(pt.getProfiloPT())){
  1356.                                             profiloCollaborazioneOP = as.getProfiloCollaborazione();
  1357.                                         }
  1358.                                     }
  1359.                                     if(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.equals(profiloCollaborazioneOP) ||
  1360.                                             CostantiRegistroServizi.ASINCRONO_SIMMETRICO.equals(profiloCollaborazioneOP)    ){
  1361.                                         if(op.getCorrelata()==null){
  1362.                                             // Verifico che esista un altra azione correlata a questa.
  1363.                                             boolean trovataCorrelazione = false;
  1364.                                             for(int verificaPTIndex=0; verificaPTIndex<as.sizePortTypeList(); verificaPTIndex++){
  1365.                                                 PortType ptVerifica = as.getPortType(verificaPTIndex);
  1366.                                                 for(int verificaOPIndex=0; verificaOPIndex<ptVerifica.sizeAzioneList(); verificaOPIndex++){
  1367.                                                     Operation opVerifica = ptVerifica.getAzione(verificaOPIndex);
  1368.                                                     if(opVerifica.getCorrelata()!=null && opVerifica.getCorrelata().equals(op.getNome())){
  1369.                                                         // potenziale correlazione, verifico servizio
  1370.                                                         if(opVerifica.getCorrelataServizio()==null){
  1371.                                                             if(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.equals(profiloCollaborazioneOP) && ptVerifica.getNome().equals(pt.getNome())){
  1372.                                                                 // la correlazione per l'asincrono asimmetrico puo' avvenire sullo stesso port type
  1373.                                                                 trovataCorrelazione = true;
  1374.                                                                 break;
  1375.                                                             }
  1376.                                                         }
  1377.                                                         else if(opVerifica.getCorrelataServizio().equals(pt.getNome())){
  1378.                                                             trovataCorrelazione = true;
  1379.                                                             break;
  1380.                                                         }
  1381.                                                     }
  1382.                                                 }
  1383.                                             }
  1384.                                             if(trovataCorrelazione==false){
  1385.                                                 erroreValidazione.addErroreValidazione("L'azione ["+op.getNome()+"] del servizio["+as.getPortType(j).getNome()+"] non risulta correlata da altre azioni");
  1386.                                             }
  1387.                                         }
  1388.                                     }
  1389.                                 }
  1390.                             }
  1391.                         }
  1392.                     }
  1393.    
  1394.                     if(StatiAccordo.finale.toString().equals(as.getStatoPackage())){
  1395.    
  1396.                         String wsdlConcettuale = (as.getByteWsdlConcettuale()!=null ? new String(as.getByteWsdlConcettuale()) : null);
  1397.                         String wsdlLogicoErogatore = (as.getByteWsdlLogicoErogatore()!=null ? new String(as.getByteWsdlLogicoErogatore()) : null);
  1398.                         wsdlConcettuale = wsdlConcettuale!=null && !"".equals(wsdlConcettuale.trim().replaceAll("\n", "")) ? wsdlConcettuale : null;
  1399.                         wsdlLogicoErogatore = wsdlLogicoErogatore!=null && !"".equals(wsdlLogicoErogatore.trim().replaceAll("\n", "")) ? wsdlLogicoErogatore : null;
  1400.    
  1401.                         if( wsdlConcettuale == null){
  1402.                             erroreValidazione.addErroreValidazione("interfaccia WSDL Concettuale non definita");
  1403.                         }
  1404.                         if( wsdlLogicoErogatore == null){
  1405.                             erroreValidazione.addErroreValidazione("interfaccia WSDL LogicoErogatore non definita");
  1406.                         }
  1407.    
  1408.                         if(as.getServizioComposto()!=null){
  1409.                             if(as.getServizioComposto().getIdAccordoCooperazione()<=0){
  1410.                                 erroreValidazione.addErroreValidazione("accordo di cooperazione (id) non definito");
  1411.                             }else{
  1412.                                 try{
  1413.                                     AccordoCooperazione ac = this.driver.getAccordoCooperazione(as.getServizioComposto().getIdAccordoCooperazione());
  1414.                                     if(StatiAccordo.finale.toString().equals(ac.getStatoPackage())==false){
  1415.                                         erroreValidazione.addErroreValidazione("accordo di cooperazione ["+this.driver.idAccordoCooperazioneFactory.getUriFromAccordo(ac)+"] in uno stato non finale ["+ac.getStatoPackage()+"]");
  1416.                                     }
  1417.                                 }catch(DriverRegistroServiziNotFound dNot){
  1418.                                     erroreValidazione.addErroreValidazione("accordo di cooperazione non definito");
  1419.                                 }
  1420.                             }
  1421.    
  1422.                             if(as.getServizioComposto().sizeSpecificaCoordinamentoList()<=0){
  1423.                                 erroreValidazione.addErroreValidazione("specifica di coordinamento non definita");
  1424.                             }
  1425.    
  1426.    
  1427.                             if(as.getServizioComposto().sizeServizioComponenteList()<=0){
  1428.                                 erroreValidazione.addErroreValidazione("servizi componenti non definiti");  
  1429.                             }else{
  1430.                                 if(as.getServizioComposto().sizeServizioComponenteList()<2){
  1431.                                     erroreValidazione.addErroreValidazione("almeno 2 servizi componenti sono necessari per realizzare un servizio composto");  
  1432.                                 }else{
  1433.                                     for(int i=0; i<as.getServizioComposto().sizeServizioComponenteList(); i++){
  1434.                                         if(as.getServizioComposto().getServizioComponente(i).getIdServizioComponente()<=0){
  1435.                                             erroreValidazione.addErroreValidazione("servizio componente ["+i+"] (id) non definito");
  1436.                                         }else{
  1437.                                             try{
  1438.                                                 AccordoServizioParteSpecifica sc = this.driver.getAccordoServizioParteSpecifica(as.getServizioComposto().getServizioComponente(i).getIdServizioComponente());
  1439.                                                 if(StatiAccordo.finale.toString().equals(sc.getStatoPackage())==false){
  1440.                                                     String uriServizioComponente = this.driver.idServizioFactory.getUriFromAccordo(sc);
  1441.                                                     erroreValidazione.addErroreValidazione("servizio componente ["+uriServizioComponente+"] in uno stato non finale ["+sc.getStatoPackage()+"]");
  1442.                                                 }
  1443.                                             }catch(DriverRegistroServiziNotFound dNot){
  1444.                                                 erroreValidazione.addErroreValidazione("servizio componente ["+i+"] non definito");
  1445.                                             }
  1446.                                         }
  1447.                                     }
  1448.                                 }
  1449.                             }
  1450.                         }
  1451.    
  1452.                     }
  1453.    
  1454.                 }
  1455.             }
  1456.             else {
  1457.                
  1458.                 // REST
  1459.                
  1460.                 // Controlli di stato
  1461.                 if(StatiAccordo.bozza.toString().equals(as.getStatoPackage()) == false){
  1462.                    
  1463.                     if(as.sizeResourceList()==0){
  1464.                         erroreValidazione.addErroreValidazione("non sono definite alcune risorse");
  1465.                     }
  1466.                    
  1467.                 }
  1468.                
  1469.                 if(StatiAccordo.finale.toString().equals(as.getStatoPackage())){
  1470.                    
  1471.                     String wsdlConcettuale = (as.getByteWsdlConcettuale()!=null ? new String(as.getByteWsdlConcettuale()) : null);
  1472.                     wsdlConcettuale = wsdlConcettuale!=null && !"".equals(wsdlConcettuale.trim().replaceAll("\n", "")) ? wsdlConcettuale : null;
  1473.                    
  1474.                     if( wsdlConcettuale == null){
  1475.                         erroreValidazione.addErroreValidazione("Specifica di interfaccia non definita");
  1476.                     }
  1477.                    
  1478.                 }
  1479.                
  1480.             }

  1481.         }catch(Exception e){
  1482.             throw new ValidazioneStatoPackageException(e);
  1483.         }

  1484.         if(erroreValidazione.sizeErroriValidazione()>0){
  1485.             throw erroreValidazione;
  1486.         }
  1487.     }
  1488.    
  1489.     protected void controlloUnicitaImplementazioneAccordoPerSoggetto(String portType,
  1490.             IDSoggetto idSoggettoErogatore, long idSoggettoErogatoreLong,
  1491.             IDAccordo idAccordoServizioParteComune, long idAccordoServizioParteComuneLong,
  1492.             IDServizio idAccordoServizioParteSpecifica, long idAccordoServizioParteSpecificaLong,
  1493.             boolean isUpdate,boolean isServizioCorrelato,
  1494.             boolean isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto,
  1495.             boolean isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto) throws DriverRegistroServiziException{
  1496.         /*
  1497.          * Controllo che non esistano 2 servizi con stesso soggetto erogatore e accordo di servizio
  1498.          * che siano entrambi correlati o non correlati.
  1499.          * Al massimo possono esistere 2 servizi di uno stesso accordo erogati da uno stesso soggetto,
  1500.          * purche' siano uno correlato e uno no.
  1501.          * Se tipoOp = change, devo fare attenzione a non escludere il servizio selezionato che sto
  1502.          * cambiando
  1503.          */

  1504.         String tmpServCorr = CostantiRegistroServizi.DISABILITATO.toString();
  1505.         if(isServizioCorrelato){
  1506.             tmpServCorr = CostantiRegistroServizi.ABILITATO.toString();
  1507.         }
  1508.         String s = "servizio";
  1509.         if (isServizioCorrelato) {
  1510.             s = "servizio correlato";
  1511.         }

  1512.         // se il servizio non definisce port type effettuo controllo che non
  1513.         // esistano 2 servizi con stesso soggetto,
  1514.         // accordo e servizio correlato
  1515.         if (portType == null || "-".equals(portType)) {

  1516.             if(isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto){

  1517.                 // Controllo che non esistano 2 servizi con stesso soggetto,
  1518.                 // accordo e servizio correlato
  1519.                 // Se tipoOp = change, devo fare attenzione a non escludere il servizio selezionato

  1520.                 long idAccordoServizioParteSpecificaAlreadyExists =
  1521.                         this.driver.getServizioWithSoggettoAccordoServCorr(idSoggettoErogatoreLong, idAccordoServizioParteComuneLong,
  1522.                                 tmpServCorr);

  1523.                 boolean addError = ((!isUpdate) && (idAccordoServizioParteSpecificaAlreadyExists > 0));

  1524.                 boolean changeError = false;
  1525.                 if (isUpdate && (idAccordoServizioParteSpecificaAlreadyExists > 0)) {
  1526.                     changeError = (idAccordoServizioParteSpecificaLong != idAccordoServizioParteSpecificaAlreadyExists);
  1527.                 }

  1528.                 if (addError || changeError) {
  1529.                     throw new DriverRegistroServiziException("Esiste gi&agrave; un " + s + " del Soggetto "+idSoggettoErogatore+
  1530.                             " che implementa l'accordo selezionato ["+IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordoServizioParteComune)+"]");
  1531.                 }

  1532.             }

  1533.         } else {

  1534.             if(isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto){

  1535.                 // Controllo che non esistano 2 servizi con stesso soggetto,
  1536.                 // accordo e servizio correlato e port-type

  1537.                 long idAccordoServizioParteSpecificaAlreadyExists =  
  1538.                         this.driver.getServizioWithSoggettoAccordoServCorrPt(idSoggettoErogatoreLong, idAccordoServizioParteComuneLong,
  1539.                                 tmpServCorr, portType);

  1540.                 boolean addError = ((!isUpdate) && (idAccordoServizioParteSpecificaAlreadyExists > 0));

  1541.                 boolean changeError = false;
  1542.                 if (isUpdate && (idAccordoServizioParteSpecificaAlreadyExists > 0)) {
  1543.                     changeError = (idAccordoServizioParteSpecificaLong != idAccordoServizioParteSpecificaAlreadyExists);
  1544.                 }

  1545.                 if (addError || changeError) {
  1546.                     throw new DriverRegistroServiziException("Esiste gi&agrave; un " + s + " del Soggetto "+idSoggettoErogatore+
  1547.                             " che implementa il servizio "+portType+" dell'accordo selezionato ["+IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordoServizioParteComune)+"]");
  1548.                 }

  1549.             }
  1550.         }
  1551.     }
  1552. }