AccordoServizioParteComuneServiziCompostiCore.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.web.ctrlstat.servlet.apc;

  21. import java.sql.Connection;
  22. import java.sql.PreparedStatement;
  23. import java.sql.ResultSet;
  24. import java.util.ArrayList;
  25. import java.util.List;

  26. import org.openspcoop2.core.commons.ISearch;
  27. import org.openspcoop2.core.constants.CostantiDB;
  28. import org.openspcoop2.core.id.IDAccordoCooperazione;
  29. import org.openspcoop2.core.id.IDServizio;
  30. import org.openspcoop2.core.id.IDSoggetto;
  31. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  32. import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
  33. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  34. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  35. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  36. import org.openspcoop2.core.registry.driver.db.IDAccordoDB;
  37. import org.openspcoop2.utils.sql.ISQLQueryObject;
  38. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  39. import org.openspcoop2.web.ctrlstat.core.UtilitiesSQLQuery;
  40. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationDB;
  41. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
  42. import org.openspcoop2.web.ctrlstat.servlet.ConsoleHelper;
  43. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;

  44. /**
  45.  * AccordoServizioParteComuneServiziCompostiCore
  46.  *
  47.  * @author Poli Andrea (apoli@link.it)
  48.  * @author $Author$
  49.  * @version $Rev$, $Date$
  50.  */
  51. public class AccordoServizioParteComuneServiziCompostiCore extends ControlStationCore {

  52.     protected AccordoServizioParteComuneServiziCompostiCore(ControlStationCore core) throws DriverControlStationException {
  53.         super(core);
  54.     }
  55.    
  56.     public List<IDAccordoDB> idAccordiServizioCompostiList(String superuser, ISearch ricerca,
  57.             boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
  58.         Connection con = null;
  59.         String nomeMetodo = "idAccordiServizioCompostiList";
  60.         DriverControlStationDB driver = null;

  61.         try {
  62.             // prendo una connessione
  63.             con = ControlStationCore.dbM.getConnection();
  64.             // istanzio il driver
  65.             driver = new DriverControlStationDB(con, null, this.tipoDB);

  66.             return driver.getDriverRegistroServiziDB().idAccordiServizioCompostiList(superuser, ricerca,
  67.                     soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  68.         } catch (DriverRegistroServiziException e) {
  69.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  70.             throw e;
  71.         } catch (Exception e) {
  72.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  73.             throw new DriverRegistroServiziException(getPrefixError(nomeMetodo,  e), e);
  74.         } finally {
  75.             ControlStationCore.dbM.releaseConnection(con);
  76.         }
  77.     }
  78.    
  79.     public List<AccordoServizioParteComune> accordiServizioServiziComponentiConSoggettoErogatore(IDSoggetto idSoggetto) throws DriverRegistroServiziException {
  80.         Connection con = null;
  81.         String nomeMetodo = "accordiServizio_serviziComponentiConSoggettoErogatore";
  82.         DriverRegistroServiziDB driver = null;

  83.         try {
  84.             // prendo una connessione
  85.             con = ControlStationCore.dbM.getConnection();
  86.             // istanzio il driver
  87.             driver = new DriverRegistroServiziDB(con, ControlStationCore.log, this.tipoDB);

  88.             return driver.accordiServizio_serviziComponentiConSoggettoErogatore(idSoggetto);
  89.         } catch (DriverRegistroServiziException e) {
  90.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  91.             throw e;
  92.         } catch (Exception e) {
  93.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  94.             throw new DriverRegistroServiziException(getPrefixError(nomeMetodo,  e), e);
  95.         } finally {
  96.             ControlStationCore.dbM.releaseConnection(con);
  97.         }
  98.     }

  99.     public List<AccordoServizioParteComune> accordiServizioServiziComponenti(IDServizio idServizio) throws DriverRegistroServiziException {
  100.         Connection con = null;
  101.         String nomeMetodo = "accordiServizio_serviziComponenti";
  102.         DriverRegistroServiziDB driver = null;

  103.         try {
  104.             // prendo una connessione
  105.             con = ControlStationCore.dbM.getConnection();
  106.             // istanzio il driver
  107.             driver = new DriverRegistroServiziDB(con, ControlStationCore.log, this.tipoDB);

  108.             return driver.accordiServizio_serviziComponenti(idServizio);
  109.         } catch (DriverRegistroServiziException e) {
  110.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  111.             throw e;
  112.         } catch (Exception e) {
  113.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  114.             throw new DriverRegistroServiziException(getPrefixError(nomeMetodo,  e), e);
  115.         } finally {
  116.             ControlStationCore.dbM.releaseConnection(con);
  117.         }
  118.     }

  119.     public List<AccordoServizioParteComune> accordiServizioWithAccordoCooperazione(IDAccordoCooperazione idAccordoCooperazione) throws DriverRegistroServiziException {
  120.         Connection con = null;
  121.         String nomeMetodo = "accordiServizioWithAccordoCooperazione";
  122.         DriverRegistroServiziDB driver = null;

  123.         try {
  124.             // prendo una connessione
  125.             con = ControlStationCore.dbM.getConnection();
  126.             // istanzio il driver
  127.             driver = new DriverRegistroServiziDB(con, ControlStationCore.log, this.tipoDB);

  128.             return driver.accordiServizioWithAccordoCooperazione(idAccordoCooperazione);
  129.         } catch (DriverRegistroServiziException e) {
  130.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  131.             throw e;
  132.         } catch (Exception e) {
  133.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  134.             throw new DriverRegistroServiziException(getPrefixError(nomeMetodo,  e), e);
  135.         } finally {
  136.             ControlStationCore.dbM.releaseConnection(con);
  137.         }
  138.     }


  139.     public List<AccordoServizioParteComuneServizioCompostoServizioComponente> accordiComponentiList(long idAccordo, ISearch ricerca) throws DriverRegistroServiziException {
  140.         Connection con = null;
  141.         String nomeMetodo = "accordiComponentiList";
  142.         DriverControlStationDB driver = null;

  143.         try {
  144.             // prendo una connessione
  145.             con = ControlStationCore.dbM.getConnection();
  146.             // istanzio il driver
  147.             driver = new DriverControlStationDB(con, null, this.tipoDB);

  148.             return driver.getDriverRegistroServiziDB().accordiComponentiList(idAccordo, ricerca);
  149.         } catch (Exception e) {
  150.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  151.             throw new DriverRegistroServiziException(getPrefixError(nomeMetodo,  e), e);
  152.         } finally {
  153.             ControlStationCore.dbM.releaseConnection(con);
  154.         }
  155.     }

  156.     public List<String[]> getAccordiServizioCompostoLabels(AccordoServizioParteComune as, long idAccordoLong, String userLogin,
  157.             List<String> tipiServiziCompatibili, List<String> tipiSoggettiCompatibili, ConsoleHelper helper){
  158.         String[] serviziList = null;
  159.         String[] serviziListLabel = null;
  160.         Connection con = null;
  161.         String nomeMetodo = "getAccordiServizioCompostoLabels";
  162.         PreparedStatement stmt = null;
  163.         ResultSet risultato = null;
  164.         try{

  165.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(this);

  166.             con = ControlStationCore.dbM.getConnection();

  167.             // Servizi
  168.             ISQLQueryObject sqlQueryObject = (new UtilitiesSQLQuery()).getSQLQueryObject();
  169.             sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  170.             sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  171.             sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  172.             sqlQueryObject.addSelectCountField(CostantiDB.SERVIZI + ".id", "tot", true);
  173.             sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPOSTO+".id_accordo=?");
  174.             sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo<>?");
  175.             if(as.getPrivato()==null || !as.getPrivato()){
  176.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".privato=?");
  177.             }
  178.             sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SERVIZI+".id_soggetto");
  179.             if( !isVisioneOggettiGlobale(userLogin)){
  180.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".superuser = ?");
  181.             }
  182.             sqlQueryObject.setANDLogicOperator(true);

  183.             //voglio i servizi che non sono gia' stati usati come componenti
  184.             ISQLQueryObject sqlQueryObjectNotExist = (new UtilitiesSQLQuery()).getSQLQueryObject();
  185.             sqlQueryObjectNotExist.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
  186.             sqlQueryObjectNotExist.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPONENTI+".id_servizio_composto="+CostantiDB.ACCORDI_SERVIZI_COMPOSTO+".id");
  187.             sqlQueryObjectNotExist.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPONENTI+".id_servizio_componente="+CostantiDB.SERVIZI+".id");
  188.             sqlQueryObjectNotExist.setANDLogicOperator(true);

  189.             sqlQueryObject.addWhereExistsCondition(true, sqlQueryObjectNotExist);

  190.             String queryString = sqlQueryObject.createSQLQuery();
  191.             stmt = con.prepareStatement(queryString);
  192.             stmt.setLong(1, idAccordoLong);
  193.             stmt.setLong(2, idAccordoLong);
  194.             int index = 3;
  195.             if(as.getPrivato()==null || !as.getPrivato()){
  196.                 stmt.setInt(index, 0);
  197.                 index++;
  198.             }
  199.             if( !isVisioneOggettiGlobale(userLogin)){
  200.                 stmt.setString(index, userLogin);
  201.                 index++;
  202.             }
  203.             risultato = stmt.executeQuery();
  204.             int totServ = 0;
  205.             if (risultato.next()) {
  206.                 totServ = risultato.getInt("tot");
  207.             }
  208.             risultato.close();
  209.             stmt.close();

  210.             List<String> serviziL = new ArrayList<>();
  211.             List<String> serviziLabelL = new ArrayList<>();
  212.             serviziL.add("-1");
  213.             serviziLabelL.add("-");

  214.             if (totServ != 0) {
  215.                 // Servizi
  216.                 sqlQueryObject = (new UtilitiesSQLQuery()).getSQLQueryObject();                
  217.                 sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
  218.                 sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
  219.                 sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
  220.                 sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI, "id","idServizio");
  221.                 sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPOSTO+".id_accordo=?");
  222.                 sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo<>?");
  223.                 if(as.getPrivato()==null || !as.getPrivato()){
  224.                     sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".privato=?");
  225.                 }
  226.                 sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".id="+CostantiDB.SERVIZI+".id_soggetto");
  227.                 if( !isVisioneOggettiGlobale(userLogin)){
  228.                     sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".superuser = ?");
  229.                 }
  230.                 sqlQueryObject.setANDLogicOperator(true);

  231.                 //voglio i servizi che non sono gia' stati usati come componenti
  232.                 sqlQueryObjectNotExist = (new UtilitiesSQLQuery()).getSQLQueryObject();
  233.                 sqlQueryObjectNotExist.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
  234.                 sqlQueryObjectNotExist.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPONENTI+".id_servizio_composto="+CostantiDB.ACCORDI_SERVIZI_COMPOSTO+".id");
  235.                 sqlQueryObjectNotExist.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPONENTI+".id_servizio_componente="+CostantiDB.SERVIZI+".id");
  236.                 sqlQueryObjectNotExist.setANDLogicOperator(true);

  237.                 sqlQueryObject.addWhereExistsCondition(true, sqlQueryObjectNotExist);

  238.                 queryString = sqlQueryObject.createSQLQuery();
  239.                 stmt = con.prepareStatement(queryString);
  240.                 stmt.setLong(1, idAccordoLong);
  241.                 stmt.setLong(2, idAccordoLong);
  242.                 index = 3;
  243.                 if(as.getPrivato()==null || !as.getPrivato()){
  244.                     stmt.setInt(index, 0);
  245.                     index++;
  246.                 }
  247.                 if( !isVisioneOggettiGlobale(userLogin)){
  248.                     stmt.setString(index, userLogin);
  249.                     index++;
  250.                 }
  251.                 risultato = stmt.executeQuery();
  252.                 while (risultato.next()) {
  253.                     long idServizio = risultato.getLong("idServizio");
  254.                     AccordoServizioParteSpecifica asps =  apsCore.getAccordoServizioParteSpecifica(idServizio);
  255.                    
  256.                     if(tipiServiziCompatibili.contains(asps.getTipo()) && tipiSoggettiCompatibili.contains(asps.getTipoSoggettoErogatore())){
  257.                         serviziL.add(""+idServizio);
  258.                         serviziLabelL.add(helper.getLabelIdServizio(asps));
  259.                     }
  260.                 }
  261.                 risultato.close();
  262.                 stmt.close();

  263.                 serviziList = serviziL.toArray(new String[1]);
  264.                 serviziListLabel = serviziLabelL.toArray(new String[1]);
  265.             }
  266.         }catch (Exception e) {
  267.             ControlStationCore.logError(getPrefixError(nomeMetodo,  e), e);
  268.         } finally{
  269.             try {
  270.                 if(risultato!=null) {
  271.                     risultato.close();
  272.                 }
  273.             }catch(Exception t) {
  274.                 // ignore
  275.             }
  276.             try {
  277.                 if(stmt!=null) {
  278.                     stmt.close();
  279.                 }
  280.             }catch(Exception t) {
  281.                 // ignore
  282.             }
  283.             ControlStationCore.dbM.releaseConnection(con);
  284.         }

  285.         List<String[]> toRet = new ArrayList<>();
  286.         toRet.add(serviziList);
  287.         toRet.add(serviziListLabel);

  288.         return toRet;
  289.     }
  290. }