DriverRegistroServiziDB_accordiParteSpecificaFruitoreDriver.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.PreparedStatement;
  23. import java.sql.ResultSet;
  24. import java.sql.SQLException;
  25. import java.util.ArrayList;
  26. import java.util.List;

  27. import org.openspcoop2.core.commons.DBUtils;
  28. import org.openspcoop2.core.commons.Filtri;
  29. import org.openspcoop2.core.commons.ISearch;
  30. import org.openspcoop2.core.commons.Liste;
  31. import org.openspcoop2.core.commons.SearchUtils;
  32. import org.openspcoop2.core.constants.CostantiDB;
  33. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  34. import org.openspcoop2.core.id.IDServizio;
  35. import org.openspcoop2.core.id.IDSoggetto;
  36. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  37. import org.openspcoop2.core.registry.Fruitore;
  38. import org.openspcoop2.core.registry.ProtocolProperty;
  39. import org.openspcoop2.core.registry.Soggetto;
  40. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  41. import org.openspcoop2.core.registry.constants.CredenzialeTipo;
  42. import org.openspcoop2.core.registry.constants.PddTipologia;
  43. import org.openspcoop2.core.registry.constants.StatiAccordo;
  44. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  45. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  46. import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
  47. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  48. import org.openspcoop2.utils.sql.ISQLQueryObject;
  49. import org.openspcoop2.utils.sql.SQLObjectFactory;

  50. /**
  51.  * DriverRegistroServiziDB_accordiParteSpecificaFruitoreDriver
  52.  *
  53.  *
  54.  * @author Sandra Giangrandi (sandra@link.it)
  55.  * @author Stefano Corallo (corallo@link.it)
  56.  * @author $Author$
  57.  * @version $Rev$, $Date$
  58.  */
  59. public class DriverRegistroServiziDB_accordiParteSpecificaFruitoreDriver {

  60.     private DriverRegistroServiziDB driver = null;
  61.    
  62.     protected DriverRegistroServiziDB_accordiParteSpecificaFruitoreDriver(DriverRegistroServiziDB driver) {
  63.         this.driver = driver;
  64.     }
  65.    
  66.    

  67.     protected long getServizioFruitore(IDServizio idServizio, long idSogg) throws DriverRegistroServiziException {

  68.         long idFru = 0;
  69.         Connection connection;
  70.         PreparedStatement stm = null;
  71.         ResultSet rs = null;
  72.         if (this.driver.atomica) {
  73.             try {
  74.                 connection = this.driver.getConnectionFromDatasource("getServizioFruitore");
  75.             } catch (Exception e) {
  76.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::getServizioWithSoggettoAccordoServCorr] Exception accedendo al datasource :" + e.getMessage(),e);

  77.             }

  78.         } else
  79.             connection = this.driver.globalConnection;

  80.         this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  81.         try {
  82.             long idServ = 0;
  83.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  84.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  85.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  86.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI+".id");
  87.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".nome_servizio = ?");
  88.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".tipo_servizio = ?");
  89.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".versione_servizio = ?");
  90.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  91.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto = ?");
  92.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto = ?");
  93.             sqlQueryObject.setANDLogicOperator(true);
  94.             String sqlQuery = sqlQueryObject.createSQLQuery();
  95.             stm = connection.prepareStatement(sqlQuery);
  96.             stm.setString(1, idServizio.getNome());
  97.             stm.setString(2, idServizio.getTipo());
  98.             stm.setInt(3, idServizio.getVersione());
  99.             stm.setString(4, idServizio.getSoggettoErogatore().getNome());
  100.             stm.setString(5, idServizio.getSoggettoErogatore().getTipo());
  101.             rs = stm.executeQuery();
  102.             if (rs.next())
  103.                 idServ = rs.getLong("id");
  104.             rs.close();
  105.             stm.close();

  106.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  107.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  108.             sqlQueryObject.addSelectField("*");
  109.             sqlQueryObject.addWhereCondition("id_servizio = ?");
  110.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  111.             sqlQueryObject.setANDLogicOperator(true);
  112.             sqlQuery = sqlQueryObject.createSQLQuery();
  113.             stm = connection.prepareStatement(sqlQuery);
  114.             stm.setLong(1, idServ);
  115.             stm.setLong(2, idSogg);
  116.             rs = stm.executeQuery();
  117.             if (rs.next())
  118.                 idFru = rs.getLong("id");
  119.             rs.close();
  120.             stm.close();
  121.         } catch (Exception e) {
  122.             throw new DriverRegistroServiziException(e.getMessage(),e);
  123.         } finally {

  124.             JDBCUtilities.closeResources(rs, stm);

  125.             this.driver.closeConnection(connection);
  126.         }

  127.         return idFru;
  128.     }

  129.     protected long getServizioFruitoreSoggettoFruitoreID(long idServizioFruitore) throws DriverRegistroServiziException {

  130.         long idSoggFru = 0;
  131.         Connection connection;
  132.         PreparedStatement stm = null;
  133.         ResultSet rs = null;
  134.         if (this.driver.atomica) {
  135.             try {
  136.                 connection = this.driver.getConnectionFromDatasource("getServizioFruitoreSoggettoFruitoreID");
  137.             } catch (Exception e) {
  138.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::getServizioFruitoreSoggettoFruitoreID] Exception accedendo al datasource :" + e.getMessage(),e);

  139.             }

  140.         } else
  141.             connection = this.driver.globalConnection;

  142.         this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  143.         try {
  144.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  145.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  146.             sqlQueryObject.addSelectField("id_soggetto");
  147.             sqlQueryObject.addWhereCondition("id = ?");
  148.             String sqlQuery = sqlQueryObject.createSQLQuery();
  149.             stm = connection.prepareStatement(sqlQuery);
  150.             stm.setLong(1, idServizioFruitore);
  151.             rs = stm.executeQuery();
  152.             if (rs.next())
  153.                 idSoggFru = rs.getLong("id_soggetto");
  154.             rs.close();
  155.             stm.close();
  156.         } catch (Exception e) {
  157.             throw new DriverRegistroServiziException(e.getMessage(),e);
  158.         } finally {

  159.             JDBCUtilities.closeResources(rs, stm);

  160.             this.driver.closeConnection(connection);
  161.         }

  162.         return idSoggFru;
  163.     }

  164.     protected long getServizioFruitoreServizioID(long idServizioFruitore) throws DriverRegistroServiziException {

  165.         long idServ = 0;
  166.         Connection connection;
  167.         PreparedStatement stm = null;
  168.         ResultSet rs = null;
  169.         if (this.driver.atomica) {
  170.             try {
  171.                 connection = this.driver.getConnectionFromDatasource("getServizioFruitoreServizioID");
  172.             } catch (Exception e) {
  173.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::getServizioFruitoreServizioID] Exception accedendo al datasource :" + e.getMessage(),e);

  174.             }

  175.         } else
  176.             connection = this.driver.globalConnection;

  177.         this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  178.         try {
  179.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  180.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  181.             sqlQueryObject.addSelectField("id_servizio");
  182.             sqlQueryObject.addWhereCondition("id = ?");
  183.             String sqlQuery = sqlQueryObject.createSQLQuery();
  184.             stm = connection.prepareStatement(sqlQuery);
  185.             stm.setLong(1, idServizioFruitore);
  186.             rs = stm.executeQuery();
  187.             if (rs.next())
  188.                 idServ = rs.getLong("id_servizio");
  189.             rs.close();
  190.             stm.close();
  191.         } catch (Exception e) {
  192.             throw new DriverRegistroServiziException(e.getMessage(),e);
  193.         } finally {

  194.             JDBCUtilities.closeResources(rs, stm);

  195.             this.driver.closeConnection(connection);
  196.         }

  197.         return idServ;
  198.     }

  199.    
  200.     protected boolean existFruizioniServiziSoggettoWithoutConnettore(long idSoggetto, boolean escludiSoggettiEsterni) throws DriverRegistroServiziException {
  201.         if (idSoggetto <= 0)
  202.             throw new DriverRegistroServiziException("idSoggetto non valido.");

  203.         Connection con = null;
  204.         PreparedStatement stm = null;
  205.         ResultSet rs = null;
  206.         boolean trovatoServ = false;
  207.        
  208.         try {
  209.             if (this.driver.atomica) {
  210.                 try {
  211.                     con = this.driver.getConnectionFromDatasource("existFruizioniWithoutConnettore");
  212.                 } catch (Exception e) {
  213.                     throw new DriverRegistroServiziException("Exception accedendo al datasource :" + e.getMessage(), e);

  214.                 }

  215.             } else
  216.                 con = this.driver.globalConnection;

  217.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  218.            
  219.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  220.             if(escludiSoggettiEsterni){
  221.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  222.                 sqlQueryObject.addFromTable(CostantiDB.PDD);
  223.             }
  224.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  225.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  226.             sqlQueryObject.addFromTable(CostantiDB.CONNETTORI, "cservizio");
  227.             sqlQueryObject.addFromTable(CostantiDB.CONNETTORI, "cfruizione");
  228.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".id");
  229.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id_soggetto = ?");
  230.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id_connettore = cservizio.id");
  231.             sqlQueryObject.addWhereCondition("cservizio.endpointtype = ?");
  232.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = "+CostantiDB.SERVIZI+".id");
  233.             if(escludiSoggettiEsterni){
  234.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  235.                 sqlQueryObject.addWhereIsNotNullCondition(CostantiDB.SOGGETTI + ".server");
  236.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".server = "+CostantiDB.PDD+".nome");
  237.                 sqlQueryObject.addWhereCondition(false,CostantiDB.PDD + ".tipo = ?",CostantiDB.PDD + ".tipo = ?");
  238.             }
  239.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_connettore = cfruizione.id");
  240.             sqlQueryObject.addWhereCondition("cfruizione.endpointtype = ?");
  241.             sqlQueryObject.setANDLogicOperator(true);
  242.             String sqlQuery = sqlQueryObject.createSQLQuery();
  243.             stm = con.prepareStatement(sqlQuery);
  244.             int index = 1;
  245.             stm.setLong(index++, idSoggetto);
  246.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(CostantiRegistroServizi.DISABILITATO));
  247.             if(escludiSoggettiEsterni){
  248.                 stm.setString(index++, PddTipologia.OPERATIVO.toString());
  249.                 stm.setString(index++, PddTipologia.NONOPERATIVO.toString());
  250.             }
  251.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(CostantiRegistroServizi.DISABILITATO));
  252.             rs = stm.executeQuery();
  253.             if (rs.next())
  254.                 trovatoServ = true;

  255.             return trovatoServ;
  256.         } catch (Exception qe) {
  257.             throw new DriverRegistroServiziException("Errore durante existFruizioniWithoutConnettore: " + qe.getMessage(), qe);
  258.         } finally {
  259.             JDBCUtilities.closeResources(rs, stm);

  260.             this.driver.closeConnection(con);
  261.         }
  262.     }

  263.     protected boolean existFruizioniServizioWithoutConnettore(long idServizio, boolean escludiSoggettiEsterni) throws DriverRegistroServiziException {
  264.         if (idServizio <= 0)
  265.             throw new DriverRegistroServiziException("idServizio non valido.");

  266.         Connection con = null;
  267.         PreparedStatement stm = null;
  268.         ResultSet rs = null;
  269.         boolean trovatoServ = false;

  270.         if (this.driver.atomica) {
  271.             try {
  272.                 con = this.driver.getConnectionFromDatasource("existFruizioniServizioWithoutConnettore");
  273.             } catch (Exception e) {
  274.                 throw new DriverRegistroServiziException("Exception accedendo al datasource :" + e.getMessage(), e);

  275.             }

  276.         } else
  277.             con = this.driver.globalConnection;

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

  279.         try {
  280.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  281.             if(escludiSoggettiEsterni){
  282.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  283.                 sqlQueryObject.addFromTable(CostantiDB.PDD);
  284.             }
  285.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  286.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  287.             sqlQueryObject.addFromTable(CostantiDB.CONNETTORI, "cfruizione");
  288.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".id");
  289.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI + ".id = ?");
  290.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = "+CostantiDB.SERVIZI+".id");
  291.             if(escludiSoggettiEsterni){
  292.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  293.                 sqlQueryObject.addWhereIsNotNullCondition(CostantiDB.SOGGETTI + ".server");
  294.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".server = "+CostantiDB.PDD+".nome");
  295.                 sqlQueryObject.addWhereCondition(false,CostantiDB.PDD + ".tipo = ?",CostantiDB.PDD + ".tipo = ?");
  296.             }
  297.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_connettore = cfruizione.id");
  298.             sqlQueryObject.addWhereCondition("cfruizione.endpointtype = ?");
  299.             sqlQueryObject.setANDLogicOperator(true);
  300.             String sqlQuery = sqlQueryObject.createSQLQuery();
  301.             stm = con.prepareStatement(sqlQuery);
  302.             int index = 1;
  303.             stm.setLong(index++, idServizio);
  304.             if(escludiSoggettiEsterni){
  305.                 stm.setString(index++, PddTipologia.OPERATIVO.toString());
  306.                 stm.setString(index++, PddTipologia.NONOPERATIVO.toString());
  307.             }
  308.             stm.setString(index++, DriverRegistroServiziDB_LIB.getValue(CostantiRegistroServizi.DISABILITATO));
  309.             rs = stm.executeQuery();
  310.             if (rs.next())
  311.                 trovatoServ = true;

  312.             return trovatoServ;
  313.         } catch (Exception qe) {
  314.             throw new DriverRegistroServiziException("Errore durante existFruizioniServizioWithoutConnettore: " + qe.getMessage(), qe);
  315.         } finally {
  316.             JDBCUtilities.closeResources(rs, stm);
  317.            
  318.             this.driver.closeConnection(con);
  319.         }
  320.     }
  321.    
  322.    
  323.     protected List<AccordoServizioParteSpecifica> servizioWithSoggettoFruitore(IDSoggetto idSoggetto) throws DriverRegistroServiziException {
  324.         String nomeMetodo = "servizioWithSoggettoFruitore";

  325.         String queryString;

  326.         Connection con = null;
  327.         PreparedStatement stmt = null;
  328.         ResultSet risultato = null;

  329.         ArrayList<AccordoServizioParteSpecifica> idServizi = new ArrayList<AccordoServizioParteSpecifica>();

  330.         if (this.driver.atomica) {
  331.             try {
  332.                 con = this.driver.getConnectionFromDatasource("servizioWithSoggettoFruitore");

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

  335.             }

  336.         } else
  337.             con = this.driver.globalConnection;

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

  339.         try {
  340.             ISQLQueryObject sqlQueryObjectSoggetti = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  341.             sqlQueryObjectSoggetti.addFromTable(CostantiDB.SOGGETTI);
  342.             sqlQueryObjectSoggetti.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  343.             sqlQueryObjectSoggetti.addFromTable(CostantiDB.SERVIZI);
  344.             sqlQueryObjectSoggetti.setSelectDistinct(true);
  345.             sqlQueryObjectSoggetti.addSelectAliasField(CostantiDB.SERVIZI, "id","idServizio");
  346.             sqlQueryObjectSoggetti.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id_servizio="+CostantiDB.SERVIZI+".id");
  347.             sqlQueryObjectSoggetti.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
  348.             sqlQueryObjectSoggetti.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto=?");
  349.             sqlQueryObjectSoggetti.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto=?");
  350.             sqlQueryObjectSoggetti.setANDLogicOperator(true);
  351.             queryString = sqlQueryObjectSoggetti.createSQLQuery();

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

  353.             stmt = con.prepareStatement(queryString);
  354.             stmt.setString(1,idSoggetto.getTipo());
  355.             stmt.setString(2,idSoggetto.getNome());
  356.             risultato = stmt.executeQuery();

  357.             while (risultato.next()) {

  358.                 long idServizioLong = risultato.getLong("idServizio");
  359.                 AccordoServizioParteSpecifica serv = this.driver.getAccordoServizioParteSpecifica(idServizioLong);
  360.                 Soggetto s = this.driver.getSoggetto(serv.getIdSoggetto());
  361.                 serv.setTipoSoggettoErogatore(s.getTipo());
  362.                 serv.setNomeSoggettoErogatore(s.getNome());

  363.                 idServizi.add(serv);

  364.             }

  365.         } catch (Exception se) {

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

  368.             //Chiudo statement and resultset
  369.             JDBCUtilities.closeResources(risultato, stmt);

  370.             this.driver.closeConnection(con);
  371.         }


  372.         return idServizi;
  373.     }
  374.    
  375.    

  376.     protected Fruitore getAccordoErogatoreFruitore(long id) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  377.         this.driver.logDebug("richiesto getAccordoErogatoreFruitore: " + id);
  378.         // conrollo consistenza
  379.         if (id <= 0)
  380.             return null;

  381.         org.openspcoop2.core.registry.Fruitore fruitore = null;
  382.         Connection con = null;
  383.         PreparedStatement stm = null;
  384.         ResultSet rs = null;

  385.         try {
  386.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  387.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  388.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  389.             sqlQueryObject.addSelectField("*");
  390.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id = ?");
  391.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  392.             sqlQueryObject.setANDLogicOperator(true);
  393.             String sqlQuery = sqlQueryObject.createSQLQuery();

  394.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  395.             // prendo la connessione dal pool
  396.             if (this.driver.atomica)
  397.                 con = this.driver.getConnectionFromDatasource("getAccordoErogatoreFruitore");
  398.             else
  399.                 con = this.driver.globalConnection;

  400.             stm = con.prepareStatement(sqlQuery);

  401.             stm.setLong(1, id);

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

  404.             if (rs.next()) {
  405.                 fruitore = new org.openspcoop2.core.registry.Fruitore();

  406.                 fruitore.setId(id);
  407.                 fruitore.setTipo(rs.getString(CostantiDB.SOGGETTI + ".tipo_soggetto"));
  408.                 fruitore.setNome(rs.getString(CostantiDB.SOGGETTI + ".nome_soggetto"));
  409.                 long idConnettore = rs.getLong(CostantiDB.SOGGETTI + "id_connettore");
  410.                 fruitore.setConnettore(this.driver.getConnettore(idConnettore, con));
  411.             } else {
  412.                 throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getAccordoErogatoreFruitore] rs.next non ha restituito valori con la seguente interrogazione :\n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
  413.             }

  414.             return fruitore;

  415.         } catch (SQLException se) {
  416.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoErogatoreFruitore] SQLException :" + se.getMessage(),se);
  417.         }catch (DriverRegistroServiziNotFound e) {
  418.             throw e;
  419.         }catch (Exception se) {
  420.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoErogatoreFruitore] Exception :" + se.getMessage(),se);
  421.         } finally {

  422.             JDBCUtilities.closeResources(rs, stm);

  423.             this.driver.closeConnection(con);

  424.         }
  425.     }

  426.     protected Fruitore getErogatoreFruitore(long id) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
  427.         this.driver.logDebug("richiesto getErogatoreFruitore: " + id);
  428.         // conrollo consistenza
  429.         if (id <= 0)
  430.             return null;

  431.         org.openspcoop2.core.registry.Fruitore fruitore = null;
  432.         Connection con = null;
  433.         PreparedStatement stm = null;
  434.         ResultSet rs = null;

  435.         try {
  436.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  437.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  438.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  439.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  440.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  441.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".id_connettore");
  442.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".stato");
  443.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id = ?");
  444.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
  445.             sqlQueryObject.setANDLogicOperator(true);
  446.             String sqlQuery = sqlQueryObject.createSQLQuery();

  447.             this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  448.             // prendo la connessione dal pool
  449.             if (this.driver.atomica)
  450.                 con = this.driver.getConnectionFromDatasource("getErogatoreFruitore");
  451.             else
  452.                 con = this.driver.globalConnection;

  453.             stm = con.prepareStatement(sqlQuery);

  454.             stm.setLong(1, id);

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

  457.             if (rs.next()) {
  458.                 fruitore = new org.openspcoop2.core.registry.Fruitore();

  459.                 fruitore.setId(id);
  460.                 fruitore.setTipo(rs.getString("tipo_soggetto"));
  461.                 fruitore.setNome(rs.getString("nome_soggetto"));
  462.                 fruitore.setStatoPackage(rs.getString("stato"));
  463.                 long idConnettore = rs.getLong("id_connettore");
  464.                 fruitore.setConnettore(this.driver.getConnettore(idConnettore, con));
  465.             } else {
  466.                 throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getErogatoreFruitore] rs.next non ha restituito valori con la seguente interrogazione :\n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
  467.             }

  468.             return fruitore;

  469.         } catch (SQLException se) {
  470.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getErogatoreFruitore] SQLException :" + se.getMessage(),se);
  471.         }catch (DriverRegistroServiziNotFound e) {
  472.             throw e;
  473.         }catch (Exception se) {
  474.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getErogatoreFruitore] Exception :" + se.getMessage(),se);
  475.         } finally {

  476.             JDBCUtilities.closeResources(rs, stm);

  477.             this.driver.closeConnection(con);

  478.         }
  479.     }
  480.    
  481.     protected Fruitore getServizioFruitore(long idServFru) throws DriverRegistroServiziException {
  482.         String nomeMetodo = "getServizioFruitore";
  483.         String queryString;

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

  487.         //ArrayList<Fruitore> lista = new ArrayList<Fruitore>();

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

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

  493.             }

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

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

  497.         try {
  498.             // ricavo le entries
  499.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  500.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  501.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  502.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".id");
  503.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".id_soggetto");
  504.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".id_servizio");
  505.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".id_connettore");
  506.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".wsdl_implementativo_erogatore");
  507.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".wsdl_implementativo_fruitore");
  508.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI+".stato");
  509.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI+".nome_soggetto");
  510.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI+".tipo_soggetto");
  511.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI+".id = ?");
  512.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id = "+CostantiDB.SERVIZI_FRUITORI+".id_soggetto");
  513.             sqlQueryObject.setANDLogicOperator(true);
  514.             queryString = sqlQueryObject.createSQLQuery();
  515.             stmt = con.prepareStatement(queryString);
  516.             stmt.setLong(1, idServFru);
  517.             risultato = stmt.executeQuery();

  518.             Fruitore f = null;
  519.             if (risultato.next()) {

  520.                 f = new Fruitore();

  521.                 f.setId(risultato.getLong("id"));
  522.                 f.setIdSoggetto(risultato.getLong("id_soggetto"));
  523.                 f.setIdServizio(risultato.getLong("id_servizio"));
  524.                 f.setNome(risultato.getString("nome_soggetto"));
  525.                 f.setTipo(risultato.getString("tipo_soggetto"));
  526.                 long idConnettore = risultato.getLong("id_connettore");
  527.                 f.setConnettore(this.driver.getConnettore(idConnettore, con));
  528.                 f.setByteWsdlImplementativoErogatore(risultato.getString("wsdl_implementativo_erogatore")!=null && !risultato.getString("wsdl_implementativo_erogatore").trim().equals("") ? risultato.getString("wsdl_implementativo_erogatore").trim().getBytes() : null);
  529.                 f.setByteWsdlImplementativoFruitore(risultato.getString("wsdl_implementativo_fruitore")!=null && !risultato.getString("wsdl_implementativo_fruitore").trim().equals("") ? risultato.getString("wsdl_implementativo_fruitore").trim().getBytes() : null);
  530.                 f.setStatoPackage(risultato.getString("stato"));
  531.                
  532.                 // Protocol Properties
  533.                 try{
  534.                     List<ProtocolProperty> listPP = DriverRegistroServiziDB_LIB.getListaProtocolProperty(f.getId(), ProprietariProtocolProperty.FRUITORE, con,
  535.                             this.driver.tipoDB, this.driver.getDriverUnwrapBYOK());
  536.                     if(listPP!=null && !listPP.isEmpty()){
  537.                         for (ProtocolProperty protocolProperty : listPP) {
  538.                             f.addProtocolProperty(protocolProperty);
  539.                         }
  540.                     }
  541.                 }catch(DriverRegistroServiziNotFound dNotFound){
  542.                     // ignore
  543.                 }
  544.             }

  545.             return f;

  546.         } catch (Exception se) {

  547.             throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  548.         } finally {
  549.             //Chiudo statement and resultset
  550.             JDBCUtilities.closeResources(risultato, stmt);
  551.             this.driver.closeConnection(con);
  552.         }
  553.     }

  554.    
  555.     protected List<Fruitore> serviziFruitoriList(long idServizi, ISearch ricerca) throws DriverRegistroServiziException {
  556.         String nomeMetodo = "serviziFruitoriList";
  557.         int idLista = Liste.SERVIZI_FRUITORI;
  558.         int offset;
  559.         int limit;
  560.         String search;
  561.         String queryString;

  562.         limit = ricerca.getPageSize(idLista);
  563.         offset = ricerca.getIndexIniziale(idLista);
  564.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));

  565.         String filterStatoAccordo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_STATO_ACCORDO);

  566.         this.driver.logDebug("search : " + search);
  567.         this.driver.logDebug("filterStatoAccordo : " + filterStatoAccordo);
  568.        

  569.         Connection con = null;
  570.         PreparedStatement stmt = null;
  571.         ResultSet risultato = null;

  572.         ArrayList<Fruitore> lista = null;

  573.         if (this.driver.atomica) {
  574.             try {
  575.                 con = this.driver.getConnectionFromDatasource("serviziFruitoriList");

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

  578.             }

  579.         } else {
  580.             con = this.driver.globalConnection;
  581.         }

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

  583.         try {

  584.             if (!search.equals("")) {
  585.                 //query con search
  586.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  587.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  588.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  589.                 sqlQueryObject.addSelectCountField("*", "cont");
  590.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  591.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  592.                 sqlQueryObject.addWhereCondition(false,
  593.                         sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI + ".nome_soggetto",search,true,true));
  594.                         //sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI + ".tipo_soggetto",search,true,true));
  595.                 if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  596.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".stato = ?");
  597.                 }
  598.                 sqlQueryObject.setANDLogicOperator(true);
  599.                 queryString = sqlQueryObject.createSQLQuery();
  600.             } else {
  601.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  602.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  603.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  604.                 sqlQueryObject.addSelectCountField("*", "cont");
  605.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  606.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  607.                 if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  608.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".stato = ?");
  609.                 }
  610.                 sqlQueryObject.setANDLogicOperator(true);
  611.                 queryString = sqlQueryObject.createSQLQuery();
  612.             }
  613.             stmt = con.prepareStatement(queryString);
  614.             int index = 1;
  615.             stmt.setLong(index++, idServizi);
  616.             if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  617.                 stmt.setString(index++, filterStatoAccordo);
  618.             }
  619.             risultato = stmt.executeQuery();
  620.             if (risultato.next()) {
  621.                 ricerca.setNumEntries(idLista,risultato.getInt(1));
  622.             }
  623.             risultato.close();
  624.             stmt.close();

  625.             // ricavo le entries
  626.             if (limit == 0) {
  627.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
  628.             }
  629.             if (!search.equals("")) {
  630.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  631.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  632.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  633.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_FRUITORI,"id","idFruitore");
  634.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_FRUITORI,"stato","statoFruitore");
  635.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  636.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  637.                 sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_servizio");
  638.                 sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto");
  639.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".id");
  640.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  641.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  642.                 sqlQueryObject.addWhereCondition(false,
  643.                         sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI + ".nome_soggetto",search,true,true));
  644.                         //sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI + ".tipo_soggetto",search,true,true));
  645.                 if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  646.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".stato = ?");
  647.                 }
  648.                 sqlQueryObject.setANDLogicOperator(true);
  649.                 sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".tipo_soggetto");
  650.                 sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".nome_soggetto");
  651.                 sqlQueryObject.setSortType(true);
  652.                 sqlQueryObject.setLimit(limit);
  653.                 sqlQueryObject.setOffset(offset);
  654.                 queryString = sqlQueryObject.createSQLQuery();
  655.             } else {
  656.                 // senza search
  657.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  658.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  659.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  660.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_FRUITORI,"id","idFruitore");
  661.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_FRUITORI,"stato","statoFruitore");
  662.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  663.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  664.                 sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_servizio");
  665.                 sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto");
  666.                 sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".id");
  667.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  668.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  669.                 if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  670.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".stato = ?");
  671.                 }
  672.                 sqlQueryObject.setANDLogicOperator(true);
  673.                 sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".tipo_soggetto");
  674.                 sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".nome_soggetto");
  675.                 sqlQueryObject.setSortType(true);
  676.                 sqlQueryObject.setLimit(limit);
  677.                 sqlQueryObject.setOffset(offset);
  678.                 queryString = sqlQueryObject.createSQLQuery();
  679.             }
  680.             stmt = con.prepareStatement(queryString);
  681.             index = 1;
  682.             stmt.setLong(index++, idServizi);
  683.             if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
  684.                 stmt.setString(index++, filterStatoAccordo);
  685.             }
  686.             risultato = stmt.executeQuery();

  687.             Fruitore f;
  688.             lista = new ArrayList<Fruitore>();
  689.             while (risultato.next()) {
  690.                 f = new Fruitore();

  691.                 f.setId(risultato.getLong("idFruitore"));
  692.                 f.setNome(risultato.getString("nome_soggetto"));
  693.                 f.setTipo(risultato.getString("tipo_soggetto"));
  694.                 f.setIdSoggetto(risultato.getLong("id_soggetto"));
  695.                 f.setIdServizio(risultato.getLong("id_servizio"));
  696.                 f.setStatoPackage(risultato.getString("statoFruitore"));

  697.                 lista.add(f);
  698.             }

  699.             return lista;

  700.         } catch (Exception se) {

  701.             throw new DriverRegistroServiziException("[DriverControlStationDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  702.         } finally {
  703.             //Chiudo statement and resultset
  704.             JDBCUtilities.closeResources(risultato, stmt);
  705.             this.driver.closeConnection(con);
  706.         }

  707.     }
  708.    
  709.     protected long getIdServizioFruitore(long idServizio, long idSoggetto) throws DriverRegistroServiziException {
  710.         long idFru = 0;
  711.         Connection connection;
  712.         PreparedStatement stm = null;
  713.         ResultSet rs = null;
  714.         if (this.driver.atomica) {
  715.             try {
  716.                 connection = this.driver.getConnectionFromDatasource("getIdServizioFruitore");
  717.             } catch (Exception e) {
  718.                 throw new DriverRegistroServiziException("DriverRegistroServiziDB::getIdServizioFruitore] Exception accedendo al datasource :" + e.getMessage(),e);

  719.             }

  720.         } else
  721.             connection = this.driver.globalConnection;

  722.         this.driver.logDebug("operazione atomica = " + this.driver.atomica);
  723.         try {
  724.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  725.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  726.             sqlQueryObject.addSelectField(CostantiDB.SERVIZI_FRUITORI + ".id");
  727.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  728.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = ?");
  729.             sqlQueryObject.setANDLogicOperator(true);
  730.             String sqlQuery = sqlQueryObject.createSQLQuery();
  731.             stm = connection.prepareStatement(sqlQuery);
  732.             stm.setLong(1, idServizio);
  733.             stm.setLong(2, idSoggetto);
  734.             rs = stm.executeQuery();
  735.             if (rs.next())
  736.                 idFru = rs.getLong("id");
  737.             rs.close();
  738.             stm.close();
  739.         } catch (Exception e) {
  740.             throw new DriverRegistroServiziException(e.getMessage(),e);
  741.         } finally {

  742.             JDBCUtilities.closeResources(rs, stm);

  743.             this.driver.closeConnection(connection);
  744.         }

  745.         return idFru;
  746.     }

  747.     protected List<Fruitore> getServiziFruitoriWithServizio(long idServizio) throws DriverRegistroServiziException {
  748.         String nomeMetodo = "getServiziFruitoriWithServizio";
  749.         String queryString;

  750.         Connection con = null;
  751.         PreparedStatement stmt = null;
  752.         ResultSet risultato = null;

  753.         ArrayList<Fruitore> lista = null;

  754.         if (this.driver.atomica) {
  755.             try {
  756.                 con = this.driver.getConnectionFromDatasource("getServiziFruitoriWithServizio");

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

  759.             }

  760.         } else {
  761.             con = this.driver.globalConnection;
  762.         }

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

  764.         try {

  765.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  766.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  767.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  768.             sqlQueryObject.setSelectDistinct(true);
  769.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  770.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  771.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".id = " + CostantiDB.SERVIZI_FRUITORI + ".id_soggetto");
  772.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  773.             sqlQueryObject.setANDLogicOperator(true);
  774.             queryString = sqlQueryObject.createSQLQuery();
  775.             stmt = con.prepareStatement(queryString);
  776.             stmt.setLong(1, idServizio);
  777.             risultato = stmt.executeQuery();

  778.             Fruitore f;
  779.             lista = new ArrayList<Fruitore>();
  780.             while (risultato.next()) {

  781.                 f = new Fruitore();

  782.                 f.setNome(risultato.getString("nome_soggetto"));
  783.                 f.setTipo(risultato.getString("tipo_soggetto"));

  784.                 lista.add(f);
  785.             }

  786.             return lista;

  787.         } catch (Exception se) {

  788.             throw new DriverRegistroServiziException("[DriverControlStationDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  789.         } finally {
  790.             //Chiudo statement and resultset
  791.             JDBCUtilities.closeResources(risultato, stmt);
  792.             this.driver.closeConnection(con);
  793.         }

  794.     }
  795.    
  796.     protected List<AccordoServizioParteSpecifica> getServiziByFruitore(Fruitore fruitore) throws DriverRegistroServiziException {
  797.         String nomeMetodo = "getServiziByFruitore";
  798.         String queryString;

  799.         Connection con = null;
  800.         PreparedStatement stmt = null;
  801.         ResultSet risultato = null;

  802.         ArrayList<AccordoServizioParteSpecifica> lista = null;

  803.         if (this.driver.atomica) {
  804.             try {
  805.                 con = this.driver.getConnectionFromDatasource("getServiziByFruitore");

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

  808.             }

  809.         } else {
  810.             con = this.driver.globalConnection;
  811.         }

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

  813.         try {

  814.             long idFruitore = DBUtils.getIdSoggetto(fruitore.getNome(), fruitore.getTipo(), con, this.driver.tipoDB);

  815.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  816.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  817.             sqlQueryObject.addWhereCondition("id_soggetto = ?");
  818.             sqlQueryObject.setANDLogicOperator(true);
  819.             queryString = sqlQueryObject.createSQLQuery();
  820.             stmt = con.prepareStatement(queryString);
  821.             stmt.setLong(1, idFruitore);
  822.             risultato = stmt.executeQuery();

  823.             lista = new ArrayList<AccordoServizioParteSpecifica>();
  824.             while (risultato.next()) {
  825.                 long id=risultato.getLong("id");
  826.                 AccordoServizioParteSpecifica se=this.driver.getAccordoServizioParteSpecifica(id, con);
  827.                 lista.add(se);
  828.             }

  829.             return lista;

  830.         } catch (Exception se) {

  831.             throw new DriverRegistroServiziException("[DriverControlStationDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  832.         } finally {
  833.             //Chiudo statement and resultset
  834.             JDBCUtilities.closeResources(risultato, stmt);
  835.             this.driver.closeConnection(con);
  836.         }

  837.     }

  838.     protected List<Fruitore> getSoggettiWithServizioNotFruitori(long idServizio, boolean escludiSoggettiEsterni, CredenzialeTipo credenzialeTipo) throws DriverRegistroServiziException {
  839.         String nomeMetodo = "getSoggettiWithServizioNotFruitori";
  840.         String queryString;

  841.         Connection con = null;
  842.         PreparedStatement stmt = null;
  843.         ResultSet risultato = null;

  844.         ArrayList<Fruitore> lista = new ArrayList<Fruitore>();

  845.         if (this.driver.atomica) {
  846.             try {
  847.                 con = this.driver.getConnectionFromDatasource("getSoggettiWithServizioNotFruitori");

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

  850.             }

  851.         } else {
  852.             con = this.driver.globalConnection;
  853.         }

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

  855.         try {

  856.             // Condizione where not
  857.             ISQLQueryObject sqlQueryObjectWhere = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  858.             sqlQueryObjectWhere.addFromTable(CostantiDB.SERVIZI_FRUITORI);
  859.             sqlQueryObjectWhere.addSelectField("*");
  860.             sqlQueryObjectWhere.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_soggetto = " + CostantiDB.SOGGETTI + ".id");
  861.             sqlQueryObjectWhere.addWhereCondition(CostantiDB.SERVIZI_FRUITORI + ".id_servizio = ?");
  862.             sqlQueryObjectWhere.setANDLogicOperator(true);

  863.             // Query
  864.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
  865.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  866.             if(escludiSoggettiEsterni){
  867.                 sqlQueryObject.addFromTable(CostantiDB.PDD);
  868.             }
  869.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".id");
  870.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".tipo_soggetto");
  871.             sqlQueryObject.addSelectField(CostantiDB.SOGGETTI + ".nome_soggetto");
  872.             if(escludiSoggettiEsterni){
  873.                 sqlQueryObject.addWhereIsNotNullCondition(CostantiDB.SOGGETTI + ".server");
  874.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".server = "+CostantiDB.PDD+".nome");
  875.                 sqlQueryObject.addWhereCondition(false,CostantiDB.PDD + ".tipo = ?",CostantiDB.PDD + ".tipo = ?");
  876.             }
  877.             if(credenzialeTipo!=null){
  878.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI + ".tipoauth = ?");
  879.             }
  880.             sqlQueryObject.addWhereExistsCondition(true, sqlQueryObjectWhere);
  881.             sqlQueryObject.setSelectDistinct(true);
  882.             sqlQueryObject.setANDLogicOperator(true);
  883.             sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".tipo_soggetto");
  884.             sqlQueryObject.addOrderBy(CostantiDB.SOGGETTI + ".nome_soggetto");
  885.             queryString = sqlQueryObject.createSQLQuery();
  886.             stmt = con.prepareStatement(queryString);
  887.             int index = 1;
  888.             if(escludiSoggettiEsterni){
  889.                 stmt.setString(index++, PddTipologia.OPERATIVO.toString());
  890.                 stmt.setString(index++, PddTipologia.NONOPERATIVO.toString());
  891.             }
  892.             if(credenzialeTipo!=null){
  893.                 stmt.setString(index++, credenzialeTipo.getValue());
  894.             }
  895.             stmt.setLong(index++, idServizio);
  896.             risultato = stmt.executeQuery();

  897.             Fruitore f;
  898.             while (risultato.next()) {
  899.                 f = new Fruitore();

  900.                 f.setId(risultato.getLong("id"));
  901.                 f.setNome(risultato.getString("nome_soggetto"));
  902.                 f.setTipo(risultato.getString("tipo_soggetto"));

  903.                 lista.add(f);
  904.             }

  905.             return lista;

  906.         } catch (Exception se) {

  907.             throw new DriverRegistroServiziException("[DriverControlStationDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
  908.         } finally {
  909.             //Chiudo statement and resultset
  910.             JDBCUtilities.closeResources(risultato, stmt);
  911.             this.driver.closeConnection(con);
  912.         }

  913.     }
  914.    
  915.     protected void validaStatoFruitoreServizio(Fruitore fruitore,AccordoServizioParteSpecifica serv) throws ValidazioneStatoPackageException{

  916.         ValidazioneStatoPackageException erroreValidazione =
  917.                 new ValidazioneStatoPackageException("FruitoreServizio",fruitore.getStatoPackage(),null);

  918.         try{

  919.             // Controlli di stato
  920.             if(StatiAccordo.bozza.toString().equals(fruitore.getStatoPackage()) == false){

  921.                 String uriAPS = this.driver.idServizioFactory.getUriFromAccordo(serv);
  922.                
  923.                 if(StatiAccordo.operativo.toString().equals(fruitore.getStatoPackage())){
  924.                     if(StatiAccordo.finale.toString().equals(serv.getStatoPackage())==false && StatiAccordo.operativo.toString().equals(serv.getStatoPackage())==false){
  925.                         erroreValidazione.addErroreValidazione("servizio riferito ["+uriAPS+"] possiede lo stato ["+serv.getStatoPackage()+"]");
  926.                     }
  927.                 }
  928.                
  929.                 else if(StatiAccordo.finale.toString().equals(fruitore.getStatoPackage())){

  930.                     if(StatiAccordo.finale.toString().equals(serv.getStatoPackage())==false){
  931.                         erroreValidazione.addErroreValidazione("servizio ["+uriAPS+"] in uno stato non finale ["+serv.getStatoPackage()+"]");
  932.                     }
  933.                 }

  934.             }

  935.         }catch(Exception e){
  936.             throw new ValidazioneStatoPackageException(e);
  937.         }

  938.         if(erroreValidazione.sizeErroriValidazione()>0){
  939.             throw erroreValidazione;
  940.         }
  941.     }
  942. }