UtilitiesMappingFruizioneErogazione.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.protocol.engine.archive;

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

  25. import org.openspcoop2.core.config.PortaApplicativa;
  26. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  27. import org.openspcoop2.core.config.PortaDelegata;
  28. import org.openspcoop2.core.config.constants.PortaApplicativaAzioneIdentificazione;
  29. import org.openspcoop2.core.config.constants.PortaDelegataAzioneIdentificazione;
  30. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  31. import org.openspcoop2.core.config.driver.FiltroRicercaPorteApplicative;
  32. import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
  33. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  34. import org.openspcoop2.core.constants.Costanti;
  35. import org.openspcoop2.core.id.IDAccordo;
  36. import org.openspcoop2.core.id.IDPortaApplicativa;
  37. import org.openspcoop2.core.id.IDPortaDelegata;
  38. import org.openspcoop2.core.id.IDServizio;
  39. import org.openspcoop2.core.id.IDSoggetto;
  40. import org.openspcoop2.core.mapping.DBMappingUtils;
  41. import org.openspcoop2.core.mapping.Implementation;
  42. import org.openspcoop2.core.mapping.ImplementationUtils;
  43. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  44. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  45. import org.openspcoop2.core.mapping.SubscriptionUtils;
  46. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  47. import org.openspcoop2.core.registry.constants.PddTipologia;
  48. import org.openspcoop2.core.registry.constants.ServiceBinding;
  49. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  50. import org.openspcoop2.core.registry.driver.FiltroRicerca;
  51. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  52. import org.openspcoop2.core.registry.driver.FiltroRicercaSoggetti;
  53. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  54. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  55. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  56. import org.openspcoop2.core.registry.utils.RegistroServiziUtils;
  57. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  58. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  59. import org.openspcoop2.protocol.sdk.ProtocolException;
  60. import org.openspcoop2.protocol.sdk.config.ProtocolSubscription;
  61. import org.slf4j.Logger;


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

  70.     private DriverConfigurazioneDB driverConfigurazione;
  71.     private DriverRegistroServiziDB driverRegistroServizi;
  72.     private Logger log;
  73.    
  74.     public UtilitiesMappingFruizioneErogazione(DriverConfigurazioneDB driverConfigurazione,
  75.             DriverRegistroServiziDB driverRegistroServizi,
  76.             Logger log){
  77.         this.driverConfigurazione = driverConfigurazione;
  78.         this.driverRegistroServizi = driverRegistroServizi;
  79.         this.log = log;
  80.     }
  81.    
  82.     public void initMappingFruizione() throws ProtocolException {
  83.         this._initMapping(false);
  84.     }
  85.     public void initMappingErogazione() throws ProtocolException {
  86.         this._initMapping(true);
  87.     }
  88.     private void _initMapping(boolean erogazione) throws ProtocolException {
  89.        
  90.         try {

  91.             List<String> tipiPdd = new ArrayList<>();
  92.             tipiPdd.add(PddTipologia.OPERATIVO.toString());
  93.             tipiPdd.add(PddTipologia.NONOPERATIVO.toString());
  94.            
  95.             for (String tipoPdd : tipiPdd) {
  96.                
  97.                 this.log.debug("Pdd (tipo:"+tipoPdd+") ricerca in corso...");
  98.                 FiltroRicerca filtroPdd = new FiltroRicerca();
  99.                 filtroPdd.setTipo(tipoPdd);
  100.                 List<String> listPdD = null;
  101.                 try{
  102.                     listPdD = this.driverRegistroServizi.getAllIdPorteDominio(filtroPdd);
  103.                 }catch(DriverRegistroServiziNotFound notFound){}
  104.                 if(listPdD==null){
  105.                     listPdD = new ArrayList<>();
  106.                 }
  107.                 this.log.debug("Pdd (tipo:"+tipoPdd+") trovate: "+listPdD.size());
  108.                
  109.                 if(listPdD.size()>0){
  110.                    
  111.                     for (String nomePdd : listPdD) {
  112.                        
  113.                         this.log.debug("Soggetti (pdd:"+nomePdd+") ricerca in corso...");
  114.                         FiltroRicercaSoggetti filtroSoggetti = new FiltroRicercaSoggetti();
  115.                         filtroSoggetti.setNomePdd(nomePdd);
  116.                         List<IDSoggetto> listSoggetti = null;
  117.                         try{
  118.                             listSoggetti = this.driverRegistroServizi.getAllIdSoggetti(filtroSoggetti);
  119.                         }catch(DriverRegistroServiziNotFound notFound){}
  120.                         if(listSoggetti==null){
  121.                             listSoggetti = new ArrayList<>();
  122.                         }
  123.                         this.log.debug("Soggetti (pdd:"+nomePdd+") trovati: "+listSoggetti.size());
  124.                        
  125.                         if(listSoggetti.size()>0){
  126.                        
  127.                             for (IDSoggetto idSoggetto : listSoggetti) {
  128.                                
  129.                                 if(erogazione){
  130.                                
  131.                                     // erogazione
  132.                                    
  133.                                     this.log.debug("Servizi (soggetto:"+idSoggetto+") ricerca in corso...");
  134.                                     FiltroRicercaServizi filtroServizi = new FiltroRicercaServizi();
  135.                                     filtroServizi.setTipoSoggettoErogatore(idSoggetto.getTipo());
  136.                                     filtroServizi.setNomeSoggettoErogatore(idSoggetto.getNome());
  137.                                     List<IDServizio> listServizi = null;
  138.                                     try{
  139.                                         listServizi = this.driverRegistroServizi.getAllIdServizi(filtroServizi);
  140.                                     }catch(DriverRegistroServiziNotFound notFound){}
  141.                                     if(listServizi==null){
  142.                                         listServizi = new ArrayList<>();
  143.                                     }
  144.                                     this.log.debug("Servizi (soggetto:"+idSoggetto+") trovati: "+listServizi.size());
  145.                                    
  146.                                     if(listServizi.size()>0){
  147.                                        
  148.                                         for (IDServizio idServizio : listServizi) {
  149.                                                
  150.                                             // Devo controllare il mapping per ogni porta applicativa
  151. //                                          Connection con = null;
  152. //                                          try{
  153. //                                              con = this.driverRegistroServizi.getConnection("UtilitiesMappingFruizioneErogazione.existsIDPortaApplicativaAssociata");
  154. //                                              if(DBMappingUtils.existsIDPortaApplicativaAssociata(idServizio, con, this.driverRegistroServizi.getTipoDB())){
  155. //                                                  this.log.debug("PortaApplicativa (soggetto:"+idSoggetto+" servizio:"+
  156. //                                                          idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+") mapping già esistente");
  157. //                                                  continue;
  158. //                                              }
  159. //                                          }finally{
  160. //                                              try{
  161. //                                                  this.driverRegistroServizi.releaseConnection(con);
  162. //                                              }catch(Throwable t){}
  163. //                                          }
  164.                                            
  165.                                             this.log.debug("PorteApplicative (soggetto:"+idSoggetto+" servizio:"+
  166.                                                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+") ricerca in corso...");
  167.                                             FiltroRicercaPorteApplicative filtroPA = new FiltroRicercaPorteApplicative();
  168.                                             filtroPA.setTipoServizio(idServizio.getTipo());
  169.                                             filtroPA.setNomeServizio(idServizio.getNome());
  170.                                             filtroPA.setVersioneServizio(idServizio.getVersione());
  171.                                             filtroPA.setTipoSoggetto(idSoggetto.getTipo());
  172.                                             filtroPA.setNomeSoggetto(idSoggetto.getNome());
  173.                                             List<IDPortaApplicativa> listPA = null;
  174.                                             try{
  175.                                                 listPA = this.driverConfigurazione.getAllIdPorteApplicative(filtroPA);
  176.                                             }catch(DriverConfigurazioneNotFound notFound){}
  177.                                             if(listPA==null){
  178.                                                 listPA = new ArrayList<>();
  179.                                             }
  180.                                             this.log.debug("PorteApplicative (soggetto:"+idSoggetto+" servizio:"+
  181.                                                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+") trovate: "+listPA.size());
  182.                                            
  183.                                             _gestioneMappingErogazionePA(listPA, idServizio, idSoggetto);
  184.                                         }
  185.                                        
  186.                                     }
  187.                                 }
  188.                                 else{
  189.                                    
  190.                                     // fruizione
  191.                                    
  192.                                     this.log.debug("Servizi (fruitore:"+idSoggetto+") ricerca in corso...");
  193.                                     FiltroRicercaServizi filtroServizi = new FiltroRicercaServizi();
  194.                                     filtroServizi.setTipoSoggettoFruitore(idSoggetto.getTipo());
  195.                                     filtroServizi.setNomeSoggettoFruitore(idSoggetto.getNome());
  196.                                     List<IDServizio> listServizi = null;
  197.                                     try{
  198.                                         listServizi = this.driverRegistroServizi.getAllIdServizi(filtroServizi);
  199.                                     }catch(DriverRegistroServiziNotFound notFound){}
  200.                                     if(listServizi==null){
  201.                                         listServizi = new ArrayList<>();
  202.                                     }
  203.                                     this.log.debug("Servizi (fruitore:"+idSoggetto+") trovati: "+listServizi.size());
  204.                                    
  205.                                     if(listServizi.size()>0){
  206.                                        
  207.                                         for (IDServizio idServizio : listServizi) {
  208.                                        
  209.                                             // Devo controllare il mapping per ogni porta delegata
  210. //                                          Connection con = null;
  211. //                                          try{
  212. //                                              con = this.driverRegistroServizi.getConnection("UtilitiesMappingFruizioneErogazione.existsIDPortaDelegataAssociata");      
  213. //                                              if(DBMappingUtils.existsIDPortaDelegataAssociata(idServizio, idSoggetto, con, this.driverRegistroServizi.getTipoDB())){
  214. //                                                  this.log.debug("PortaDelegata (soggetto-fruitore:"+idSoggetto+
  215. //                                                          " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  216. //                                                          idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+") mapping già esistente");
  217. //                                                  continue;
  218. //                                              }
  219. //                                          }finally{
  220. //                                              try{
  221. //                                                  this.driverRegistroServizi.releaseConnection(con);
  222. //                                              }catch(Throwable t){}
  223. //                                          }
  224.                                            
  225.                                             this.log.debug("PorteDelegate (soggetto-fruitore:"+idSoggetto+
  226.                                                         " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  227.                                                         idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+") ricerca in corso...");
  228.                                             FiltroRicercaPorteDelegate filtroPD = new FiltroRicercaPorteDelegate();
  229.                                             filtroPD.setTipoSoggetto(idSoggetto.getTipo());
  230.                                             filtroPD.setNomeSoggetto(idSoggetto.getNome());
  231.                                             filtroPD.setTipoSoggettoErogatore(idServizio.getSoggettoErogatore().getTipo());
  232.                                             filtroPD.setNomeSoggettoErogatore(idServizio.getSoggettoErogatore().getNome());
  233.                                             filtroPD.setTipoServizio(idServizio.getTipo());
  234.                                             filtroPD.setNomeServizio(idServizio.getNome());
  235.                                             filtroPD.setVersioneServizio(idServizio.getVersione());
  236.                                             List<IDPortaDelegata> listPD = null;
  237.                                             try{
  238.                                                 listPD = this.driverConfigurazione.getAllIdPorteDelegate(filtroPD);
  239.                                             }catch(DriverConfigurazioneNotFound notFound){}
  240.                                             if(listPD==null){
  241.                                                 listPD = new ArrayList<>();
  242.                                             }
  243.                                             this.log.debug("PorteDelegate (soggetto-fruitore:"+idSoggetto+
  244.                                                         " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  245.                                                         idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+") trovate: "+listPD.size());
  246.                                        
  247.                                             this._gestioneMappingFruizionePD(listPD, idServizio, idSoggetto);
  248.                                         }
  249.                                     }
  250.                                    
  251.                                 }
  252.                             }
  253.                            
  254.                         }
  255.                     }
  256.                    
  257.                 }
  258.    
  259.             }          
  260.            

  261.         } catch (Throwable se) {
  262.             throw new ProtocolException(se.getMessage(),se);
  263.         }
  264.        
  265.     }
  266.    
  267.     public void gestioneMappingErogazionePAbyId(List<IDPortaApplicativa> listPA) throws Exception {
  268.         if(listPA==null || listPA.isEmpty()) {
  269.             return;
  270.         }
  271.         for (IDPortaApplicativa idPortaApplicativa : listPA) {
  272.            
  273.             PortaApplicativa pa = null;
  274.             IDSoggetto idSoggetto = null;
  275.             IDServizio idServizio = null;
  276.             Connection con = null;
  277.             try{
  278.                 con = this.driverConfigurazione.getConnection("UtilitiesMappingFruizioneErogazione.gestioneMappingErogazionePA");
  279.                 try {
  280.                     pa = this.driverConfigurazione.getPortaApplicativa(idPortaApplicativa);
  281.                     idSoggetto = new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario());
  282.                     idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pa.getServizio().getTipo(), pa.getServizio().getNome(),
  283.                             idSoggetto, pa.getServizio().getVersione());
  284.                 }catch(Exception e) {
  285.                     this.log.error("Errore durante il recupero della porta applicativa con id ["+idPortaApplicativa+"]: "+e.getMessage(),e);
  286.                     continue;
  287.                 }
  288.             }finally{
  289.                 try{
  290.                     this.driverConfigurazione.releaseConnection(con);
  291.                 }catch(Throwable t){}
  292.             }
  293.            
  294.             List<IDPortaApplicativa> listPA_unique = new ArrayList<>();
  295.             listPA_unique.add(idPortaApplicativa);
  296.            
  297.             this._gestioneMappingErogazionePA(listPA_unique, idServizio, idSoggetto);
  298.            
  299.         }
  300.     }
  301.    
  302.     public void gestioneMappingErogazionePA(List<PortaApplicativa> listPA) throws Exception {
  303.         if(listPA==null || listPA.isEmpty()) {
  304.             return;
  305.         }
  306.         for (PortaApplicativa pa : listPA) {
  307.            
  308.             IDSoggetto idSoggetto = null;
  309.             IDServizio idServizio = null;
  310.             IDPortaApplicativa idPortaApplicativa = null;
  311.             try {
  312.                 idSoggetto = new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario());
  313.                 idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pa.getServizio().getTipo(), pa.getServizio().getNome(),
  314.                         idSoggetto, pa.getServizio().getVersione());
  315.                 idPortaApplicativa = new IDPortaApplicativa();
  316.                 idPortaApplicativa.setNome(pa.getNome());
  317.             }catch(Exception e) {
  318.                 this.log.error("Errore durante la lettura dei dati della porta applicativa ["+pa.getNome()+"]: "+e.getMessage(),e);
  319.                 continue;
  320.             }
  321.            
  322.             List<IDPortaApplicativa> listPA_unique = new ArrayList<>();
  323.             listPA_unique.add(idPortaApplicativa);
  324.            
  325.             this._gestioneMappingErogazionePA(listPA_unique, idServizio, idSoggetto);
  326.            
  327.         }
  328.     }
  329.    
  330.     public void gestioneMappingFruizionePDbyId(List<IDPortaDelegata> listPD) throws Exception {
  331.         if(listPD==null || listPD.isEmpty()) {
  332.             return;
  333.         }
  334.         for (IDPortaDelegata idPortaDelegata : listPD) {
  335.            
  336.             PortaDelegata pd = null;
  337.             IDSoggetto idSoggetto = null;
  338.             IDServizio idServizio = null;
  339.             Connection con = null;
  340.             try{
  341.                 con = this.driverConfigurazione.getConnection("UtilitiesMappingFruizioneErogazione.gestioneMappingFruizionePD");
  342.                 try {
  343.                     pd = this.driverConfigurazione.getPortaDelegata(idPortaDelegata);
  344.                     idSoggetto = new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario());
  345.                     idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pd.getServizio().getTipo(), pd.getServizio().getNome(),
  346.                             new IDSoggetto(pd.getSoggettoErogatore().getTipo(),pd.getSoggettoErogatore().getNome()), pd.getServizio().getVersione());
  347.                 }catch(Exception e) {
  348.                     this.log.error("Errore durante il recupero della porta applicativa con id ["+idPortaDelegata+"]: "+e.getMessage(),e);
  349.                     continue;
  350.                 }
  351.             }finally{
  352.                 try{
  353.                     this.driverConfigurazione.releaseConnection(con);
  354.                 }catch(Throwable t){}
  355.             }
  356.            
  357.             List<IDPortaDelegata> listPD_unique = new ArrayList<>();
  358.             listPD_unique.add(idPortaDelegata);
  359.            
  360.             this._gestioneMappingFruizionePD(listPD_unique, idServizio, idSoggetto);
  361.            
  362.         }
  363.     }
  364.    
  365.     public void gestioneMappingFruizionePD(List<PortaDelegata> listPD) throws Exception {
  366.         if(listPD==null || listPD.isEmpty()) {
  367.             return;
  368.         }
  369.         for (PortaDelegata pd : listPD) {
  370.            
  371.             IDSoggetto idSoggetto = null;
  372.             IDServizio idServizio = null;
  373.             IDPortaDelegata idPortaDelegata = null;
  374.             try {
  375.                 idSoggetto = new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario());
  376.                 idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pd.getServizio().getTipo(), pd.getServizio().getNome(),
  377.                         new IDSoggetto(pd.getSoggettoErogatore().getTipo(),pd.getSoggettoErogatore().getNome()), pd.getServizio().getVersione());
  378.                 idPortaDelegata = new IDPortaDelegata();
  379.                 idPortaDelegata.setNome(pd.getNome());
  380.             }catch(Exception e) {
  381.                 this.log.error("Errore durante la lettura dei dati della porta delegata ["+pd.getNome()+"]: "+e.getMessage(),e);
  382.                 continue;
  383.             }
  384.            
  385.             List<IDPortaDelegata> listPD_unique = new ArrayList<>();
  386.             listPD_unique.add(idPortaDelegata);
  387.            
  388.             this._gestioneMappingFruizionePD(listPD_unique, idServizio, idSoggetto);
  389.            
  390.         }
  391.     }
  392.    
  393.     private void _gestioneMappingErogazionePA(List<IDPortaApplicativa> listPA, IDServizio idServizio, IDSoggetto idSoggetto) throws Exception {
  394.        
  395.         if(listPA==null || listPA.isEmpty()) {
  396.             return;
  397.         }
  398.        
  399.         String nomePortaDefault = null;
  400.         HashMap<String, IDPortaApplicativa> mapPorte = new HashMap<>();
  401.         HashMap<IDPortaApplicativa, PortaApplicativa> listPAModificare = new  HashMap<>();
  402.         for (IDPortaApplicativa idPortaApplicativa : listPA) {
  403.            
  404.             Connection con = null;
  405.             try{
  406.                 con = this.driverRegistroServizi.getConnection("UtilitiesMappingFruizioneErogazione.existsIDPortaApplicativaAssociata");
  407.                 if(DBMappingUtils.existsMappingErogazione(idServizio, idPortaApplicativa, con, this.driverRegistroServizi.getTipoDB())){
  408.                     this.log.debug("PortaApplicativa '"+idPortaApplicativa.getNome()+"' (soggetto:"+idSoggetto+" servizio:"+
  409.                             idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+") mapping già esistente");
  410.                     continue;
  411.                 }
  412.             }finally{
  413.                 try{
  414.                     this.driverRegistroServizi.releaseConnection(con);
  415.                 }catch(Exception t){
  416.                     // ignore
  417.                 }
  418.             }
  419.            
  420.             String nomeMapping = null;
  421.             boolean isDefault = false;
  422.             PortaApplicativa pa = this.driverConfigurazione.getPortaApplicativa(idPortaApplicativa);
  423.             if(ImplementationUtils.isPortaApplicativaUtilizzabileComeDefault(pa)) {
  424.                 nomeMapping = ImplementationUtils.getDefaultMappingName();
  425.                 isDefault = true;
  426.                 if(nomePortaDefault!=null) {
  427.                     // già trovato una pa di default, questa non la considero
  428.                     this.log.debug("PortaApplicativa '"+idPortaApplicativa.getNome()+"' ignorata (soggetto:"+idSoggetto+" servizio:"+
  429.                             idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+"): mapping di default già esistente nella pa con nome ["+nomePortaDefault+"]");
  430.                     continue;
  431.                 }
  432.                 else {
  433.                     nomePortaDefault = idPortaApplicativa.getNome();
  434.                 }
  435.             }
  436.             else {
  437.                 if(PortaApplicativaAzioneIdentificazione.DELEGATED_BY.equals(pa.getAzione().getIdentificazione())) {
  438.                     // gia' nel nuovo formato devo solo creare il mapping che per qualche motivo si è perso
  439.                     if(pa.getAzione().sizeAzioneDelegataList()<=0) {
  440.                         this.log.error("Trovata porta applicativa "+pa.getNome()+"] con un'identificazione dell'azione delegata senza pero' possedere azioni delegate");
  441.                         continue;
  442.                     }
  443.                     else {
  444.                         String nomeAzione = pa.getAzione().getAzioneDelegata(0); // utilizzo un'azione a caso.
  445.                         nomeMapping = nomeAzione;
  446.                     }
  447.                 }
  448.                 else {
  449.                     String nomeAzione = pa.getAzione().getNome();
  450.                     if(mapPorte.containsKey(nomeAzione)) {
  451.                         // già trovato una pa che gestisce l'azione
  452.                         this.log.debug("PortaApplicativa '"+idPortaApplicativa.getNome()+"' ignorata (soggetto:"+idSoggetto+" servizio:"+
  453.                                 idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+"): mapping per l'azione '"+nomeAzione+"' già esistente nella pa con nome ["+mapPorte.get(nomeAzione)+"]");
  454.                         continue;
  455.                     }
  456.                     else {
  457.                         mapPorte.put(nomeAzione, idPortaApplicativa);
  458.                     }
  459.                     nomeMapping = nomeAzione;
  460.                    
  461.                     // modifico porta applicativa adeguandola alla nuova specifica
  462.                     ImplementationUtils.setAzioneDelegate(pa,
  463.                             null, // nome porta delegante lo imposto dopo aver trovato la porta di default.
  464.                             pa.getAzione().getNome());
  465.                    
  466.                     listPAModificare.put(idPortaApplicativa, pa);
  467.                 }
  468.             }
  469.             this.log.debug("Creazione Mapping Erogazione (default:"+isDefault+" nome:"+nomeMapping+") soggetto:"+idSoggetto+" servizio:"+
  470.                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+" con pa:"+idPortaApplicativa.getNome()+" in corso...");
  471.             con = null;
  472.             try{
  473.                 con = this.driverRegistroServizi.getConnection("UtilitiesMappingFruizioneErogazione.createMappingErogazione");
  474.                
  475.                 DBMappingUtils.createMappingErogazione(nomeMapping, isDefault ? Costanti.MAPPING_EROGAZIONE_PA_DESCRIZIONE_DEFAULT : nomeMapping,
  476.                         isDefault, idServizio, idPortaApplicativa, con, this.driverRegistroServizi.getTipoDB());
  477.             }finally{
  478.                 try{
  479.                     if(this.driverRegistroServizi.isAtomica()) {
  480.                         if(con!=null) {
  481.                             con.commit();
  482.                         }
  483.                     }
  484.                 }catch(Throwable t){
  485.                     // ignore
  486.                 }
  487.                 try{
  488.                     this.driverRegistroServizi.releaseConnection(con);
  489.                 }catch(Throwable t){
  490.                     // ignore
  491.                 }
  492.             }
  493.             this.log.debug("Creazione Mapping Erogazione (default:"+isDefault+" nome:"+nomeMapping+") soggetto:"+idSoggetto+" servizio:"+
  494.                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+" con pa:"+idPortaApplicativa.getNome()+" effettuata con successo");
  495.            
  496.         }
  497.        
  498.         if(listPAModificare.size()>0) {
  499.             for (IDPortaApplicativa idPortaApplicativa : listPAModificare.keySet()) {
  500.                 PortaApplicativa pa = listPAModificare.get(idPortaApplicativa);
  501.                
  502.                 if(nomePortaDefault==null) {
  503.                     // Creo una porta applicativa automaticamente simile a quella delegatedBy
  504.                    
  505.                     org.openspcoop2.message.constants.ServiceBinding serviceBinding = readServiceBinding(idServizio);
  506.                     IProtocolFactory<?> p = ProtocolFactoryManager.getInstance().getProtocolFactoryByServiceType(idServizio.getTipo());
  507.                     Implementation implementation = p.createProtocolIntegrationConfiguration().createDefaultImplementation(serviceBinding, idServizio);
  508.                     PortaApplicativa paDefault = implementation.getPortaApplicativa();
  509.                    
  510.                     // associo sa erogatore della pa di partenza
  511.                     if(pa.sizeServizioApplicativoList()>0) {
  512.                         for (PortaApplicativaServizioApplicativo paSA : pa.getServizioApplicativoList()) {
  513.                             paDefault.addServizioApplicativo(paSA);
  514.                         }
  515.                     }
  516.                    
  517.                     MappingErogazionePortaApplicativa mapping = implementation.getMapping();
  518.                     IDPortaApplicativa idPADefault = mapping.getIdPortaApplicativa();
  519.                     nomePortaDefault = idPADefault.getNome();
  520.                     if(this.driverConfigurazione.existsPortaApplicativa(idPADefault) == false) {
  521.                         // creo porta applicativa standard
  522.                         this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+pa.getTipoSoggettoProprietario()+"/"+pa.getNomeSoggettoProprietario()+" creazione delegante ["+paDefault.getNome()+"] in corso...");
  523.                         this.driverConfigurazione.createPortaApplicativa(paDefault);
  524.                         this.log.info("Porta applicativa ["+pa.getNome()+"] del Soggetto "+pa.getTipoSoggettoProprietario()+"/"+pa.getNomeSoggettoProprietario()+" creazione delegante ["+paDefault.getNome()+"].");
  525.                     }
  526.                    
  527.                     Connection con = null;
  528.                     try{
  529.                         con = this.driverConfigurazione.getConnection("UtilitiesMappingFruizioneErogazione.createMappingErogazione");
  530.                         this.log.info("Creazione mapping di erogazione di default (nome:"+mapping.getNome()+" default:"+mapping.isDefault()+") tra Porta Applicativa ["+paDefault.getNome()+"] e servizio ["+idServizio+"] creazione delegante in corso...");
  531.                         DBMappingUtils.createMappingErogazione(mapping.getNome(),mapping.getDescrizione(),  mapping.isDefault(), idServizio, idPADefault, con, this.driverConfigurazione.getTipoDB());
  532.                         this.log.info("Creazione mapping di erogazione di default (nome:"+mapping.getNome()+" default:"+mapping.isDefault()+") tra Porta Applicativa ["+paDefault.getNome()+"] e servizio ["+idServizio+"] creato delegante.");
  533.                     }finally{
  534.                         try{
  535.                             this.driverRegistroServizi.releaseConnection(con);
  536.                         }catch(Throwable t){}
  537.                     }
  538.                 }
  539.                
  540.                 pa.getAzione().setNomePortaDelegante(nomePortaDefault);
  541.                
  542.                 // comunque devo aggiornare i dati per delegatedBy (anche se nomePortaDefault is null)
  543.                
  544.                 this.log.debug("Aggiornamento Porta Applicativa '"+idPortaApplicativa+"' per  Mapping Erogazione soggetto:"+idSoggetto+" servizio:"+
  545.                         idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+" per impostare nome delegate '"+nomePortaDefault+"' in corso...");
  546.                 this.driverConfigurazione.updatePortaApplicativa(pa);
  547.                 this.log.debug("Aggiornamento Porta Applicativa '"+idPortaApplicativa+"' per  Mapping Erogazione soggetto:"+idSoggetto+" servizio:"+
  548.                         idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+" per impostare nome delegate '"+nomePortaDefault+"' effettuata con successo");
  549.                
  550.             }
  551.         }
  552.     }
  553.    
  554.     private void _gestioneMappingFruizionePD(List<IDPortaDelegata> listPD, IDServizio idServizio, IDSoggetto idSoggetto) throws Exception {
  555.         String nomePortaDefault = null;
  556.         HashMap<String, IDPortaDelegata> mapPorte = new HashMap<>();
  557.         HashMap<IDPortaDelegata, PortaDelegata> listPDModificare = new  HashMap<>();
  558.         for (IDPortaDelegata idPortaDelegata : listPD) {
  559.            
  560.             Connection con = null;
  561.             try{
  562.                 con = this.driverRegistroServizi.getConnection("UtilitiesMappingFruizioneErogazione.existsIDPortaDelegataAssociata");
  563.                 if(DBMappingUtils.existsMappingFruizione(idServizio, idSoggetto, idPortaDelegata, con, this.driverRegistroServizi.getTipoDB())){
  564.                     this.log.debug("PortaDelegata '"+idPortaDelegata.getNome()+"' (soggetto-fruitore:"+idSoggetto+
  565.                     " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  566.                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+") mapping già esistente");
  567.                     continue;
  568.                 }
  569.             }finally{
  570.                 try{
  571.                     this.driverRegistroServizi.releaseConnection(con);
  572.                 }catch(Exception t){
  573.                     // ignore
  574.                 }
  575.             }
  576.            
  577.             String nomeMapping = null;
  578.             boolean isDefault = false;
  579.             PortaDelegata pd = this.driverConfigurazione.getPortaDelegata(idPortaDelegata);
  580.             if(SubscriptionUtils.isPortaDelegataUtilizzabileComeDefault(pd)) {
  581.                 nomeMapping = SubscriptionUtils.getDefaultMappingName();
  582.                 isDefault = true;
  583.                 if(nomePortaDefault!=null) {
  584.                     // già trovato una pa di default, questa non la considero
  585.                     this.log.debug("PortaDelegata '"+idPortaDelegata.getNome()+"' ignorata (soggetto-fruitore:"+idSoggetto+
  586.                     " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  587.                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+"): mapping di default già esistente nella pd con nome ["+nomePortaDefault+"]");
  588.                     continue;
  589.                 }
  590.                 else {
  591.                     nomePortaDefault = idPortaDelegata.getNome();
  592.                 }
  593.             }
  594.             else {
  595.                 if(PortaDelegataAzioneIdentificazione.DELEGATED_BY.equals(pd.getAzione().getIdentificazione())) {
  596.                     // gia' nel nuovo formato devo solo creare il mapping che per qualche motivo si è perso
  597.                     if(pd.getAzione().sizeAzioneDelegataList()<=0) {
  598.                         this.log.error("Trovata porta delegata "+pd.getNome()+"] con un'identificazione dell'azione delegata senza pero' possedere azioni delegate");
  599.                         continue;
  600.                     }
  601.                     else {
  602.                         String nomeAzione = pd.getAzione().getAzioneDelegata(0); // utilizzo un'azione a caso.
  603.                         nomeMapping = nomeAzione;
  604.                     }
  605.                 }
  606.                 else {
  607.                     String nomeAzione = pd.getAzione().getNome();
  608.                     if(mapPorte.containsKey(nomeAzione)) {
  609.                         // già trovato una pa che gestisce l'azione
  610.                         this.log.debug("PortaDelegata '"+idPortaDelegata.getNome()+"' ignorata (soggetto-fruitore:"+idSoggetto+
  611.                         " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  612.                         idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+"): mapping per l'azione '"+nomeAzione+"' già esistente nella pa con nome ["+mapPorte.get(nomeAzione)+"]");
  613.                         continue;
  614.                     }
  615.                     else {
  616.                         mapPorte.put(nomeAzione, idPortaDelegata);
  617.                     }
  618.                     nomeMapping = nomeAzione;
  619.                    
  620.                     // modifico porta applicativa adeguandola alla nuova specifica
  621.                     SubscriptionUtils.setAzioneDelegate(pd,
  622.                             null, // nome porta delegante lo imposto dopo aver trovato la porta di default.
  623.                             pd.getAzione().getNome());
  624.                    
  625.                     listPDModificare.put(idPortaDelegata, pd);
  626.                 }
  627.             }
  628.             this.log.debug("Creazione Mapping Fruizione soggetto-fruitore:"+idSoggetto+
  629.                     " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  630.                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+" con pd:"+idPortaDelegata.getNome()+" in corso...");
  631.             con = null;
  632.             try{
  633.                 con = this.driverRegistroServizi.getConnection("UtilitiesMappingFruizioneErogazione.createMappingFruizione");
  634.                
  635.                 DBMappingUtils.createMappingFruizione(nomeMapping, isDefault ? Costanti.MAPPING_FRUIZIONE_PD_DESCRIZIONE_DEFAULT : nomeMapping,
  636.                         isDefault, idServizio, idSoggetto, idPortaDelegata, con, this.driverRegistroServizi.getTipoDB());
  637.             }finally{
  638.                 try{
  639.                     if(this.driverRegistroServizi.isAtomica()) {
  640.                         if(con!=null) {
  641.                             con.commit();
  642.                         }
  643.                     }
  644.                 }catch(Throwable t){}
  645.                 try{
  646.                     this.driverRegistroServizi.releaseConnection(con);
  647.                 }catch(Throwable t){}
  648.             }
  649.             this.log.debug("Creazione Mapping Fruizione soggetto-fruitore:"+idSoggetto+
  650.                     " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  651.                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+" con pd:"+idPortaDelegata.getNome()+" effettuata con successo");
  652.         }
  653.        
  654.         if(listPDModificare.size()>0) {
  655.             for (IDPortaDelegata idPortaDelegata : listPDModificare.keySet()) {
  656.                 PortaDelegata pd = listPDModificare.get(idPortaDelegata);
  657.                
  658.                 if(nomePortaDefault==null) {
  659.                    
  660.                     IDSoggetto idFruitore = new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario());
  661.                     org.openspcoop2.message.constants.ServiceBinding serviceBinding = readServiceBinding(idServizio);
  662.                     IProtocolFactory<?> p = ProtocolFactoryManager.getInstance().getProtocolFactoryByServiceType(idServizio.getTipo());
  663.                     ProtocolSubscription subcription = p.createProtocolIntegrationConfiguration().createDefaultSubscription(serviceBinding, idFruitore, idServizio);
  664.                     PortaDelegata pdDefault = subcription.getPortaDelegata();
  665.                     MappingFruizionePortaDelegata mapping = subcription.getMapping();
  666.                     IDPortaDelegata idPDDefault = mapping.getIdPortaDelegata();
  667.                     nomePortaDefault = idPDDefault.getNome();
  668.                     if(this.driverConfigurazione.existsPortaDelegata(idPDDefault) == false) {
  669.                         // creo porta delegata standard
  670.                         this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+pd.getTipoSoggettoProprietario()+"/"+pd.getNomeSoggettoProprietario()+" creazione delegante ["+pdDefault.getNome()+"] in corso...");
  671.                         this.driverConfigurazione.createPortaDelegata(pdDefault);
  672.                         this.log.info("Porta delegata ["+pd.getNome()+"] del Soggetto "+pd.getTipoSoggettoProprietario()+"/"+pd.getNomeSoggettoProprietario()+" creazione delegante ["+pdDefault.getNome()+"].");
  673.                     }
  674.                    
  675.                     Connection con = null;
  676.                     try{
  677.                         con = this.driverConfigurazione.getConnection("UtilitiesMappingFruizioneErogazione.createMappingFruizione");
  678.                         this.log.info("Creazione mapping di fruizione di default (nome:"+mapping.getNome()+" default:"+mapping.isDefault()+") tra Porta delegata ["+pdDefault.getNome()+"], fruitore ["+idFruitore+"] e servizio ["+idServizio+"] creazione delegante in corso...");
  679.                         DBMappingUtils.createMappingFruizione(mapping.getNome(), mapping.getDescrizione(), mapping.isDefault(), idServizio, idFruitore, idPDDefault, con, this.driverConfigurazione.getTipoDB());
  680.                         this.log.info("Creazione mapping di fruizione di default (nome:"+mapping.getNome()+" default:"+mapping.isDefault()+") tra Porta delegata ["+pdDefault.getNome()+"], fruitore ["+idFruitore+"] e servizio ["+idServizio+"] creato delegante.");
  681.                     }finally{
  682.                         try{
  683.                             this.driverRegistroServizi.releaseConnection(con);
  684.                         }catch(Exception t){
  685.                             // ignore
  686.                         }
  687.                     }
  688.                 }
  689.                
  690.                 pd.getAzione().setNomePortaDelegante(nomePortaDefault);
  691.                
  692.                 // comunque devo aggiornare i dati per delegatedBy (anche se nomePortaDefault is null)
  693.                
  694.                 this.log.debug("Aggiornamento Porta Delegata '"+idPortaDelegata+"' per  Mapping Fruizione soggetto-fruitore:"+idSoggetto+
  695.                     " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  696.                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+" per impostare nome delegate '"+nomePortaDefault+"' in corso...");
  697.                 this.driverConfigurazione.updatePortaDelegata(pd);
  698.                 this.log.debug("Aggiornamento Porta Delegata '"+idPortaDelegata+"' per  Mapping Fruizione soggetto-fruitore:"+idSoggetto+
  699.                     " soggetto-erogatore:"+idServizio.getSoggettoErogatore()+" servizio:"+
  700.                     idServizio.getTipo()+"/"+idServizio.getNome()+" v"+idServizio.getVersione()+" per impostare nome delegate '"+nomePortaDefault+"' effettuata con successo");
  701.                
  702.             }
  703.         }
  704.     }
  705.    
  706.     private org.openspcoop2.message.constants.ServiceBinding readServiceBinding(IDServizio idServizio) throws ProtocolException{
  707.         try {
  708.             AccordoServizioParteSpecifica asps = this.driverRegistroServizi.getAccordoServizioParteSpecifica(idServizio, false);
  709.             IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
  710.             ServiceBinding sb = this.driverRegistroServizi.getAccordoServizioParteComune(idAccordo).getServiceBinding();
  711.             return RegistroServiziUtils.convertToMessage(sb);
  712.         } catch (Throwable se) {
  713.             throw new ProtocolException("Servizio ["+idServizio+"] non trovato: "+se.getMessage(),se);
  714.         }
  715.     }
  716.    
  717. }