GestoreCacheCleaner.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.pdd.core.cache;

  21. import java.sql.Connection;
  22. import java.util.ArrayList;
  23. import java.util.List;

  24. import org.openspcoop2.core.config.GenericProperties;
  25. import org.openspcoop2.core.config.PortaApplicativa;
  26. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  27. import org.openspcoop2.core.config.ServizioApplicativo;
  28. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  29. import org.openspcoop2.core.config.driver.IDriverConfigurazioneGet;
  30. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  31. import org.openspcoop2.core.id.IDAccordo;
  32. import org.openspcoop2.core.id.IDAccordoCooperazione;
  33. import org.openspcoop2.core.id.IDConnettore;
  34. import org.openspcoop2.core.id.IDGenericProperties;
  35. import org.openspcoop2.core.id.IDPortaApplicativa;
  36. import org.openspcoop2.core.id.IDPortaDelegata;
  37. import org.openspcoop2.core.id.IDRuolo;
  38. import org.openspcoop2.core.id.IDScope;
  39. import org.openspcoop2.core.id.IDServizio;
  40. import org.openspcoop2.core.id.IDServizioApplicativo;
  41. import org.openspcoop2.core.id.IDSoggetto;
  42. import org.openspcoop2.core.mapping.DBMappingUtils;
  43. import org.openspcoop2.core.registry.AccordoCooperazione;
  44. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  45. import org.openspcoop2.core.registry.Fruitore;
  46. import org.openspcoop2.core.registry.Ruolo;
  47. import org.openspcoop2.core.registry.Scope;
  48. import org.openspcoop2.core.registry.Soggetto;
  49. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  50. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  51. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  52. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  53. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  54. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  55. import org.openspcoop2.pdd.config.ConfigurazionePdDReader;
  56. import org.openspcoop2.pdd.core.GestoreRichieste;
  57. import org.openspcoop2.pdd.core.autenticazione.GestoreAutenticazione;
  58. import org.openspcoop2.pdd.core.autorizzazione.GestoreAutorizzazione;
  59. import org.openspcoop2.pdd.core.behaviour.built_in.load_balance.GestoreLoadBalancerCaching;
  60. import org.openspcoop2.pdd.core.token.GestoreToken;
  61. import org.openspcoop2.protocol.registry.RegistroServiziReader;

  62. /**
  63.  * GestoreCacheCleaner
  64.  *
  65.  * @author Andrea Poli (apoli@link.it)
  66.  * @author $Author$
  67.  * @version $Rev$, $Date$
  68.  */
  69. public class GestoreCacheCleaner {
  70.    
  71.     private GestoreCacheCleaner() {}

  72.     private static List<ICacheCleaner> listCacheCleaner = new ArrayList<>();
  73.     private static DriverRegistroServiziDB driverRegistroDB = null;
  74.     private static DriverConfigurazioneDB driverConfigDB = null;
  75.    
  76.     public static void initialize() throws Exception {
  77.        
  78.         if(GestoreRichieste.isCacheAbilitata()) {
  79.             listCacheCleaner.add(new GestoreRichiesteCacheCleaner());
  80.         }
  81.         if(RegistroServiziReader.isCacheAbilitata()) {
  82.             listCacheCleaner.add(new RegistroServiziCacheCleaner());
  83.         }
  84.         if(ConfigurazionePdDReader.isCacheAbilitata()) {
  85.             listCacheCleaner.add(new ConfigurazioneCacheCleaner());
  86.         }
  87.         if(GestoreAutenticazione.isCacheAbilitata()) {
  88.             listCacheCleaner.add(new AutenticazioneCacheCleaner());
  89.         }
  90.         if(GestoreAutorizzazione.isCacheAbilitata()) {
  91.             listCacheCleaner.add(new AutorizzazioneCacheCleaner());
  92.         }
  93.         if(GestoreToken.isGestioneTokenCacheAbilitata()) {
  94.             listCacheCleaner.add(new GestoreTokenCacheCleaner());
  95.         }
  96.         if(GestoreToken.isAttributeAuthorityCacheAbilitata()) {
  97.             listCacheCleaner.add(new AttributeAuthorityCacheCleaner());
  98.         }
  99.         if(GestoreLoadBalancerCaching.isCacheAbilitata()) {
  100.             listCacheCleaner.add(new GestoreLoadBalancerCacheCleaner());
  101.         }
  102.        
  103.         for (IDriverRegistroServiziGet driver : RegistroServiziReader.getDriverRegistroServizi().values()) {
  104.             if(driver instanceof DriverRegistroServiziDB) {
  105.                 driverRegistroDB = (DriverRegistroServiziDB) driver;
  106.                 break;
  107.             }
  108.         }
  109.        
  110.         IDriverConfigurazioneGet driver = ConfigurazionePdDReader.getDriverConfigurazionePdD();
  111.         if(driver instanceof DriverConfigurazioneDB) {
  112.             driverConfigDB = (DriverConfigurazioneDB) driver;
  113.         }
  114.        
  115.     }
  116.    
  117.     public static void removeAccordoCooperazione(long id) throws Exception {
  118.         if(!listCacheCleaner.isEmpty() && driverRegistroDB!=null) {
  119.             AccordoCooperazione ac = driverRegistroDB.getAccordoCooperazione(id);
  120.             if(ac!=null) {
  121.                 IDAccordoCooperazione idAccordoCooperazione = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromAccordo(ac);
  122.                 for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  123.                     iCacheCleaner.removeAccordoCooperazione(idAccordoCooperazione);
  124.                 }
  125.             }
  126.         }
  127.     }
  128.    
  129.     public static void removeAccordoServizioParteComune(long id) throws Exception {
  130.         if(!listCacheCleaner.isEmpty() && driverRegistroDB!=null) {
  131.             AccordoServizioParteComuneSintetico as = driverRegistroDB.getAccordoServizioParteComuneSintetico(id);
  132.             if(as!=null) {
  133.                 IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as);
  134.                 for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  135.                     iCacheCleaner.removeApi(idAccordo);
  136.                 }
  137.             }
  138.         }
  139.     }
  140.    
  141.     public static void removeErogazione(long id) throws Exception {
  142.         if(!listCacheCleaner.isEmpty() && driverRegistroDB!=null && driverConfigDB!=null) {
  143.             AccordoServizioParteSpecifica as = driverRegistroDB.getAccordoServizioParteSpecifica(id, false);
  144.             if(as!=null) {
  145.                 IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(as);
  146.                 List<IDPortaApplicativa> idPorteApplicative = null;
  147.                 List<IDConnettore> idConnettori = null;
  148.                 List<IDServizioApplicativo> idServiziApplicativiErogatori = null;
  149.                
  150.                 Connection con = null;
  151.                 try {
  152.                     con = driverConfigDB.getConnection("getIDPorteApplicativeAssociate");
  153.                     idPorteApplicative = DBMappingUtils.getIDPorteApplicativeAssociate(idServizio, con, driverConfigDB.getTipoDB());
  154.                 }finally {
  155.                     driverConfigDB.releaseConnection(con);
  156.                 }

  157.                 if(idPorteApplicative!=null && !idPorteApplicative.isEmpty()) {
  158.                     for (IDPortaApplicativa idPortaApplicativa : idPorteApplicative) {
  159.                         PortaApplicativa pa = driverConfigDB.getPortaApplicativa(idPortaApplicativa);
  160.                        
  161.                         if(idServiziApplicativiErogatori==null) {
  162.                             idServiziApplicativiErogatori = new ArrayList<>();
  163.                         }
  164.                         for (PortaApplicativaServizioApplicativo paSa : pa.getServizioApplicativoList()) {
  165.                             IDServizioApplicativo idSA = new IDServizioApplicativo();
  166.                             idSA.setIdSoggettoProprietario(idServizio.getSoggettoErogatore());
  167.                             idSA.setNome(paSa.getNome());
  168.                             idServiziApplicativiErogatori.add(idSA);
  169.                         }
  170.                        
  171.                         if(pa.getBehaviour()!=null && pa.sizeServizioApplicativoList()>0) {
  172.                             if(idConnettori==null) {
  173.                                 idConnettori = new ArrayList<>();
  174.                             }
  175.                             for (PortaApplicativaServizioApplicativo paSa : pa.getServizioApplicativoList()) {
  176.                                 IDConnettore idConnettore = new IDConnettore();
  177.                                 idConnettore.setIdSoggettoProprietario(idServizio.getSoggettoErogatore());
  178.                                 idConnettore.setNome(paSa.getNome());
  179.                                 idConnettore.setNomeConnettore(paSa.getDatiConnettore()!=null && paSa.getDatiConnettore().getNome()!=null ?
  180.                                         paSa.getDatiConnettore().getNome() : CostantiConfigurazione.NOME_CONNETTORE_DEFAULT);
  181.                                 idConnettori.add(idConnettore);
  182.                             }
  183.                         }
  184.                     }
  185.                 }
  186.                
  187.                 for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  188.                     iCacheCleaner.removeErogazione(idServizio);
  189.                     if(idPorteApplicative!=null && !idPorteApplicative.isEmpty()) {
  190.                         for (IDPortaApplicativa idPortaApplicativa : idPorteApplicative) {
  191.                             iCacheCleaner.removePortaApplicativa(idPortaApplicativa);
  192.                         }
  193.                     }
  194.                     if(idServiziApplicativiErogatori!=null && !idServiziApplicativiErogatori.isEmpty()) {
  195.                         for (IDServizioApplicativo idSA : idServiziApplicativiErogatori) {
  196.                             iCacheCleaner.removeApplicativo(idSA);
  197.                         }
  198.                     }
  199.                     if(idConnettori!=null && !idConnettori.isEmpty()) {
  200.                         for (IDConnettore idConnettore : idConnettori) {
  201.                             iCacheCleaner.removeConnettore(idConnettore);
  202.                         }
  203.                     }
  204.                 }
  205.             }
  206.         }
  207.     }
  208.    
  209.     public static void removeFruizione(long id) throws Exception {
  210.         if(!listCacheCleaner.isEmpty() && driverRegistroDB!=null && driverConfigDB!=null) {
  211.             Fruitore fruitore = driverRegistroDB.getServizioFruitore(id);
  212.             if(fruitore!=null) {
  213.                 AccordoServizioParteSpecifica as = driverRegistroDB.getAccordoServizioParteSpecifica(fruitore.getIdServizio(), false);
  214.                 IDSoggetto idFruitore = driverRegistroDB.getIdSoggetto(fruitore.getIdSoggetto());
  215.                 if(as!=null) {
  216.                     IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(as);
  217.                     List<IDPortaDelegata> idPorteDelegate = null;
  218.                    
  219.                     Connection con = null;
  220.                     try {
  221.                         con = driverConfigDB.getConnection("getIDPorteApplicativeAssociate");
  222.                         idPorteDelegate = DBMappingUtils.getIDPorteDelegateAssociate(idServizio, idFruitore, con, driverConfigDB.getTipoDB());
  223.                     }finally {
  224.                         driverConfigDB.releaseConnection(con);
  225.                     }
  226.                    
  227.                     for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  228.                         iCacheCleaner.removeFruizione(idFruitore, idServizio);
  229.                         if(idPorteDelegate!=null && !idPorteDelegate.isEmpty()) {
  230.                             for (IDPortaDelegata idPortaDelegata : idPorteDelegate) {
  231.                                 iCacheCleaner.removePortaDelegata(idPortaDelegata);
  232.                             }
  233.                         }
  234.                     }
  235.                 }
  236.             }
  237.         }
  238.     }
  239.    
  240.     public static void removeSoggetto(long id) throws Exception {
  241.         if(!listCacheCleaner.isEmpty() && driverRegistroDB!=null) {
  242.             Soggetto soggetto = driverRegistroDB.getSoggetto(id);
  243.             if(soggetto!=null) {
  244.                
  245.                 IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(), soggetto.getNome());
  246.                 String portaDominio = soggetto.getPortaDominio();
  247.                
  248.                 for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  249.                     iCacheCleaner.removeSoggetto(idSoggetto);
  250.                     if(portaDominio!=null) {
  251.                         iCacheCleaner.removePdd(portaDominio);
  252.                     }
  253.                 }
  254.             }
  255.         }
  256.     }
  257.    
  258.     public static void removeApplicativo(long id) throws Exception {
  259.         if(!listCacheCleaner.isEmpty() && driverConfigDB !=null) {
  260.             ServizioApplicativo sa = driverConfigDB.getServizioApplicativo(id);
  261.             if(sa!=null) {
  262.                
  263.                 IDSoggetto idSoggetto = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  264.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  265.                 idSA.setIdSoggettoProprietario(idSoggetto);
  266.                 idSA.setNome(sa.getNome());

  267.                 for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  268.                     iCacheCleaner.removeApplicativo(idSA);
  269.                 }
  270.             }
  271.         }
  272.     }
  273.    
  274.     public static void removeRuolo(long id) throws Exception {
  275.         if(!listCacheCleaner.isEmpty() && driverRegistroDB!=null) {
  276.             Ruolo ruolo = driverRegistroDB.getRuolo(id);
  277.             if(ruolo!=null) {
  278.                
  279.                 IDRuolo idRuolo = new IDRuolo(ruolo.getNome());
  280.                
  281.                 for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  282.                     iCacheCleaner.removeRuolo(idRuolo);
  283.                 }
  284.             }
  285.         }
  286.     }
  287.    
  288.     public static void removeScope(long id) throws Exception {
  289.         if(!listCacheCleaner.isEmpty() && driverRegistroDB!=null) {
  290.             Scope scope = driverRegistroDB.getScope(id);
  291.             if(scope!=null) {
  292.                
  293.                 IDScope idScope = new IDScope(scope.getNome());
  294.                
  295.                 for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  296.                     iCacheCleaner.removeScope(idScope);
  297.                 }
  298.             }
  299.         }
  300.     }
  301.    
  302.     public static void removeGenericProperties(long id) throws Exception {
  303.         if(!listCacheCleaner.isEmpty() && driverConfigDB !=null) {
  304.             GenericProperties gp = driverConfigDB.getGenericProperties(id);
  305.             if(gp!=null) {
  306.                
  307.                 IDGenericProperties idGP = new IDGenericProperties();
  308.                 idGP.setTipologia(gp.getTipologia());
  309.                 idGP.setNome(gp.getNome());

  310.                 for (ICacheCleaner iCacheCleaner : listCacheCleaner) {
  311.                     iCacheCleaner.removeGenericProperties(idGP);
  312.                 }
  313.             }
  314.         }
  315.     }
  316. }