DriverRegistroServiziDB_accordiParteSpecificaDriver.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.sql.Timestamp;
  27. import java.util.ArrayList;
  28. import java.util.List;

  29. import org.openspcoop2.core.commons.DBUtils;
  30. import org.openspcoop2.core.constants.CostantiDB;
  31. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  32. import org.openspcoop2.core.id.IDAccordo;
  33. import org.openspcoop2.core.id.IDFruizione;
  34. import org.openspcoop2.core.id.IDServizio;
  35. import org.openspcoop2.core.id.IDSoggetto;
  36. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  37. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  38. import org.openspcoop2.core.registry.ConfigurazioneServizio;
  39. import org.openspcoop2.core.registry.ConfigurazioneServizioAzione;
  40. import org.openspcoop2.core.registry.Documento;
  41. import org.openspcoop2.core.registry.Fruitore;
  42. import org.openspcoop2.core.registry.ProtocolProperty;
  43. import org.openspcoop2.core.registry.Soggetto;
  44. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  45. import org.openspcoop2.core.registry.constants.ProprietariDocumento;
  46. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  47. import org.openspcoop2.core.registry.constants.ServiceBinding;
  48. import org.openspcoop2.core.registry.constants.StatiAccordo;
  49. import org.openspcoop2.core.registry.constants.StatoFunzionalita;
  50. import org.openspcoop2.core.registry.constants.TipologiaServizio;
  51. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  52. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  53. import org.openspcoop2.core.registry.driver.FiltroRicercaFruizioniServizio;
  54. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  55. import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
  56. import org.openspcoop2.utils.date.DateManager;
  57. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  58. import org.openspcoop2.utils.sql.ISQLQueryObject;
  59. import org.openspcoop2.utils.sql.SQLObjectFactory;

  60. /**
  61.  * DriverRegistroServiziDB_accordiParteSpecificaDriver
  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_accordiParteSpecificaDriver {

  70.     private DriverRegistroServiziDB driver = null;
  71.     private DriverRegistroServiziDB_protocolPropertiesDriver protocolPropertiesDriver = null;
  72.    
  73.     protected DriverRegistroServiziDB_accordiParteSpecificaDriver(DriverRegistroServiziDB driver) {
  74.         this.driver = driver;
  75.         this.protocolPropertiesDriver = new DriverRegistroServiziDB_protocolPropertiesDriver(driver);
  76.     }
  77.    
  78.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idServizio) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  79.         return this.getAccordoServizioParteSpecifica(idServizio,false,null);
  80.     }
  81.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idServizio,Connection con) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  82.         return this.getAccordoServizioParteSpecifica(idServizio,false,con);
  83.     }
  84.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idServizio,boolean readContenutoAllegati) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  85.         return this.getAccordoServizioParteSpecifica(idServizio, readContenutoAllegati, null);
  86.     }
  87.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idServizio,boolean readContenutoAllegati,Connection con) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  88.         // questo e' il tipo 1 cioe Servizio con parametro IDService
  89.         AccordoServizioParteSpecifica servizio = getAccordoServizioParteSpecifica(idServizio,null, null,readContenutoAllegati,con);
  90.         return servizio;
  91.     }

  92.    
  93.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica_ServizioCorrelato(IDSoggetto idSoggetto,IDAccordo idAccordoServizioParteComune) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  94.         return this.getAccordoServizioParteSpecifica_ServizioCorrelato(idSoggetto,idAccordoServizioParteComune,false,null);
  95.     }
  96.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica_ServizioCorrelato(IDSoggetto idSoggetto,IDAccordo idAccordoServizioParteComune,Connection con) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  97.         return this.getAccordoServizioParteSpecifica_ServizioCorrelato(idSoggetto,idAccordoServizioParteComune,false,con);
  98.     }
  99.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica_ServizioCorrelato(IDSoggetto idSoggetto,IDAccordo idAccordoServizioParteComune,boolean readContenutoAllegati) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  100.         return this.getAccordoServizioParteSpecifica_ServizioCorrelato(idSoggetto,idAccordoServizioParteComune, readContenutoAllegati, null);
  101.     }
  102.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica_ServizioCorrelato(IDSoggetto idSoggetto,IDAccordo idAccordoServizioParteComune,boolean readContenutoAllegati,Connection con) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  103.         // questo e' il tipo 2
  104.         AccordoServizioParteSpecifica servizio = getAccordoServizioParteSpecifica(null,idSoggetto, idAccordoServizioParteComune,readContenutoAllegati,con);
  105.         return servizio;
  106.     }

  107.     protected List<IDServizio> getAllIdServizi(FiltroRicercaServizi filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  108.        
  109.         List<IDServizio> list = new ArrayList<>();
  110.         _fillAllIdServiziEngine("getAllIdServizi", filtroRicerca, list);
  111.         return list;
  112.        
  113.     }
  114.    
  115.     protected List<IDFruizione> getAllIdFruizioniServizio(
  116.             FiltroRicercaFruizioniServizio filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  117.    
  118.         List<IDFruizione> list = new ArrayList<IDFruizione>();
  119.         _fillAllIdServiziEngine("getAllIdFruizioniServizio", filtroRicerca, list);
  120.         return list;
  121.        
  122.     }
  123.    
  124.     @SuppressWarnings("unchecked")
  125.     protected <T> void _fillAllIdServiziEngine(String nomeMetodo,
  126.             FiltroRicercaServizi filtroRicerca,
  127.             List<T> listReturn) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  128.         Connection con = null;
  129.         PreparedStatement stm = null;
  130.         ResultSet rs = null;

  131.         FiltroRicercaFruizioniServizio filtroFruizioni = null;
  132.         if(filtroRicerca instanceof FiltroRicercaFruizioniServizio){
  133.             filtroFruizioni = (FiltroRicercaFruizioniServizio) filtroRicerca;
  134.         }
  135.        
  136.         this.driver.logDebug(nomeMetodo+" ...");

  137.         try {
  138.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  139.             // prendo la connessione dal pool
  140.             if (this.driver.atomica)
  141.                 con = this.driver.getConnectionFromDatasource(nomeMetodo);
  142.             else
  143.                 con = this.driver.globalConnection;

  144.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);

  145.             String aliasFruitore = "fruitore";
  146.             String aliasErogatore = "erogatore";
  147.            
  148.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  149.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI,aliasErogatore);
  150.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  151.            
  152.             boolean setFruitore = false;
  153.             if(filtroFruizioni!=null){
  154.                 setFruitore = true;
  155.             }
  156.             if(!setFruitore && filtroRicerca!=null){
  157.                 if(filtroRicerca.getTipoSoggettoFruitore()!=null || filtroRicerca.getNomeSoggettoFruitore()!=null){
  158.                     setFruitore = true;
  159.                 }
  160.             }
  161.             if(setFruitore){
  162.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI,aliasFruitore);
  163.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  164.             }

  165.             String aliasTipoSoggettoErogatore = "tipo_soggetto_erogatore";
  166.             String aliasNomeSoggettoErogatore = "nome_soggetto_erogatore";
  167.             sqlQueryObject.addSelectAliasField(aliasErogatore, "tipo_soggetto", aliasTipoSoggettoErogatore);
  168.             sqlQueryObject.addSelectAliasField(aliasErogatore, "nome_soggetto", aliasNomeSoggettoErogatore);
  169.             sqlQueryObject.addSelectField("tipo_servizio");
  170.             sqlQueryObject.addSelectField("nome_servizio");
  171.             sqlQueryObject.addSelectField("versione_servizio");
  172.             sqlQueryObject.addSelectField("id_referente");
  173.             sqlQueryObject.addSelectField("nome");
  174.             sqlQueryObject.addSelectField("versione");
  175.             sqlQueryObject.addSelectField("servizio_correlato");
  176.             String aliasTipoSoggettoFruitore = "tipo_soggetto_fruitore";
  177.             String aliasNomeSoggettoFruitore = "nome_soggetto_fruitore";
  178.             if(setFruitore){
  179.                 sqlQueryObject.addSelectAliasField(aliasFruitore, "tipo_soggetto", aliasTipoSoggettoFruitore);
  180.                 sqlQueryObject.addSelectAliasField(aliasFruitore, "nome_soggetto", aliasNomeSoggettoFruitore);
  181.             }
  182.             sqlQueryObject.setSelectDistinct(true);
  183.            
  184.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto = "+aliasErogatore+".id");
  185.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo = "+CostantiDB.ACCORDI+".id");

  186.             if(setFruitore){
  187.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id_servizio = "+CostantiDB.SERVIZI+".id");
  188.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id_soggetto = "+aliasFruitore+".id");
  189.             }

  190.             if(filtroRicerca!=null){
  191.                 // Filtro By Data
  192.                 if(filtroRicerca.getMinDate()!=null)
  193.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".ora_registrazione > ?");
  194.                 if(filtroRicerca.getMaxDate()!=null)
  195.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".ora_registrazione < ?");
  196.                 if(filtroRicerca.getTipo()!=null)
  197.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".tipo_servizio = ?");
  198.                 if(filtroRicerca.getNome()!=null)
  199.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".nome_servizio = ?");
  200.                 if(filtroRicerca.getVersione()!=null)
  201.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".versione_servizio = ?");
  202.                 if(filtroRicerca.getPortType()!=null)
  203.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".port_type = ?");
  204.                 if(filtroRicerca.getTipologia()!=null)
  205.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".servizio_correlato = ?");
  206.                 if(filtroRicerca.getTipoSoggettoErogatore()!=null)
  207.                     sqlQueryObject.addWhereCondition(aliasErogatore+".tipo_soggetto = ?");
  208.                 if(filtroRicerca.getNomeSoggettoErogatore()!=null)
  209.                     sqlQueryObject.addWhereCondition(aliasErogatore+".nome_soggetto = ?");
  210.                 if(filtroRicerca.getIdAccordoServizioParteComune()!=null){
  211.                     IDAccordo idAccordo = filtroRicerca.getIdAccordoServizioParteComune();
  212.                     if(idAccordo.getNome()!=null){
  213.                         sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".nome = ?");
  214.                     }
  215.                     if(idAccordo.getSoggettoReferente()!=null){
  216.                         sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".id_referente = ?");
  217.                     }
  218.                     if(idAccordo.getVersione()!=null){
  219.                         sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".versione = ?");
  220.                     }
  221.                 }
  222.                 if(filtroRicerca.getTipoSoggettoFruitore()!=null)
  223.                     sqlQueryObject.addWhereCondition(aliasFruitore+".tipo_soggetto = ?");
  224.                 if(filtroRicerca.getNomeSoggettoFruitore()!=null)
  225.                     sqlQueryObject.addWhereCondition(aliasFruitore+".nome_soggetto = ?");
  226.                 this.protocolPropertiesDriver.setProtocolPropertiesForSearch(sqlQueryObject, filtroRicerca, CostantiDB.SERVIZI);
  227.             }
  228.            
  229.             if(filtroFruizioni!=null){
  230.                 if(filtroFruizioni.getTipoSoggettoFruitore()!=null)
  231.                     sqlQueryObject.addWhereCondition(aliasFruitore+".tipo_soggetto = ?");
  232.                 if(filtroFruizioni.getNomeSoggettoFruitore()!=null)
  233.                     sqlQueryObject.addWhereCondition(aliasFruitore+".nome_soggetto = ?");
  234.                 this.protocolPropertiesDriver.setProtocolPropertiesForSearch(sqlQueryObject, filtroFruizioni, CostantiDB.SERVIZI_FRUITORI);
  235.             }

  236.             sqlQueryObject.setSelectDistinct(true);
  237.             sqlQueryObject.setANDLogicOperator(true);
  238.             String sqlQuery = sqlQueryObject.createSQLQuery();
  239.             this.driver.logDebug("eseguo query : " + sqlQuery );
  240.             stm = con.prepareStatement(sqlQuery);
  241.             int indexStmt = 1;
  242.             if(filtroRicerca!=null){
  243.                 if(filtroRicerca.getMinDate()!=null){
  244.                     this.driver.logDebug("minDate stmt.setTimestamp("+filtroRicerca.getMinDate()+")");
  245.                     stm.setTimestamp(indexStmt, new Timestamp(filtroRicerca.getMinDate().getTime()));
  246.                     indexStmt++;
  247.                 }
  248.                 if(filtroRicerca.getMaxDate()!=null){
  249.                     this.driver.logDebug("maxDate stmt.setTimestamp("+filtroRicerca.getMaxDate()+")");
  250.                     stm.setTimestamp(indexStmt, new Timestamp(filtroRicerca.getMaxDate().getTime()));
  251.                     indexStmt++;
  252.                 }  
  253.                 if(filtroRicerca.getTipo()!=null){
  254.                     this.driver.logDebug("tipoServizio stmt.setString("+filtroRicerca.getTipo()+")");
  255.                     stm.setString(indexStmt, filtroRicerca.getTipo());
  256.                     indexStmt++;
  257.                 }
  258.                 if(filtroRicerca.getNome()!=null){
  259.                     this.driver.logDebug("nomeServizio stmt.setString("+filtroRicerca.getNome()+")");
  260.                     stm.setString(indexStmt, filtroRicerca.getNome());
  261.                     indexStmt++;
  262.                 }
  263.                 if(filtroRicerca.getVersione()!=null){
  264.                     this.driver.logDebug("versioneServizio stmt.setString("+filtroRicerca.getVersione()+")");
  265.                     stm.setInt(indexStmt, filtroRicerca.getVersione());
  266.                     indexStmt++;
  267.                 }
  268.                 if(filtroRicerca.getPortType()!=null){
  269.                     this.driver.logDebug("portType stmt.setString("+filtroRicerca.getPortType()+")");
  270.                     stm.setString(indexStmt, filtroRicerca.getPortType());
  271.                     indexStmt++;
  272.                 }
  273.                 if(filtroRicerca.getTipologia()!=null){
  274.                     StatoFunzionalita servizioCorrelato = (org.openspcoop2.core.constants.TipologiaServizio.CORRELATO.equals(filtroRicerca.getTipologia()) ? CostantiRegistroServizi.ABILITATO : CostantiRegistroServizi.DISABILITATO);
  275.                     this.driver.logDebug("tipologiaServizio stmt.setString("+servizioCorrelato.getValue()+") original:["+filtroRicerca.getTipologia()+"]");
  276.                     stm.setString(indexStmt, servizioCorrelato.getValue());
  277.                     indexStmt++;
  278.                 }
  279.                 if(filtroRicerca.getTipologia()!=null){
  280.                     if(org.openspcoop2.core.constants.TipologiaServizio.CORRELATO.equals(filtroRicerca.getTipologia())){
  281.                         this.driver.logDebug("tipologiaServizio stmt.setString("+CostantiRegistroServizi.ABILITATO.toString()+")");
  282.                         stm.setString(indexStmt, CostantiRegistroServizi.ABILITATO.toString());
  283.                     }
  284.                     else{
  285.                         this.driver.logDebug("tipologiaServizio stmt.setString("+CostantiRegistroServizi.DISABILITATO.toString()+")");
  286.                         stm.setString(indexStmt, CostantiRegistroServizi.DISABILITATO.toString());
  287.                     }
  288.                     indexStmt++;
  289.                 }
  290.                 if(filtroRicerca.getTipoSoggettoErogatore()!=null){
  291.                     this.driver.logDebug("tipoSoggettoErogatore stmt.setString("+filtroRicerca.getTipoSoggettoErogatore()+")");
  292.                     stm.setString(indexStmt, filtroRicerca.getTipoSoggettoErogatore());
  293.                     indexStmt++;
  294.                 }
  295.                 if(filtroRicerca.getNomeSoggettoErogatore()!=null){
  296.                     this.driver.logDebug("nomeSoggettoErogatore stmt.setString("+filtroRicerca.getNomeSoggettoErogatore()+")");
  297.                     stm.setString(indexStmt, filtroRicerca.getNomeSoggettoErogatore());
  298.                     indexStmt++;
  299.                 }
  300.                 if(filtroRicerca.getIdAccordoServizioParteComune()!=null){
  301.                     IDAccordo idAccordo = filtroRicerca.getIdAccordoServizioParteComune();
  302.                     if(idAccordo.getNome()!=null){
  303.                         this.driver.logDebug("nomeAccordo stmt.setString("+idAccordo.getNome()+")");
  304.                         stm.setString(indexStmt, idAccordo.getNome());
  305.                         indexStmt++;
  306.                     }
  307.                     if(idAccordo.getSoggettoReferente()!=null){
  308.                         long idSoggettoReferente = DBUtils.getIdSoggetto(idAccordo.getSoggettoReferente().getNome(), idAccordo.getSoggettoReferente().getTipo(), con, this.driver.tipoDB,this.driver.tabellaSoggetti);
  309.                         if(idSoggettoReferente<=0){
  310.                             throw new Exception("Soggetto referente ["+idAccordo.getSoggettoReferente().toString()+"] non trovato");
  311.                         }
  312.                         this.driver.logDebug("idReferenteAccordi stmt.setLong("+idSoggettoReferente+")");
  313.                         stm.setLong(indexStmt, idSoggettoReferente);
  314.                         indexStmt++;
  315.                     }
  316.                     if(idAccordo.getVersione()!=null){
  317.                         this.driver.logDebug("versioneAccordo stmt.setString("+idAccordo.getVersione()+")");
  318.                         stm.setInt(indexStmt, idAccordo.getVersione());
  319.                         indexStmt++;
  320.                     }
  321.                 }
  322.                 if(filtroRicerca.getTipoSoggettoFruitore()!=null){
  323.                     this.driver.logDebug("tipoSoggettoFruitore stmt.setString("+filtroRicerca.getTipoSoggettoFruitore()+")");
  324.                     stm.setString(indexStmt, filtroRicerca.getTipoSoggettoFruitore());
  325.                     indexStmt++;
  326.                 }
  327.                 if(filtroRicerca.getNomeSoggettoFruitore()!=null){
  328.                     this.driver.logDebug("nomeSoggettoFruitore stmt.setString("+filtroRicerca.getNomeSoggettoFruitore()+")");
  329.                     stm.setString(indexStmt, filtroRicerca.getNomeSoggettoFruitore());
  330.                     indexStmt++;
  331.                 }
  332.                 this.protocolPropertiesDriver.setProtocolPropertiesForSearch(stm, indexStmt, filtroRicerca, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  333.             }
  334.            
  335.             if(filtroFruizioni!=null){
  336.                 if(filtroFruizioni.getTipoSoggettoFruitore()!=null){
  337.                     this.driver.logDebug("tipoSoggettoFruitore stmt.setString("+filtroFruizioni.getTipoSoggettoFruitore()+")");
  338.                     stm.setString(indexStmt, filtroFruizioni.getTipoSoggettoFruitore());
  339.                     indexStmt++;
  340.                 }
  341.                 if(filtroFruizioni.getNomeSoggettoFruitore()!=null){
  342.                     this.driver.logDebug("nomeSoggettoFruitore stmt.setString("+filtroFruizioni.getNomeSoggettoFruitore()+")");
  343.                     stm.setString(indexStmt, filtroFruizioni.getNomeSoggettoFruitore());
  344.                     indexStmt++;
  345.                 }
  346.                 this.protocolPropertiesDriver.setProtocolPropertiesForSearch(stm, indexStmt, filtroFruizioni, ProprietariProtocolProperty.FRUITORE);
  347.             }
  348.            
  349.             rs = stm.executeQuery();
  350.             while (rs.next()) {
  351.                 IDSoggetto idSoggettoErogatore = new IDSoggetto(rs.getString(aliasTipoSoggettoErogatore),rs.getString(aliasNomeSoggettoErogatore));
  352.                 IDServizio idServ = this.driver.idServizioFactory.getIDServizioFromValues(rs.getString("tipo_servizio"),rs.getString("nome_servizio"),
  353.                         idSoggettoErogatore, rs.getInt("versione_servizio"));

  354.                 // uriAccordoServizio
  355.                 IDSoggetto soggettoReferente = null;
  356.                 long idSoggettoReferente = rs.getLong("id_referente");
  357.                 if(idSoggettoReferente>0){
  358.                     try {
  359.                         soggettoReferente = this.driver.getIdSoggetto(idSoggettoReferente,con);
  360.                         if(soggettoReferente==null){
  361.                             throw new DriverRegistroServiziNotFound ("non esiste");
  362.                         }
  363.                     }catch(DriverRegistroServiziNotFound notFound) {
  364.                         try {
  365.                             throw new Exception ("Soggetto referente ["+idSoggettoReferente+"] dell'accordo non esiste");
  366.                         }finally {
  367.                             try{
  368.                                 if(rs!=null)
  369.                                     rs.close();
  370.                             }catch (Exception e) {
  371.                                 //ignore
  372.                             }
  373.                             try{
  374.                                 if(stm!=null)
  375.                                     stm.close();
  376.                             }catch (Exception e) {
  377.                                 //ignore
  378.                             }
  379.                         }
  380.                     }
  381.                 }
  382.                 IDAccordo idAccordo = this.driver.idAccordoFactory.getIDAccordoFromValues(rs.getString("nome"),soggettoReferente,rs.getInt("versione"));
  383.                 idServ.setUriAccordoServizioParteComune(this.driver.idAccordoFactory.getUriFromIDAccordo(idAccordo));

  384.                 String servizioCorrelato = rs.getString("servizio_correlato");
  385.                 if(CostantiRegistroServizi.ABILITATO.toString().equals(servizioCorrelato) || TipologiaServizio.CORRELATO.toString().equals(servizioCorrelato))
  386.                     idServ.setTipologia(org.openspcoop2.core.constants.TipologiaServizio.CORRELATO);
  387.                 else
  388.                     idServ.setTipologia(org.openspcoop2.core.constants.TipologiaServizio.NORMALE);
  389.                
  390.                 if(filtroFruizioni!=null){
  391.                     IDFruizione idFruizione = new IDFruizione();
  392.                     idFruizione.setIdServizio(idServ);
  393.                     idFruizione.setIdFruitore(new IDSoggetto(rs.getString("tipo_soggetto_fruitore"),rs.getString("nome_soggetto_fruitore")));
  394.                     listReturn.add((T)idFruizione);
  395.                 }
  396.                 else{
  397.                     listReturn.add((T)idServ);
  398.                 }
  399.             }
  400.             if(listReturn.isEmpty()){
  401.                 String msgFiltro = "Elementi non trovati che rispettano il filtro di ricerca selezionato: ";
  402.                 if(filtroFruizioni!=null){
  403.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroFruizioni.toString());
  404.                 }
  405.                 else if(filtroRicerca!=null){
  406.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroRicerca.toString());
  407.                 }
  408.                 else
  409.                     throw new DriverRegistroServiziNotFound("Elementi non trovati");
  410.             }
  411.         }catch(DriverRegistroServiziNotFound de){
  412.             throw de;
  413.         }
  414.         catch(Exception e){
  415.             throw new DriverRegistroServiziException(nomeMetodo+" error",e);
  416.         } finally {

  417.             //Chiudo statement and resultset
  418.             JDBCUtilities.closeResources(rs, stm);

  419.             this.driver.closeConnection(con);

  420.         }
  421.     }

  422.     protected IDServizio[] getAllIdServiziWithSoggettoErogatore(Long idSoggetto) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  423.         String operazione = "getAllIdServiziWithSoggettoErogatore";

  424.         Connection con = null;
  425.         PreparedStatement stm = null;
  426.         ResultSet rs = null;

  427.         this.driver.logDebug(operazione+"...");

  428.         try {
  429.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  430.             // prendo la connessione dal pool
  431.             if (this.driver.atomica)
  432.                 con = this.driver.getConnectionFromDatasource("getAllIdServiziWithSoggettoErogatore");
  433.             else
  434.                 con = this.driver.globalConnection;

  435.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);

  436.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  437.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);

  438.             sqlQueryObject.addSelectField("*");
  439.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  440.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id = ?");

  441.             sqlQueryObject.setANDLogicOperator(true);
  442.             String sqlQuery = sqlQueryObject.createSQLQuery();
  443.             this.driver.logDebug("eseguo query : " + sqlQuery );
  444.             stm = con.prepareStatement(sqlQuery);
  445.             stm.setLong(1, idSoggetto);
  446.             rs = stm.executeQuery();
  447.             List<IDServizio> idServizi = new ArrayList<>();
  448.             while (rs.next()) {
  449.                 IDSoggetto idSoggettoErogatore = new IDSoggetto(rs.getString("tipo_soggetto"),rs.getString("nome_soggetto"));
  450.                 IDServizio idServ = this.driver.idServizioFactory.getIDServizioFromValues(rs.getString("tipo_servizio"),rs.getString("nome_servizio"),
  451.                         idSoggettoErogatore, rs.getInt("versione_servizio"));
  452.                 idServizi.add(idServ);
  453.             }
  454.             if(idServizi.isEmpty()){
  455.                 throw new DriverRegistroServiziNotFound("Servizi non trovati per il soggetto con id: "+idSoggetto);
  456.             }else{
  457.                 IDServizio[] res = new IDServizio[1];
  458.                 return idServizi.toArray(res);
  459.             }
  460.         }catch(DriverRegistroServiziNotFound de){
  461.             throw de;
  462.         }
  463.         catch(Exception e){
  464.             throw new DriverRegistroServiziException(operazione+" error",e);
  465.         } finally {

  466.             //Chiudo statement and resultset
  467.             JDBCUtilities.closeResources(rs, stm);

  468.             this.driver.closeConnection(con);

  469.         }
  470.     }

  471.     protected void createAccordoServizioParteSpecifica(AccordoServizioParteSpecifica accordoServizioParteSpecifica) throws DriverRegistroServiziException {
  472.         if (accordoServizioParteSpecifica == null)
  473.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::createAccordoServizioParteSpecifica] Parametro non valido.");

  474.         Connection con = null;
  475.         boolean error = false;

  476.         if (this.driver.atomica) {
  477.             try {
  478.                 con = this.driver.getConnectionFromDatasource("createAccordoServizioParteSpecifica");
  479.                 con.setAutoCommit(false);
  480.             } catch (Exception e) {
  481.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::createAccordoServizioParteSpecifica] Exception accedendo al datasource :" + e.getMessage(),e);

  482.             }

  483.         } else
  484.             con = this.driver.globalConnection;

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

  486.         try {
  487.             this.driver.logDebug("CRUDServizio tupe=1");
  488.             // CREATE
  489.             DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecifica(1, accordoServizioParteSpecifica, con, this.driver.tipoDB, this.driver.getDriverWrapBYOK());

  490.         } catch (Exception qe) {
  491.             error = true;
  492.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::createAccordoServizioParteSpecifica] Errore durante la creazione del servizio : " + qe.getMessage(), qe);
  493.         } finally {

  494.             this.driver.closeConnection(error,con);
  495.         }
  496.     }

  497.     protected boolean existsAccordoServizioParteSpecifica(IDServizio idServizio) throws DriverRegistroServiziException {

  498.         if (idServizio == null)
  499.             throw new DriverRegistroServiziException("IDServizio non valido.");

  500.         IDSoggetto erogatore = idServizio.getSoggettoErogatore();
  501.         if (erogatore == null)
  502.             throw new DriverRegistroServiziException("Soggetto Erogatore non valido.");

  503.         String nomeServizio = idServizio.getNome();
  504.         String tipoServizio = idServizio.getTipo();
  505.         Integer versioneServizio = idServizio.getVersione();
  506.         String nomeProprietario = erogatore.getNome();
  507.         String tipoProprietario = erogatore.getTipo();

  508.         Connection con = null;

  509.         if (this.driver.atomica) {
  510.             try {
  511.                 con = this.driver.getConnectionFromDatasource("existsAccordoServizioParteSpecifica");
  512.             } catch (Exception e) {
  513.                 throw new DriverRegistroServiziException("Exception accedendo al datasource :" + e.getMessage(), e);

  514.             }

  515.         } else
  516.             con = this.driver.globalConnection;

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

  518.         try {
  519.             long idS = DBUtils.getIdServizio(nomeServizio, tipoServizio, versioneServizio, nomeProprietario, tipoProprietario, con, false,this.driver.tipoDB);
  520.             return idS > 0;
  521.         } catch (Exception qe) {
  522.             throw new DriverRegistroServiziException("Errore durante existsAccordoServizioParteSpecifica : " + qe.getMessage(), qe);
  523.         } finally {

  524.             this.driver.closeConnection(con);
  525.         }
  526.     }

  527.     protected boolean existsAccordoServizioParteSpecifica(long idServizio) throws DriverRegistroServiziException {
  528.         boolean exist = false;
  529.         Connection con = null;
  530.         PreparedStatement stm = null;
  531.         ResultSet rs = null;
  532.         if (this.driver.atomica) {
  533.             try {
  534.                 con = this.driver.getConnectionFromDatasource("existsAccordoServizioParteSpecifica(longId)");
  535.             } catch (Exception e) {
  536.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::existsAccordoServizioParteSpecifica] Exception accedendo al datasource :" + e.getMessage(),e);

  537.             }

  538.         } else
  539.             con = this.driver.globalConnection;

  540.         try {
  541.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  542.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  543.             sqlQueryObject.addSelectField("*");
  544.             sqlQueryObject.addWhereCondition("id = ?");
  545.             String sqlQuery = sqlQueryObject.createSQLQuery();
  546.             stm = con.prepareStatement(sqlQuery);
  547.             stm.setLong(1, idServizio);
  548.             rs = stm.executeQuery();
  549.             if (rs.next())
  550.                 exist = true;
  551.             rs.close();
  552.             stm.close();

  553.         } catch (Exception e) {
  554.             exist = false;
  555.             this.driver.log.error("Errore durante verifica esistenza servizio :", e);
  556.         } finally {
  557.             //Chiudo statement and resultset
  558.             JDBCUtilities.closeResources(rs, stm);
  559.            
  560.             this.driver.closeConnection(con);
  561.         }

  562.         return exist;
  563.     }


  564.     protected long getServizioWithSoggettoAccordoServCorr(long idSoggetto, long idAccordo, String servizioCorrelato) throws DriverRegistroServiziException {
  565.         return getEngineServizioWithSoggettoAccordoServCorrPT(idSoggetto, idAccordo, servizioCorrelato, null);
  566.     }

  567.     /**
  568.      * Verifica l'esistenza di un servizio con un certo soggetto e port-type
  569.      * accordo e servizio correlato
  570.      */
  571.     private long getEngineServizioWithSoggettoAccordoServCorrPT(long idSoggetto, long idAccordo, String servizioCorrelato,String portType) throws DriverRegistroServiziException {

  572.         long idServ = 0;
  573.         Connection connection;
  574.         PreparedStatement stm = null;
  575.         ResultSet rs = null;
  576.         if (this.driver.atomica) {
  577.             try {
  578.                 connection = this.driver.getConnectionFromDatasource("getEngineServizioWithSoggettoAccordoServCorrPT");
  579.             } catch (Exception e) {
  580.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::getServizioWithSoggettoAccordoServCorr] Exception accedendo al datasource :" + e.getMessage(),e);

  581.             }

  582.         } else
  583.             connection = this.driver.globalConnection;

  584.         this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  585.         try {
  586.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  587.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  588.             sqlQueryObject.addSelectField("*");
  589.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  590.             sqlQueryObject.addWhereCondition("id_accordo = ?");
  591.             sqlQueryObject.addWhereCondition("servizio_correlato = ?");

  592.             if(portType!=null) sqlQueryObject.addWhereCondition("port_type = ?");
  593.             else sqlQueryObject.addWhereCondition("port_type is null");

  594.             sqlQueryObject.setANDLogicOperator(true);
  595.             String sqlQuery = sqlQueryObject.createSQLQuery();
  596.             stm = connection.prepareStatement(sqlQuery);
  597.             stm.setLong(1, idSoggetto);
  598.             stm.setLong(2, idAccordo);
  599.             stm.setString(3, servizioCorrelato);
  600.             if(portType!=null) stm.setString(4, portType);
  601.             rs = stm.executeQuery();
  602.             if (rs.next())
  603.                 idServ = rs.getLong("id");
  604.             rs.close();
  605.             stm.close();
  606.         } catch (Exception e) {
  607.             throw new DriverRegistroServiziException(e.getMessage(),e);
  608.         } finally {

  609.             //Chiudo statement and resultset
  610.             JDBCUtilities.closeResources(rs, stm);

  611.             this.driver.closeConnection(connection);
  612.         }

  613.         return idServ;
  614.     }

  615.     protected long getServizioWithSoggettoAccordoServCorrPt(long idSoggetto, long idAccordo, String servizioCorrelato,String portType) throws DriverRegistroServiziException {
  616.         return getEngineServizioWithSoggettoAccordoServCorrPT(idSoggetto, idAccordo, servizioCorrelato, portType);
  617.     }

  618.    

  619.     protected void updateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica servizio) throws DriverRegistroServiziException {
  620.         if (servizio == null)
  621.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::updateAccordoServizioParteSpecifica] Parametro non valido.");
  622.         Connection con = null;
  623.         boolean error = false;

  624.         if (this.driver.atomica) {
  625.             try {
  626.                 con = this.driver.getConnectionFromDatasource("updateAccordoServizioParteSpecifica");
  627.                 con.setAutoCommit(false);
  628.             } catch (Exception e) {
  629.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::updateAccordoServizioParteSpecifica] Exception accedendo al datasource :" + e.getMessage(),e);

  630.             }

  631.         } else
  632.             con = this.driver.globalConnection;

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

  634.         try {

  635.             // UPDATE
  636.             DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecifica(2, servizio, con, this.driver.tipoDB, this.driver.getDriverWrapBYOK());

  637.         } catch (Exception qe) {
  638.             error = true;
  639.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::updateAccordoServizioParteSpecifica] Errore durante l'update del servizio : " + qe.getMessage(),qe);
  640.         } finally {

  641.             this.driver.closeConnection(error,con);
  642.         }
  643.     }

  644.     protected void deleteAccordoServizioParteSpecifica(AccordoServizioParteSpecifica servizio) throws DriverRegistroServiziException {
  645.         if (servizio == null)
  646.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::deleteAccordoServizioParteSpecifica] Parametro non valido.");

  647.         Connection con = null;
  648.         boolean error = false;

  649.         if (this.driver.atomica) {
  650.             try {
  651.                 con = this.driver.getConnectionFromDatasource("deleteAccordoServizioParteSpecifica");
  652.                 con.setAutoCommit(false);
  653.             } catch (Exception e) {
  654.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::deleteAccordoServizioParteSpecifica] Exception accedendo al datasource :" + e.getMessage(),e);

  655.             }

  656.         } else
  657.             con = this.driver.globalConnection;

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

  659.         try {
  660.             this.driver.logDebug("CRUDServizio type = 3");
  661.             // creo soggetto
  662.             DriverRegistroServiziDB_accordiParteSpecificaLIB.CRUDAccordoServizioParteSpecifica(3, servizio, con, this.driver.tipoDB, this.driver.getDriverWrapBYOK());

  663.         } catch (Exception qe) {
  664.             error = true;
  665.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::deleteAccordoServizioParteSpecifica] Errore durante la delete del servizio : " + qe.getMessage(),qe);
  666.         } finally {

  667.             this.driver.closeConnection(error,con);
  668.         }
  669.     }

  670.     protected boolean existsSoggettoServiziWithoutConnettore(long idSoggetto) throws DriverRegistroServiziException {
  671.         if (idSoggetto <= 0)
  672.             throw new DriverRegistroServiziException("idSoggetto non valido.");

  673.         Connection con = null;
  674.         PreparedStatement stm = null;
  675.         ResultSet rs = null;
  676.         boolean trovatoServ = false;

  677.         if (this.driver.atomica) {
  678.             try {
  679.                 con = this.driver.getConnectionFromDatasource("existsSoggettoServiziWithoutConnettore");
  680.             } catch (Exception e) {
  681.                 throw new DriverRegistroServiziException("Exception accedendo al datasource :" + e.getMessage(), e);

  682.             }

  683.         } else
  684.             con = this.driver.globalConnection;

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

  686.         try {
  687.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  688.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  689.             sqlQueryObject.addFromTable(CostantiDB.CONNETTORI);
  690.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  691.             sqlQueryObject.addSelectField("*");
  692.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id_connettore = " + CostantiDB.CONNETTORI + ".id");
  693.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  694.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  695.             sqlQueryObject.addWhereCondition("endpointtype = ?");
  696.             sqlQueryObject.setANDLogicOperator(true);
  697.             String sqlQuery = sqlQueryObject.createSQLQuery();
  698.             stm = con.prepareStatement(sqlQuery);
  699.             stm.setLong(1, idSoggetto);
  700.             stm.setString(2, DriverRegistroServiziDB_LIB.getValue(CostantiRegistroServizi.DISABILITATO));
  701.             rs = stm.executeQuery();
  702.             if (rs.next())
  703.                 trovatoServ = true;

  704.             return trovatoServ;
  705.         } catch (Exception qe) {
  706.             throw new DriverRegistroServiziException("Errore durante existsSoggettoServiziWithoutConnettore: " + qe.getMessage(), qe);
  707.         } finally {

  708.             //Chiudo statement and resultset
  709.             JDBCUtilities.closeResources(rs, stm);
  710.            
  711.             this.driver.closeConnection(con);
  712.         }
  713.     }
  714.    
  715.    
  716.    
  717.     private AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idServizio,
  718.             IDSoggetto idSoggetto, IDAccordo idAccordoServizioParteComune,
  719.             boolean readContenutoAllegati,Connection conParam) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {

  720.         AccordoServizioParteSpecifica accordoServizioParteSpecifica = null;

  721.         Connection con = null;
  722.         PreparedStatement stm = null;
  723.         ResultSet rs = null;
  724.         PreparedStatement stm1 = null;
  725.         ResultSet rs1 = null;

  726.         if(idServizio!=null){
  727.             this.driver.logDebug("chiamato getAccordoServizioParteSpecifica (IDServizio)");
  728.             // in questi casi idService non deve essere null
  729.             // faccio i controlli vari
  730.             if (idServizio == null || idServizio.getNome() == null || idServizio.getNome().trim().equals("") ||
  731.                 idServizio.getTipo() == null || idServizio.getTipo().trim().equals("") ||
  732.                 idServizio.getVersione() == null ||
  733.                 idServizio.getSoggettoErogatore() == null || idServizio.getSoggettoErogatore().getNome() == null || idServizio.getSoggettoErogatore().getNome().trim().equals("") || idServizio.getSoggettoErogatore().getTipo() == null || idServizio.getSoggettoErogatore().getTipo().trim().equals(""))
  734.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteSpecifica] : errore nei parametri d'ingresso (IDServizio)");
  735.         }
  736.         else{
  737.             this.driver.logDebug("chiamato getAccordoServizioParteSpecifica (IDSoggetto e IDAccordo)");
  738.             // in questo caso idSoggetto non deve essere null e anche
  739.             // nomeAccordo
  740.             if (idAccordoServizioParteComune == null || idAccordoServizioParteComune.getNome()==null || idAccordoServizioParteComune.getNome().trim().equals("") || idSoggetto == null || idSoggetto.getNome() == null || idSoggetto.getNome().trim().equals("") || idSoggetto.getTipo() == null || idSoggetto.getTipo().trim().equals(""))
  741.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteSpecifica] : errore nei parametri d'ingresso (IDSoggetto e IDAccordo)");
  742.        
  743.         }

  744.         if(conParam!=null){
  745.             con = conParam;
  746.         }
  747.         else if (this.driver.atomica) {
  748.             try {
  749.                 con = this.driver.getConnectionFromDatasource("getAccordoServizioParteSpecifica");
  750.             } catch (Exception e) {
  751.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteSpecifica] Exception accedendo al datasource :" + e.getMessage(),e);

  752.             }

  753.         } else
  754.             con = this.driver.globalConnection;

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

  756.         try {

  757.             accordoServizioParteSpecifica = new AccordoServizioParteSpecifica();


  758.             String nomeSoggEr = null;
  759.             String tipoSoggEr = null;
  760.             long longIdAccordoServizioParteComune = 0;
  761.             String nomeServizio = null;
  762.             String tipoServizio = null;
  763.             Integer versioneServizio = null;
  764.             String superUser = null;
  765.             long idSoggErogatore = 0;
  766.             long longIdAccordoServizioParteSpecifica = 0;


  767.             // se tipo 1 utilizzo idServio per recuperare qualche parametro
  768.             if(idServizio!=null){
  769.                 nomeServizio = idServizio.getNome();
  770.                 tipoServizio = idServizio.getTipo();
  771.                 versioneServizio = idServizio.getVersione();

  772.                 // nome e tipo soggetto erogatore
  773.                 nomeSoggEr = idServizio.getSoggettoErogatore().getNome();
  774.                 tipoSoggEr = idServizio.getSoggettoErogatore().getTipo();

  775.                 // Prendo l'id del soggetto

  776.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  777.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  778.                 sqlQueryObject.addSelectField("*");
  779.                 sqlQueryObject.addWhereCondition("nome_soggetto = ?");
  780.                 sqlQueryObject.addWhereCondition("tipo_soggetto = ?");
  781.                 sqlQueryObject.setANDLogicOperator(true);
  782.                 String sqlQuery = sqlQueryObject.createSQLQuery();
  783.                 stm = con.prepareStatement(sqlQuery);
  784.                 stm.setString(1, nomeSoggEr);
  785.                 stm.setString(2, tipoSoggEr);

  786.                 this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, nomeSoggEr, tipoSoggEr));

  787.                 rs = stm.executeQuery();
  788.                 if (rs.next()) {
  789.                     idSoggErogatore = rs.getLong("id");
  790.                 }
  791.                 rs.close();
  792.                 stm.close();
  793.             }

  794.             else{

  795.                 // In questo caso non ho IDService ma IDSoggetto
  796.                 // quindi prendo il nome del soggetto erogatore e il tipo da
  797.                 // idSoggetto
  798.                 nomeSoggEr = idSoggetto.getNome();
  799.                 tipoSoggEr = idSoggetto.getTipo();

  800.                 // per settare il nome del servizio devo accedere al db
  801.                 // tramite id del soggetto erogatore e id dell-accordo (che lo
  802.                 // recupero tramite il nomeAccordo passato come parametro)
  803.                 longIdAccordoServizioParteComune = DBUtils.getIdAccordoServizioParteComune(idAccordoServizioParteComune, con, this.driver.tipoDB);

  804.                 // Prendo l'id del soggetto
  805.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  806.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  807.                 sqlQueryObject.addSelectField("*");
  808.                 sqlQueryObject.addWhereCondition("nome_soggetto = ?");
  809.                 sqlQueryObject.addWhereCondition("tipo_soggetto = ?");
  810.                 sqlQueryObject.setANDLogicOperator(true);
  811.                 String sqlQuery = sqlQueryObject.createSQLQuery();
  812.                 stm = con.prepareStatement(sqlQuery);
  813.                 stm.setString(1, nomeSoggEr);
  814.                 stm.setString(2, tipoSoggEr);

  815.                 this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, nomeSoggEr, tipoSoggEr));
  816.                 rs = stm.executeQuery();
  817.                 if (rs.next()) {
  818.                     idSoggErogatore = rs.getLong("id");
  819.                 }
  820.                 rs.close();
  821.                 stm.close();

  822.                 // ora che ho l'id recupero nome-servizio e tipo-servizio dalla
  823.                 // tabella
  824.                 // regserv_servizi acceduta tramite id-soggetto e id-accordo
  825.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  826.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  827.                 sqlQueryObject.addSelectField("*");
  828.                 sqlQueryObject.addWhereCondition("id_soggetto = ?");
  829.                 sqlQueryObject.addWhereCondition("id_accordo = ?");
  830.                 sqlQueryObject.addWhereCondition("servizio_correlato = ?");
  831.                 sqlQueryObject.setANDLogicOperator(true);
  832.                 sqlQuery = sqlQueryObject.createSQLQuery();
  833.                 stm = con.prepareStatement(sqlQuery);
  834.                 stm.setLong(1, idSoggErogatore);
  835.                 stm.setLong(2, longIdAccordoServizioParteComune);
  836.                 stm.setString(3, DriverRegistroServiziDB_LIB.getValue(CostantiRegistroServizi.ABILITATO));
  837.                 this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idSoggErogatore, longIdAccordoServizioParteComune, CostantiRegistroServizi.ABILITATO));
  838.                 rs = stm.executeQuery();
  839.                 if (rs.next()) {
  840.                     nomeServizio = rs.getString("nome_servizio");
  841.                     tipoServizio = rs.getString("tipo_servizio");
  842.                     versioneServizio = rs.getInt("versione_servizio");
  843.                     superUser = rs.getString("superuser");

  844.                 }
  845.                 rs.close();
  846.                 stm.close();
  847.             }

  848.             // Prendo l'id del servizio
  849.             long idConnettore = 0;
  850.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  851.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  852.             sqlQueryObject.addSelectField("*");
  853.             sqlQueryObject.addWhereCondition("nome_servizio = ?");
  854.             sqlQueryObject.addWhereCondition("tipo_servizio = ?");
  855.             sqlQueryObject.addWhereCondition("versione_servizio = ?");
  856.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  857.             sqlQueryObject.setANDLogicOperator(true);
  858.             String sqlQuery = sqlQueryObject.createSQLQuery();
  859.             stm = con.prepareStatement(sqlQuery);
  860.             stm.setString(1, nomeServizio);
  861.             stm.setString(2, tipoServizio);
  862.             if(versioneServizio!=null) {
  863.                 stm.setInt(3, versioneServizio);
  864.             }
  865.             else {
  866.                 stm.setInt(3, 1); // default
  867.             }
  868.             stm.setLong(4, idSoggErogatore);

  869.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, nomeServizio, tipoServizio, versioneServizio, idSoggErogatore));
  870.             rs = stm.executeQuery();
  871.             if (rs.next()) {
  872.                 longIdAccordoServizioParteSpecifica = rs.getLong("id");
  873.                 idConnettore = rs.getLong("id_connettore");
  874.                 longIdAccordoServizioParteComune = rs.getLong("id_accordo");
  875.                 superUser = rs.getString("superuser");
  876.                 accordoServizioParteSpecifica.setId(longIdAccordoServizioParteSpecifica);
  877.                 accordoServizioParteSpecifica.setIdAccordo(longIdAccordoServizioParteComune);

  878.                 // setNome servizio
  879.                 accordoServizioParteSpecifica.setNome(rs.getString("nome_servizio"));
  880.                 // setTipo servizio
  881.                 accordoServizioParteSpecifica.setTipo(rs.getString("tipo_servizio"));
  882.                 // versione
  883.                 accordoServizioParteSpecifica.setVersione(rs.getInt("versione_servizio"));

  884.                 accordoServizioParteSpecifica.setConfigurazioneServizio(new ConfigurazioneServizio());
  885.                
  886.                 //setto connettore
  887.                 accordoServizioParteSpecifica.getConfigurazioneServizio().setConnettore(this.driver.getConnettore(idConnettore, con));
  888.                 // setWsdlImplementativoErogatore
  889.                 String wsdlimpler = rs.getString("wsdl_implementativo_erogatore");
  890.                 accordoServizioParteSpecifica.setByteWsdlImplementativoErogatore((wsdlimpler != null && !wsdlimpler.trim().equals("")) ? wsdlimpler.trim().getBytes() : null);
  891.                 // setWddlImplementativoFruitore
  892.                 String wsdlimplfru = rs.getString("wsdl_implementativo_fruitore");
  893.                 accordoServizioParteSpecifica.setByteWsdlImplementativoFruitore((wsdlimplfru != null && !wsdlimplfru.trim().equals("")) ? wsdlimplfru.trim().getBytes() : null);

  894.                 // Setto informazione sul servizio correlato
  895.                 String servizioCorrelato = rs.getString("servizio_correlato");
  896.                 if(CostantiRegistroServizi.ABILITATO.toString().equals(servizioCorrelato) || TipologiaServizio.CORRELATO.toString().equals(servizioCorrelato))
  897.                     accordoServizioParteSpecifica.setTipologiaServizio(TipologiaServizio.CORRELATO);
  898.                 else
  899.                     accordoServizioParteSpecifica.setTipologiaServizio(TipologiaServizio.NORMALE);

  900.                 //setto erogatore servizio
  901.                 accordoServizioParteSpecifica.setTipoSoggettoErogatore(tipoSoggEr);
  902.                 accordoServizioParteSpecifica.setNomeSoggettoErogatore(nomeSoggEr);
  903.                 accordoServizioParteSpecifica.setIdSoggetto(idSoggErogatore);

  904.                 if(rs.getInt("privato")==CostantiDB.TRUE)
  905.                     accordoServizioParteSpecifica.setPrivato(true);
  906.                 else
  907.                     accordoServizioParteSpecifica.setPrivato(false);

  908.                 // Ora Registrazione
  909.                 if(rs.getTimestamp("ora_registrazione")!=null){
  910.                     accordoServizioParteSpecifica.setOraRegistrazione(new Date(rs.getTimestamp("ora_registrazione").getTime()));
  911.                 }

  912.                 // porttype
  913.                 String tmp = rs.getString("port_type");
  914.                 if(tmp!=null && (!"".equals(tmp)))
  915.                     accordoServizioParteSpecifica.setPortType(tmp);

  916.                 // Profilo
  917.                 String profilo = rs.getString("profilo");
  918.                 if(profilo!=null){
  919.                     profilo = profilo.trim();
  920.                     accordoServizioParteSpecifica.setVersioneProtocollo(profilo);
  921.                 }

  922.                 accordoServizioParteSpecifica.setSuperUser(superUser);

  923.                 // Descrizione
  924.                 accordoServizioParteSpecifica.setDescrizione(rs.getString("descrizione"));

  925.                 // Stato Documento
  926.                 accordoServizioParteSpecifica.setStatoPackage(rs.getString("stato"));

  927.                 // MessageType
  928.                 tmp = rs.getString("message_type");
  929.                 accordoServizioParteSpecifica.setMessageType(DriverRegistroServiziDB_LIB.getEnumMessageType((tmp == null || tmp.equals("")) ? null : tmp));
  930.                
  931.                 // Proprieta Oggetto
  932.                 accordoServizioParteSpecifica.setProprietaOggetto(DriverRegistroServiziDB_utilsDriver.readProprietaOggetto(rs,false));
  933.                
  934.             }else{
  935.                 throw new DriverRegistroServiziNotFound("Servizio ["+tipoServizio+"/"+nomeServizio+":"+versioneServizio+"] erogato dal soggetto ["+tipoSoggEr+"/"+nomeSoggEr+"] non esiste");
  936.             }
  937.             rs.close();
  938.             stm.close();
  939.             long idSoggFruitore = 0;
  940.             Fruitore fruitore = null;

  941.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  942.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  943.             sqlQueryObject.addSelectField("*");
  944.             sqlQueryObject.addWhereCondition("id_servizio = ?");
  945.             sqlQuery = sqlQueryObject.createSQLQuery();
  946.             stm = con.prepareStatement(sqlQuery);
  947.             stm.setLong(1, longIdAccordoServizioParteSpecifica);

  948.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, longIdAccordoServizioParteSpecifica));
  949.             rs = stm.executeQuery();

  950.             while (rs.next()) {
  951.                 fruitore = new Fruitore();

  952.                 idSoggFruitore = rs.getLong("id_soggetto"); // recupero id del
  953.                 // soggetto fruitore
  954.                 // del servizio
  955.                 idConnettore = rs.getLong("id_connettore"); // recuper id del
  956.                 // connettore

  957.                 fruitore.setConnettore(this.driver.getConnettore(idConnettore, con));

  958.                 String wsdlimpler = rs.getString("wsdl_implementativo_erogatore");
  959.                 fruitore.setByteWsdlImplementativoErogatore(wsdlimpler!=null && !wsdlimpler.trim().equals("") ? wsdlimpler.getBytes() : null );
  960.                 String wsdlimplfru = rs.getString("wsdl_implementativo_fruitore");
  961.                 fruitore.setByteWsdlImplementativoFruitore(wsdlimplfru!=null && !wsdlimplfru.trim().equals("") ? wsdlimplfru.getBytes() : null);

  962.                 // Ora Registrazione
  963.                 if(rs.getTimestamp("ora_registrazione")!=null){
  964.                     fruitore.setOraRegistrazione(new Date(rs.getTimestamp("ora_registrazione").getTime()));
  965.                 }

  966.                 // Stato Documento
  967.                 fruitore.setStatoPackage(rs.getString("stato"));

  968.                 // Descrizione
  969.                 fruitore.setDescrizione(rs.getString("descrizione"));
  970.                
  971.                 // Proprieta Oggetto
  972.                 fruitore.setProprietaOggetto(DriverRegistroServiziDB_utilsDriver.readProprietaOggetto(rs,false));
  973.                
  974.                 // recupero informazioni del soggetto fruitore
  975.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  976.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  977.                 sqlQueryObject.addSelectField("*");
  978.                 sqlQueryObject.addWhereCondition("id = ?");
  979.                 sqlQuery = sqlQueryObject.createSQLQuery();
  980.                 stm1 = con.prepareStatement(sqlQuery);
  981.                 stm1.setLong(1, idSoggFruitore);
  982.                 this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idSoggFruitore));
  983.                 rs1 = stm1.executeQuery();

  984.                 if (rs1.next()) {
  985.                     fruitore.setNome(rs1.getString("nome_soggetto"));
  986.                     fruitore.setTipo(rs1.getString("tipo_soggetto"));
  987.                 } else {
  988.                     throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteSpecifica] Non ho trovato i dati del soggetto fruitore necessario eseguendo: \n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idSoggFruitore));
  989.                 }
  990.                 rs1.close();
  991.                 stm1.close();

  992.                 // aggiungo il fruitore al servizio da restituire
  993.                 fruitore.setId(rs.getLong("id"));
  994.                
  995.                
  996.                 // Protocol Properties
  997.                 try{
  998.                     List<ProtocolProperty> listPP = DriverRegistroServiziDB_LIB.getListaProtocolProperty(fruitore.getId(), ProprietariProtocolProperty.FRUITORE, con,
  999.                             this.driver.tipoDB, this.driver.getDriverUnwrapBYOK());
  1000.                     if(listPP!=null && !listPP.isEmpty()){
  1001.                         for (ProtocolProperty protocolProperty : listPP) {
  1002.                             fruitore.addProtocolProperty(protocolProperty);
  1003.                         }
  1004.                     }
  1005.                 }catch(DriverRegistroServiziNotFound dNotFound){
  1006.                     // ignore
  1007.                 }
  1008.                
  1009.                
  1010.                 accordoServizioParteSpecifica.addFruitore(fruitore);

  1011.             }
  1012.             rs.close();
  1013.             stm.close();
  1014.            
  1015.             if(accordoServizioParteSpecifica.sizeFruitoreList()>0) {
  1016.                 for (Fruitore fruitoreLetto : accordoServizioParteSpecifica.getFruitoreList()) {
  1017.                    
  1018.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1019.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI_AZIONI);
  1020.                     sqlQueryObject.addSelectField("*");
  1021.                     sqlQueryObject.addWhereCondition("id_fruizione = ?");
  1022.                     sqlQuery = sqlQueryObject.createSQLQuery();
  1023.                     stm = con.prepareStatement(sqlQuery);
  1024.                     stm.setLong(1, fruitoreLetto.getId());

  1025.                     this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, fruitoreLetto.getId()));
  1026.                     rs = stm.executeQuery();

  1027.                     while (rs.next()) {
  1028.                         ConfigurazioneServizioAzione conf = new ConfigurazioneServizioAzione();

  1029.                         idConnettore = rs.getLong("id_connettore"); // recuper id del
  1030.                         // connettore
  1031.                         conf.setConnettore(this.driver.getConnettore(idConnettore, con));

  1032.                         // aggiungo il fruitore al servizio da restituire
  1033.                         conf.setId(rs.getLong("id"));
  1034.                         fruitoreLetto.addConfigurazioneAzione(conf);

  1035.                     }
  1036.                     rs.close();
  1037.                     stm.close();
  1038.                    
  1039.                    
  1040.                     if(fruitoreLetto.sizeConfigurazioneAzioneList()>0) {
  1041.                         for (ConfigurazioneServizioAzione conf : fruitoreLetto.getConfigurazioneAzioneList()) {
  1042.                            
  1043.                             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1044.                             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI_AZIONE);
  1045.                             sqlQueryObject.addSelectField("*");
  1046.                             sqlQueryObject.addWhereCondition("id_fruizione_azioni = ?");
  1047.                             sqlQuery = sqlQueryObject.createSQLQuery();
  1048.                             stm = con.prepareStatement(sqlQuery);
  1049.                             stm.setLong(1, conf.getId());

  1050.                             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, conf.getId()));
  1051.                             rs = stm.executeQuery();

  1052.                             while (rs.next()) {
  1053.                                
  1054.                                 conf.addAzione(rs.getString("nome_azione"));

  1055.                             }
  1056.                             rs.close();
  1057.                             stm.close();
  1058.                            
  1059.                         }
  1060.                     }
  1061.                 }
  1062.             }


  1063.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1064.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_AZIONI);
  1065.             sqlQueryObject.addSelectField("*");
  1066.             sqlQueryObject.addWhereCondition("id_servizio = ?");
  1067.             sqlQuery = sqlQueryObject.createSQLQuery();
  1068.             stm = con.prepareStatement(sqlQuery);
  1069.             stm.setLong(1, longIdAccordoServizioParteSpecifica);

  1070.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, longIdAccordoServizioParteSpecifica));
  1071.             rs = stm.executeQuery();

  1072.             while (rs.next()) {
  1073.                 ConfigurazioneServizioAzione conf = new ConfigurazioneServizioAzione();

  1074.                 idConnettore = rs.getLong("id_connettore"); // recuper id del
  1075.                 // connettore
  1076.                 conf.setConnettore(this.driver.getConnettore(idConnettore, con));

  1077.                 // aggiungo il fruitore al servizio da restituire
  1078.                 conf.setId(rs.getLong("id"));
  1079.                 accordoServizioParteSpecifica.getConfigurazioneServizio().addConfigurazioneAzione(conf);

  1080.             }
  1081.             rs.close();
  1082.             stm.close();
  1083.            
  1084.            
  1085.             if(accordoServizioParteSpecifica.getConfigurazioneServizio().sizeConfigurazioneAzioneList()>0) {
  1086.                 for (ConfigurazioneServizioAzione conf : accordoServizioParteSpecifica.getConfigurazioneServizio().getConfigurazioneAzioneList()) {
  1087.                    
  1088.                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1089.                     sqlQueryObject.addFromTable(CostantiDB.SERVIZI_AZIONE);
  1090.                     sqlQueryObject.addSelectField("*");
  1091.                     sqlQueryObject.addWhereCondition("id_servizio_azioni = ?");
  1092.                     sqlQuery = sqlQueryObject.createSQLQuery();
  1093.                     stm = con.prepareStatement(sqlQuery);
  1094.                     stm.setLong(1, conf.getId());

  1095.                     this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, conf.getId()));
  1096.                     rs = stm.executeQuery();

  1097.                     while (rs.next()) {
  1098.                        
  1099.                         conf.addAzione(rs.getString("nome_azione"));

  1100.                     }
  1101.                     rs.close();
  1102.                     stm.close();
  1103.                    
  1104.                 }
  1105.             }


  1106.             // imposto uri accordo di servizio parte comune
  1107.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1108.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
  1109.             sqlQueryObject.addSelectField("*");
  1110.             sqlQueryObject.addWhereCondition("id = ?");
  1111.             sqlQuery = sqlQueryObject.createSQLQuery();
  1112.             stm = con.prepareStatement(sqlQuery);
  1113.             stm.setLong(1, longIdAccordoServizioParteComune);

  1114.             this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, longIdAccordoServizioParteComune));
  1115.             rs = stm.executeQuery();

  1116.             if (rs.next()) {
  1117.                 // setAccordoServizio
  1118.                 accordoServizioParteSpecifica.setIdAccordo(longIdAccordoServizioParteComune);

  1119.                 String tmp = rs.getString("nome");
  1120.                 int tmpVersione = rs.getInt("versione");
  1121.                 long id_referente = rs.getLong("id_referente");
  1122.                 IDSoggetto soggettoReferente = null;
  1123.                 if(id_referente>0){
  1124.                     try {
  1125.                         soggettoReferente = this.driver.getIdSoggetto(id_referente,con);
  1126.                         if(soggettoReferente==null){
  1127.                             throw new DriverRegistroServiziNotFound ("non esiste");
  1128.                         }
  1129.                     }catch(DriverRegistroServiziNotFound notFound) {
  1130.                         throw new Exception ("Soggetto referente ["+id_referente+"] dell'accordo non esiste");
  1131.                     }
  1132.                 }
  1133.                 accordoServizioParteSpecifica.setAccordoServizioParteComune(this.driver.idAccordoFactory.getUriFromValues(tmp, soggettoReferente, tmpVersione));


  1134.                 /** Non servono poiche' non presenti nel db dei servizi */
  1135.                 /*
  1136.                 // setFiltroduplicati
  1137.                 tmp = rs.getString("filtro_duplicati");
  1138.                 servizio.setFiltroDuplicati((tmp != null && !(tmp.trim().equals(""))) ? tmp : CostantiRegistroServizi.DISABILITATO);
  1139.                 // setConfermaRicezione
  1140.                 tmp = rs.getString("conferma_ricezione");
  1141.                 servizio.setConfermaRicezione((tmp != null && !(tmp.trim().equals(""))) ? tmp : CostantiRegistroServizi.DISABILITATO);
  1142.                 // setIdCollaborazione
  1143.                 tmp = rs.getString("identificativo_collaborazione");
  1144.                 servizio.setIdCollaborazione((tmp != null && !(tmp.trim().equals(""))) ? tmp : CostantiRegistroServizi.DISABILITATO);
  1145.                 // setIdRiferimentoRichiesta
  1146.                 tmp = rs.getString("id_riferimento_richiesta");
  1147.                 servizio.setIdRiferimentoRichiesta((tmp != null && !(tmp.trim().equals(""))) ? tmp : CostantiRegistroServizi.DISABILITATO);
  1148.                 // setConsegnaInOrdine
  1149.                 tmp = rs.getString("consegna_in_ordine");
  1150.                 servizio.setConsegnaInOrdine((tmp != null && !(tmp.trim().equals(""))) ? tmp : CostantiRegistroServizi.DISABILITATO);
  1151.                 // setScadenza
  1152.                 tmp = rs.getString("scadenza");
  1153.                 servizio.setScadenza((tmp != null && !(tmp.trim().equals(""))) ? tmp : null);
  1154.                  */
  1155.             }
  1156.             rs.close();
  1157.             stm.close();




  1158.             // read Documenti generici: i bytes non vengono ritornati se readContenutoAllegati==false, utilizzare il metodo apposta per averli:
  1159.             //                                               DriverRegistroServiziDB_LIB.getDocumento(id, readBytes, connection);
  1160.             try{
  1161.                 List<?> allegati = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.allegato.toString(), longIdAccordoServizioParteSpecifica,
  1162.                         ProprietariDocumento.servizio,readContenutoAllegati, con, this.driver.tipoDB);
  1163.                 for(int i=0; i<allegati.size();i++){
  1164.                     accordoServizioParteSpecifica.addAllegato((Documento) allegati.get(i));
  1165.                 }
  1166.             }catch(DriverRegistroServiziNotFound dNotFound){}
  1167.             try{
  1168.                 List<?> specificheSemiformali = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.specificaSemiformale.toString(),
  1169.                         longIdAccordoServizioParteSpecifica, ProprietariDocumento.servizio,readContenutoAllegati, con, this.driver.tipoDB);
  1170.                 for(int i=0; i<specificheSemiformali.size();i++){
  1171.                     accordoServizioParteSpecifica.addSpecificaSemiformale((Documento) specificheSemiformali.get(i));
  1172.                 }
  1173.             }catch(DriverRegistroServiziNotFound dNotFound){}
  1174.             try{
  1175.                 List<?> specificheLivelloServizio = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.specificaLivelloServizio.toString(),
  1176.                         longIdAccordoServizioParteSpecifica, ProprietariDocumento.servizio,readContenutoAllegati, con, this.driver.tipoDB);
  1177.                 for(int i=0; i<specificheLivelloServizio.size();i++){
  1178.                     accordoServizioParteSpecifica.addSpecificaLivelloServizio((Documento) specificheLivelloServizio.get(i));
  1179.                 }
  1180.             }catch(DriverRegistroServiziNotFound dNotFound){}
  1181.             try{
  1182.                 List<?> specificheSicurezza = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.specificaSicurezza.toString(),
  1183.                         longIdAccordoServizioParteSpecifica, ProprietariDocumento.servizio,readContenutoAllegati, con, this.driver.tipoDB);
  1184.                 for(int i=0; i<specificheSicurezza.size();i++){
  1185.                     accordoServizioParteSpecifica.addSpecificaSicurezza((Documento) specificheSicurezza.get(i));
  1186.                 }
  1187.             }catch(DriverRegistroServiziNotFound dNotFound){}

  1188.            
  1189.            
  1190.            
  1191.             // Protocol Properties
  1192.             try{
  1193.                 List<ProtocolProperty> listPP = DriverRegistroServiziDB_LIB.getListaProtocolProperty(longIdAccordoServizioParteSpecifica,
  1194.                         ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA, con,
  1195.                         this.driver.tipoDB, this.driver.getDriverUnwrapBYOK());
  1196.                 if(listPP!=null && !listPP.isEmpty()){
  1197.                     for (ProtocolProperty protocolProperty : listPP) {
  1198.                         accordoServizioParteSpecifica.addProtocolProperty(protocolProperty);
  1199.                     }
  1200.                 }
  1201.             }catch(DriverRegistroServiziNotFound dNotFound){
  1202.                 // ignore
  1203.             }  
  1204.            
  1205.            
  1206.             return accordoServizioParteSpecifica;

  1207.         } catch (DriverRegistroServiziNotFound e) {
  1208.             throw e;
  1209.         }catch (Exception se) {
  1210.             this.driver.logDebug("[DriverRegistroServiziDB::getAccordoServizioParteSpecifica] Exception:"+se.getMessage(),se);
  1211.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteSpecifica] Exception:" + se.getMessage(),se);

  1212.         } finally {
  1213.             JDBCUtilities.closeResources(rs, stm);
  1214.             JDBCUtilities.closeResources(rs1, stm1);

  1215.             this.driver.closeConnection(conParam, con);
  1216.         }
  1217.     }
  1218.    
  1219.    
  1220.    
  1221.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(long idServizio) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  1222.         return getAccordoServizioParteSpecifica(idServizio,null);
  1223.     }
  1224.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(long idServizio,boolean readContenutoAllegati) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  1225.         return getAccordoServizioParteSpecifica(idServizio,null,readContenutoAllegati);
  1226.     }

  1227.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(long idServizio,Connection conParam) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  1228.         return getAccordoServizioParteSpecifica(idServizio, conParam,false);
  1229.     }
  1230.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(long idServizio,Connection conParam,boolean readContenutoAllegati) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {

  1231.         // conrollo consistenza
  1232.         if (idServizio <= 0)
  1233.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getServizio] L'id del servizio deve essere > 0.");

  1234.         Connection con = null;
  1235.         PreparedStatement stm = null;
  1236.         ResultSet rs = null;

  1237.         if(conParam!=null){
  1238.             con = conParam;
  1239.         }
  1240.         else if (this.driver.atomica) {
  1241.             try {
  1242.                 con = this.driver.getConnectionFromDatasource("getAccordoServizioParteSpecifica(longId)");

  1243.             } catch (Exception e) {
  1244.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::getServizio] Exception accedendo al datasource :" + e.getMessage(),e);

  1245.             }

  1246.         } else
  1247.             con = this.driver.globalConnection;

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

  1249.         IDServizio idServizioObject = null;
  1250.         try {
  1251.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1252.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  1253.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1254.             sqlQueryObject.addSelectField("tipo_servizio");
  1255.             sqlQueryObject.addSelectField("nome_servizio");
  1256.             sqlQueryObject.addSelectField("versione_servizio");
  1257.             sqlQueryObject.addSelectField("tipo_soggetto");
  1258.             sqlQueryObject.addSelectField("nome_soggetto");
  1259.             sqlQueryObject.addSelectField("servizio_correlato");
  1260.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id = ?");
  1261.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  1262.             sqlQueryObject.setANDLogicOperator(true);
  1263.             String sqlQuery = sqlQueryObject.createSQLQuery();

  1264.             stm = con.prepareStatement(sqlQuery);

  1265.             stm.setLong(1, idServizio);

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

  1267.             rs = stm.executeQuery();

  1268.             if (rs.next()) {
  1269.                 IDSoggetto soggettoErogatore = new IDSoggetto(rs.getString("tipo_soggetto"),rs.getString("nome_soggetto"));
  1270.                 idServizioObject = this.driver.idServizioFactory.getIDServizioFromValues(rs.getString("tipo_servizio"),rs.getString("nome_servizio"), soggettoErogatore, rs.getInt("versione_servizio"));
  1271.                 if(CostantiRegistroServizi.ABILITATO.toString().equals(rs.getString("servizio_correlato")) ||
  1272.                         TipologiaServizio.CORRELATO.toString().equals(rs.getString("servizio_correlato"))){
  1273.                     idServizioObject.setTipologia(org.openspcoop2.core.constants.TipologiaServizio.CORRELATO);
  1274.                 }
  1275.                 else{
  1276.                     idServizioObject.setTipologia(org.openspcoop2.core.constants.TipologiaServizio.NORMALE);
  1277.                 }

  1278.             }else{
  1279.                 throw new DriverRegistroServiziNotFound("Nessun Servizio trovato con id="+idServizio);
  1280.             }
  1281.             rs.close();
  1282.             stm.close();
  1283.         } catch (SQLException se) {
  1284.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getServizio] SqlException: " + se.getMessage(),se);
  1285.         } catch (DriverRegistroServiziNotFound nf) {
  1286.             throw nf;
  1287.         }catch (Exception se) {
  1288.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getServizio] Exception: " + se.getMessage(),se);
  1289.         } finally {

  1290.             //Chiudo statement and resultset
  1291.             JDBCUtilities.closeResources(rs, stm);

  1292.             this.driver.closeConnection(conParam, con);
  1293.         }

  1294.         return this.getAccordoServizioParteSpecifica(idServizioObject,readContenutoAllegati,conParam);

  1295.     }
  1296.    
  1297.    
  1298.     protected List<AccordoServizioParteSpecifica> serviziWithIdAccordoList(long idAccordo) throws DriverRegistroServiziException {
  1299.         String nomeMetodo = "serviziWithIdAccordoList";
  1300.         Connection con = null;
  1301.         PreparedStatement stmt=null;
  1302.         ResultSet risultato=null;
  1303.         ArrayList<AccordoServizioParteSpecifica> lista = new ArrayList<>();
  1304.         if (this.driver.atomica) {
  1305.             try {
  1306.                 con = this.driver.getConnectionFromDatasource("serviziWithIdAccordoList");
  1307.             } catch (Exception e) {
  1308.                 throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);

  1309.             }

  1310.         } else
  1311.             con = this.driver.globalConnection;

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

  1313.         try {

  1314.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1315.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  1316.             sqlQueryObject.addSelectField("*");
  1317.             sqlQueryObject.addWhereCondition("id_accordo = ?");
  1318.             String queryString = sqlQueryObject.createSQLQuery();
  1319.             stmt = con.prepareStatement(queryString);
  1320.             stmt.setLong(1, idAccordo);
  1321.             risultato = stmt.executeQuery();
  1322.             while (risultato.next()) {
  1323.                 AccordoServizioParteSpecifica serv = this.getAccordoServizioParteSpecifica(risultato.getLong("id"));
  1324.                 lista.add(serv);
  1325.             }

  1326.             return lista;

  1327.         } catch (Exception qe) {
  1328.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
  1329.         } finally {

  1330.             //Chiudo statement and resultset
  1331.             JDBCUtilities.closeResources(risultato, stmt);

  1332.             this.driver.closeConnection(con);
  1333.         }
  1334.     }
  1335.    
  1336.     protected List<IDSoggetto> getAllIdSoggettiErogatori(String tipoServizio,String nomeServizio,String uriAccordo,String nomePortType,String tipoSoggetto) throws DriverRegistroServiziException {
  1337.         String nomeMetodo = "getAllIdSoggettiErogatori";
  1338.         ArrayList<IDSoggetto> lista = new ArrayList<IDSoggetto>();
  1339.         Connection con = null;
  1340.         PreparedStatement stmt = null;
  1341.         ResultSet risultato = null;
  1342.         String queryString;

  1343.         try {

  1344.             if (this.driver.atomica) {
  1345.                 try {
  1346.                     con = this.driver.getConnectionFromDatasource("getAllIdSoggettiErogatori");

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

  1349.                 }

  1350.             } else {
  1351.                 con = this.driver.globalConnection;
  1352.             }

  1353.             this.driver.logDebug("operazione this.atomica = " + this.driver.atomica);
  1354.            
  1355.             //recupero idAccordo
  1356.             IDAccordo idAccordo = this.driver.idAccordoFactory.getIDAccordoFromUri(uriAccordo);
  1357.             long idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordo, con, this.driver.tipoDB);
  1358.             // Controllo che il pdd non sia in uso
  1359.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  1360.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  1361.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  1362.             sqlQueryObject.setANDLogicOperator(true);
  1363.             sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI, "tipo_soggetto", "tipoSoggetto");
  1364.             sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI, "nome_soggetto", "nomeSoggetto");
  1365.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SERVIZI+".id_soggetto");
  1366.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".tipo_servizio= ?");
  1367.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".nome_servizio= ?");
  1368.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo = ?");
  1369.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".port_type = ?");
  1370.             if(tipoSoggetto!=null) sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto = ?");
  1371.             queryString = sqlQueryObject.createSQLQuery();
  1372.             stmt = con.prepareStatement(queryString);
  1373.             stmt.setString(1, tipoServizio);
  1374.             stmt.setString(2, nomeServizio);
  1375.             stmt.setLong(3, idAccordoLong);
  1376.             stmt.setString(4, nomePortType);
  1377.             if(tipoSoggetto!=null) stmt.setString(5, tipoSoggetto);

  1378.             risultato = stmt.executeQuery();

  1379.             while (risultato.next()) {
  1380.                 String tipo_soggetto = risultato.getString("tipoSoggetto");
  1381.                 String nome_soggetto = risultato.getString("nomeSoggetto");
  1382.                 lista.add(new IDSoggetto(tipo_soggetto,nome_soggetto));
  1383.             }

  1384.             return lista;

  1385.         } catch (Exception se) {
  1386.             throw new DriverRegistroServiziException("[DriverRegistroServiziException::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  1387.         } finally {
  1388.             // Chiudo statement and resultset
  1389.             JDBCUtilities.closeResources(risultato, stmt);
  1390.             this.driver.closeConnection(con);
  1391.         }
  1392.     }
  1393.    
  1394.    
  1395.     protected void validaStatoAccordoServizioParteSpecifica(AccordoServizioParteSpecifica servizio, boolean gestioneWsdlImplementativo, boolean checkConnettore) throws ValidazioneStatoPackageException{

  1396.         ValidazioneStatoPackageException erroreValidazione =
  1397.                 new ValidazioneStatoPackageException("Servizio",servizio.getStatoPackage(),null);

  1398.         try{

  1399.             // Controlli di visibilita
  1400.             if(servizio.getPrivato()==null || servizio.getPrivato()==false){
  1401.                 IDSoggetto idS = new IDSoggetto(servizio.getTipoSoggettoErogatore(),servizio.getNomeSoggettoErogatore());
  1402.                 try{
  1403.                     Soggetto s = this.driver.getSoggetto(idS);
  1404.                     if(s.getPrivato()!=null && s.getPrivato()){
  1405.                         erroreValidazione.addErroreValidazione("soggetto erogatore ["+idS+"] con visibilita' privata, in un servizio con visibilita' pubblica");
  1406.                     }
  1407.                 }catch(DriverRegistroServiziNotFound dNot){}
  1408.                 try{
  1409.                     AccordoServizioParteComune as = this.driver.getAccordoServizioParteComune(this.driver.idAccordoFactory.getIDAccordoFromUri(servizio.getAccordoServizioParteComune()));
  1410.                     if(as.getPrivato()!=null && as.getPrivato()){
  1411.                         erroreValidazione.addErroreValidazione("accordo di servizio ["+servizio.getAccordoServizioParteComune()+"] con visibilita' privata, in un servizio con visibilita' pubblica");
  1412.                     }
  1413.                 }catch(DriverRegistroServiziNotFound dNot){}
  1414.             }  

  1415.             // Controlli di stato
  1416.             if(StatiAccordo.bozza.toString().equals(servizio.getStatoPackage()) == false){

  1417.                 if(StatiAccordo.operativo.toString().equals(servizio.getStatoPackage())){
  1418.                     try{
  1419.                         AccordoServizioParteComune as = this.driver.getAccordoServizioParteComune(this.driver.idAccordoFactory.getIDAccordoFromUri(servizio.getAccordoServizioParteComune()));
  1420.                         if(StatiAccordo.finale.toString().equals(as.getStatoPackage())==false && StatiAccordo.operativo.toString().equals(as.getStatoPackage())==false){
  1421.                             erroreValidazione.addErroreValidazione("accordo di servizio riferito ["+this.driver.idAccordoFactory.getUriFromAccordo(as)+"] possiede lo stato ["+as.getStatoPackage()+"]");
  1422.                         }
  1423.                     }catch(DriverRegistroServiziNotFound dNot){
  1424.                         erroreValidazione.addErroreValidazione("accordo di servizio non definito");
  1425.                     }
  1426.                 }
  1427.                
  1428.                 else if(StatiAccordo.finale.toString().equals(servizio.getStatoPackage())){
  1429.                     AccordoServizioParteComune as = null;
  1430.                     try{
  1431.                         as = this.driver.getAccordoServizioParteComune(this.driver.idAccordoFactory.getIDAccordoFromUri(servizio.getAccordoServizioParteComune()));
  1432.                         if(StatiAccordo.finale.toString().equals(as.getStatoPackage())==false){
  1433.                             erroreValidazione.addErroreValidazione("accordo di servizio ["+this.driver.idAccordoFactory.getUriFromAccordo(as)+"] in uno stato non finale ["+as.getStatoPackage()+"]");
  1434.                         }
  1435.                     }catch(DriverRegistroServiziNotFound dNot){
  1436.                         erroreValidazione.addErroreValidazione("accordo di servizio non definito");
  1437.                     }

  1438.                     if(as!=null) {
  1439.                         if(ServiceBinding.SOAP.equals(as.getServiceBinding()) && gestioneWsdlImplementativo) {
  1440.                        
  1441.                             if(TipologiaServizio.CORRELATO.equals(servizio.getTipologiaServizio())){
  1442.                                 String wsdlImplementativoFruitore = (servizio.getByteWsdlImplementativoFruitore()!=null ? new String(servizio.getByteWsdlImplementativoFruitore()) : null);
  1443.                                 wsdlImplementativoFruitore = wsdlImplementativoFruitore!=null && !"".equals(wsdlImplementativoFruitore.trim().replaceAll("\n", "")) ? wsdlImplementativoFruitore : null;
  1444.                                 if( wsdlImplementativoFruitore == null){
  1445.                                     erroreValidazione.addErroreValidazione("WSDL Implementativo fruitore non definito");
  1446.                                 }
  1447.                             }else{
  1448.                                 String wsdlImplementativoErogatore = (servizio.getByteWsdlImplementativoErogatore()!=null ? new String(servizio.getByteWsdlImplementativoErogatore()) : null);
  1449.                                 wsdlImplementativoErogatore = wsdlImplementativoErogatore!=null && !"".equals(wsdlImplementativoErogatore.trim().replaceAll("\n", "")) ? wsdlImplementativoErogatore : null;
  1450.                                 if( wsdlImplementativoErogatore == null){
  1451.                                     erroreValidazione.addErroreValidazione("WSDL Implementativo erogatore non definito");
  1452.                                 }
  1453.                             }
  1454.                            
  1455.                         }
  1456.                     }


  1457.                     // check connettore: un servizio puo' essere finale con jms: il check sara' poi al momento dell'esportazione nei package cnipa
  1458.                     /*if(servizio.getConnettore()!=null && !CostantiDB.CONNETTORE_TIPO_DISABILITATO.equals(servizio.getConnettore().getTipo()) &&
  1459.                             !CostantiDB.CONNETTORE_TIPO_HTTP.equals(servizio.getConnettore().getTipo()) && !CostantiDB.CONNETTORE_TIPO_HTTPS.equals(servizio.getConnettore().getTipo())){
  1460.                         erroreValidazione.addErroreValidazione("Accordo di servizio parte specifica possiede un connettore ("+servizio.getConnettore().getTipo()+") non utilizzabile nella rete SPC");
  1461.                     }
  1462.                     else */
  1463.                    
  1464.                     if(checkConnettore) {
  1465.                        
  1466.                         if(servizio.getConfigurazioneServizio().getConnettore()==null || CostantiDB.CONNETTORE_TIPO_DISABILITATO.equals(servizio.getConfigurazioneServizio().getConnettore().getTipo())){
  1467.                             // check connettore del soggetto erogatore: un servizio puo' essere finale con jms: il check sara' poi al momento dell'esportazione nei package cnipa
  1468.                             Soggetto soggettoErogatore = this.driver.getSoggetto(new IDSoggetto(servizio.getTipoSoggettoErogatore(),servizio.getNomeSoggettoErogatore()));
  1469.                             /*if(soggettoErogatore.getConnettore()!=null && !CostantiDB.CONNETTORE_TIPO_DISABILITATO.equals(soggettoErogatore.getConnettore().getTipo()) &&
  1470.                                     !CostantiDB.CONNETTORE_TIPO_HTTP.equals(soggettoErogatore.getConnettore().getTipo()) && !CostantiDB.CONNETTORE_TIPO_HTTPS.equals(soggettoErogatore.getConnettore().getTipo())){
  1471.                                 erroreValidazione.addErroreValidazione("Accordo di servizio parte specifica non possiede un connettore e soggetto erogatore "+servizio.getTipoSoggettoErogatore()+"/"+servizio.getNomeSoggettoErogatore()+" possiede un connettore ("+soggettoErogatore.getConnettore().getTipo()+") non utilizzabile nella rete SPC");
  1472.                             }
  1473.                             else */
  1474.                             if(soggettoErogatore.getConnettore()==null || CostantiDB.CONNETTORE_TIPO_DISABILITATO.equals(soggettoErogatore.getConnettore().getTipo()) ){
  1475.                                 erroreValidazione.addErroreValidazione("Sia l'Accordo di servizio parte specifica che il soggetto erogatore non possiedono un connettore");
  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.    
  1490.    
  1491.    
  1492.    
  1493.     protected void updateProprietaOggettoErogazione(IDServizio idServizioObject, String user) throws DriverRegistroServiziException {
  1494.        
  1495.         String nomeMetodo = "updateProprietaOggettoErogazione";
  1496.         Connection con = null;
  1497.         long idServizio = -1;
  1498.         try {
  1499.             if (this.driver.atomica) {
  1500.                 try {
  1501.                     con = this.driver.getConnectionFromDatasource(nomeMetodo);

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

  1504.                 }

  1505.             } else {
  1506.                 con = this.driver.globalConnection;
  1507.             }

  1508.             this.driver.logDebug("operazione this.atomica = " + this.driver.atomica);
  1509.            
  1510.             idServizio = DBUtils.getIdAccordoServizioParteSpecifica(idServizioObject, con, DriverRegistroServiziDB_LIB.tipoDB);

  1511.             if(idServizio<=0) {
  1512.                 throw new DriverRegistroServiziException("Servizio con id '"+idServizioObject+"' non esistente");
  1513.             }
  1514.            
  1515.         } catch (Exception e) {
  1516.             DriverRegistroServiziDB_LIB.logError("Errore", e);
  1517.             throw new DriverRegistroServiziException(e);
  1518.         } finally {
  1519.             this.driver.closeConnection(con);
  1520.         }
  1521.         updateProprietaOggettoEngine(idServizio, user, CostantiDB.SERVIZI);
  1522.     }
  1523.     protected void updateProprietaOggettoErogazione(long idServizio, String user) throws DriverRegistroServiziException {
  1524.         updateProprietaOggettoEngine(idServizio, user, CostantiDB.SERVIZI);
  1525.     }
  1526.     protected void updateProprietaOggettoFruizione(IDServizio idServizioObject, IDSoggetto idFruitore, String user) throws DriverRegistroServiziException {
  1527.        
  1528.         String nomeMetodo = "updateProprietaOggettoFruizione";
  1529.         Connection con = null;
  1530.         long idFruizione = -1;
  1531.         try {
  1532.             if (this.driver.atomica) {
  1533.                 try {
  1534.                     con = this.driver.getConnectionFromDatasource(nomeMetodo);

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

  1537.                 }

  1538.             } else {
  1539.                 con = this.driver.globalConnection;
  1540.             }

  1541.             this.driver.logDebug("operazione this.atomica = " + this.driver.atomica);
  1542.            
  1543.             idFruizione = DBUtils.getIdFruizioneServizio(idServizioObject, idFruitore, con, DriverRegistroServiziDB_LIB.tipoDB);

  1544.             if(idFruizione<=0) {
  1545.                 throw new DriverRegistroServiziException("Servizio con id '"+idServizioObject+"' non esistente");
  1546.             }
  1547.            
  1548.         } catch (Exception e) {
  1549.             DriverRegistroServiziDB_LIB.logError("Errore", e);
  1550.             throw new DriverRegistroServiziException(e);
  1551.         } finally {
  1552.             this.driver.closeConnection(con);
  1553.         }
  1554.         updateProprietaOggettoEngine(idFruizione, user, CostantiDB.SERVIZI_FRUITORI);
  1555.     }
  1556.     protected void updateProprietaOggettoFruizione(long idFruizione, String user) throws DriverRegistroServiziException {
  1557.         updateProprietaOggettoEngine(idFruizione, user, CostantiDB.SERVIZI_FRUITORI);
  1558.     }
  1559.     private void updateProprietaOggettoEngine(long id, String user, String tabella) throws DriverRegistroServiziException {
  1560.        
  1561.         String nomeMetodo = "updateProprietaOggetto_"+tabella;
  1562.        
  1563.         Connection con = null;
  1564.         PreparedStatement stm = null;
  1565.         try {
  1566.             if (this.driver.atomica) {
  1567.                 try {
  1568.                     con = this.driver.getConnectionFromDatasource(nomeMetodo);

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

  1571.                 }

  1572.             } else {
  1573.                 con = this.driver.globalConnection;
  1574.             }

  1575.             this.driver.logDebug("operazione this.atomica = " + this.driver.atomica);
  1576.            
  1577.             ISQLQueryObject sqlQueryObjectUpdate = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
  1578.             sqlQueryObjectUpdate.addUpdateTable(tabella);
  1579.             sqlQueryObjectUpdate.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_UTENTE_ULTIMA_MODIFICA, "?");
  1580.             sqlQueryObjectUpdate.addUpdateField(CostantiDB.PROPRIETA_OGGETTO_DATA_ULTIMA_MODIFICA, "?");
  1581.             sqlQueryObjectUpdate.addWhereCondition("id=?");
  1582.             String updateString = sqlQueryObjectUpdate.createSQLUpdate();
  1583.             stm = con.prepareStatement(updateString);
  1584.             int index = 1;
  1585.             stm.setString(index++, user);
  1586.             stm.setTimestamp(index++, DateManager.getTimestamp());
  1587.             stm.setLong(index, id);
  1588.             int n=stm.executeUpdate();
  1589.             stm.close();
  1590.             DriverRegistroServiziDB_LIB.logDebug("Aggiornata "+n+" entry per l'operazione di ultima modifica della tabella '"+tabella+"' con id: "+id);
  1591.         } catch (SQLException e) {
  1592.             DriverRegistroServiziDB_LIB.logError("Errore SQL", e);
  1593.             throw new DriverRegistroServiziException(e);
  1594.         }catch (Exception e) {
  1595.             DriverRegistroServiziDB_LIB.logError("Errore", e);
  1596.             throw new DriverRegistroServiziException(e);
  1597.         } finally {
  1598.             JDBCUtilities.closeResources(stm);

  1599.             this.driver.closeConnection(con);
  1600.         }
  1601.     }
  1602. }