SoggettoUpdateUtilities.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.soggetti;

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

  25. import org.apache.commons.lang3.StringUtils;
  26. import org.openspcoop2.core.allarmi.constants.RuoloPorta;
  27. import org.openspcoop2.core.config.Configurazione;
  28. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola;
  29. import org.openspcoop2.core.config.PortaApplicativa;
  30. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneServizioApplicativo;
  31. import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneSoggetto;
  32. import org.openspcoop2.core.config.PortaApplicativaAzione;
  33. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  34. import org.openspcoop2.core.config.PortaDelegata;
  35. import org.openspcoop2.core.config.PortaDelegataAzione;
  36. import org.openspcoop2.core.config.PortaDelegataSoggettoErogatore;
  37. import org.openspcoop2.core.config.ServizioApplicativo;
  38. import org.openspcoop2.core.config.TrasformazioneRegola;
  39. import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaServizioApplicativo;
  40. import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaSoggetto;
  41. import org.openspcoop2.core.config.constants.PortaApplicativaAzioneIdentificazione;
  42. import org.openspcoop2.core.config.constants.PortaDelegataAzioneIdentificazione;
  43. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  44. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  45. import org.openspcoop2.core.config.driver.FiltroRicercaPorteApplicative;
  46. import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
  47. import org.openspcoop2.core.config.driver.db.IDServizioApplicativoDB;
  48. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  49. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  50. import org.openspcoop2.core.id.IDAccordo;
  51. import org.openspcoop2.core.id.IDAccordoCooperazione;
  52. import org.openspcoop2.core.id.IDPortaApplicativa;
  53. import org.openspcoop2.core.id.IDPortaDelegata;
  54. import org.openspcoop2.core.id.IDServizio;
  55. import org.openspcoop2.core.id.IDServizioApplicativo;
  56. import org.openspcoop2.core.id.IDSoggetto;
  57. import org.openspcoop2.core.registry.AccordoCooperazione;
  58. import org.openspcoop2.core.registry.AccordoCooperazionePartecipanti;
  59. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  60. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  61. import org.openspcoop2.core.registry.Fruitore;
  62. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  63. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  64. import org.openspcoop2.core.registry.driver.FiltroRicercaAccordi;
  65. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  66. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  67. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  68. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  69. import org.openspcoop2.monitor.engine.alarm.wrapper.ConfigurazioneAllarmeBean;
  70. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  71. import org.openspcoop2.web.ctrlstat.dao.SoggettoCtrlStat;
  72. import org.openspcoop2.web.ctrlstat.servlet.ac.AccordiCooperazioneCore;
  73. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  74. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  75. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  76. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  77. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  78. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  79. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;

  80. /**
  81.  * SoggettoUpdateUtilities
  82.  *
  83.  * @author Poli Andrea (apoli@link.it)
  84.  * @author $Author$
  85.  * @version $Rev$, $Date$
  86.  */
  87. public class SoggettoUpdateUtilities {

  88.     // pattern (fruitore)/(erogatore)/....
  89.     private static final String REGEXP_FRUITORE_EROGATORE_OTHER = ".*\\/.*\\/.*";
  90.    
  91.     private static final String REGEXP_FRUITORE_EROGATORE_OTHER_MATCH = "(.*)\\/(.*)\\/(.*)";
  92.    
  93.     private static final String PATTERN_AZIONE_PREFIX_OLD = ".*/";
  94.     private static final String PATTERN_AZIONE_SUFFIX_OLD = "/([^/|^?]*).*";
  95.    
  96.     private static final String PATTERN_AZIONE_PREFIX_NEW = "/";
  97.     private static final String PATTERN_AZIONE_SUFFIX_NEW = "/([^/?]*).*";
  98.    
  99.    
  100.     List<Object> oggettiDaAggiornare = null;
  101.     private SoggettiCore soggettiCore;
  102.     private ServiziApplicativiCore saCore;
  103.     private AccordiServizioParteComuneCore apcCore;
  104.     private AccordiServizioParteSpecificaCore apsCore;
  105.     private PorteDelegateCore porteDelegateCore;
  106.     private PorteApplicativeCore porteApplicativeCore;
  107.     private AccordiCooperazioneCore acCore;
  108.     private ConfigurazioneCore confCore;
  109.     private SoggettoCtrlStat sog;
  110.     private String oldnomeprov;
  111.     private String nomeprov;
  112.     private String oldtipoprov;
  113.     private String tipoprov;
  114.     private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  115.     private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();

  116.     public SoggettoUpdateUtilities(SoggettiCore soggettiCore,
  117.             String oldnomeprov,String nomeprov,
  118.             String oldtipoprov,String tipoprov,
  119.             SoggettoCtrlStat sog) throws Exception{
  120.         this.oggettiDaAggiornare = new ArrayList<>();
  121.         this.soggettiCore = soggettiCore;
  122.         this.saCore = new ServiziApplicativiCore(this.soggettiCore);
  123.         this.apcCore = new AccordiServizioParteComuneCore(this.soggettiCore);
  124.         this.apsCore = new AccordiServizioParteSpecificaCore(this.soggettiCore);
  125.         this.porteDelegateCore = new PorteDelegateCore(this.soggettiCore);
  126.         this.porteApplicativeCore = new PorteApplicativeCore(this.soggettiCore);
  127.         this.acCore = new AccordiCooperazioneCore(this.soggettiCore);
  128.         this.confCore = new ConfigurazioneCore(this.soggettiCore);
  129.         this.oldnomeprov = oldnomeprov;
  130.         this.nomeprov = nomeprov;
  131.         this.oldtipoprov = oldtipoprov;
  132.         this.tipoprov = tipoprov;
  133.         this.sog = sog;
  134.     }

  135.     public List<Object> getOggettiDaAggiornare() {
  136.         return this.oggettiDaAggiornare;
  137.     }
  138.    
  139.     public void addSoggetto(){
  140.         this.oggettiDaAggiornare.add(this.sog);
  141.     }

  142.     public void checkServiziApplicativi() throws DriverConfigurazioneException{
  143.         // SERVIZI - APPLICATIVI
  144.         // Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica dei servizi applicativi
  145.         // poiche il cambio si riflette sul nome dei connettori del servizio applicativo

  146.         if (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov)) {

  147.             List<String> nomeListSA = new ArrayList<>();
  148.             List<ServizioApplicativo> listSA = new ArrayList<>();
  149.             List<IDServizioApplicativoDB> tmpListIDSA = this.saCore.getIdServiziApplicativiWithIdErogatore(this.sog.getId());
  150.             for (IDServizioApplicativoDB idServizioApplicativo : tmpListIDSA) {
  151.                 if (!nomeListSA.contains(idServizioApplicativo.getNome())) {
  152.                     nomeListSA.add(idServizioApplicativo.getNome());
  153.                     ServizioApplicativo servizioApplicativo = this.saCore.getServizioApplicativo(idServizioApplicativo);
  154.                     servizioApplicativo.setTipoSoggettoProprietario(this.tipoprov);
  155.                     servizioApplicativo.setNomeSoggettoProprietario(this.nomeprov);
  156.                     IDServizioApplicativo oldIDServizioApplicativoForUpdate = new IDServizioApplicativo();
  157.                     oldIDServizioApplicativoForUpdate.setNome(servizioApplicativo.getNome());
  158.                     oldIDServizioApplicativoForUpdate.setIdSoggettoProprietario(new IDSoggetto(this.oldtipoprov, this.oldnomeprov));
  159.                     servizioApplicativo.setOldIDServizioApplicativoForUpdate(oldIDServizioApplicativoForUpdate);
  160.                     listSA.add(servizioApplicativo);
  161.                 }

  162.             }

  163.             // aggiungo tutti i servizi applicativi trovati
  164.             for (ServizioApplicativo sa : listSA) {
  165.                 this.oggettiDaAggiornare.add(sa);
  166.             }

  167.         }

  168.     }

  169.     public void checkAccordiCooperazione() throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  170.         // Accordi di Cooperazione
  171.         // Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica degli accordi di cooperazione:
  172.         // - soggetto referente
  173.         // - soggetti partecipanti
  174.         if(this.soggettiCore.isRegistroServiziLocale() &&
  175.              (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
  176.              ){

  177.             // - Soggetto referente
  178.             FiltroRicercaAccordi filtroRicercaAccordi = new FiltroRicercaAccordi();
  179.             filtroRicercaAccordi.setTipoSoggettoReferente(this.oldtipoprov);
  180.             filtroRicercaAccordi.setNomeSoggettoReferente(this.oldnomeprov);
  181.             List<IDAccordoCooperazione> idAccordiCooperazione = null;
  182.             try{
  183.                 idAccordiCooperazione = this.acCore.getAllIdAccordiCooperazione(filtroRicercaAccordi);
  184.             }catch(DriverRegistroServiziNotFound dNot){
  185.                 // ignore
  186.             }
  187.             if(idAccordiCooperazione!=null){
  188.                 for(int i=0; i<idAccordiCooperazione.size(); i++){
  189.                     AccordoCooperazione ac = this.acCore.getAccordoCooperazione(idAccordiCooperazione.get(i));
  190.                     ac.getSoggettoReferente().setTipo(this.tipoprov);
  191.                     ac.getSoggettoReferente().setNome(this.nomeprov);

  192.                     // Check se come soggetto partecipante c'e' il soggetto stesso
  193.                     if(ac.getElencoPartecipanti()!=null){
  194.                         AccordoCooperazionePartecipanti partecipanti = ac.getElencoPartecipanti();
  195.                         for(int j=0; j<partecipanti.sizeSoggettoPartecipanteList(); j++){
  196.                             if(partecipanti.getSoggettoPartecipante(j).getTipo().equals(this.oldtipoprov) &&
  197.                                     partecipanti.getSoggettoPartecipante(j).getNome().equals(this.oldnomeprov)){
  198.                                 partecipanti.getSoggettoPartecipante(j).setTipo(this.tipoprov);
  199.                                 partecipanti.getSoggettoPartecipante(j).setNome(this.nomeprov);
  200.                             }
  201.                         }
  202.                     }

  203.                     this.oggettiDaAggiornare.add(ac);
  204.                     /**System.out.println("AC ["+IDAccordoCooperazione.getUriFromAccordo(ac)+"]");*/
  205.                 }
  206.             }


  207.             // - Soggetti Partecipanti
  208.             List<AccordoCooperazione> acs = this.acCore.accordiCoopWithSoggettoPartecipante(new IDSoggetto(this.oldtipoprov,this.oldnomeprov));
  209.             for(int i=0; i<acs.size(); i++){
  210.                 AccordoCooperazione ac = acs.get(i);

  211.                 // check accordi con referente (non effettuo il change 2 volte)
  212.                 boolean find = false;
  213.                 if(idAccordiCooperazione!=null){
  214.                     for(int j=0; j<idAccordiCooperazione.size(); j++){
  215.                         if(this.idAccordoCooperazioneFactory.getUriFromIDAccordo(idAccordiCooperazione.get(j)).equals(this.idAccordoCooperazioneFactory.getUriFromAccordo(ac))){
  216.                             find = true;
  217.                             break;
  218.                         }
  219.                     }
  220.                 }
  221.                 if(!find){
  222.                     if(ac.getElencoPartecipanti()!=null){
  223.                         AccordoCooperazionePartecipanti partecipanti = ac.getElencoPartecipanti();
  224.                         for(int j=0; j<partecipanti.sizeSoggettoPartecipanteList(); j++){
  225.                             if(partecipanti.getSoggettoPartecipante(j).getTipo().equals(this.oldtipoprov) &&
  226.                                     partecipanti.getSoggettoPartecipante(j).getNome().equals(this.oldnomeprov)){
  227.                                 partecipanti.getSoggettoPartecipante(j).setTipo(this.tipoprov);
  228.                                 partecipanti.getSoggettoPartecipante(j).setNome(this.nomeprov);
  229.                             }
  230.                         }
  231.                     }
  232.                     this.oggettiDaAggiornare.add(ac);
  233.                     /**System.out.println("AC PARTECIPANTE ["+IDAccordoCooperazione.getUriFromAccordo(ac)+"]");*/
  234.                 }
  235.             }

  236.         }
  237.     }



  238.     public void checkAccordiServizioParteComune() throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  239.         // Accordi di Servizio
  240.         // Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica degli accordi di servizio
  241.         // poiche il cambio si riflette sul soggetto gestore

  242.         if(this.soggettiCore.isRegistroServiziLocale() &&
  243.              (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
  244.              ){

  245.             /**try{
  246.                 as = core.getAllIdAccordiWithSoggettoReferente(new IDSoggetto(oldtipoprov,oldnomeprov));
  247.             }catch(DriverRegistroServiziNotFound dNotFound){}
  248.             if(as!=null){
  249.                 for(int i=0; i<as.length; i++){
  250.                     as[i].getSoggettoReferente().setTipo(tipoprov);
  251.                     as[i].getSoggettoReferente().setNome(nomeprov);
  252.                     oggettiDaAggiornare.add(as[i]);
  253.                 }
  254.             }*/

  255.             FiltroRicercaAccordi filtroRicercaAccordi = new FiltroRicercaAccordi();
  256.             filtroRicercaAccordi.setTipoSoggettoReferente(this.oldtipoprov);
  257.             filtroRicercaAccordi.setNomeSoggettoReferente(this.oldnomeprov);
  258.             List<IDAccordo> idAccordoServizio = null;
  259.             try{
  260.                 idAccordoServizio = this.apcCore.getAllIdAccordiServizio(filtroRicercaAccordi);
  261.             }catch(DriverRegistroServiziNotFound dNot){
  262.                 // ignore
  263.             }
  264.             if(idAccordoServizio!=null){
  265.                 for(int i=0; i<idAccordoServizio.size(); i++){
  266.                     AccordoServizioParteComune as = this.apcCore.getAccordoServizioFull(idAccordoServizio.get(i));
  267.                     as.getSoggettoReferente().setTipo(this.tipoprov);
  268.                     as.getSoggettoReferente().setNome(this.nomeprov);
  269.                     IDAccordo idAccordoOLD = this.idAccordoFactory.getIDAccordoFromValues(as.getNome(), this.oldtipoprov, this.oldnomeprov, as.getVersione());
  270.                     as.setOldIDAccordoForUpdate(idAccordoOLD);
  271.                     this.oggettiDaAggiornare.add(as);
  272.                     /**System.out.println("AS ["+IDAccordo.getUriFromAccordo(as)+"]");*/
  273.                 }
  274.             }


  275.             // - soggetti erogatore di servizi componenti
  276.             List<AccordoServizioParteComune> ass = this.apcCore.accordiServizioServiziComponentiConSoggettoErogatore(new IDSoggetto(this.oldtipoprov,this.oldnomeprov));
  277.             for(int i=0; i<ass.size(); i++){
  278.                 AccordoServizioParteComune as = ass.get(i);
  279.                 // check accordi con referente (non effettuo il change 2 volte)
  280.                 boolean find = false;
  281.                 if(idAccordoServizio!=null){
  282.                     for(int j=0; j<idAccordoServizio.size(); j++){
  283.                         if(this.idAccordoFactory.getUriFromIDAccordo(idAccordoServizio.get(j)).equals(IDAccordoFactory.getInstance().getUriFromAccordo(as))){
  284.                             find = true;
  285.                             break;
  286.                         }
  287.                     }
  288.                 }
  289.                 if(!find &&
  290.                     as.getServizioComposto()!=null){
  291.                     for(int j=0;j<as.getServizioComposto().sizeServizioComponenteList();j++){
  292.                         if(as.getServizioComposto().getServizioComponente(j).getTipoSoggetto().equals(this.oldtipoprov) &&
  293.                                 as.getServizioComposto().getServizioComponente(j).getNomeSoggetto().equals(this.oldnomeprov)){
  294.                             as.getServizioComposto().getServizioComponente(j).setTipoSoggetto(this.tipoprov);
  295.                             as.getServizioComposto().getServizioComponente(j).setNomeSoggetto(this.nomeprov);
  296.                         }
  297.                     }
  298.                     // Devo anche controllare che non sia cambiato il soggetto referente di questo as.
  299.                     if(as.getSoggettoReferente()!=null &&
  300.                         this.oldtipoprov.equals(as.getSoggettoReferente().getTipo()) &&
  301.                                 this.oldnomeprov.equals(as.getSoggettoReferente().getNome())){
  302.                         as.getSoggettoReferente().setTipo(this.tipoprov);
  303.                         as.getSoggettoReferente().setNome(this.nomeprov);
  304.                         IDAccordo idAccordoOLD = IDAccordoFactory.getInstance().getIDAccordoFromValues(as.getNome(), this.oldtipoprov, this.oldnomeprov, as.getVersione());
  305.                         as.setOldIDAccordoForUpdate(idAccordoOLD);
  306.                     }
  307.                     this.oggettiDaAggiornare.add(as);
  308.                     /**System.out.println("As SERVIZIO COMPONENTE ["+IDAccordo.getUriFromAccordo(as)+"]");*/
  309.                 }
  310.             }

  311.         }

  312.     }

  313.     private List<AccordoServizioParteSpecifica> accordiServizioParteSpecifica = null;
  314.     public void checkAccordiServizioParteSpecifica() throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  315.         // SERVIZI
  316.         // Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica dei servizi
  317.         // poiche il cambio si riflette sul nome dei connettori del servizio
  318.         this.accordiServizioParteSpecifica = new ArrayList<>();
  319.         if (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov)) {
  320.             FiltroRicercaServizi filtroRicercaServizi = new FiltroRicercaServizi();
  321.             filtroRicercaServizi.setTipoSoggettoErogatore(this.oldtipoprov);
  322.             filtroRicercaServizi.setNomeSoggettoErogatore(this.oldnomeprov);
  323.             List<IDServizio> idServizio = null;
  324.             try{
  325.                 idServizio = this.apsCore.getAllIdServizi(filtroRicercaServizi);
  326.             }catch(DriverRegistroServiziNotFound dNot){
  327.                 // ignore
  328.             }
  329.             if(idServizio!=null){
  330.                 for(int i=0; i<idServizio.size(); i++){
  331.                     AccordoServizioParteSpecifica asps = this.apsCore.getServizio(idServizio.get(i));
  332.                     asps.setTipoSoggettoErogatore(this.tipoprov);
  333.                     asps.setNomeSoggettoErogatore(this.nomeprov);
  334.                     IDServizio oldIDServizioForUpdate = IDServizioFactory.getInstance().getIDServizioFromValues(asps.getTipo(), asps.getNome(),
  335.                             new IDSoggetto(this.oldtipoprov, this.oldnomeprov),
  336.                             asps.getVersione());
  337.                     asps.setOldIDServizioForUpdate(oldIDServizioForUpdate);

  338.                     // Check accordo di Servizio
  339.                     IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromUri(asps.getAccordoServizioParteComune());
  340.                     if(idAccordo.getSoggettoReferente()!=null &&
  341.                             idAccordo.getSoggettoReferente().getTipo().equals(this.oldtipoprov) &&
  342.                             idAccordo.getSoggettoReferente().getNome().equals(this.oldnomeprov)){
  343.                         idAccordo.getSoggettoReferente().setTipo(this.tipoprov);
  344.                         idAccordo.getSoggettoReferente().setNome(this.nomeprov);
  345.                         asps.setAccordoServizioParteComune(this.idAccordoFactory.getUriFromIDAccordo(idAccordo));
  346.                     }

  347.                     // Fruitori
  348.                     for(int j=0; j<asps.sizeFruitoreList(); j++){
  349.                         if(asps.getFruitore(j).getTipo().equals(this.oldtipoprov) &&
  350.                                 asps.getFruitore(j).getNome().equals(this.oldnomeprov)){
  351.                             asps.getFruitore(j).setTipo(this.tipoprov);
  352.                             asps.getFruitore(j).setNome(this.nomeprov);
  353.                         }
  354.                     }

  355.                     if(this.soggettiCore.isRegistroServiziLocale()){
  356.                         this.oggettiDaAggiornare.add(asps);
  357.                     }
  358.                     this.accordiServizioParteSpecifica.add(asps);
  359.                 }
  360.             }
  361.         }
  362.     }


  363.     public void checkPorteDelegate() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  364.         // Porte Delegate
  365.         // Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica delle porte delegate
  366.         // poiche il cambio si riflette sul nome della porta delegata
  367.         Map<Long, PortaDelegata> listaPD = new HashMap<>();
  368.        
  369.         if (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov)) {

  370.             // ** Verifica per soggetto proprietario o soggetto erogatore ** //
  371.            
  372.             // Vanno modificate tutte le Porte Delegate (appartenenti al soggetto modificato oppure che possiedono come soggetto erogatore il soggetto modificato)
  373.             // che presentano la seguente situazione:
  374.             // - pattern (fruitore)/(erogatore)/....
  375.             //   se (fruitore) contiene tipoNomeSoggetto proprietario della PortaDelegata deve essere modificato
  376.             //   se (erogatore) contiene tipoNomeSoggetto erogatore definito all'interno della porta delegata deve essere modificato.
  377.             List<PortaDelegata> list = new ArrayList<>();
  378.            
  379.             FiltroRicercaPorteDelegate filtroRicerca = new FiltroRicercaPorteDelegate();
  380.             filtroRicerca.setTipoSoggetto(this.oldtipoprov);
  381.             filtroRicerca.setNomeSoggetto(this.oldnomeprov);
  382.             List<IDPortaDelegata> listID = this.porteDelegateCore.getAllIdPorteDelegate(filtroRicerca);
  383.             if(listID!=null && !listID.isEmpty()){
  384.                 for (IDPortaDelegata idPortaDelegata : listID) {
  385.                     list.add(this.porteDelegateCore.getPortaDelegata(idPortaDelegata));
  386.                 }
  387.             }
  388.             filtroRicerca = new FiltroRicercaPorteDelegate();
  389.             filtroRicerca.setTipoSoggettoErogatore(this.oldtipoprov);
  390.             filtroRicerca.setNomeSoggettoErogatore(this.oldnomeprov);
  391.             listID = this.porteDelegateCore.getAllIdPorteDelegate(filtroRicerca);
  392.             if(listID!=null && !listID.isEmpty()){
  393.                 for (IDPortaDelegata idPortaDelegata : listID) {
  394.                     list.add(this.porteDelegateCore.getPortaDelegata(idPortaDelegata));
  395.                 }
  396.             }
  397.            
  398.             if(list!=null && !list.isEmpty()){
  399.                 List<String> checkUnique = new ArrayList<>();
  400.                 for (PortaDelegata portaDelegata : list) {
  401.                    
  402.                     if(checkUnique.contains((portaDelegata.getId().longValue()+""))){
  403.                         continue;
  404.                     }
  405.                    
  406.                     boolean modificatoNome = true;
  407.                    
  408.                     boolean soggettoProprietarioCombaciaSoggettoInModifica = false;
  409.                     String tipoNomeSoggettoFruitore = portaDelegata.getTipoSoggettoProprietario()+"_"+portaDelegata.getNomeSoggettoProprietario();
  410.                     if(tipoNomeSoggettoFruitore.equals(this.oldtipoprov+"_"+this.oldnomeprov)){
  411.                         soggettoProprietarioCombaciaSoggettoInModifica = true;
  412.                        
  413.                         portaDelegata.setTipoSoggettoProprietario(this.tipoprov);
  414.                         portaDelegata.setNomeSoggettoProprietario(this.nomeprov);
  415.                     }
  416.                    
  417.                     String nomeAttuale = portaDelegata.getNome();
  418.                     String regex = REGEXP_FRUITORE_EROGATORE_OTHER;
  419.                     // pattern (fruitore)/(erogatore)/....
  420.                     if(nomeAttuale.matches(regex)){
  421.                         String[] tmp = nomeAttuale.split("\\/");
  422.                         String partFruitore = tmp[0];
  423.                         String partErogatore = tmp[1];
  424.                         String rimanente = "";
  425.                         int lengthParteRimanente = (partFruitore+"/"+partErogatore).length();
  426.                         if(nomeAttuale.length()>lengthParteRimanente){
  427.                             rimanente = nomeAttuale.substring(lengthParteRimanente);
  428.                         }                          
  429.                        
  430.                         // se (fruitore) contiene tipoNomeSoggetto proprietario della PortaDelegata deve essere modificato
  431.                         if(tipoNomeSoggettoFruitore.equals(partFruitore)){
  432.                             if(tipoNomeSoggettoFruitore.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
  433.                                 partFruitore = this.tipoprov + "_" + this.nomeprov;
  434.                                 modificatoNome = true;
  435.                             }
  436.                         }
  437.                         else if(("__"+tipoNomeSoggettoFruitore).equals(partFruitore) &&
  438.                             (tipoNomeSoggettoFruitore).equals(this.oldtipoprov + "_" + this.oldnomeprov)){
  439.                             partFruitore = "__"+this.tipoprov + "_" + this.nomeprov;
  440.                             modificatoNome = true;
  441.                         }
  442.                        
  443.                         // se (erogatore) contiene tipoNomeSoggetto erogatore della PortaDelegata deve essere modificato
  444.                         if(portaDelegata.getSoggettoErogatore()!=null &&
  445.                                 portaDelegata.getSoggettoErogatore().getTipo()!=null && !"".equals(portaDelegata.getSoggettoErogatore().getTipo()) &&
  446.                                 portaDelegata.getSoggettoErogatore().getNome()!=null && !"".equals(portaDelegata.getSoggettoErogatore().getNome())){
  447.                             String tipoNomeSoggettoErogatore = portaDelegata.getSoggettoErogatore().getTipo()+"_"+portaDelegata.getSoggettoErogatore().getNome();
  448.                             if(tipoNomeSoggettoErogatore.equals(partErogatore) &&
  449.                                 tipoNomeSoggettoErogatore.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
  450.                                 partErogatore = this.tipoprov + "_" + this.nomeprov;
  451.                                 portaDelegata.getSoggettoErogatore().setTipo(this.tipoprov);
  452.                                 portaDelegata.getSoggettoErogatore().setNome(this.nomeprov);
  453.                                 modificatoNome = true;
  454.                             }
  455.                         }
  456.                        
  457.                         if(modificatoNome){
  458.                             String nuovoNome = partFruitore + "/" + partErogatore + rimanente;
  459.                             IDPortaDelegata oldIDPortaDelegataForUpdate = new IDPortaDelegata();
  460.                             oldIDPortaDelegataForUpdate.setNome(nomeAttuale);
  461.                             portaDelegata.setOldIDPortaDelegataForUpdate(oldIDPortaDelegataForUpdate);
  462.                             portaDelegata.setNome(nuovoNome);
  463.                            
  464.                             // modifica della descrizione
  465.                             String descrizionePD = portaDelegata.getDescrizione();
  466.                             if (descrizionePD != null && !descrizionePD.equals("")) {

  467.                                 // Caso 1: subscription default
  468.                                 // Subscription from gw/ENTE for service gw/ErogatoreEsterno:gw/EsempioREST:1
  469.                                 String matchCaso1testFrom = " "+this.oldtipoprov+"/"+this.oldnomeprov+" ";
  470.                                 if(descrizionePD.contains(matchCaso1testFrom)) {
  471.                                     String replaceCaso1testFrom = " "+this.tipoprov+"/"+this.nomeprov+" ";
  472.                                     descrizionePD = descrizionePD.replace(matchCaso1testFrom, replaceCaso1testFrom);
  473.                                 }
  474.                                 String matchCaso1testService = " "+this.oldtipoprov+"/"+this.oldnomeprov+":";
  475.                                 if(descrizionePD.contains(matchCaso1testService)) {
  476.                                     String replaceCaso1testService = " "+this.tipoprov+"/"+this.nomeprov+":";
  477.                                     descrizionePD = descrizionePD.replace(matchCaso1testService, replaceCaso1testService);
  478.                                 }
  479.                            
  480.                                 // Caso 2: altra subscription
  481.                                 // Internal Subscription 'Specific1' for gw_ENTE/gw_ErogatoreEsterno/gw_EsempioREST/1
  482.                                 String matchCaso2testMittente = " "+this.oldtipoprov+"_"+this.oldnomeprov+"/";
  483.                                 if(descrizionePD.contains(matchCaso2testMittente)) {
  484.                                     String replaceCaso2testMittente = " "+this.tipoprov+"_"+this.nomeprov+"/";
  485.                                     descrizionePD = descrizionePD.replace(matchCaso2testMittente, replaceCaso2testMittente);
  486.                                 }
  487.                                 String matchCaso2testErogatore = "/"+this.oldtipoprov+"_"+this.oldnomeprov+"/";
  488.                                 if(descrizionePD.contains(matchCaso2testErogatore)) {
  489.                                     String replaceCaso2testErogatore = "/"+this.tipoprov+"_"+this.nomeprov+"/";
  490.                                     descrizionePD = descrizionePD.replace(matchCaso2testErogatore, replaceCaso2testErogatore);
  491.                                 }
  492.                                
  493.                                 portaDelegata.setDescrizione(descrizionePD);

  494.                             }
  495.                            
  496.                             // regex del pattern azione
  497.                             // OLD: .*/(fruitore)/(erogatore)/(servizio)/([^/|^?]*).*
  498.                             // NEW 3.3.13: /(fruitore)/(erogatore)/(servizio)/([^/?]*).*
  499.                             PortaDelegataAzione pdAzione = portaDelegata.getAzione();
  500.                             PortaDelegataAzioneIdentificazione identificazione = pdAzione != null ? pdAzione.getIdentificazione() : null;
  501.                             String patterAzione = "";
  502.                             if(pdAzione!=null) {
  503.                                 patterAzione = pdAzione.getPattern() != null ? pdAzione.getPattern() : "";
  504.                             }
  505.                             String patternAzionePrefixOld = PATTERN_AZIONE_PREFIX_OLD;
  506.                             String patternAzioneSuffix1Old = PATTERN_AZIONE_SUFFIX_OLD;
  507.                             String patternAzionePrefixNew = PATTERN_AZIONE_PREFIX_NEW;
  508.                             String patternAzioneSuffix1New = PATTERN_AZIONE_SUFFIX_NEW;
  509.                             // se identificazione urlbased procedo con i controlli
  510.                             if (PortaDelegataAzioneIdentificazione.URL_BASED.equals(identificazione)) {
  511.                                
  512.                                 boolean oldPattern = patterAzione.startsWith(patternAzionePrefixOld) && patterAzione.endsWith(patternAzioneSuffix1Old);
  513.                                 boolean newPattern = patterAzione.startsWith(patternAzionePrefixNew) && patterAzione.endsWith(patternAzioneSuffix1New);
  514.                                
  515.                                 if(oldPattern || newPattern) {
  516.                                
  517.                                     // caso1
  518.                                     int startidx = oldPattern ? patternAzionePrefixOld.length() : patternAzionePrefixNew.length();
  519.                                     int endidx = oldPattern ? patterAzione.lastIndexOf(patternAzioneSuffix1Old) : patterAzione.lastIndexOf(patternAzioneSuffix1New);
  520.                                     String tmpPat = patterAzione.substring(startidx, endidx);
  521.                                     // a questo punto ottengo una stringa del tipo
  522.                                     // (fruitore)/(erogatore)/(servizio)
  523.                                     // se rispetta la regex allora vuol dire che il
  524.                                     // pattern azione e' quello di default
  525.                                     // e devo effettuare i cambiamenti
  526.                                     if (tmpPat.matches(regex)) {
  527.                                         String[] val = tmpPat.split("/");
  528.                                         String fruitore = val[0];
  529.                                         String erogatore = val[1];
  530.                                         String rimanenteRegExp = "";
  531.                                         int lengthParteRimanenteRegExp = (fruitore+"/"+erogatore).length();
  532.                                         if(tmpPat.length()>lengthParteRimanenteRegExp){
  533.                                             rimanenteRegExp = tmpPat.substring(lengthParteRimanenteRegExp);
  534.                                         }  

  535.                                         boolean match = false;
  536.                                         String partOld = "(?:"+this.oldtipoprov+"_)?"+this.oldnomeprov+"";
  537.                                         String partNew = "(?:"+this.tipoprov+"_)?"+this.nomeprov+"";
  538.                                        
  539.                                         // vedo se matcha il fruitore
  540.                                         if (fruitore.equals(partOld)) {
  541.                                             fruitore = partNew;
  542.                                             match = true;
  543.                                         }
  544.                                        
  545.                                         // vedo se matcha anche erogatore (loopback)
  546.                                         if (erogatore.equals(partOld)) {
  547.                                             erogatore = partNew;
  548.                                             match = true;
  549.                                         }

  550.                                         if(match){
  551.                                             String newPatternAzione = patternAzionePrefixNew + fruitore + "/" + erogatore + rimanenteRegExp + patternAzioneSuffix1New;
  552.                                             pdAzione.setPattern(newPatternAzione);
  553.                                             portaDelegata.setAzione(pdAzione);
  554.                                         }
  555.                                     }
  556.                                 }
  557.                             }// fine controllo azione
  558.    
  559.                             // DelegatedBy
  560.                             String nomePortaDelegante = null;
  561.                             if(pdAzione!=null) {
  562.                                 nomePortaDelegante = pdAzione.getNomePortaDelegante() != null ? pdAzione.getNomePortaDelegante() : null;
  563.                             }
  564.                             if (PortaDelegataAzioneIdentificazione.DELEGATED_BY.equals(identificazione) && nomePortaDelegante!=null ) {
  565.                                 String regexDelegante = REGEXP_FRUITORE_EROGATORE_OTHER;
  566.                                 // pattern (fruitore)/(erogatore)/....
  567.                                 if(nomePortaDelegante.matches(regexDelegante)){
  568.                                     String[] tmpDelegante = nomePortaDelegante.split("\\/");
  569.                                     String partFruitoreDelegante = tmpDelegante[0];
  570.                                     String partErogatoreDelegante = tmpDelegante[1];
  571.                                     String rimanenteDelegante = "";
  572.                                     int lengthParteRimanenteDelegante = (partFruitoreDelegante+"/"+partErogatoreDelegante).length();
  573.                                     if(nomePortaDelegante.length()>lengthParteRimanenteDelegante){
  574.                                         rimanenteDelegante = nomePortaDelegante.substring(lengthParteRimanenteDelegante);
  575.                                     }                          
  576.                                     boolean modificatoNomeDelegante = false;
  577.                                    
  578.                                     // se (fruitore) contiene tipoNomeSoggetto proprietario della PortaDelegata deve essere modificato
  579.                                     if(tipoNomeSoggettoFruitore.equals(partFruitoreDelegante)){
  580.                                         if(tipoNomeSoggettoFruitore.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
  581.                                             partFruitoreDelegante = this.tipoprov + "_" + this.nomeprov;
  582.                                             modificatoNomeDelegante = true;
  583.                                         }
  584.                                     }
  585.                                     else if(("__"+tipoNomeSoggettoFruitore).equals(partFruitoreDelegante) &&
  586.                                         (tipoNomeSoggettoFruitore).equals(this.oldtipoprov + "_" + this.oldnomeprov)){
  587.                                         partFruitoreDelegante = "__"+this.tipoprov + "_" + this.nomeprov;
  588.                                         modificatoNomeDelegante = true;
  589.                                     }
  590.                                    
  591.                                     // se (erogatore) contiene tipoNomeSoggetto erogatore della PortaDelegata deve essere modificato
  592.                                     if(partErogatoreDelegante!=null && partErogatoreDelegante.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
  593.                                         partErogatoreDelegante = this.tipoprov + "_" + this.nomeprov;
  594.                                         modificatoNomeDelegante = true;
  595.                                     }
  596.                                    
  597.                                     if(modificatoNomeDelegante){
  598.                                         String nuovoNomeDelegante = partFruitoreDelegante + "/" + partErogatoreDelegante + rimanenteDelegante;
  599.                                         portaDelegata.getAzione().setNomePortaDelegante(nuovoNomeDelegante);
  600.                                     }
  601.                                 }
  602.                             }// fine controllo DelegatedBy
  603.                         }
  604.                     }
  605.                    
  606.                     // inserisco la porta
  607.                     if(soggettoProprietarioCombaciaSoggettoInModifica || modificatoNome){
  608.                         listaPD.put(portaDelegata.getId(), portaDelegata);
  609.                         checkUnique.add((portaDelegata.getId().longValue()+""));
  610.                     }
  611.                 }
  612.             }
  613.            
  614.             // ** Verifica per soggetto proprietario o soggetto erogatore ** //


  615.             // PORTE DELEGATE
  616.             // Modifica servizio
  617.             // per ogni servizio da modificare devo effettuare le modifiche
  618.             // alle porte delegate
  619.             for (int j=0; j<this.accordiServizioParteSpecifica.size(); j++) {

  620.                 AccordoServizioParteSpecifica asps = this.accordiServizioParteSpecifica.get(j);

  621.                 List<PortaDelegata> tmpListPD = null;
  622.                 // modifico le porte delegate interessate dal cambiamento
  623.                 // del nome del soggetto
  624.                 // recupero lo porte delegate per location
  625.                 // e aggiorno il nome e la location
  626.                 String locationPrefix = "";
  627.                 String locationSuffix = "/" + this.oldtipoprov +"_" + this.oldnomeprov + "/" + asps.getTipo()+"_" +asps.getNome() + "/v" + asps.getVersione().intValue();
  628.                 for (Fruitore fruitore : asps.getFruitoreList()) {
  629.                     locationPrefix = fruitore.getTipo()+"_" + fruitore.getNome();
  630.                     String location = locationPrefix + locationSuffix;
  631.                     IDPortaDelegata idPD = new IDPortaDelegata();
  632.                     idPD.setNome(location);
  633.                    
  634.                     PortaDelegata portaDelegata = null;
  635.                     try {
  636.                         portaDelegata = this.porteDelegateCore.getPortaDelegata(idPD);
  637.                     }catch(DriverConfigurazioneNotFound notFound) {
  638.                         // ignore
  639.                     }
  640.                     if(portaDelegata==null) {
  641.                         try {
  642.                             // backward compatibility: provare ad eliminare la v, che prima non veniva utilizzata
  643.                             String oldLocationSuffix = "/" + this.oldtipoprov +"_" + this.oldnomeprov + "/" + asps.getTipo()+"_" +asps.getNome() + "/" + asps.getVersione().intValue();
  644.                             String oldLocation = locationPrefix + oldLocationSuffix;
  645.                             idPD.setNome(oldLocation);
  646.                             portaDelegata = this.porteDelegateCore.getPortaDelegata(idPD);
  647.                         }catch(DriverConfigurazioneNotFound notFound) {
  648.                             // ignore
  649.                         }
  650.                     }
  651.                     if(portaDelegata!=null){

  652.                         // Per tutte le porte delegate che rispettano la
  653.                         // location cambio la vecchia location e inoltre
  654.                         // controllo pure il pattern azione

  655.                         Long idPorta = portaDelegata.getId();

  656.                         // se la porta delegata e' gia stata inserita
  657.                         // nella lista per modifiche
  658.                         // allora prendo quella ed effettuo ulteriori
  659.                         // modifiche
  660.                         if (listaPD.containsKey(idPorta)) {
  661.                             portaDelegata = listaPD.get(idPorta);
  662.                         }
  663.                         // new locationSuffix
  664.                         String newLocationSuffix = "/" + this.tipoprov+"_" +this.nomeprov + "/" + asps.getTipo()+"_" +asps.getNome() + "/v" + asps.getVersione().intValue();
  665.                         String newLocationPrefix = null;
  666.                         if(fruitore.getTipo().equals(this.oldtipoprov) && fruitore.getNome().equals(this.oldnomeprov)){
  667.                             newLocationPrefix = this.tipoprov+ "_" +this.nomeprov;
  668.                         }
  669.                         else{
  670.                             newLocationPrefix = fruitore.getTipo()+ "_" +fruitore.getNome();
  671.                         }
  672.                         String newLocation = newLocationPrefix + newLocationSuffix;

  673.                         if(portaDelegata.getOldIDPortaDelegataForUpdate()==null){
  674.                             // Il vecchio nome e' gia essere stato messo prima nella passata sopra.
  675.                             IDPortaDelegata oldIDPortaDelegataForUpdate = new IDPortaDelegata();
  676.                             oldIDPortaDelegataForUpdate.setNome(portaDelegata.getNome());
  677.                             portaDelegata.setOldIDPortaDelegataForUpdate(oldIDPortaDelegataForUpdate);
  678.                         }
  679.                         portaDelegata.setNome(newLocation);
  680.                         // aggiorno la descrizione della porta
  681.                         String descrizionePD = portaDelegata.getDescrizione();
  682.                         if (descrizionePD != null && !descrizionePD.equals("")) {
  683.                            
  684.                             // Caso 1: subscription default
  685.                             // Subscription from gw/ENTE for service gw/ErogatoreEsterno:gw/EsempioREST:1
  686.                             String matchCaso1testFrom = " "+this.oldtipoprov+"/"+this.oldnomeprov+" ";
  687.                             if(descrizionePD.contains(matchCaso1testFrom)) {
  688.                                 String replaceCaso1testFrom = " "+this.tipoprov+"/"+this.nomeprov+" ";
  689.                                 descrizionePD = descrizionePD.replace(matchCaso1testFrom, replaceCaso1testFrom);
  690.                             }
  691.                             String matchCaso1testService = " "+this.oldtipoprov+"/"+this.oldnomeprov+":";
  692.                             if(descrizionePD.contains(matchCaso1testService)) {
  693.                                 String replaceCaso1testService = " "+this.tipoprov+"/"+this.nomeprov+":";
  694.                                 descrizionePD = descrizionePD.replace(matchCaso1testService, replaceCaso1testService);
  695.                             }
  696.                        
  697.                             // Caso 2: altra subscription
  698.                             // Internal Subscription 'Specific1' for gw_ENTE/gw_ErogatoreEsterno/gw_EsempioREST/1
  699.                             String matchCaso2testMittente = " "+this.oldtipoprov+"_"+this.oldnomeprov+"/";
  700.                             if(descrizionePD.contains(matchCaso2testMittente)) {
  701.                                 String replaceCaso2testMittente = " "+this.tipoprov+"_"+this.nomeprov+"/";
  702.                                 descrizionePD = descrizionePD.replace(matchCaso2testMittente, replaceCaso2testMittente);
  703.                             }
  704.                             String matchCaso2testErogatore = "/"+this.oldtipoprov+"_"+this.oldnomeprov+"/";
  705.                             if(descrizionePD.contains(matchCaso2testErogatore)) {
  706.                                 String replaceCaso2testErogatore = "/"+this.tipoprov+"_"+this.nomeprov+"/";
  707.                                 descrizionePD = descrizionePD.replace(matchCaso2testErogatore, replaceCaso2testErogatore);
  708.                             }
  709.                            
  710.                             portaDelegata.setDescrizione(descrizionePD);
  711.                         }
  712.                         // aggiorno anche il soggetto
  713.                         PortaDelegataSoggettoErogatore sogErogatore = portaDelegata.getSoggettoErogatore();
  714.                         sogErogatore.setTipo(this.sog.getTipo());
  715.                         sogErogatore.setNome(this.sog.getNome());
  716.                         portaDelegata.setSoggettoErogatore(sogErogatore);


  717.                         // CONTROLLO PATTERN AZIONE inoltre va
  718.                         // controllato anche il pattern dell'azione in
  719.                         // caso il pattern azione fosse URLBASED e fosse
  720.                         // quello di default allora va cambiato

  721.                         String regex = REGEXP_FRUITORE_EROGATORE_OTHER_MATCH;
  722.                         PortaDelegataAzione pdAzione = portaDelegata.getAzione();
  723.                         PortaDelegataAzioneIdentificazione identificazione = pdAzione != null ? pdAzione.getIdentificazione() : null;
  724.                         String patterAzione = "";
  725.                         if(pdAzione!=null) {
  726.                             patterAzione = pdAzione.getPattern() != null ? pdAzione.getPattern() : "";
  727.                         }
  728.                        
  729.                         // regex del pattern azione
  730.                         // OLD: .*/(fruitore)/(erogatore)/(servizio)/([^/|^?]*).*
  731.                         // NEW 3.3.13: /(fruitore)/(erogatore)/(servizio)/([^/?]*).*
  732.                         String patternAzionePrefixOld = PATTERN_AZIONE_PREFIX_OLD;
  733.                         String patternAzioneSuffixOld = PATTERN_AZIONE_SUFFIX_OLD;
  734.                         String patternAzionePrefixNew = PATTERN_AZIONE_PREFIX_NEW;
  735.                         String patternAzioneSuffixNew = PATTERN_AZIONE_SUFFIX_NEW;
  736.                         // se identificazione urlbased procedo con i
  737.                         // controlli
  738.                         if (PortaDelegataAzioneIdentificazione.URL_BASED.equals(identificazione)) {
  739.                            
  740.                             boolean oldPattern = patterAzione.startsWith(patternAzionePrefixOld) && patterAzione.endsWith(patternAzioneSuffixOld);
  741.                             boolean newPattern = patterAzione.startsWith(patternAzionePrefixNew) && patterAzione.endsWith(patternAzioneSuffixNew);
  742.                            
  743.                             if(oldPattern || newPattern) {
  744.                            
  745.                                 int startidx = oldPattern ? patternAzionePrefixOld.length() : patternAzionePrefixNew.length();
  746.                                 int endidx = oldPattern ? patterAzione.lastIndexOf(patternAzioneSuffixOld) : patterAzione.lastIndexOf(patternAzioneSuffixNew);
  747.                                 String tmpPat = patterAzione.substring(startidx, endidx);
  748.                                 // a questo punto ottengo una stringa del tipo
  749.                                 // (fruitore)/(erogatore)/(servizio)
  750.                                 // se rispetta la regex allora vuol dire che il
  751.                                 // pattern azione e' quello di default
  752.                                 // e devo effettuare i cambiamenti
  753.                                 if (tmpPat.matches(regex)) {
  754.                                     String[] val = tmpPat.split("/");
  755.                                     String fruitoreA = val[0];
  756.                                     String erogatore = val[1];
  757.                                     String rimanenteRegExp = "";
  758.                                     int lengthParteRimanenteRegExp = (fruitoreA+"/"+erogatore).length();
  759.                                     if(tmpPat.length()>lengthParteRimanenteRegExp){
  760.                                         rimanenteRegExp = tmpPat.substring(lengthParteRimanenteRegExp);
  761.                                     }  

  762.                                     boolean match = false;
  763.                                     String partOld = "(?:"+this.oldtipoprov+"_)?"+this.oldnomeprov+"";
  764.                                     String partNew = "(?:"+this.tipoprov+"_)?"+this.nomeprov+"";
  765.                                    
  766.                                     // vedo se matcha il fruitore
  767.                                     if (fruitoreA.equals(partOld)) {
  768.                                         fruitoreA = partNew;
  769.                                         match = true;
  770.                                     }
  771.                                    
  772.                                     // vedo se matcha anche erogatore (loopback)
  773.                                     if (erogatore.equals(partOld)) {
  774.                                         erogatore = partNew;
  775.                                         match = true;
  776.                                     }

  777.                                     if(match){
  778.                                         String newPatternAzione = patternAzionePrefixNew + fruitoreA + "/" + erogatore + rimanenteRegExp + patternAzioneSuffixNew;
  779.                                         pdAzione.setPattern(newPatternAzione);
  780.                                         portaDelegata.setAzione(pdAzione);
  781.                                     }
  782.                                 }

  783.                             }
  784.                         }// fine controllo azione
  785.                        
  786.                         // DelegatedBy
  787.                         String nomePortaDelegante = null;
  788.                         if(pdAzione!=null) {
  789.                             nomePortaDelegante = pdAzione.getNomePortaDelegante() != null ? pdAzione.getNomePortaDelegante() : null;
  790.                         }
  791.                         if (PortaDelegataAzioneIdentificazione.DELEGATED_BY.equals(identificazione) && nomePortaDelegante!=null ) {
  792.                             String regexDelegante = REGEXP_FRUITORE_EROGATORE_OTHER;
  793.                             // pattern (fruitore)/(erogatore)/....
  794.                             if(nomePortaDelegante.matches(regexDelegante)){
  795.                                 String[] tmpDelegante = nomePortaDelegante.split("\\/");
  796.                                 String partFruitoreDelegante = tmpDelegante[0];
  797.                                 String partErogatoreDelegante = tmpDelegante[1];
  798.                                 String rimanenteDelegante = "";
  799.                                 int lengthParteRimanenteDelegante = (partFruitoreDelegante+"/"+partErogatoreDelegante).length();
  800.                                 if(nomePortaDelegante.length()>lengthParteRimanenteDelegante){
  801.                                     rimanenteDelegante = nomePortaDelegante.substring(lengthParteRimanenteDelegante);
  802.                                 }                          
  803.                                 boolean modificatoNomeDelegante = false;
  804.                                
  805.                                 // se (fruitore) contiene tipoNomeSoggetto proprietario della PortaDelegata deve essere modificato
  806.                                 if((this.oldtipoprov + "_" + this.oldnomeprov).equals(partFruitoreDelegante)){
  807.                                     partFruitoreDelegante = this.tipoprov + "_" + this.nomeprov;
  808.                                     modificatoNomeDelegante = true;
  809.                                 }
  810.                                 else if(("__"+(this.oldtipoprov + "_" + this.oldnomeprov)).equals(partFruitoreDelegante)){
  811.                                     partFruitoreDelegante = "__"+this.tipoprov + "_" + this.nomeprov;
  812.                                     modificatoNomeDelegante = true;
  813.                                 }
  814.                                
  815.                                 // se (erogatore) contiene tipoNomeSoggetto erogatore della PortaDelegata deve essere modificato
  816.                                 if(partErogatoreDelegante!=null && partErogatoreDelegante.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
  817.                                     partErogatoreDelegante = this.tipoprov + "_" + this.nomeprov;
  818.                                     modificatoNomeDelegante = true;
  819.                                 }
  820.                                
  821.                                 if(modificatoNomeDelegante){
  822.                                     String nuovoNomeDelegante = partFruitoreDelegante + "/" + partErogatoreDelegante + rimanenteDelegante;
  823.                                     portaDelegata.getAzione().setNomePortaDelegante(nuovoNomeDelegante);
  824.                                 }
  825.                             }
  826.                         }// fine controllo DelegatedBy

  827.                         // (ri)aggiungo pd
  828.                         listaPD.put(idPorta, portaDelegata);

  829.                     }// fine foreach pd
  830.                 }// fine foreach fruitore


  831.                 // recupero le porte delegate per id_soggetto_erogatore
  832.                 tmpListPD = this.porteDelegateCore.porteDelegateWithSoggettoErogatoreList(this.sog.getId());
  833.                 if(tmpListPD!=null && !tmpListPD.isEmpty()) {
  834.                     for (PortaDelegata portaDelegata : tmpListPD) {
  835.                         Long idPorta = portaDelegata.getId();
  836.    
  837.                         if (listaPD.containsKey(idPorta)) {
  838.                             // se la porta delegata e' gia stata modificata e
  839.                             // inserita
  840.                             // nella lista, allora prendo la porta inserita in
  841.                             // lista
  842.                             // ed effettuo ulteriori modifiche
  843.                             portaDelegata = listaPD.get(idPorta);
  844.                         }
  845.    
  846.                         // modifico le informazioni sul soggetto erogatore
  847.                         PortaDelegataSoggettoErogatore sogErogatore = portaDelegata.getSoggettoErogatore();
  848.                         sogErogatore.setTipo(this.sog.getTipo());
  849.                         sogErogatore.setNome(this.sog.getNome());
  850.                         portaDelegata.setSoggettoErogatore(sogErogatore);
  851.                         // (re)inserisco la porta nella lista
  852.                         listaPD.put(idPorta, portaDelegata);
  853.    
  854.                     }
  855.                 }

  856.                 // recupero le porte delegate per tipo/nome soggetto erogatore
  857.                 tmpListPD = this.porteDelegateCore.porteDelegateWithTipoNomeErogatoreList(this.sog.getOldTipoForUpdate(), this.sog.getOldNomeForUpdate());
  858.                 if(tmpListPD!=null && !tmpListPD.isEmpty()) {
  859.                     for (PortaDelegata portaDelegata : tmpListPD) {
  860.                         Long idPorta = portaDelegata.getId();
  861.                         if (listaPD.containsKey(idPorta)) {
  862.                             // se la porta delegata e' gia stata modificata e
  863.                             // inserita
  864.                             // nella lista, allora prendo la porta inserita in
  865.                             // lista
  866.                             // ed effettuo ulteriori modifiche
  867.                             portaDelegata = listaPD.get(idPorta);
  868.                         }
  869.                         // modifico informazioni su soggetto erogatore
  870.                         PortaDelegataSoggettoErogatore sogErogatore = portaDelegata.getSoggettoErogatore();
  871.                         sogErogatore.setTipo(this.sog.getTipo());
  872.                         sogErogatore.setNome(this.sog.getNome());
  873.                         portaDelegata.setSoggettoErogatore(sogErogatore);
  874.    
  875.    
  876.                         // inserisco la porta
  877.                         listaPD.put(idPorta, portaDelegata);
  878.    
  879.                     }
  880.                 }

  881.             }// for each servizio



  882.         }// if oldnome || oldtipo changed


  883.         // aggiorno le porte delegate
  884.        
  885.         Map<String, AttivazionePolicy> listaPolicyPD = new HashMap<>();
  886.         Map<String, ConfigurazioneAllarmeBean> listaAllarmiPD = new HashMap<>();
  887.        
  888.         if(listaPD!=null && !listaPD.isEmpty()) {
  889.             for (PortaDelegata portaDelegata : listaPD.values()) {
  890.                
  891.                 updateSoggettoInlisteEngine(portaDelegata);
  892.                
  893.                 this.oggettiDaAggiornare.add(portaDelegata);
  894.                
  895.                 // verifico rate limiting per ogni porta delegata trovata
  896.                
  897.                 // Controllo policy di Rate Limiting
  898.                 ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
  899.                 List<AttivazionePolicy> listaPolicies = null;
  900.                 String oldNomePorta = portaDelegata.getNome();
  901.                 try {
  902.                     if(portaDelegata.getOldIDPortaDelegataForUpdate()!=null && portaDelegata.getOldIDPortaDelegataForUpdate().getNome()!=null) {
  903.                         oldNomePorta = portaDelegata.getOldIDPortaDelegataForUpdate().getNome();
  904.                     }
  905.                     listaPolicies = this.confCore.attivazionePolicyList(ricercaPolicies, RuoloPolicy.DELEGATA, oldNomePorta);
  906.                 }catch(Exception e) {
  907.                     // ignore
  908.                 }
  909.                 if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  910.                     for (AttivazionePolicy ap : listaPolicies) {
  911.                         if(ap.getFiltro()!=null && oldNomePorta.equals(ap.getFiltro().getNomePorta())) {
  912.                            
  913.                             // aggiorno nome porta
  914.                             ap.getFiltro().setNomePorta(portaDelegata.getNome());
  915.                            
  916.                             updateFiltroSoggettoEngine(ap);
  917.                                                            
  918.                             listaPolicyPD.put(ap.getIdActivePolicy(), ap);
  919.                         }
  920.                     }
  921.                 }
  922.                 // fine Controllo policy di Rate Limiting
  923.                
  924.                 if(this.confCore.isConfigurazioneAllarmiEnabled()) {
  925.                     // Controllo allarmi
  926.                     ConsoleSearch ricercaAllarmi = new ConsoleSearch(true);
  927.                     List<ConfigurazioneAllarmeBean> listaAllarmi = null;
  928.                     oldNomePorta = portaDelegata.getNome();
  929.                     try {
  930.                         if(portaDelegata.getOldIDPortaDelegataForUpdate()!=null && portaDelegata.getOldIDPortaDelegataForUpdate().getNome()!=null) {
  931.                             oldNomePorta = portaDelegata.getOldIDPortaDelegataForUpdate().getNome();
  932.                         }
  933.                         listaAllarmi = this.confCore.allarmiList(ricercaAllarmi, RuoloPorta.DELEGATA, oldNomePorta);
  934.                     }catch(Exception e) {
  935.                         // ignore
  936.                     }
  937.                     if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
  938.                         for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
  939.                             if(allarme.getFiltro()!=null && oldNomePorta.equals(allarme.getFiltro().getNomePorta())) {
  940.                                
  941.                                 // aggiorno nome porta
  942.                                 allarme.getFiltro().setNomePorta(portaDelegata.getNome());
  943.                                
  944.                                 updateFiltroSoggettoEngine(allarme);
  945.                                                                
  946.                                 listaAllarmiPD.put(allarme.getNome(), allarme);
  947.                             }
  948.                         }
  949.                     }
  950.                     // fine Controllo allarmi
  951.                 }
  952.                
  953.             }
  954.         }
  955.        
  956.        
  957.        
  958.         // Controllo policy di Rate Limiting di altre porte delegate che utilizzano il soggetto solamente nel filtro.
  959.        
  960.         List<AttivazionePolicy> listPolicyDaVerificare = new ArrayList<>();
  961.        
  962.         IDSoggetto filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  963.         ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
  964.         List<AttivazionePolicy> listaPolicies = null;
  965.         try {
  966.             listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.DELEGATA, null,
  967.                     filtroSoggettoFruitore, null, null,
  968.                     null, null,
  969.                     null, null);
  970.         }catch(Exception e) {
  971.             // ignore
  972.         }
  973.         if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  974.             for (AttivazionePolicy ap : listaPolicies) {
  975.                 if(listaPolicyPD.containsKey(ap.getIdActivePolicy())) {
  976.                     continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  977.                 }
  978.                 listPolicyDaVerificare.add(ap);
  979.             }
  980.         }
  981.        
  982.         IDSoggetto filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  983.         ricercaPolicies = new ConsoleSearch(true);
  984.         listaPolicies = null;
  985.         try {
  986.             listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.DELEGATA, null,
  987.                     null, null, null,
  988.                     filtroSoggettoErogatore, null,
  989.                     null, null);
  990.         }catch(Exception e) {
  991.             // ignore
  992.         }
  993.         if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  994.             for (AttivazionePolicy ap : listaPolicies) {
  995.                 if(listaPolicyPD.containsKey(ap.getIdActivePolicy())) {
  996.                     continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  997.                 }
  998.                 listPolicyDaVerificare.add(ap);
  999.             }
  1000.         }
  1001.        
  1002.         if(listPolicyDaVerificare!=null && !listPolicyDaVerificare.isEmpty()) {
  1003.             for (AttivazionePolicy ap : listPolicyDaVerificare) {
  1004.                
  1005.                 if(listaPolicyPD.containsKey(ap.getIdActivePolicy())) {
  1006.                     continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1007.                 }
  1008.            
  1009.                 if(ap.getFiltro()!=null) {
  1010.                    
  1011.                     updateFiltroSoggettoEngine(ap);
  1012.                                                    
  1013.                     listaPolicyPD.put(ap.getIdActivePolicy(), ap);
  1014.                 }
  1015.             }
  1016.         }
  1017.         // fine Controllo policy di Rate Limiting
  1018.        
  1019.        
  1020.         // aggiorno le policy di rate limiting associate alle porte delegate
  1021.         if(listaPolicyPD!=null && !listaPolicyPD.isEmpty()) {
  1022.             for (AttivazionePolicy ap : listaPolicyPD.values()) {
  1023.                 this.oggettiDaAggiornare.add(ap);
  1024.             }
  1025.         }
  1026.        
  1027.        
  1028.         if(this.confCore.isConfigurazioneAllarmiEnabled()) {
  1029.            
  1030.             // Controllo policy di Rate Limiting di altre porte delegate che utilizzano il soggetto solamente nel filtro.
  1031.            
  1032.             List<ConfigurazioneAllarmeBean> listAllarmiDaVerificare = new ArrayList<>();
  1033.            
  1034.             filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  1035.             ConsoleSearch ricercaAllarmi = new ConsoleSearch(true);
  1036.             List<ConfigurazioneAllarmeBean> listaAllarmi = null;
  1037.             try {
  1038.                 listaAllarmi = this.confCore.allarmiListByFilter(ricercaAllarmi, RuoloPorta.DELEGATA, null,
  1039.                         filtroSoggettoFruitore, null, null,
  1040.                         null, null,
  1041.                         null, null);
  1042.             }catch(Exception e) {
  1043.                 // ignore
  1044.             }
  1045.             if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
  1046.                 for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
  1047.                     if(listaAllarmiPD.containsKey(allarme.getNome())) {
  1048.                         continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1049.                     }
  1050.                     listAllarmiDaVerificare.add(allarme);
  1051.                 }
  1052.             }
  1053.            
  1054.             filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  1055.             ricercaAllarmi = new ConsoleSearch(true);
  1056.             listaAllarmi = null;
  1057.             try {
  1058.                 listaAllarmi = this.confCore.allarmiListByFilter(ricercaAllarmi, RuoloPorta.DELEGATA, null,
  1059.                         null, null, null,
  1060.                         filtroSoggettoErogatore, null,
  1061.                         null, null);
  1062.             }catch(Exception e) {
  1063.                 // ignore
  1064.             }
  1065.             if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
  1066.                 for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
  1067.                     if(listaAllarmiPD.containsKey(allarme.getNome())) {
  1068.                         continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1069.                     }
  1070.                     listAllarmiDaVerificare.add(allarme);
  1071.                 }
  1072.             }
  1073.            
  1074.             if(listAllarmiDaVerificare!=null && !listAllarmiDaVerificare.isEmpty()) {
  1075.                 for (ConfigurazioneAllarmeBean allarme : listAllarmiDaVerificare) {
  1076.                    
  1077.                     if(listaAllarmiPD.containsKey(allarme.getNome())) {
  1078.                         continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1079.                     }
  1080.                
  1081.                     if(allarme.getFiltro()!=null) {
  1082.                        
  1083.                         updateFiltroSoggettoEngine(allarme);
  1084.                                                        
  1085.                         listaAllarmiPD.put(allarme.getNome(), allarme);
  1086.                     }
  1087.                 }
  1088.             }
  1089.             // fine Controllo policy di Rate Limiting
  1090.            
  1091.            
  1092.             // aggiorno gli allarmi associati alle porte delegate
  1093.             if(listaAllarmiPD!=null && !listaAllarmiPD.isEmpty()) {
  1094.                 for (ConfigurazioneAllarmeBean allarme : listaAllarmiPD.values()) {
  1095.                     this.oggettiDaAggiornare.add(allarme);
  1096.                 }
  1097.             }
  1098.         }
  1099.     }

  1100.     private void updateSoggettoInlisteEngine(PortaDelegata portaDelegata) {
  1101.                
  1102.         // controlloServiziApplicativi riferiti nelle Trasformazioni
  1103.        
  1104.         if(portaDelegata.getTrasformazioni()!=null && portaDelegata.getTrasformazioni().sizeRegolaList()>0) {
  1105.             for (TrasformazioneRegola trRegola : portaDelegata.getTrasformazioni().getRegolaList()) {
  1106.                 if(trRegola.getApplicabilita()!=null && trRegola.getApplicabilita().sizeServizioApplicativoList()>0) {
  1107.                     for (TrasformazioneRegolaApplicabilitaServizioApplicativo trSA : trRegola.getApplicabilita().getServizioApplicativoList()) {
  1108.                         if (this.oldtipoprov.equals(trSA.getTipoSoggettoProprietario()) &&
  1109.                                 this.oldnomeprov.equals(trSA.getNomeSoggettoProprietario())) {
  1110.                             trSA.setTipoSoggettoProprietario(this.tipoprov);
  1111.                             trSA.setNomeSoggettoProprietario(this.nomeprov);
  1112.                             break;
  1113.                         }
  1114.                     }
  1115.                 }
  1116.             }
  1117.         }
  1118.        
  1119.         // fine controlloSoggetti riferiti nelle Trasformazioni
  1120.     }

  1121.     public void checkPorteApplicative() throws DriverConfigurazioneException{
  1122.         if(this.soggettiCore.isRegistroServiziLocale()){
  1123.             // PORTE APPLICATIVE
  1124.             // Se e' cambiato il tipo o il nome del soggetto virtuale devo effettuare la modifica delle porte applicative
  1125.             // poiche il cambio si riflette all'interno delle informazioni delle porte applicative
  1126.             Map<String, PortaApplicativa> listaPA = new HashMap<>();
  1127.             Map<String, ServizioApplicativo> listaPAeSA = new HashMap<>();
  1128.             Map<String, AttivazionePolicy> listaPolicyPA = new HashMap<>();
  1129.             Map<String, ConfigurazioneAllarmeBean> listaAllarmiPA = new HashMap<>();

  1130.            
  1131.             if (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov)) {

  1132.                 // ** Verifica per soggetto proprietario ** //
  1133.                
  1134.                 // NomePorta
  1135.                 // Tutte le porte applicativa di questo soggetto con nome "di default"
  1136.                 // devono essere cambiate
  1137.                 // Nome della Porta:
  1138.                 List<PortaApplicativa> tmpList = this.porteApplicativeCore.porteAppList(this.sog.getId().intValue(), new ConsoleSearch(true));
  1139.                 for (PortaApplicativa portaApplicativa : tmpList) {
  1140.                    
  1141.                     IDPortaApplicativa oldIDPortaApplicativaForUpdate = null;
  1142.                     String nomeAttuale = portaApplicativa.getNome();

  1143.                     // se il nome e' quello di default cioe' (erogatore)/(servizio)/(versioneServizio) o (erogatore)/(servizio)/(versioneServizio)/azione
  1144.                     String regex = REGEXP_FRUITORE_EROGATORE_OTHER_MATCH;
  1145.                     String newNome = null;
  1146.                     if (nomeAttuale.matches(regex)) {

  1147.                         String[] val = nomeAttuale.split("\\/");
  1148.                         String patErogatore = val[0];
  1149.                         String patServizio = val[1];
  1150.                         String patVersioneServizio = val[2];
  1151.                         StringBuilder sbPatAzione = new StringBuilder();
  1152.                         if(val.length>3){
  1153.                             for (int i = 3; i < val.length; i++) {
  1154.                                 if(i>3){
  1155.                                     sbPatAzione.append("/");
  1156.                                 }
  1157.                                 sbPatAzione.append(val[i]);
  1158.                             }
  1159.                         }
  1160.                         String patAzione = sbPatAzione.toString();

  1161.                         // erogatore
  1162.                         if (patErogatore.equals(this.oldtipoprov+ "_" +this.oldnomeprov)) {
  1163.                             patErogatore = this.tipoprov+ "_" +this.nomeprov;
  1164.                         }
  1165.                         else if (patErogatore.equals("__"+this.oldtipoprov+ "_" +this.oldnomeprov)) {
  1166.                             patErogatore = "__"+this.tipoprov+ "_" +this.nomeprov;
  1167.                         }

  1168.                         newNome = patErogatore + "/" + patServizio + "/" + patVersioneServizio ;
  1169.                         if(patAzione!=null && StringUtils.isNotEmpty(patAzione)){
  1170.                             newNome = newNome + "/" + patAzione;
  1171.                         }
  1172.                        
  1173.                         portaApplicativa.setNome(newNome);
  1174.                         oldIDPortaApplicativaForUpdate = new IDPortaApplicativa();
  1175.                         oldIDPortaApplicativaForUpdate.setNome(nomeAttuale);
  1176.                         portaApplicativa.setOldIDPortaApplicativaForUpdate(oldIDPortaApplicativaForUpdate);

  1177.                         // modifica della descrizione
  1178.                         String descrizionePA = portaApplicativa.getDescrizione();
  1179.                         if (descrizionePA != null && !descrizionePA.equals("")) {

  1180.                             // Caso 1: implementation default
  1181.                             // Service implementation gw/ENTE:gw/TEST:1
  1182.                             String matchCaso1testService = " "+this.oldtipoprov+"/"+this.oldnomeprov+":";
  1183.                             if(descrizionePA.contains(matchCaso1testService)) {
  1184.                                 String replaceCaso1testService = " "+this.tipoprov+"/"+this.nomeprov+":";
  1185.                                 descrizionePA = descrizionePA.replace(matchCaso1testService, replaceCaso1testService);
  1186.                             }
  1187.                        
  1188.                             // Caso 2: altra subscription
  1189.                             // Internal Implementation 'Specific1' for gw_ENTE/gw_TEST/1
  1190.                             String matchCaso2testService = " "+this.oldtipoprov+"_"+this.oldnomeprov+"/";
  1191.                             if(descrizionePA.contains(matchCaso2testService)) {
  1192.                                 String replaceCaso2testService = " "+this.tipoprov+"_"+this.nomeprov+"/";
  1193.                                 descrizionePA = descrizionePA.replace(matchCaso2testService, replaceCaso2testService);
  1194.                             }
  1195.                            
  1196.                             portaApplicativa.setDescrizione(descrizionePA);
  1197.                         }
  1198.                        
  1199.                         // regex del pattern azione
  1200.                         // OLD: .*/(erogatore)/(servizio)/([^/|^?]*).*
  1201.                         // NEW 3.3.13: /(erogatore)/(servizio)/([^/?]*).*
  1202.                         PortaApplicativaAzione paAzione = portaApplicativa.getAzione();
  1203.                         PortaApplicativaAzioneIdentificazione identificazione = paAzione != null ? paAzione.getIdentificazione() : null;
  1204.                         String patterAzione = "";
  1205.                         if(paAzione!=null) {
  1206.                             patterAzione = paAzione.getPattern() != null ? paAzione.getPattern() : "";
  1207.                         }
  1208.                         String patternAzionePrefixOld = PATTERN_AZIONE_PREFIX_OLD;
  1209.                         String patternAzioneSuffix1Old = PATTERN_AZIONE_SUFFIX_OLD;
  1210.                         String patternAzionePrefixNew = PATTERN_AZIONE_PREFIX_NEW;
  1211.                         String patternAzioneSuffix1New = PATTERN_AZIONE_SUFFIX_NEW;
  1212.                         // se identificazione urlbased procedo con i controlli
  1213.                         if (PortaApplicativaAzioneIdentificazione.URL_BASED.equals(identificazione)) {
  1214.                            
  1215.                             boolean oldPattern = patterAzione.startsWith(patternAzionePrefixOld) && patterAzione.endsWith(patternAzioneSuffix1Old);
  1216.                             boolean newPattern = patterAzione.startsWith(patternAzionePrefixNew) && patterAzione.endsWith(patternAzioneSuffix1New);
  1217.                            
  1218.                             if(oldPattern || newPattern) {
  1219.                            
  1220.                                 // caso1
  1221.                                 int startidx = oldPattern ? patternAzionePrefixOld.length() : patternAzionePrefixNew.length();
  1222.                                 int endidx = oldPattern ? patterAzione.lastIndexOf(patternAzioneSuffix1Old) : patterAzione.lastIndexOf(patternAzioneSuffix1New);
  1223.                                 String tmpPat = patterAzione.substring(startidx, endidx);
  1224.                                 // a questo punto ottengo una stringa del tipo
  1225.                                 // (fruitore)/(erogatore)/(servizio)
  1226.                                 // se rispetta la regex allora vuol dire che il
  1227.                                 // pattern azione e' quello di default
  1228.                                 // e devo effettuare i cambiamenti
  1229.                                 if (tmpPat.matches(regex)) {
  1230.                                     val = tmpPat.split("/");
  1231.                                     String partErogatore = val[0];
  1232.                                     String partServizio = val[1];
  1233.                                     String partVersione = val[2];
  1234.                                     String rimanenteRegExp = "";
  1235.                                     int lengthParteRimanenteRegExp = (partErogatore+"/"+partServizio+"/"+partVersione).length();
  1236.                                     if(tmpPat.length()>lengthParteRimanenteRegExp){
  1237.                                         rimanenteRegExp = tmpPat.substring(lengthParteRimanenteRegExp);
  1238.                                     }  
  1239.                                    
  1240.                                     boolean matchURL = false;
  1241.                                     String partOld = "(?:"+this.oldtipoprov+"_)?"+this.oldnomeprov+"";
  1242.                                     String partNew = "(?:"+this.tipoprov+"_)?"+this.nomeprov+"";
  1243.                                    
  1244.                                     // vedo se matcha il fruitore
  1245.                                     if (partErogatore.equals(partOld)) {
  1246.                                         partErogatore = partNew;
  1247.                                         matchURL = true;
  1248.                                     }
  1249.                                    
  1250.                                     if(matchURL){
  1251.                                         String newPatternAzione = patternAzionePrefixNew + partErogatore+ "/" + partServizio+ "/" + partVersione + rimanenteRegExp + patternAzioneSuffix1New;
  1252.                                         paAzione.setPattern(newPatternAzione);
  1253.                                         portaApplicativa.setAzione(paAzione);
  1254.                                     }
  1255.                                    
  1256.                                 }
  1257.                             }
  1258.                         }
  1259.                        
  1260.                         // DelegatedBy
  1261.                         String nomePortaDelegante = null;
  1262.                         if(paAzione!=null) {
  1263.                             nomePortaDelegante = paAzione.getNomePortaDelegante() != null ? paAzione.getNomePortaDelegante() : null;
  1264.                         }
  1265.                         if (PortaApplicativaAzioneIdentificazione.DELEGATED_BY.equals(identificazione) && nomePortaDelegante!=null ) {
  1266.                            
  1267.                             String regexDelegante = REGEXP_FRUITORE_EROGATORE_OTHER_MATCH;
  1268.                             if (nomePortaDelegante.matches(regexDelegante)) {

  1269.                                 String[] valDelegante = nomePortaDelegante.split("\\/");
  1270.                                 String patErogatoreDelegante = valDelegante[0];
  1271.                                 String patServizioDelegante = valDelegante[1];
  1272.                                 String patVersioneServizioDelegante = valDelegante[2];
  1273.                                 StringBuilder sbPatAzioneDelegante = new StringBuilder();
  1274.                                 if(valDelegante.length>3){
  1275.                                     for (int i = 3; i < valDelegante.length; i++) {
  1276.                                         if(i>3){
  1277.                                             sbPatAzioneDelegante.append("/");
  1278.                                         }
  1279.                                         sbPatAzioneDelegante.append(valDelegante[i]);
  1280.                                     }
  1281.                                 }
  1282.                                 String patAzioneDelegante = sbPatAzioneDelegante.toString();
  1283.                                
  1284.                                 // erogatore
  1285.                                 if (patErogatoreDelegante.equals(this.oldtipoprov+ "_" +this.oldnomeprov)) {
  1286.                                     patErogatoreDelegante = this.tipoprov+ "_" +this.nomeprov;
  1287.                                 }
  1288.                                 else if (patErogatoreDelegante.equals("__"+this.oldtipoprov+ "_" +this.oldnomeprov)) {
  1289.                                     patErogatoreDelegante = "__"+this.tipoprov+ "_" +this.nomeprov;
  1290.                                 }

  1291.                                 String newNomeDelegante = patErogatoreDelegante + "/" + patServizioDelegante + "/" + patVersioneServizioDelegante ;
  1292.                                 if(patAzioneDelegante!=null && StringUtils.isNotEmpty(patAzioneDelegante)){
  1293.                                     newNomeDelegante = newNomeDelegante + "/" + patAzioneDelegante;
  1294.                                 }
  1295.                                
  1296.                                 portaApplicativa.getAzione().setNomePortaDelegante(newNomeDelegante);
  1297.                             }
  1298.                            
  1299.                         }// fine controllo DelegatedBy
  1300.                                                
  1301.                     }// fine controllo nome
  1302.                    
  1303.                     updateSoggettoInListeEngine(portaApplicativa);
  1304.                                        
  1305.                     portaApplicativa.setTipoSoggettoProprietario(this.tipoprov);
  1306.                     portaApplicativa.setNomeSoggettoProprietario(this.nomeprov);
  1307.                     listaPA.put(nomeAttuale, portaApplicativa);
  1308.                    
  1309.                     // modifica nome Servizi Applicativi che riflette il nome della PA
  1310.                     if(oldIDPortaApplicativaForUpdate!=null && portaApplicativa.sizeServizioApplicativoList()>0) {
  1311.                         for (PortaApplicativaServizioApplicativo portaApplicativaSA : portaApplicativa.getServizioApplicativoList()) {
  1312.                            
  1313.                             boolean nameEquals = portaApplicativaSA.getNome().equals(oldIDPortaApplicativaForUpdate.getNome());
  1314.                            
  1315.                             // __gw_ENTE/gw_TEST/v1__Specific2__SA3
  1316.                             boolean nameConnettoreMultiplo = portaApplicativaSA.getNome().startsWith(oldIDPortaApplicativaForUpdate.getNome()+ConnettoriCostanti.PARAMETRO_CONNETTORI_MULTIPLI_SAX_PREFIX);
  1317.                                                                
  1318.                             if(nameEquals || nameConnettoreMultiplo) {
  1319.                                 // devo aggiornare il nome del SA
  1320.                                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  1321.                                 idSA.setNome(portaApplicativaSA.getNome());
  1322.                                 idSA.setIdSoggettoProprietario(new IDSoggetto(this.oldtipoprov, this.oldnomeprov));
  1323.                                 ServizioApplicativo sa = this.saCore.getServizioApplicativo(idSA);
  1324.                                
  1325.                                 IDServizioApplicativo oldIDServizioApplicativoForUpdate = new IDServizioApplicativo();
  1326.                                 oldIDServizioApplicativoForUpdate.setNome(sa.getNome());
  1327.                                 oldIDServizioApplicativoForUpdate.setIdSoggettoProprietario(idSA.getIdSoggettoProprietario());
  1328.                                 sa.setOldIDServizioApplicativoForUpdate(oldIDServizioApplicativoForUpdate);
  1329.                                 sa.setTipoSoggettoProprietario(this.tipoprov);
  1330.                                 sa.setNomeSoggettoProprietario(this.nomeprov);
  1331.                                
  1332.                                 if(nameEquals || nameConnettoreMultiplo) {
  1333.                                     // nameEquals: gw_ENTE/gw_TEST/1
  1334.                                     // nameConnettoreMultiplo: gw_ENTE/gw_TEST/v1__SA2
  1335.                                     if(sa.getNome().startsWith(this.oldtipoprov+"_"+this.oldnomeprov+"/")) {
  1336.                                         sa.setNome(sa.getNome().replace(this.oldtipoprov+"_"+this.oldnomeprov+"/", this.tipoprov+"_"+this.nomeprov+"/"));
  1337.                                     }
  1338.                                     // nameEquals: __gw_ENTE/gw_TEST/1__Specific2
  1339.                                     // nameConnettoreMultiplo: __gw_ENTE/gw_TEST/v1__Specific2__SA2
  1340.                                     else if(sa.getNome().startsWith("__"+this.oldtipoprov+"_"+this.oldnomeprov+"/")) {
  1341.                                         sa.setNome(sa.getNome().replace("__"+this.oldtipoprov+"_"+this.oldnomeprov+"/", "__"+this.tipoprov+"_"+this.nomeprov+"/"));
  1342.                                     }
  1343.                                 }
  1344.                                
  1345.                                 /**NON SERVE, sono riferiti tramite id e prima modifico le porte applicative!! portaApplicativaSA.setNome(sa.getNome());
  1346.                                 // Inoltre anche se cambio il nome del soggetto, l'id del soggetto rimane lo stesso*/
  1347.                                
  1348.                                 listaPAeSA.put(sa.getNome(), sa);
  1349.                                 /** ?? nei connettori multipli, salta break;*/
  1350.                             }
  1351.                         }
  1352.                     }
  1353.                     // modifica nome Servizi Applicativi che riflette il nome della PA
  1354.                    
  1355.                     // Controllo policy di Rate Limiting
  1356.                     ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
  1357.                     List<AttivazionePolicy> listaPolicies = null;
  1358.                     try {
  1359.                         listaPolicies = this.confCore.attivazionePolicyList(ricercaPolicies, RuoloPolicy.APPLICATIVA, nomeAttuale);
  1360.                     }catch(Exception e) {
  1361.                         // ignore
  1362.                     }
  1363.                     if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  1364.                         for (AttivazionePolicy ap : listaPolicies) {
  1365.                             if(ap.getFiltro()!=null && nomeAttuale.equals(ap.getFiltro().getNomePorta())) {
  1366.                                
  1367.                                 // aggiorno nome porta
  1368.                                 if(newNome!=null) {
  1369.                                     ap.getFiltro().setNomePorta(newNome);
  1370.                                 }
  1371.                                
  1372.                                 updateFiltroSoggettoEngine(ap);
  1373.                                                                
  1374.                                 listaPolicyPA.put(ap.getIdActivePolicy(), ap);
  1375.                             }
  1376.                         }
  1377.                     }
  1378.                     // fine Controllo policy di Rate Limiting
  1379.                    
  1380.                     if(this.confCore.isConfigurazioneAllarmiEnabled()) {
  1381.                         // Controllo allarmi
  1382.                         ConsoleSearch ricercaAllarmi = new ConsoleSearch(true);
  1383.                         List<ConfigurazioneAllarmeBean> listaAllarmi = null;
  1384.                         try {
  1385.                             listaAllarmi = this.confCore.allarmiList(ricercaAllarmi, RuoloPorta.APPLICATIVA, nomeAttuale);
  1386.                         }catch(Exception e) {
  1387.                             // ignore
  1388.                         }
  1389.                         if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
  1390.                             for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
  1391.                                 if(allarme.getFiltro()!=null && nomeAttuale.equals(allarme.getFiltro().getNomePorta())) {
  1392.                                    
  1393.                                     // aggiorno nome porta
  1394.                                     if(newNome!=null) {
  1395.                                         allarme.getFiltro().setNomePorta(newNome);
  1396.                                     }
  1397.                                    
  1398.                                     updateFiltroSoggettoEngine(allarme);
  1399.                                                                    
  1400.                                     listaAllarmiPA.put(allarme.getNome(), allarme);
  1401.                                 }
  1402.                             }
  1403.                         }
  1404.                         // fine Controllo allarmi
  1405.                     }
  1406.                 }

  1407.                 // ** Fine Verifica per soggetto proprietario ** //
  1408.                
  1409.                
  1410.                 // ** Verifica per soggetto proprietario differente da quello modificato ** //
  1411.                
  1412.                 // effettuo controlli per le porte applicative che hanno un proprietario differente
  1413.                
  1414.                 List<IDPortaApplicativa> listDaVerificare = new ArrayList<>();
  1415.                
  1416.                 // controllo SoggettoVirtuale
  1417.                 List<PortaApplicativa> tmpListSoggettiVirtuali = this.porteApplicativeCore.getPorteApplicativeBySoggettoVirtuale(new IDSoggetto(this.oldtipoprov,this.oldnomeprov));
  1418.                 if(tmpListSoggettiVirtuali!=null && !tmpListSoggettiVirtuali.isEmpty()) {
  1419.                     for (PortaApplicativa portaApplicativa : tmpListSoggettiVirtuali) {
  1420.                         if(listaPA.containsKey(portaApplicativa.getNome())) {
  1421.                             continue; // modifica gia' effettuata
  1422.                         }
  1423.                         IDPortaApplicativa idPortaApplicativa = new IDPortaApplicativa();
  1424.                         idPortaApplicativa.setNome(portaApplicativa.getNome());
  1425.                         listDaVerificare.add(idPortaApplicativa);
  1426.                     }
  1427.                 }
  1428.                 // Fine controllo SoggettoVirtuale
  1429.                
  1430.                 // controlloSoggetti Autorizzati per le porte applicative che hanno un proprietario differente
  1431.                 FiltroRicercaPorteApplicative filtroRicercaPAConAuthSoggetti = new FiltroRicercaPorteApplicative();
  1432.                 filtroRicercaPAConAuthSoggetti.setIdSoggettoAutorizzato(new IDSoggetto(this.oldtipoprov, this.oldnomeprov));
  1433.                 List<IDPortaApplicativa> list = this.porteApplicativeCore.getAllIdPorteApplicative(filtroRicercaPAConAuthSoggetti);
  1434.                 if(list!=null && !list.isEmpty()) {
  1435.                     for (IDPortaApplicativa idPortaApplicativa : list) {
  1436.                         if(listaPA.containsKey(idPortaApplicativa.getNome())) {
  1437.                             continue; // modifica gia' effettuata
  1438.                         }
  1439.                         listDaVerificare.add(idPortaApplicativa);
  1440.                     }
  1441.                 }
  1442.                 // fine controlloSoggetti Autorizzati per le porte applicative che hanno un proprietario differente
  1443.                
  1444.                 // controlloServiziApplicativi Autorizzati per le porte applicative che hanno un proprietario differente
  1445.                 // non serve, sono tramite id. Serve solo l'update interno delle Porte applicative se trovato con altri metodi
  1446.                 // fine controlloServiziApplicativi Autorizzati per le porte applicative che hanno un proprietario differente
  1447.                
  1448.                 // controlloSoggetti riferiti nelle trasformazioni per le porte applicative che hanno un proprietario differente
  1449.                 FiltroRicercaPorteApplicative filtroRicercaPAConTrasformazioneSoggetti = new FiltroRicercaPorteApplicative();
  1450.                 filtroRicercaPAConTrasformazioneSoggetti.setIdSoggettoRiferitoApplicabilitaTrasformazione(new IDSoggetto(this.oldtipoprov, this.oldnomeprov));
  1451.                 list = this.porteApplicativeCore.getAllIdPorteApplicative(filtroRicercaPAConTrasformazioneSoggetti);
  1452.                 if(list!=null && !list.isEmpty()) {
  1453.                     for (IDPortaApplicativa idPortaApplicativa : list) {
  1454.                         if(listaPA.containsKey(idPortaApplicativa.getNome())) {
  1455.                             continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1456.                         }
  1457.                         listDaVerificare.add(idPortaApplicativa);
  1458.                     }
  1459.                 }
  1460.                 // fine controlloSoggetti riferiti nelle trasformazioni per le porte applicative che hanno un proprietario differente
  1461.                
  1462.                 // controlloServiziApplicativi riferiti nelle trasformazioni per le porte applicative che hanno un proprietario differente
  1463.                 // non serve, sono tramite id. Serve solo l'update interno delle Porte applicative se trovato con altri metodi
  1464.                 // fine controlloServiziApplicativi riferiti nelle trasformazioni per le porte applicative che hanno un proprietario differente
  1465.                
  1466.                 if(listDaVerificare!=null && !listDaVerificare.isEmpty()) {
  1467.                     for (IDPortaApplicativa idPortaApplicativa : listDaVerificare) {
  1468.                                                
  1469.                         if(listaPA.containsKey(idPortaApplicativa.getNome())) {
  1470.                             continue; // modifica gia' effettuata
  1471.                         }
  1472.                        
  1473.                         PortaApplicativa pa = null;
  1474.                         try {
  1475.                             pa = this.porteApplicativeCore.getPortaApplicativa(idPortaApplicativa);
  1476.                         }catch(DriverConfigurazioneNotFound notFound) {
  1477.                             // ignore
  1478.                         }
  1479.                         if(pa!=null) {
  1480.                            
  1481.                             // soggetti virtuali
  1482.                             if(pa.getSoggettoVirtuale()!=null &&
  1483.                                     this.oldtipoprov.equals(pa.getSoggettoVirtuale().getTipo()) &&
  1484.                                     this.oldnomeprov.equals(pa.getSoggettoVirtuale().getNome())) {
  1485.                                 pa.getSoggettoVirtuale().setTipo(this.tipoprov);
  1486.                                 pa.getSoggettoVirtuale().setNome(this.nomeprov);
  1487.                             }
  1488.                            
  1489.                             updateSoggettoInListeEngine(pa);
  1490.                            
  1491.                             listaPA.put(pa.getNome(), pa);
  1492.                         }
  1493.                     }
  1494.                 }
  1495.                
  1496.                 // Controllo policy di Rate Limiting
  1497.                
  1498.                 List<AttivazionePolicy> listPolicyDaVerificare = new ArrayList<>();
  1499.                
  1500.                 IDSoggetto filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  1501.                 ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
  1502.                 List<AttivazionePolicy> listaPolicies = null;
  1503.                 try {
  1504.                     listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.APPLICATIVA, null,
  1505.                             filtroSoggettoFruitore, null, null,
  1506.                             null, null,
  1507.                             null, null);
  1508.                 }catch(Exception e) {
  1509.                     // ignore
  1510.                 }
  1511.                 if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  1512.                     for (AttivazionePolicy ap : listaPolicies) {
  1513.                         if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
  1514.                             continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1515.                         }
  1516.                         listPolicyDaVerificare.add(ap);
  1517.                     }
  1518.                 }
  1519.                
  1520.                 IDSoggetto filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  1521.                 ricercaPolicies = new ConsoleSearch(true);
  1522.                 listaPolicies = null;
  1523.                 try {
  1524.                     listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.APPLICATIVA, null,
  1525.                             null, null, null,
  1526.                             filtroSoggettoErogatore, null,
  1527.                             null, null);
  1528.                 }catch(Exception e) {
  1529.                     // ignore
  1530.                 }
  1531.                 if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  1532.                     for (AttivazionePolicy ap : listaPolicies) {
  1533.                         if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
  1534.                             continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1535.                         }
  1536.                         listPolicyDaVerificare.add(ap);
  1537.                     }
  1538.                 }
  1539.                
  1540.                 if(listPolicyDaVerificare!=null && !listPolicyDaVerificare.isEmpty()) {
  1541.                     for (AttivazionePolicy ap : listPolicyDaVerificare) {
  1542.                        
  1543.                         if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
  1544.                             continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1545.                         }
  1546.                    
  1547.                         if(ap.getFiltro()!=null) {
  1548.                            
  1549.                             updateFiltroSoggettoEngine(ap);
  1550.                                                            
  1551.                             listaPolicyPA.put(ap.getIdActivePolicy(), ap);
  1552.                         }
  1553.                     }
  1554.                 }
  1555.                 // fine Controllo policy di Rate Limiting
  1556.                
  1557.                 if(this.confCore.isConfigurazioneAllarmiEnabled()) {
  1558.                     // Controllo allarmi
  1559.                    
  1560.                     List<ConfigurazioneAllarmeBean> listAllarmiDaVerificare = new ArrayList<>();
  1561.                    
  1562.                     filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  1563.                     ConsoleSearch ricercaAllarmi = new ConsoleSearch(true);
  1564.                     List<ConfigurazioneAllarmeBean> listaAllarmi = null;
  1565.                     try {
  1566.                         listaAllarmi = this.confCore.allarmiListByFilter(ricercaAllarmi, RuoloPorta.APPLICATIVA, null,
  1567.                                 filtroSoggettoFruitore, null, null,
  1568.                                 null, null,
  1569.                                 null, null);
  1570.                     }catch(Exception e) {
  1571.                         // ignore
  1572.                     }
  1573.                     if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
  1574.                         for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
  1575.                             if(listaAllarmiPA.containsKey(allarme.getNome())) {
  1576.                                 continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1577.                             }
  1578.                             listAllarmiDaVerificare.add(allarme);
  1579.                         }
  1580.                     }
  1581.                    
  1582.                     filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  1583.                     ricercaAllarmi = new ConsoleSearch(true);
  1584.                     listaAllarmi = null;
  1585.                     try {
  1586.                         listaAllarmi = this.confCore.allarmiListByFilter(ricercaAllarmi, RuoloPorta.APPLICATIVA, null,
  1587.                                 null, null, null,
  1588.                                 filtroSoggettoErogatore, null,
  1589.                                 null, null);
  1590.                     }catch(Exception e) {
  1591.                         // ignore
  1592.                     }
  1593.                     if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
  1594.                         for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
  1595.                             if(listaAllarmiPA.containsKey(allarme.getNome())) {
  1596.                                 continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1597.                             }
  1598.                             listAllarmiDaVerificare.add(allarme);
  1599.                         }
  1600.                     }
  1601.                    
  1602.                     if(listAllarmiDaVerificare!=null && !listAllarmiDaVerificare.isEmpty()) {
  1603.                         for (ConfigurazioneAllarmeBean allarme : listAllarmiDaVerificare) {
  1604.                            
  1605.                             if(listaAllarmiPA.containsKey(allarme.getNome())) {
  1606.                                 continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1607.                             }
  1608.                        
  1609.                             if(allarme.getFiltro()!=null) {
  1610.                                
  1611.                                 updateFiltroSoggettoEngine(allarme);
  1612.                                                                
  1613.                                 listaAllarmiPA.put(allarme.getNome(), allarme);
  1614.                             }
  1615.                         }
  1616.                     }
  1617.                     // fine Controllo allarmi
  1618.                 }
  1619.                
  1620.                 // ** Fine Verifica per soggetto proprietario differente da quello modificato ** //
  1621.             }          

  1622.             // aggiorno le porte applicative
  1623.             if(listaPA!=null && !listaPA.isEmpty()) {
  1624.                 for (PortaApplicativa portaApplicativa : listaPA.values()) {
  1625.                     this.oggettiDaAggiornare.add(portaApplicativa);
  1626.                 }
  1627.             }
  1628.             // aggiorno i servizi applicativi associati alle porte applicative (vanno aggiornati dopo le PA poiche sono riferiti con i vecchi nomi dentro le pa)
  1629.             if(listaPAeSA!=null && !listaPAeSA.isEmpty()) {
  1630.                 for (ServizioApplicativo sa : listaPAeSA.values()) {
  1631.                     this.oggettiDaAggiornare.add(sa);
  1632.                 }
  1633.             }
  1634.             // aggiorno le policy di rate limiting associate alle porte applicative
  1635.             if(listaPolicyPA!=null && !listaPolicyPA.isEmpty()) {
  1636.                 for (AttivazionePolicy ap : listaPolicyPA.values()) {
  1637.                     this.oggettiDaAggiornare.add(ap);
  1638.                 }
  1639.             }
  1640.             if(this.confCore.isConfigurazioneAllarmiEnabled() &&
  1641.                 // aggiorno gli allarmi associati alle porte applicative
  1642.                 listaAllarmiPA!=null && !listaAllarmiPA.isEmpty()) {
  1643.                 for (ConfigurazioneAllarmeBean allarme : listaAllarmiPA.values()) {
  1644.                     this.oggettiDaAggiornare.add(allarme);
  1645.                 }
  1646.             }
  1647.         }
  1648.     }

  1649.     private void updateSoggettoInListeEngine(PortaApplicativa portaApplicativa) {
  1650.        
  1651.         // controlloSoggetti Autorizzati
  1652.         if(portaApplicativa.getSoggetti()!=null && portaApplicativa.getSoggetti().sizeSoggettoList()>0) {
  1653.             for (PortaApplicativaAutorizzazioneSoggetto portaApplicativaAuthSoggetto : portaApplicativa.getSoggetti().getSoggettoList()) {
  1654.                 if (this.oldtipoprov.equals(portaApplicativaAuthSoggetto.getTipo()) &&
  1655.                         this.oldnomeprov.equals(portaApplicativaAuthSoggetto.getNome())) {
  1656.                     portaApplicativaAuthSoggetto.setTipo(this.tipoprov);
  1657.                     portaApplicativaAuthSoggetto.setNome(this.nomeprov);
  1658.                     break;
  1659.                 }
  1660.             }
  1661.         }
  1662.         // fine controlloSoggetti Autorizzati  
  1663.        
  1664.         // controlloServiziApplicativi Autorizzati
  1665.        
  1666.         if(portaApplicativa.getServiziApplicativiAutorizzati()!=null && portaApplicativa.getServiziApplicativiAutorizzati().sizeServizioApplicativoList()>0) {
  1667.             for (PortaApplicativaAutorizzazioneServizioApplicativo portaApplicativaAuthSa : portaApplicativa.getServiziApplicativiAutorizzati().getServizioApplicativoList()) {
  1668.                 if (this.oldtipoprov.equals(portaApplicativaAuthSa.getTipoSoggettoProprietario()) &&
  1669.                         this.oldnomeprov.equals(portaApplicativaAuthSa.getNomeSoggettoProprietario())) {
  1670.                     portaApplicativaAuthSa.setTipoSoggettoProprietario(this.tipoprov);
  1671.                     portaApplicativaAuthSa.setNomeSoggettoProprietario(this.nomeprov);
  1672.                     break;
  1673.                 }
  1674.             }
  1675.         }
  1676.        
  1677.         // fine controlloServiziApplicativi Autorizzati
  1678.        
  1679.         // controlloSoggetti riferiti nelle Trasformazioni
  1680.         if(portaApplicativa.getTrasformazioni()!=null && portaApplicativa.getTrasformazioni().sizeRegolaList()>0) {
  1681.             for (TrasformazioneRegola trRegola : portaApplicativa.getTrasformazioni().getRegolaList()) {
  1682.                 if(trRegola.getApplicabilita()!=null && trRegola.getApplicabilita().sizeSoggettoList()>0) {
  1683.                     for (TrasformazioneRegolaApplicabilitaSoggetto trSoggetto : trRegola.getApplicabilita().getSoggettoList()) {
  1684.                         if (this.oldtipoprov.equals(trSoggetto.getTipo()) &&
  1685.                                 this.oldnomeprov.equals(trSoggetto.getNome())) {
  1686.                             trSoggetto.setTipo(this.tipoprov);
  1687.                             trSoggetto.setNome(this.nomeprov);
  1688.                             break;
  1689.                         }
  1690.                     }
  1691.                 }      
  1692.             }
  1693.         }
  1694.         // fine controlloSoggetti riferiti nelle Trasformazioni
  1695.        
  1696.         // controlloServiziApplicativi riferiti nelle Trasformazioni
  1697.        
  1698.         if(portaApplicativa.getTrasformazioni()!=null && portaApplicativa.getTrasformazioni().sizeRegolaList()>0) {
  1699.             for (TrasformazioneRegola trRegola : portaApplicativa.getTrasformazioni().getRegolaList()) {
  1700.                 if(trRegola.getApplicabilita()!=null && trRegola.getApplicabilita().sizeServizioApplicativoList()>0) {
  1701.                     for (TrasformazioneRegolaApplicabilitaServizioApplicativo trSA : trRegola.getApplicabilita().getServizioApplicativoList()) {
  1702.                         if (this.oldtipoprov.equals(trSA.getTipoSoggettoProprietario()) &&
  1703.                                 this.oldnomeprov.equals(trSA.getNomeSoggettoProprietario())) {
  1704.                             trSA.setTipoSoggettoProprietario(this.tipoprov);
  1705.                             trSA.setNomeSoggettoProprietario(this.nomeprov);
  1706.                             break;
  1707.                         }
  1708.                     }
  1709.                 }
  1710.             }
  1711.         }
  1712.        
  1713.         // fine controlloSoggetti riferiti nelle Trasformazioni
  1714.     }
  1715.    
  1716.     private void updateFiltroSoggettoEngine(AttivazionePolicy ap) {
  1717.         if(ap.getFiltro()!=null) {
  1718.            
  1719.             // aggiorno soggetto fruitore
  1720.             if(ap.getFiltro().getTipoFruitore()!=null && ap.getFiltro().getNomeFruitore()!=null &&
  1721.                 this.oldtipoprov.equals(ap.getFiltro().getTipoFruitore()) &&
  1722.                 this.oldnomeprov.equals(ap.getFiltro().getNomeFruitore())) {
  1723.                 ap.getFiltro().setTipoFruitore(this.tipoprov);
  1724.                 ap.getFiltro().setNomeFruitore(this.nomeprov);
  1725.             }
  1726.            
  1727.             // aggiorno soggetto erogatore
  1728.             if(ap.getFiltro().getTipoErogatore()!=null && ap.getFiltro().getNomeErogatore()!=null &&
  1729.                 this.oldtipoprov.equals(ap.getFiltro().getTipoErogatore()) &&
  1730.                 this.oldnomeprov.equals(ap.getFiltro().getNomeErogatore())) {
  1731.                 ap.getFiltro().setTipoErogatore(this.tipoprov);
  1732.                 ap.getFiltro().setNomeErogatore(this.nomeprov);
  1733.             }
  1734.            
  1735.         }
  1736.     }
  1737.     private void updateFiltroSoggettoEngine(ConfigurazioneAllarmeBean allarme) {
  1738.         if(allarme.getFiltro()!=null) {
  1739.            
  1740.             // aggiorno soggetto fruitore
  1741.             if(allarme.getFiltro().getTipoFruitore()!=null && allarme.getFiltro().getNomeFruitore()!=null &&
  1742.                 this.oldtipoprov.equals(allarme.getFiltro().getTipoFruitore()) &&
  1743.                 this.oldnomeprov.equals(allarme.getFiltro().getNomeFruitore())) {
  1744.                 allarme.getFiltro().setTipoFruitore(this.tipoprov);
  1745.                 allarme.getFiltro().setNomeFruitore(this.nomeprov);
  1746.             }
  1747.            
  1748.             // aggiorno soggetto erogatore
  1749.             if(allarme.getFiltro().getTipoErogatore()!=null && allarme.getFiltro().getNomeErogatore()!=null &&
  1750.                 this.oldtipoprov.equals(allarme.getFiltro().getTipoErogatore()) &&
  1751.                 this.oldnomeprov.equals(allarme.getFiltro().getNomeErogatore())) {
  1752.                 allarme.getFiltro().setTipoErogatore(this.tipoprov);
  1753.                 allarme.getFiltro().setNomeErogatore(this.nomeprov);
  1754.             }
  1755.            
  1756.         }
  1757.     }

  1758.     public void checkFruitori() throws DriverRegistroServiziException{
  1759.         // Fruitori nei servizi
  1760.         if(this.soggettiCore.isRegistroServiziLocale() &&
  1761.             (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
  1762.             ){
  1763.            
  1764.             List<AccordoServizioParteSpecifica> sfruitori = this.apsCore.servizioWithSoggettoFruitore(new IDSoggetto(this.oldtipoprov,this.oldnomeprov));
  1765.             for(int i=0; i<sfruitori.size(); i++){
  1766.                 AccordoServizioParteSpecifica asps = sfruitori.get(i);
  1767.                 if(asps.getTipoSoggettoErogatore().equals(this.oldtipoprov) &&
  1768.                         asps.getNomeSoggettoErogatore().equals(this.oldnomeprov)){
  1769.                     asps.setTipoSoggettoErogatore(this.tipoprov);
  1770.                     asps.setNomeSoggettoErogatore(this.nomeprov);
  1771.                 }
  1772.                 // Check accordo di Servizio
  1773.                 IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
  1774.                 if(idAccordo.getSoggettoReferente()!=null &&
  1775.                         idAccordo.getSoggettoReferente().getTipo().equals(this.oldtipoprov) &&
  1776.                         idAccordo.getSoggettoReferente().getNome().equals(this.oldnomeprov)){
  1777.                     idAccordo.getSoggettoReferente().setTipo(this.tipoprov);
  1778.                     idAccordo.getSoggettoReferente().setNome(this.nomeprov);
  1779.                     asps.setAccordoServizioParteComune(IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordo));
  1780.                 }  
  1781.                 // Fruitori
  1782.                 for(int j=0; j<asps.sizeFruitoreList(); j++){
  1783.                     if(asps.getFruitore(j).getTipo().equals(this.oldtipoprov) &&
  1784.                             asps.getFruitore(j).getNome().equals(this.oldnomeprov)){
  1785.                         asps.getFruitore(j).setTipo(this.tipoprov);
  1786.                         asps.getFruitore(j).setNome(this.nomeprov);
  1787.                     }
  1788.                 }          
  1789.                 this.oggettiDaAggiornare.add(asps);
  1790.             }
  1791.                
  1792.         }
  1793.     }

  1794.     public void checkPolicyGlobali() {
  1795.         if(this.soggettiCore.isRegistroServiziLocale() &&
  1796.                 (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
  1797.             ){
  1798.            
  1799.             Map<String, AttivazionePolicy> listaPolicyPA = new HashMap<>();
  1800.            
  1801.            
  1802.             IDSoggetto filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  1803.             ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
  1804.             List<AttivazionePolicy> listaPolicies = null;
  1805.             try {
  1806.                 listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, null, null,
  1807.                         filtroSoggettoFruitore, null, null,
  1808.                         null, null,
  1809.                         null, null);
  1810.             }catch(Exception e) {
  1811.                 // ignore
  1812.             }
  1813.             if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  1814.                 for (AttivazionePolicy ap : listaPolicies) {
  1815.                     if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
  1816.                         continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1817.                     }
  1818.                                            
  1819.                     if(ap.getFiltro()!=null) {
  1820.                        
  1821.                         updateFiltroSoggettoEngine(ap);
  1822.                                                        
  1823.                         listaPolicyPA.put(ap.getIdActivePolicy(), ap);
  1824.                     }
  1825.                 }
  1826.             }
  1827.            
  1828.             IDSoggetto filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
  1829.             ricercaPolicies = new ConsoleSearch(true);
  1830.             listaPolicies = null;
  1831.             try {
  1832.                 listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, null, null,
  1833.                         null, null, null,
  1834.                         filtroSoggettoErogatore, null,
  1835.                         null, null);
  1836.             }catch(Exception e) {
  1837.                 // ignore
  1838.             }
  1839.             if(listaPolicies!=null && !listaPolicies.isEmpty()) {
  1840.                 for (AttivazionePolicy ap : listaPolicies) {
  1841.                     if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
  1842.                         continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
  1843.                     }
  1844.                    
  1845.                     if(ap.getFiltro()!=null) {
  1846.                        
  1847.                         updateFiltroSoggettoEngine(ap);
  1848.                                                        
  1849.                         listaPolicyPA.put(ap.getIdActivePolicy(), ap);
  1850.                     }
  1851.                 }
  1852.             }
  1853.            
  1854.             // fine Controllo policy di Rate Limiting
  1855.            
  1856.             // aggiorno le policy di rate limiting globali
  1857.             if(listaPolicyPA!=null && !listaPolicyPA.isEmpty()) {
  1858.                 for (AttivazionePolicy ap : listaPolicyPA.values()) {
  1859.                     this.oggettiDaAggiornare.add(ap);
  1860.                 }
  1861.             }
  1862.            
  1863.         }
  1864.     }
  1865.    
  1866.     public void checkConfigurazione() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  1867.         if(this.soggettiCore.isRegistroServiziLocale() &&
  1868.             (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
  1869.             ){
  1870.                
  1871.             Configurazione configurazioneGenerale = this.confCore.getConfigurazioneGenerale();
  1872.             boolean updated = false;
  1873.             if(configurazioneGenerale!=null && configurazioneGenerale.getUrlInvocazione()!=null && configurazioneGenerale.getUrlInvocazione().sizeRegolaList()>0) {
  1874.                 for (ConfigurazioneUrlInvocazioneRegola regola : configurazioneGenerale.getUrlInvocazione().getRegolaList()) {
  1875.                     if(regola.getSoggetto()!=null &&
  1876.                             this.oldtipoprov.equals(regola.getSoggetto().getTipo()) &&
  1877.                             this.oldnomeprov.equals(regola.getSoggetto().getNome())
  1878.                             ) {
  1879.                         regola.getSoggetto().setTipo(this.tipoprov);
  1880.                         regola.getSoggetto().setNome(this.nomeprov);
  1881.                         updated = true;
  1882.                     }
  1883.                 }
  1884.             }
  1885.            
  1886.             if(updated) {
  1887.                 this.oggettiDaAggiornare.add(configurazioneGenerale);
  1888.             }
  1889.            
  1890.         }
  1891.     }
  1892.        
  1893. }