SoggettoUpdateUtilities.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.web.ctrlstat.servlet.soggetti;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.openspcoop2.core.allarmi.constants.RuoloPorta;
import org.openspcoop2.core.config.Configurazione;
import org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneServizioApplicativo;
import org.openspcoop2.core.config.PortaApplicativaAutorizzazioneSoggetto;
import org.openspcoop2.core.config.PortaApplicativaAzione;
import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.PortaDelegataAzione;
import org.openspcoop2.core.config.PortaDelegataSoggettoErogatore;
import org.openspcoop2.core.config.ServizioApplicativo;
import org.openspcoop2.core.config.TrasformazioneRegola;
import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaServizioApplicativo;
import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaSoggetto;
import org.openspcoop2.core.config.constants.PortaApplicativaAzioneIdentificazione;
import org.openspcoop2.core.config.constants.PortaDelegataAzioneIdentificazione;
import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
import org.openspcoop2.core.config.driver.FiltroRicercaPorteApplicative;
import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
import org.openspcoop2.core.config.driver.db.IDServizioApplicativoDB;
import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDAccordoCooperazione;
import org.openspcoop2.core.id.IDPortaApplicativa;
import org.openspcoop2.core.id.IDPortaDelegata;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDServizioApplicativo;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.AccordoCooperazione;
import org.openspcoop2.core.registry.AccordoCooperazionePartecipanti;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
import org.openspcoop2.core.registry.driver.FiltroRicercaAccordi;
import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.monitor.engine.alarm.wrapper.ConfigurazioneAllarmeBean;
import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
import org.openspcoop2.web.ctrlstat.dao.SoggettoCtrlStat;
import org.openspcoop2.web.ctrlstat.servlet.ac.AccordiCooperazioneCore;
import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
/**
* SoggettoUpdateUtilities
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class SoggettoUpdateUtilities {
// pattern (fruitore)/(erogatore)/....
private static final String REGEXP_FRUITORE_EROGATORE_OTHER = ".*\\/.*\\/.*";
private static final String REGEXP_FRUITORE_EROGATORE_OTHER_MATCH = "(.*)\\/(.*)\\/(.*)";
private static final String PATTERN_AZIONE_PREFIX_OLD = ".*/";
private static final String PATTERN_AZIONE_SUFFIX_OLD = "/([^/|^?]*).*";
private static final String PATTERN_AZIONE_PREFIX_NEW = "/";
private static final String PATTERN_AZIONE_SUFFIX_NEW = "/([^/?]*).*";
List<Object> oggettiDaAggiornare = null;
private SoggettiCore soggettiCore;
private ServiziApplicativiCore saCore;
private AccordiServizioParteComuneCore apcCore;
private AccordiServizioParteSpecificaCore apsCore;
private PorteDelegateCore porteDelegateCore;
private PorteApplicativeCore porteApplicativeCore;
private AccordiCooperazioneCore acCore;
private ConfigurazioneCore confCore;
private SoggettoCtrlStat sog;
private String oldnomeprov;
private String nomeprov;
private String oldtipoprov;
private String tipoprov;
private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
public SoggettoUpdateUtilities(SoggettiCore soggettiCore,
String oldnomeprov,String nomeprov,
String oldtipoprov,String tipoprov,
SoggettoCtrlStat sog) throws Exception{
this.oggettiDaAggiornare = new ArrayList<>();
this.soggettiCore = soggettiCore;
this.saCore = new ServiziApplicativiCore(this.soggettiCore);
this.apcCore = new AccordiServizioParteComuneCore(this.soggettiCore);
this.apsCore = new AccordiServizioParteSpecificaCore(this.soggettiCore);
this.porteDelegateCore = new PorteDelegateCore(this.soggettiCore);
this.porteApplicativeCore = new PorteApplicativeCore(this.soggettiCore);
this.acCore = new AccordiCooperazioneCore(this.soggettiCore);
this.confCore = new ConfigurazioneCore(this.soggettiCore);
this.oldnomeprov = oldnomeprov;
this.nomeprov = nomeprov;
this.oldtipoprov = oldtipoprov;
this.tipoprov = tipoprov;
this.sog = sog;
}
public List<Object> getOggettiDaAggiornare() {
return this.oggettiDaAggiornare;
}
public void addSoggetto(){
this.oggettiDaAggiornare.add(this.sog);
}
public void checkServiziApplicativi() throws DriverConfigurazioneException{
// SERVIZI - APPLICATIVI
// Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica dei servizi applicativi
// poiche il cambio si riflette sul nome dei connettori del servizio applicativo
if (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov)) {
List<String> nomeListSA = new ArrayList<>();
List<ServizioApplicativo> listSA = new ArrayList<>();
List<IDServizioApplicativoDB> tmpListIDSA = this.saCore.getIdServiziApplicativiWithIdErogatore(this.sog.getId());
for (IDServizioApplicativoDB idServizioApplicativo : tmpListIDSA) {
if (!nomeListSA.contains(idServizioApplicativo.getNome())) {
nomeListSA.add(idServizioApplicativo.getNome());
ServizioApplicativo servizioApplicativo = this.saCore.getServizioApplicativo(idServizioApplicativo);
servizioApplicativo.setTipoSoggettoProprietario(this.tipoprov);
servizioApplicativo.setNomeSoggettoProprietario(this.nomeprov);
IDServizioApplicativo oldIDServizioApplicativoForUpdate = new IDServizioApplicativo();
oldIDServizioApplicativoForUpdate.setNome(servizioApplicativo.getNome());
oldIDServizioApplicativoForUpdate.setIdSoggettoProprietario(new IDSoggetto(this.oldtipoprov, this.oldnomeprov));
servizioApplicativo.setOldIDServizioApplicativoForUpdate(oldIDServizioApplicativoForUpdate);
listSA.add(servizioApplicativo);
}
}
// aggiungo tutti i servizi applicativi trovati
for (ServizioApplicativo sa : listSA) {
this.oggettiDaAggiornare.add(sa);
}
}
}
public void checkAccordiCooperazione() throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
// Accordi di Cooperazione
// Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica degli accordi di cooperazione:
// - soggetto referente
// - soggetti partecipanti
if(this.soggettiCore.isRegistroServiziLocale() &&
(!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
){
// - Soggetto referente
FiltroRicercaAccordi filtroRicercaAccordi = new FiltroRicercaAccordi();
filtroRicercaAccordi.setTipoSoggettoReferente(this.oldtipoprov);
filtroRicercaAccordi.setNomeSoggettoReferente(this.oldnomeprov);
List<IDAccordoCooperazione> idAccordiCooperazione = null;
try{
idAccordiCooperazione = this.acCore.getAllIdAccordiCooperazione(filtroRicercaAccordi);
}catch(DriverRegistroServiziNotFound dNot){
// ignore
}
if(idAccordiCooperazione!=null){
for(int i=0; i<idAccordiCooperazione.size(); i++){
AccordoCooperazione ac = this.acCore.getAccordoCooperazione(idAccordiCooperazione.get(i));
ac.getSoggettoReferente().setTipo(this.tipoprov);
ac.getSoggettoReferente().setNome(this.nomeprov);
// Check se come soggetto partecipante c'e' il soggetto stesso
if(ac.getElencoPartecipanti()!=null){
AccordoCooperazionePartecipanti partecipanti = ac.getElencoPartecipanti();
for(int j=0; j<partecipanti.sizeSoggettoPartecipanteList(); j++){
if(partecipanti.getSoggettoPartecipante(j).getTipo().equals(this.oldtipoprov) &&
partecipanti.getSoggettoPartecipante(j).getNome().equals(this.oldnomeprov)){
partecipanti.getSoggettoPartecipante(j).setTipo(this.tipoprov);
partecipanti.getSoggettoPartecipante(j).setNome(this.nomeprov);
}
}
}
this.oggettiDaAggiornare.add(ac);
/**System.out.println("AC ["+IDAccordoCooperazione.getUriFromAccordo(ac)+"]");*/
}
}
// - Soggetti Partecipanti
List<AccordoCooperazione> acs = this.acCore.accordiCoopWithSoggettoPartecipante(new IDSoggetto(this.oldtipoprov,this.oldnomeprov));
for(int i=0; i<acs.size(); i++){
AccordoCooperazione ac = acs.get(i);
// check accordi con referente (non effettuo il change 2 volte)
boolean find = false;
if(idAccordiCooperazione!=null){
for(int j=0; j<idAccordiCooperazione.size(); j++){
if(this.idAccordoCooperazioneFactory.getUriFromIDAccordo(idAccordiCooperazione.get(j)).equals(this.idAccordoCooperazioneFactory.getUriFromAccordo(ac))){
find = true;
break;
}
}
}
if(!find){
if(ac.getElencoPartecipanti()!=null){
AccordoCooperazionePartecipanti partecipanti = ac.getElencoPartecipanti();
for(int j=0; j<partecipanti.sizeSoggettoPartecipanteList(); j++){
if(partecipanti.getSoggettoPartecipante(j).getTipo().equals(this.oldtipoprov) &&
partecipanti.getSoggettoPartecipante(j).getNome().equals(this.oldnomeprov)){
partecipanti.getSoggettoPartecipante(j).setTipo(this.tipoprov);
partecipanti.getSoggettoPartecipante(j).setNome(this.nomeprov);
}
}
}
this.oggettiDaAggiornare.add(ac);
/**System.out.println("AC PARTECIPANTE ["+IDAccordoCooperazione.getUriFromAccordo(ac)+"]");*/
}
}
}
}
public void checkAccordiServizioParteComune() throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
// Accordi di Servizio
// Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica degli accordi di servizio
// poiche il cambio si riflette sul soggetto gestore
if(this.soggettiCore.isRegistroServiziLocale() &&
(!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
){
/**try{
as = core.getAllIdAccordiWithSoggettoReferente(new IDSoggetto(oldtipoprov,oldnomeprov));
}catch(DriverRegistroServiziNotFound dNotFound){}
if(as!=null){
for(int i=0; i<as.length; i++){
as[i].getSoggettoReferente().setTipo(tipoprov);
as[i].getSoggettoReferente().setNome(nomeprov);
oggettiDaAggiornare.add(as[i]);
}
}*/
FiltroRicercaAccordi filtroRicercaAccordi = new FiltroRicercaAccordi();
filtroRicercaAccordi.setTipoSoggettoReferente(this.oldtipoprov);
filtroRicercaAccordi.setNomeSoggettoReferente(this.oldnomeprov);
List<IDAccordo> idAccordoServizio = null;
try{
idAccordoServizio = this.apcCore.getAllIdAccordiServizio(filtroRicercaAccordi);
}catch(DriverRegistroServiziNotFound dNot){
// ignore
}
if(idAccordoServizio!=null){
for(int i=0; i<idAccordoServizio.size(); i++){
AccordoServizioParteComune as = this.apcCore.getAccordoServizioFull(idAccordoServizio.get(i));
as.getSoggettoReferente().setTipo(this.tipoprov);
as.getSoggettoReferente().setNome(this.nomeprov);
IDAccordo idAccordoOLD = this.idAccordoFactory.getIDAccordoFromValues(as.getNome(), this.oldtipoprov, this.oldnomeprov, as.getVersione());
as.setOldIDAccordoForUpdate(idAccordoOLD);
this.oggettiDaAggiornare.add(as);
/**System.out.println("AS ["+IDAccordo.getUriFromAccordo(as)+"]");*/
}
}
// - soggetti erogatore di servizi componenti
List<AccordoServizioParteComune> ass = this.apcCore.accordiServizioServiziComponentiConSoggettoErogatore(new IDSoggetto(this.oldtipoprov,this.oldnomeprov));
for(int i=0; i<ass.size(); i++){
AccordoServizioParteComune as = ass.get(i);
// check accordi con referente (non effettuo il change 2 volte)
boolean find = false;
if(idAccordoServizio!=null){
for(int j=0; j<idAccordoServizio.size(); j++){
if(this.idAccordoFactory.getUriFromIDAccordo(idAccordoServizio.get(j)).equals(IDAccordoFactory.getInstance().getUriFromAccordo(as))){
find = true;
break;
}
}
}
if(!find &&
as.getServizioComposto()!=null){
for(int j=0;j<as.getServizioComposto().sizeServizioComponenteList();j++){
if(as.getServizioComposto().getServizioComponente(j).getTipoSoggetto().equals(this.oldtipoprov) &&
as.getServizioComposto().getServizioComponente(j).getNomeSoggetto().equals(this.oldnomeprov)){
as.getServizioComposto().getServizioComponente(j).setTipoSoggetto(this.tipoprov);
as.getServizioComposto().getServizioComponente(j).setNomeSoggetto(this.nomeprov);
}
}
// Devo anche controllare che non sia cambiato il soggetto referente di questo as.
if(as.getSoggettoReferente()!=null &&
this.oldtipoprov.equals(as.getSoggettoReferente().getTipo()) &&
this.oldnomeprov.equals(as.getSoggettoReferente().getNome())){
as.getSoggettoReferente().setTipo(this.tipoprov);
as.getSoggettoReferente().setNome(this.nomeprov);
IDAccordo idAccordoOLD = IDAccordoFactory.getInstance().getIDAccordoFromValues(as.getNome(), this.oldtipoprov, this.oldnomeprov, as.getVersione());
as.setOldIDAccordoForUpdate(idAccordoOLD);
}
this.oggettiDaAggiornare.add(as);
/**System.out.println("As SERVIZIO COMPONENTE ["+IDAccordo.getUriFromAccordo(as)+"]");*/
}
}
}
}
private List<AccordoServizioParteSpecifica> accordiServizioParteSpecifica = null;
public void checkAccordiServizioParteSpecifica() throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
// SERVIZI
// Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica dei servizi
// poiche il cambio si riflette sul nome dei connettori del servizio
this.accordiServizioParteSpecifica = new ArrayList<>();
if (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov)) {
FiltroRicercaServizi filtroRicercaServizi = new FiltroRicercaServizi();
filtroRicercaServizi.setTipoSoggettoErogatore(this.oldtipoprov);
filtroRicercaServizi.setNomeSoggettoErogatore(this.oldnomeprov);
List<IDServizio> idServizio = null;
try{
idServizio = this.apsCore.getAllIdServizi(filtroRicercaServizi);
}catch(DriverRegistroServiziNotFound dNot){
// ignore
}
if(idServizio!=null){
for(int i=0; i<idServizio.size(); i++){
AccordoServizioParteSpecifica asps = this.apsCore.getServizio(idServizio.get(i));
asps.setTipoSoggettoErogatore(this.tipoprov);
asps.setNomeSoggettoErogatore(this.nomeprov);
IDServizio oldIDServizioForUpdate = IDServizioFactory.getInstance().getIDServizioFromValues(asps.getTipo(), asps.getNome(),
new IDSoggetto(this.oldtipoprov, this.oldnomeprov),
asps.getVersione());
asps.setOldIDServizioForUpdate(oldIDServizioForUpdate);
// Check accordo di Servizio
IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromUri(asps.getAccordoServizioParteComune());
if(idAccordo.getSoggettoReferente()!=null &&
idAccordo.getSoggettoReferente().getTipo().equals(this.oldtipoprov) &&
idAccordo.getSoggettoReferente().getNome().equals(this.oldnomeprov)){
idAccordo.getSoggettoReferente().setTipo(this.tipoprov);
idAccordo.getSoggettoReferente().setNome(this.nomeprov);
asps.setAccordoServizioParteComune(this.idAccordoFactory.getUriFromIDAccordo(idAccordo));
}
// Fruitori
for(int j=0; j<asps.sizeFruitoreList(); j++){
if(asps.getFruitore(j).getTipo().equals(this.oldtipoprov) &&
asps.getFruitore(j).getNome().equals(this.oldnomeprov)){
asps.getFruitore(j).setTipo(this.tipoprov);
asps.getFruitore(j).setNome(this.nomeprov);
}
}
if(this.soggettiCore.isRegistroServiziLocale()){
this.oggettiDaAggiornare.add(asps);
}
this.accordiServizioParteSpecifica.add(asps);
}
}
}
}
public void checkPorteDelegate() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
// Porte Delegate
// Se e' cambiato il tipo o il nome del soggetto devo effettuare la modifica delle porte delegate
// poiche il cambio si riflette sul nome della porta delegata
Map<Long, PortaDelegata> listaPD = new HashMap<>();
if (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov)) {
// ** Verifica per soggetto proprietario o soggetto erogatore ** //
// Vanno modificate tutte le Porte Delegate (appartenenti al soggetto modificato oppure che possiedono come soggetto erogatore il soggetto modificato)
// che presentano la seguente situazione:
// - pattern (fruitore)/(erogatore)/....
// se (fruitore) contiene tipoNomeSoggetto proprietario della PortaDelegata deve essere modificato
// se (erogatore) contiene tipoNomeSoggetto erogatore definito all'interno della porta delegata deve essere modificato.
List<PortaDelegata> list = new ArrayList<>();
FiltroRicercaPorteDelegate filtroRicerca = new FiltroRicercaPorteDelegate();
filtroRicerca.setTipoSoggetto(this.oldtipoprov);
filtroRicerca.setNomeSoggetto(this.oldnomeprov);
List<IDPortaDelegata> listID = this.porteDelegateCore.getAllIdPorteDelegate(filtroRicerca);
if(listID!=null && !listID.isEmpty()){
for (IDPortaDelegata idPortaDelegata : listID) {
list.add(this.porteDelegateCore.getPortaDelegata(idPortaDelegata));
}
}
filtroRicerca = new FiltroRicercaPorteDelegate();
filtroRicerca.setTipoSoggettoErogatore(this.oldtipoprov);
filtroRicerca.setNomeSoggettoErogatore(this.oldnomeprov);
listID = this.porteDelegateCore.getAllIdPorteDelegate(filtroRicerca);
if(listID!=null && !listID.isEmpty()){
for (IDPortaDelegata idPortaDelegata : listID) {
list.add(this.porteDelegateCore.getPortaDelegata(idPortaDelegata));
}
}
if(list!=null && !list.isEmpty()){
List<String> checkUnique = new ArrayList<>();
for (PortaDelegata portaDelegata : list) {
if(checkUnique.contains((portaDelegata.getId().longValue()+""))){
continue;
}
boolean modificatoNome = true;
boolean soggettoProprietarioCombaciaSoggettoInModifica = false;
String tipoNomeSoggettoFruitore = portaDelegata.getTipoSoggettoProprietario()+"_"+portaDelegata.getNomeSoggettoProprietario();
if(tipoNomeSoggettoFruitore.equals(this.oldtipoprov+"_"+this.oldnomeprov)){
soggettoProprietarioCombaciaSoggettoInModifica = true;
portaDelegata.setTipoSoggettoProprietario(this.tipoprov);
portaDelegata.setNomeSoggettoProprietario(this.nomeprov);
}
String nomeAttuale = portaDelegata.getNome();
String regex = REGEXP_FRUITORE_EROGATORE_OTHER;
// pattern (fruitore)/(erogatore)/....
if(nomeAttuale.matches(regex)){
String[] tmp = nomeAttuale.split("\\/");
String partFruitore = tmp[0];
String partErogatore = tmp[1];
String rimanente = "";
int lengthParteRimanente = (partFruitore+"/"+partErogatore).length();
if(nomeAttuale.length()>lengthParteRimanente){
rimanente = nomeAttuale.substring(lengthParteRimanente);
}
// se (fruitore) contiene tipoNomeSoggetto proprietario della PortaDelegata deve essere modificato
if(tipoNomeSoggettoFruitore.equals(partFruitore)){
if(tipoNomeSoggettoFruitore.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
partFruitore = this.tipoprov + "_" + this.nomeprov;
modificatoNome = true;
}
}
else if(("__"+tipoNomeSoggettoFruitore).equals(partFruitore) &&
(tipoNomeSoggettoFruitore).equals(this.oldtipoprov + "_" + this.oldnomeprov)){
partFruitore = "__"+this.tipoprov + "_" + this.nomeprov;
modificatoNome = true;
}
// se (erogatore) contiene tipoNomeSoggetto erogatore della PortaDelegata deve essere modificato
if(portaDelegata.getSoggettoErogatore()!=null &&
portaDelegata.getSoggettoErogatore().getTipo()!=null && !"".equals(portaDelegata.getSoggettoErogatore().getTipo()) &&
portaDelegata.getSoggettoErogatore().getNome()!=null && !"".equals(portaDelegata.getSoggettoErogatore().getNome())){
String tipoNomeSoggettoErogatore = portaDelegata.getSoggettoErogatore().getTipo()+"_"+portaDelegata.getSoggettoErogatore().getNome();
if(tipoNomeSoggettoErogatore.equals(partErogatore) &&
tipoNomeSoggettoErogatore.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
partErogatore = this.tipoprov + "_" + this.nomeprov;
portaDelegata.getSoggettoErogatore().setTipo(this.tipoprov);
portaDelegata.getSoggettoErogatore().setNome(this.nomeprov);
modificatoNome = true;
}
}
if(modificatoNome){
String nuovoNome = partFruitore + "/" + partErogatore + rimanente;
IDPortaDelegata oldIDPortaDelegataForUpdate = new IDPortaDelegata();
oldIDPortaDelegataForUpdate.setNome(nomeAttuale);
portaDelegata.setOldIDPortaDelegataForUpdate(oldIDPortaDelegataForUpdate);
portaDelegata.setNome(nuovoNome);
// modifica della descrizione
String descrizionePD = portaDelegata.getDescrizione();
if (descrizionePD != null && !descrizionePD.equals("")) {
// Caso 1: subscription default
// Subscription from gw/ENTE for service gw/ErogatoreEsterno:gw/EsempioREST:1
String matchCaso1testFrom = " "+this.oldtipoprov+"/"+this.oldnomeprov+" ";
if(descrizionePD.contains(matchCaso1testFrom)) {
String replaceCaso1testFrom = " "+this.tipoprov+"/"+this.nomeprov+" ";
descrizionePD = descrizionePD.replace(matchCaso1testFrom, replaceCaso1testFrom);
}
String matchCaso1testService = " "+this.oldtipoprov+"/"+this.oldnomeprov+":";
if(descrizionePD.contains(matchCaso1testService)) {
String replaceCaso1testService = " "+this.tipoprov+"/"+this.nomeprov+":";
descrizionePD = descrizionePD.replace(matchCaso1testService, replaceCaso1testService);
}
// Caso 2: altra subscription
// Internal Subscription 'Specific1' for gw_ENTE/gw_ErogatoreEsterno/gw_EsempioREST/1
String matchCaso2testMittente = " "+this.oldtipoprov+"_"+this.oldnomeprov+"/";
if(descrizionePD.contains(matchCaso2testMittente)) {
String replaceCaso2testMittente = " "+this.tipoprov+"_"+this.nomeprov+"/";
descrizionePD = descrizionePD.replace(matchCaso2testMittente, replaceCaso2testMittente);
}
String matchCaso2testErogatore = "/"+this.oldtipoprov+"_"+this.oldnomeprov+"/";
if(descrizionePD.contains(matchCaso2testErogatore)) {
String replaceCaso2testErogatore = "/"+this.tipoprov+"_"+this.nomeprov+"/";
descrizionePD = descrizionePD.replace(matchCaso2testErogatore, replaceCaso2testErogatore);
}
portaDelegata.setDescrizione(descrizionePD);
}
// regex del pattern azione
// OLD: .*/(fruitore)/(erogatore)/(servizio)/([^/|^?]*).*
// NEW 3.3.13: /(fruitore)/(erogatore)/(servizio)/([^/?]*).*
PortaDelegataAzione pdAzione = portaDelegata.getAzione();
PortaDelegataAzioneIdentificazione identificazione = pdAzione != null ? pdAzione.getIdentificazione() : null;
String patterAzione = "";
if(pdAzione!=null) {
patterAzione = pdAzione.getPattern() != null ? pdAzione.getPattern() : "";
}
String patternAzionePrefixOld = PATTERN_AZIONE_PREFIX_OLD;
String patternAzioneSuffix1Old = PATTERN_AZIONE_SUFFIX_OLD;
String patternAzionePrefixNew = PATTERN_AZIONE_PREFIX_NEW;
String patternAzioneSuffix1New = PATTERN_AZIONE_SUFFIX_NEW;
// se identificazione urlbased procedo con i controlli
if (PortaDelegataAzioneIdentificazione.URL_BASED.equals(identificazione)) {
boolean oldPattern = patterAzione.startsWith(patternAzionePrefixOld) && patterAzione.endsWith(patternAzioneSuffix1Old);
boolean newPattern = patterAzione.startsWith(patternAzionePrefixNew) && patterAzione.endsWith(patternAzioneSuffix1New);
if(oldPattern || newPattern) {
// caso1
int startidx = oldPattern ? patternAzionePrefixOld.length() : patternAzionePrefixNew.length();
int endidx = oldPattern ? patterAzione.lastIndexOf(patternAzioneSuffix1Old) : patterAzione.lastIndexOf(patternAzioneSuffix1New);
String tmpPat = patterAzione.substring(startidx, endidx);
// a questo punto ottengo una stringa del tipo
// (fruitore)/(erogatore)/(servizio)
// se rispetta la regex allora vuol dire che il
// pattern azione e' quello di default
// e devo effettuare i cambiamenti
if (tmpPat.matches(regex)) {
String[] val = tmpPat.split("/");
String fruitore = val[0];
String erogatore = val[1];
String rimanenteRegExp = "";
int lengthParteRimanenteRegExp = (fruitore+"/"+erogatore).length();
if(tmpPat.length()>lengthParteRimanenteRegExp){
rimanenteRegExp = tmpPat.substring(lengthParteRimanenteRegExp);
}
boolean match = false;
String partOld = "(?:"+this.oldtipoprov+"_)?"+this.oldnomeprov+"";
String partNew = "(?:"+this.tipoprov+"_)?"+this.nomeprov+"";
// vedo se matcha il fruitore
if (fruitore.equals(partOld)) {
fruitore = partNew;
match = true;
}
// vedo se matcha anche erogatore (loopback)
if (erogatore.equals(partOld)) {
erogatore = partNew;
match = true;
}
if(match){
String newPatternAzione = patternAzionePrefixNew + fruitore + "/" + erogatore + rimanenteRegExp + patternAzioneSuffix1New;
pdAzione.setPattern(newPatternAzione);
portaDelegata.setAzione(pdAzione);
}
}
}
}// fine controllo azione
// DelegatedBy
String nomePortaDelegante = null;
if(pdAzione!=null) {
nomePortaDelegante = pdAzione.getNomePortaDelegante() != null ? pdAzione.getNomePortaDelegante() : null;
}
if (PortaDelegataAzioneIdentificazione.DELEGATED_BY.equals(identificazione) && nomePortaDelegante!=null ) {
String regexDelegante = REGEXP_FRUITORE_EROGATORE_OTHER;
// pattern (fruitore)/(erogatore)/....
if(nomePortaDelegante.matches(regexDelegante)){
String[] tmpDelegante = nomePortaDelegante.split("\\/");
String partFruitoreDelegante = tmpDelegante[0];
String partErogatoreDelegante = tmpDelegante[1];
String rimanenteDelegante = "";
int lengthParteRimanenteDelegante = (partFruitoreDelegante+"/"+partErogatoreDelegante).length();
if(nomePortaDelegante.length()>lengthParteRimanenteDelegante){
rimanenteDelegante = nomePortaDelegante.substring(lengthParteRimanenteDelegante);
}
boolean modificatoNomeDelegante = false;
// se (fruitore) contiene tipoNomeSoggetto proprietario della PortaDelegata deve essere modificato
if(tipoNomeSoggettoFruitore.equals(partFruitoreDelegante)){
if(tipoNomeSoggettoFruitore.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
partFruitoreDelegante = this.tipoprov + "_" + this.nomeprov;
modificatoNomeDelegante = true;
}
}
else if(("__"+tipoNomeSoggettoFruitore).equals(partFruitoreDelegante) &&
(tipoNomeSoggettoFruitore).equals(this.oldtipoprov + "_" + this.oldnomeprov)){
partFruitoreDelegante = "__"+this.tipoprov + "_" + this.nomeprov;
modificatoNomeDelegante = true;
}
// se (erogatore) contiene tipoNomeSoggetto erogatore della PortaDelegata deve essere modificato
if(partErogatoreDelegante!=null && partErogatoreDelegante.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
partErogatoreDelegante = this.tipoprov + "_" + this.nomeprov;
modificatoNomeDelegante = true;
}
if(modificatoNomeDelegante){
String nuovoNomeDelegante = partFruitoreDelegante + "/" + partErogatoreDelegante + rimanenteDelegante;
portaDelegata.getAzione().setNomePortaDelegante(nuovoNomeDelegante);
}
}
}// fine controllo DelegatedBy
}
}
// inserisco la porta
if(soggettoProprietarioCombaciaSoggettoInModifica || modificatoNome){
listaPD.put(portaDelegata.getId(), portaDelegata);
checkUnique.add((portaDelegata.getId().longValue()+""));
}
}
}
// ** Verifica per soggetto proprietario o soggetto erogatore ** //
// PORTE DELEGATE
// Modifica servizio
// per ogni servizio da modificare devo effettuare le modifiche
// alle porte delegate
for (int j=0; j<this.accordiServizioParteSpecifica.size(); j++) {
AccordoServizioParteSpecifica asps = this.accordiServizioParteSpecifica.get(j);
List<PortaDelegata> tmpListPD = null;
// modifico le porte delegate interessate dal cambiamento
// del nome del soggetto
// recupero lo porte delegate per location
// e aggiorno il nome e la location
String locationPrefix = "";
String locationSuffix = "/" + this.oldtipoprov +"_" + this.oldnomeprov + "/" + asps.getTipo()+"_" +asps.getNome() + "/v" + asps.getVersione().intValue();
for (Fruitore fruitore : asps.getFruitoreList()) {
locationPrefix = fruitore.getTipo()+"_" + fruitore.getNome();
String location = locationPrefix + locationSuffix;
IDPortaDelegata idPD = new IDPortaDelegata();
idPD.setNome(location);
PortaDelegata portaDelegata = null;
try {
portaDelegata = this.porteDelegateCore.getPortaDelegata(idPD);
}catch(DriverConfigurazioneNotFound notFound) {
// ignore
}
if(portaDelegata==null) {
try {
// backward compatibility: provare ad eliminare la v, che prima non veniva utilizzata
String oldLocationSuffix = "/" + this.oldtipoprov +"_" + this.oldnomeprov + "/" + asps.getTipo()+"_" +asps.getNome() + "/" + asps.getVersione().intValue();
String oldLocation = locationPrefix + oldLocationSuffix;
idPD.setNome(oldLocation);
portaDelegata = this.porteDelegateCore.getPortaDelegata(idPD);
}catch(DriverConfigurazioneNotFound notFound) {
// ignore
}
}
if(portaDelegata!=null){
// Per tutte le porte delegate che rispettano la
// location cambio la vecchia location e inoltre
// controllo pure il pattern azione
Long idPorta = portaDelegata.getId();
// se la porta delegata e' gia stata inserita
// nella lista per modifiche
// allora prendo quella ed effettuo ulteriori
// modifiche
if (listaPD.containsKey(idPorta)) {
portaDelegata = listaPD.get(idPorta);
}
// new locationSuffix
String newLocationSuffix = "/" + this.tipoprov+"_" +this.nomeprov + "/" + asps.getTipo()+"_" +asps.getNome() + "/v" + asps.getVersione().intValue();
String newLocationPrefix = null;
if(fruitore.getTipo().equals(this.oldtipoprov) && fruitore.getNome().equals(this.oldnomeprov)){
newLocationPrefix = this.tipoprov+ "_" +this.nomeprov;
}
else{
newLocationPrefix = fruitore.getTipo()+ "_" +fruitore.getNome();
}
String newLocation = newLocationPrefix + newLocationSuffix;
if(portaDelegata.getOldIDPortaDelegataForUpdate()==null){
// Il vecchio nome e' gia essere stato messo prima nella passata sopra.
IDPortaDelegata oldIDPortaDelegataForUpdate = new IDPortaDelegata();
oldIDPortaDelegataForUpdate.setNome(portaDelegata.getNome());
portaDelegata.setOldIDPortaDelegataForUpdate(oldIDPortaDelegataForUpdate);
}
portaDelegata.setNome(newLocation);
// aggiorno la descrizione della porta
String descrizionePD = portaDelegata.getDescrizione();
if (descrizionePD != null && !descrizionePD.equals("")) {
// Caso 1: subscription default
// Subscription from gw/ENTE for service gw/ErogatoreEsterno:gw/EsempioREST:1
String matchCaso1testFrom = " "+this.oldtipoprov+"/"+this.oldnomeprov+" ";
if(descrizionePD.contains(matchCaso1testFrom)) {
String replaceCaso1testFrom = " "+this.tipoprov+"/"+this.nomeprov+" ";
descrizionePD = descrizionePD.replace(matchCaso1testFrom, replaceCaso1testFrom);
}
String matchCaso1testService = " "+this.oldtipoprov+"/"+this.oldnomeprov+":";
if(descrizionePD.contains(matchCaso1testService)) {
String replaceCaso1testService = " "+this.tipoprov+"/"+this.nomeprov+":";
descrizionePD = descrizionePD.replace(matchCaso1testService, replaceCaso1testService);
}
// Caso 2: altra subscription
// Internal Subscription 'Specific1' for gw_ENTE/gw_ErogatoreEsterno/gw_EsempioREST/1
String matchCaso2testMittente = " "+this.oldtipoprov+"_"+this.oldnomeprov+"/";
if(descrizionePD.contains(matchCaso2testMittente)) {
String replaceCaso2testMittente = " "+this.tipoprov+"_"+this.nomeprov+"/";
descrizionePD = descrizionePD.replace(matchCaso2testMittente, replaceCaso2testMittente);
}
String matchCaso2testErogatore = "/"+this.oldtipoprov+"_"+this.oldnomeprov+"/";
if(descrizionePD.contains(matchCaso2testErogatore)) {
String replaceCaso2testErogatore = "/"+this.tipoprov+"_"+this.nomeprov+"/";
descrizionePD = descrizionePD.replace(matchCaso2testErogatore, replaceCaso2testErogatore);
}
portaDelegata.setDescrizione(descrizionePD);
}
// aggiorno anche il soggetto
PortaDelegataSoggettoErogatore sogErogatore = portaDelegata.getSoggettoErogatore();
sogErogatore.setTipo(this.sog.getTipo());
sogErogatore.setNome(this.sog.getNome());
portaDelegata.setSoggettoErogatore(sogErogatore);
// CONTROLLO PATTERN AZIONE inoltre va
// controllato anche il pattern dell'azione in
// caso il pattern azione fosse URLBASED e fosse
// quello di default allora va cambiato
String regex = REGEXP_FRUITORE_EROGATORE_OTHER_MATCH;
PortaDelegataAzione pdAzione = portaDelegata.getAzione();
PortaDelegataAzioneIdentificazione identificazione = pdAzione != null ? pdAzione.getIdentificazione() : null;
String patterAzione = "";
if(pdAzione!=null) {
patterAzione = pdAzione.getPattern() != null ? pdAzione.getPattern() : "";
}
// regex del pattern azione
// OLD: .*/(fruitore)/(erogatore)/(servizio)/([^/|^?]*).*
// NEW 3.3.13: /(fruitore)/(erogatore)/(servizio)/([^/?]*).*
String patternAzionePrefixOld = PATTERN_AZIONE_PREFIX_OLD;
String patternAzioneSuffixOld = PATTERN_AZIONE_SUFFIX_OLD;
String patternAzionePrefixNew = PATTERN_AZIONE_PREFIX_NEW;
String patternAzioneSuffixNew = PATTERN_AZIONE_SUFFIX_NEW;
// se identificazione urlbased procedo con i
// controlli
if (PortaDelegataAzioneIdentificazione.URL_BASED.equals(identificazione)) {
boolean oldPattern = patterAzione.startsWith(patternAzionePrefixOld) && patterAzione.endsWith(patternAzioneSuffixOld);
boolean newPattern = patterAzione.startsWith(patternAzionePrefixNew) && patterAzione.endsWith(patternAzioneSuffixNew);
if(oldPattern || newPattern) {
int startidx = oldPattern ? patternAzionePrefixOld.length() : patternAzionePrefixNew.length();
int endidx = oldPattern ? patterAzione.lastIndexOf(patternAzioneSuffixOld) : patterAzione.lastIndexOf(patternAzioneSuffixNew);
String tmpPat = patterAzione.substring(startidx, endidx);
// a questo punto ottengo una stringa del tipo
// (fruitore)/(erogatore)/(servizio)
// se rispetta la regex allora vuol dire che il
// pattern azione e' quello di default
// e devo effettuare i cambiamenti
if (tmpPat.matches(regex)) {
String[] val = tmpPat.split("/");
String fruitoreA = val[0];
String erogatore = val[1];
String rimanenteRegExp = "";
int lengthParteRimanenteRegExp = (fruitoreA+"/"+erogatore).length();
if(tmpPat.length()>lengthParteRimanenteRegExp){
rimanenteRegExp = tmpPat.substring(lengthParteRimanenteRegExp);
}
boolean match = false;
String partOld = "(?:"+this.oldtipoprov+"_)?"+this.oldnomeprov+"";
String partNew = "(?:"+this.tipoprov+"_)?"+this.nomeprov+"";
// vedo se matcha il fruitore
if (fruitoreA.equals(partOld)) {
fruitoreA = partNew;
match = true;
}
// vedo se matcha anche erogatore (loopback)
if (erogatore.equals(partOld)) {
erogatore = partNew;
match = true;
}
if(match){
String newPatternAzione = patternAzionePrefixNew + fruitoreA + "/" + erogatore + rimanenteRegExp + patternAzioneSuffixNew;
pdAzione.setPattern(newPatternAzione);
portaDelegata.setAzione(pdAzione);
}
}
}
}// fine controllo azione
// DelegatedBy
String nomePortaDelegante = null;
if(pdAzione!=null) {
nomePortaDelegante = pdAzione.getNomePortaDelegante() != null ? pdAzione.getNomePortaDelegante() : null;
}
if (PortaDelegataAzioneIdentificazione.DELEGATED_BY.equals(identificazione) && nomePortaDelegante!=null ) {
String regexDelegante = REGEXP_FRUITORE_EROGATORE_OTHER;
// pattern (fruitore)/(erogatore)/....
if(nomePortaDelegante.matches(regexDelegante)){
String[] tmpDelegante = nomePortaDelegante.split("\\/");
String partFruitoreDelegante = tmpDelegante[0];
String partErogatoreDelegante = tmpDelegante[1];
String rimanenteDelegante = "";
int lengthParteRimanenteDelegante = (partFruitoreDelegante+"/"+partErogatoreDelegante).length();
if(nomePortaDelegante.length()>lengthParteRimanenteDelegante){
rimanenteDelegante = nomePortaDelegante.substring(lengthParteRimanenteDelegante);
}
boolean modificatoNomeDelegante = false;
// se (fruitore) contiene tipoNomeSoggetto proprietario della PortaDelegata deve essere modificato
if((this.oldtipoprov + "_" + this.oldnomeprov).equals(partFruitoreDelegante)){
partFruitoreDelegante = this.tipoprov + "_" + this.nomeprov;
modificatoNomeDelegante = true;
}
else if(("__"+(this.oldtipoprov + "_" + this.oldnomeprov)).equals(partFruitoreDelegante)){
partFruitoreDelegante = "__"+this.tipoprov + "_" + this.nomeprov;
modificatoNomeDelegante = true;
}
// se (erogatore) contiene tipoNomeSoggetto erogatore della PortaDelegata deve essere modificato
if(partErogatoreDelegante!=null && partErogatoreDelegante.equals(this.oldtipoprov + "_" + this.oldnomeprov)){
partErogatoreDelegante = this.tipoprov + "_" + this.nomeprov;
modificatoNomeDelegante = true;
}
if(modificatoNomeDelegante){
String nuovoNomeDelegante = partFruitoreDelegante + "/" + partErogatoreDelegante + rimanenteDelegante;
portaDelegata.getAzione().setNomePortaDelegante(nuovoNomeDelegante);
}
}
}// fine controllo DelegatedBy
// (ri)aggiungo pd
listaPD.put(idPorta, portaDelegata);
}// fine foreach pd
}// fine foreach fruitore
// recupero le porte delegate per id_soggetto_erogatore
tmpListPD = this.porteDelegateCore.porteDelegateWithSoggettoErogatoreList(this.sog.getId());
if(tmpListPD!=null && !tmpListPD.isEmpty()) {
for (PortaDelegata portaDelegata : tmpListPD) {
Long idPorta = portaDelegata.getId();
if (listaPD.containsKey(idPorta)) {
// se la porta delegata e' gia stata modificata e
// inserita
// nella lista, allora prendo la porta inserita in
// lista
// ed effettuo ulteriori modifiche
portaDelegata = listaPD.get(idPorta);
}
// modifico le informazioni sul soggetto erogatore
PortaDelegataSoggettoErogatore sogErogatore = portaDelegata.getSoggettoErogatore();
sogErogatore.setTipo(this.sog.getTipo());
sogErogatore.setNome(this.sog.getNome());
portaDelegata.setSoggettoErogatore(sogErogatore);
// (re)inserisco la porta nella lista
listaPD.put(idPorta, portaDelegata);
}
}
// recupero le porte delegate per tipo/nome soggetto erogatore
tmpListPD = this.porteDelegateCore.porteDelegateWithTipoNomeErogatoreList(this.sog.getOldTipoForUpdate(), this.sog.getOldNomeForUpdate());
if(tmpListPD!=null && !tmpListPD.isEmpty()) {
for (PortaDelegata portaDelegata : tmpListPD) {
Long idPorta = portaDelegata.getId();
if (listaPD.containsKey(idPorta)) {
// se la porta delegata e' gia stata modificata e
// inserita
// nella lista, allora prendo la porta inserita in
// lista
// ed effettuo ulteriori modifiche
portaDelegata = listaPD.get(idPorta);
}
// modifico informazioni su soggetto erogatore
PortaDelegataSoggettoErogatore sogErogatore = portaDelegata.getSoggettoErogatore();
sogErogatore.setTipo(this.sog.getTipo());
sogErogatore.setNome(this.sog.getNome());
portaDelegata.setSoggettoErogatore(sogErogatore);
// inserisco la porta
listaPD.put(idPorta, portaDelegata);
}
}
}// for each servizio
}// if oldnome || oldtipo changed
// aggiorno le porte delegate
Map<String, AttivazionePolicy> listaPolicyPD = new HashMap<>();
Map<String, ConfigurazioneAllarmeBean> listaAllarmiPD = new HashMap<>();
if(listaPD!=null && !listaPD.isEmpty()) {
for (PortaDelegata portaDelegata : listaPD.values()) {
updateSoggettoInlisteEngine(portaDelegata);
this.oggettiDaAggiornare.add(portaDelegata);
// verifico rate limiting per ogni porta delegata trovata
// Controllo policy di Rate Limiting
ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
List<AttivazionePolicy> listaPolicies = null;
String oldNomePorta = portaDelegata.getNome();
try {
if(portaDelegata.getOldIDPortaDelegataForUpdate()!=null && portaDelegata.getOldIDPortaDelegataForUpdate().getNome()!=null) {
oldNomePorta = portaDelegata.getOldIDPortaDelegataForUpdate().getNome();
}
listaPolicies = this.confCore.attivazionePolicyList(ricercaPolicies, RuoloPolicy.DELEGATA, oldNomePorta);
}catch(Exception e) {
// ignore
}
if(listaPolicies!=null && !listaPolicies.isEmpty()) {
for (AttivazionePolicy ap : listaPolicies) {
if(ap.getFiltro()!=null && oldNomePorta.equals(ap.getFiltro().getNomePorta())) {
// aggiorno nome porta
ap.getFiltro().setNomePorta(portaDelegata.getNome());
updateFiltroSoggettoEngine(ap);
listaPolicyPD.put(ap.getIdActivePolicy(), ap);
}
}
}
// fine Controllo policy di Rate Limiting
if(this.confCore.isConfigurazioneAllarmiEnabled()) {
// Controllo allarmi
ConsoleSearch ricercaAllarmi = new ConsoleSearch(true);
List<ConfigurazioneAllarmeBean> listaAllarmi = null;
oldNomePorta = portaDelegata.getNome();
try {
if(portaDelegata.getOldIDPortaDelegataForUpdate()!=null && portaDelegata.getOldIDPortaDelegataForUpdate().getNome()!=null) {
oldNomePorta = portaDelegata.getOldIDPortaDelegataForUpdate().getNome();
}
listaAllarmi = this.confCore.allarmiList(ricercaAllarmi, RuoloPorta.DELEGATA, oldNomePorta);
}catch(Exception e) {
// ignore
}
if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
if(allarme.getFiltro()!=null && oldNomePorta.equals(allarme.getFiltro().getNomePorta())) {
// aggiorno nome porta
allarme.getFiltro().setNomePorta(portaDelegata.getNome());
updateFiltroSoggettoEngine(allarme);
listaAllarmiPD.put(allarme.getNome(), allarme);
}
}
}
// fine Controllo allarmi
}
}
}
// Controllo policy di Rate Limiting di altre porte delegate che utilizzano il soggetto solamente nel filtro.
List<AttivazionePolicy> listPolicyDaVerificare = new ArrayList<>();
IDSoggetto filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
List<AttivazionePolicy> listaPolicies = null;
try {
listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.DELEGATA, null,
filtroSoggettoFruitore, null, null,
null, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaPolicies!=null && !listaPolicies.isEmpty()) {
for (AttivazionePolicy ap : listaPolicies) {
if(listaPolicyPD.containsKey(ap.getIdActivePolicy())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listPolicyDaVerificare.add(ap);
}
}
IDSoggetto filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ricercaPolicies = new ConsoleSearch(true);
listaPolicies = null;
try {
listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.DELEGATA, null,
null, null, null,
filtroSoggettoErogatore, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaPolicies!=null && !listaPolicies.isEmpty()) {
for (AttivazionePolicy ap : listaPolicies) {
if(listaPolicyPD.containsKey(ap.getIdActivePolicy())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listPolicyDaVerificare.add(ap);
}
}
if(listPolicyDaVerificare!=null && !listPolicyDaVerificare.isEmpty()) {
for (AttivazionePolicy ap : listPolicyDaVerificare) {
if(listaPolicyPD.containsKey(ap.getIdActivePolicy())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
if(ap.getFiltro()!=null) {
updateFiltroSoggettoEngine(ap);
listaPolicyPD.put(ap.getIdActivePolicy(), ap);
}
}
}
// fine Controllo policy di Rate Limiting
// aggiorno le policy di rate limiting associate alle porte delegate
if(listaPolicyPD!=null && !listaPolicyPD.isEmpty()) {
for (AttivazionePolicy ap : listaPolicyPD.values()) {
this.oggettiDaAggiornare.add(ap);
}
}
if(this.confCore.isConfigurazioneAllarmiEnabled()) {
// Controllo policy di Rate Limiting di altre porte delegate che utilizzano il soggetto solamente nel filtro.
List<ConfigurazioneAllarmeBean> listAllarmiDaVerificare = new ArrayList<>();
filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ConsoleSearch ricercaAllarmi = new ConsoleSearch(true);
List<ConfigurazioneAllarmeBean> listaAllarmi = null;
try {
listaAllarmi = this.confCore.allarmiListByFilter(ricercaAllarmi, RuoloPorta.DELEGATA, null,
filtroSoggettoFruitore, null, null,
null, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
if(listaAllarmiPD.containsKey(allarme.getNome())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listAllarmiDaVerificare.add(allarme);
}
}
filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ricercaAllarmi = new ConsoleSearch(true);
listaAllarmi = null;
try {
listaAllarmi = this.confCore.allarmiListByFilter(ricercaAllarmi, RuoloPorta.DELEGATA, null,
null, null, null,
filtroSoggettoErogatore, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
if(listaAllarmiPD.containsKey(allarme.getNome())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listAllarmiDaVerificare.add(allarme);
}
}
if(listAllarmiDaVerificare!=null && !listAllarmiDaVerificare.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listAllarmiDaVerificare) {
if(listaAllarmiPD.containsKey(allarme.getNome())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
if(allarme.getFiltro()!=null) {
updateFiltroSoggettoEngine(allarme);
listaAllarmiPD.put(allarme.getNome(), allarme);
}
}
}
// fine Controllo policy di Rate Limiting
// aggiorno gli allarmi associati alle porte delegate
if(listaAllarmiPD!=null && !listaAllarmiPD.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listaAllarmiPD.values()) {
this.oggettiDaAggiornare.add(allarme);
}
}
}
}
private void updateSoggettoInlisteEngine(PortaDelegata portaDelegata) {
// controlloServiziApplicativi riferiti nelle Trasformazioni
if(portaDelegata.getTrasformazioni()!=null && portaDelegata.getTrasformazioni().sizeRegolaList()>0) {
for (TrasformazioneRegola trRegola : portaDelegata.getTrasformazioni().getRegolaList()) {
if(trRegola.getApplicabilita()!=null && trRegola.getApplicabilita().sizeServizioApplicativoList()>0) {
for (TrasformazioneRegolaApplicabilitaServizioApplicativo trSA : trRegola.getApplicabilita().getServizioApplicativoList()) {
if (this.oldtipoprov.equals(trSA.getTipoSoggettoProprietario()) &&
this.oldnomeprov.equals(trSA.getNomeSoggettoProprietario())) {
trSA.setTipoSoggettoProprietario(this.tipoprov);
trSA.setNomeSoggettoProprietario(this.nomeprov);
break;
}
}
}
}
}
// fine controlloSoggetti riferiti nelle Trasformazioni
}
public void checkPorteApplicative() throws DriverConfigurazioneException{
if(this.soggettiCore.isRegistroServiziLocale()){
// PORTE APPLICATIVE
// Se e' cambiato il tipo o il nome del soggetto virtuale devo effettuare la modifica delle porte applicative
// poiche il cambio si riflette all'interno delle informazioni delle porte applicative
Map<String, PortaApplicativa> listaPA = new HashMap<>();
Map<String, ServizioApplicativo> listaPAeSA = new HashMap<>();
Map<String, AttivazionePolicy> listaPolicyPA = new HashMap<>();
Map<String, ConfigurazioneAllarmeBean> listaAllarmiPA = new HashMap<>();
if (!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov)) {
// ** Verifica per soggetto proprietario ** //
// NomePorta
// Tutte le porte applicativa di questo soggetto con nome "di default"
// devono essere cambiate
// Nome della Porta:
List<PortaApplicativa> tmpList = this.porteApplicativeCore.porteAppList(this.sog.getId().intValue(), new ConsoleSearch(true));
for (PortaApplicativa portaApplicativa : tmpList) {
IDPortaApplicativa oldIDPortaApplicativaForUpdate = null;
String nomeAttuale = portaApplicativa.getNome();
// se il nome e' quello di default cioe' (erogatore)/(servizio)/(versioneServizio) o (erogatore)/(servizio)/(versioneServizio)/azione
String regex = REGEXP_FRUITORE_EROGATORE_OTHER_MATCH;
String newNome = null;
if (nomeAttuale.matches(regex)) {
String[] val = nomeAttuale.split("\\/");
String patErogatore = val[0];
String patServizio = val[1];
String patVersioneServizio = val[2];
StringBuilder sbPatAzione = new StringBuilder();
if(val.length>3){
for (int i = 3; i < val.length; i++) {
if(i>3){
sbPatAzione.append("/");
}
sbPatAzione.append(val[i]);
}
}
String patAzione = sbPatAzione.toString();
// erogatore
if (patErogatore.equals(this.oldtipoprov+ "_" +this.oldnomeprov)) {
patErogatore = this.tipoprov+ "_" +this.nomeprov;
}
else if (patErogatore.equals("__"+this.oldtipoprov+ "_" +this.oldnomeprov)) {
patErogatore = "__"+this.tipoprov+ "_" +this.nomeprov;
}
newNome = patErogatore + "/" + patServizio + "/" + patVersioneServizio ;
if(patAzione!=null && StringUtils.isNotEmpty(patAzione)){
newNome = newNome + "/" + patAzione;
}
portaApplicativa.setNome(newNome);
oldIDPortaApplicativaForUpdate = new IDPortaApplicativa();
oldIDPortaApplicativaForUpdate.setNome(nomeAttuale);
portaApplicativa.setOldIDPortaApplicativaForUpdate(oldIDPortaApplicativaForUpdate);
// modifica della descrizione
String descrizionePA = portaApplicativa.getDescrizione();
if (descrizionePA != null && !descrizionePA.equals("")) {
// Caso 1: implementation default
// Service implementation gw/ENTE:gw/TEST:1
String matchCaso1testService = " "+this.oldtipoprov+"/"+this.oldnomeprov+":";
if(descrizionePA.contains(matchCaso1testService)) {
String replaceCaso1testService = " "+this.tipoprov+"/"+this.nomeprov+":";
descrizionePA = descrizionePA.replace(matchCaso1testService, replaceCaso1testService);
}
// Caso 2: altra subscription
// Internal Implementation 'Specific1' for gw_ENTE/gw_TEST/1
String matchCaso2testService = " "+this.oldtipoprov+"_"+this.oldnomeprov+"/";
if(descrizionePA.contains(matchCaso2testService)) {
String replaceCaso2testService = " "+this.tipoprov+"_"+this.nomeprov+"/";
descrizionePA = descrizionePA.replace(matchCaso2testService, replaceCaso2testService);
}
portaApplicativa.setDescrizione(descrizionePA);
}
// regex del pattern azione
// OLD: .*/(erogatore)/(servizio)/([^/|^?]*).*
// NEW 3.3.13: /(erogatore)/(servizio)/([^/?]*).*
PortaApplicativaAzione paAzione = portaApplicativa.getAzione();
PortaApplicativaAzioneIdentificazione identificazione = paAzione != null ? paAzione.getIdentificazione() : null;
String patterAzione = "";
if(paAzione!=null) {
patterAzione = paAzione.getPattern() != null ? paAzione.getPattern() : "";
}
String patternAzionePrefixOld = PATTERN_AZIONE_PREFIX_OLD;
String patternAzioneSuffix1Old = PATTERN_AZIONE_SUFFIX_OLD;
String patternAzionePrefixNew = PATTERN_AZIONE_PREFIX_NEW;
String patternAzioneSuffix1New = PATTERN_AZIONE_SUFFIX_NEW;
// se identificazione urlbased procedo con i controlli
if (PortaApplicativaAzioneIdentificazione.URL_BASED.equals(identificazione)) {
boolean oldPattern = patterAzione.startsWith(patternAzionePrefixOld) && patterAzione.endsWith(patternAzioneSuffix1Old);
boolean newPattern = patterAzione.startsWith(patternAzionePrefixNew) && patterAzione.endsWith(patternAzioneSuffix1New);
if(oldPattern || newPattern) {
// caso1
int startidx = oldPattern ? patternAzionePrefixOld.length() : patternAzionePrefixNew.length();
int endidx = oldPattern ? patterAzione.lastIndexOf(patternAzioneSuffix1Old) : patterAzione.lastIndexOf(patternAzioneSuffix1New);
String tmpPat = patterAzione.substring(startidx, endidx);
// a questo punto ottengo una stringa del tipo
// (fruitore)/(erogatore)/(servizio)
// se rispetta la regex allora vuol dire che il
// pattern azione e' quello di default
// e devo effettuare i cambiamenti
if (tmpPat.matches(regex)) {
val = tmpPat.split("/");
String partErogatore = val[0];
String partServizio = val[1];
String partVersione = val[2];
String rimanenteRegExp = "";
int lengthParteRimanenteRegExp = (partErogatore+"/"+partServizio+"/"+partVersione).length();
if(tmpPat.length()>lengthParteRimanenteRegExp){
rimanenteRegExp = tmpPat.substring(lengthParteRimanenteRegExp);
}
boolean matchURL = false;
String partOld = "(?:"+this.oldtipoprov+"_)?"+this.oldnomeprov+"";
String partNew = "(?:"+this.tipoprov+"_)?"+this.nomeprov+"";
// vedo se matcha il fruitore
if (partErogatore.equals(partOld)) {
partErogatore = partNew;
matchURL = true;
}
if(matchURL){
String newPatternAzione = patternAzionePrefixNew + partErogatore+ "/" + partServizio+ "/" + partVersione + rimanenteRegExp + patternAzioneSuffix1New;
paAzione.setPattern(newPatternAzione);
portaApplicativa.setAzione(paAzione);
}
}
}
}
// DelegatedBy
String nomePortaDelegante = null;
if(paAzione!=null) {
nomePortaDelegante = paAzione.getNomePortaDelegante() != null ? paAzione.getNomePortaDelegante() : null;
}
if (PortaApplicativaAzioneIdentificazione.DELEGATED_BY.equals(identificazione) && nomePortaDelegante!=null ) {
String regexDelegante = REGEXP_FRUITORE_EROGATORE_OTHER_MATCH;
if (nomePortaDelegante.matches(regexDelegante)) {
String[] valDelegante = nomePortaDelegante.split("\\/");
String patErogatoreDelegante = valDelegante[0];
String patServizioDelegante = valDelegante[1];
String patVersioneServizioDelegante = valDelegante[2];
StringBuilder sbPatAzioneDelegante = new StringBuilder();
if(valDelegante.length>3){
for (int i = 3; i < valDelegante.length; i++) {
if(i>3){
sbPatAzioneDelegante.append("/");
}
sbPatAzioneDelegante.append(valDelegante[i]);
}
}
String patAzioneDelegante = sbPatAzioneDelegante.toString();
// erogatore
if (patErogatoreDelegante.equals(this.oldtipoprov+ "_" +this.oldnomeprov)) {
patErogatoreDelegante = this.tipoprov+ "_" +this.nomeprov;
}
else if (patErogatoreDelegante.equals("__"+this.oldtipoprov+ "_" +this.oldnomeprov)) {
patErogatoreDelegante = "__"+this.tipoprov+ "_" +this.nomeprov;
}
String newNomeDelegante = patErogatoreDelegante + "/" + patServizioDelegante + "/" + patVersioneServizioDelegante ;
if(patAzioneDelegante!=null && StringUtils.isNotEmpty(patAzioneDelegante)){
newNomeDelegante = newNomeDelegante + "/" + patAzioneDelegante;
}
portaApplicativa.getAzione().setNomePortaDelegante(newNomeDelegante);
}
}// fine controllo DelegatedBy
}// fine controllo nome
updateSoggettoInListeEngine(portaApplicativa);
portaApplicativa.setTipoSoggettoProprietario(this.tipoprov);
portaApplicativa.setNomeSoggettoProprietario(this.nomeprov);
listaPA.put(nomeAttuale, portaApplicativa);
// modifica nome Servizi Applicativi che riflette il nome della PA
if(oldIDPortaApplicativaForUpdate!=null && portaApplicativa.sizeServizioApplicativoList()>0) {
for (PortaApplicativaServizioApplicativo portaApplicativaSA : portaApplicativa.getServizioApplicativoList()) {
boolean nameEquals = portaApplicativaSA.getNome().equals(oldIDPortaApplicativaForUpdate.getNome());
// __gw_ENTE/gw_TEST/v1__Specific2__SA3
boolean nameConnettoreMultiplo = portaApplicativaSA.getNome().startsWith(oldIDPortaApplicativaForUpdate.getNome()+ConnettoriCostanti.PARAMETRO_CONNETTORI_MULTIPLI_SAX_PREFIX);
if(nameEquals || nameConnettoreMultiplo) {
// devo aggiornare il nome del SA
IDServizioApplicativo idSA = new IDServizioApplicativo();
idSA.setNome(portaApplicativaSA.getNome());
idSA.setIdSoggettoProprietario(new IDSoggetto(this.oldtipoprov, this.oldnomeprov));
ServizioApplicativo sa = this.saCore.getServizioApplicativo(idSA);
IDServizioApplicativo oldIDServizioApplicativoForUpdate = new IDServizioApplicativo();
oldIDServizioApplicativoForUpdate.setNome(sa.getNome());
oldIDServizioApplicativoForUpdate.setIdSoggettoProprietario(idSA.getIdSoggettoProprietario());
sa.setOldIDServizioApplicativoForUpdate(oldIDServizioApplicativoForUpdate);
sa.setTipoSoggettoProprietario(this.tipoprov);
sa.setNomeSoggettoProprietario(this.nomeprov);
if(nameEquals || nameConnettoreMultiplo) {
// nameEquals: gw_ENTE/gw_TEST/1
// nameConnettoreMultiplo: gw_ENTE/gw_TEST/v1__SA2
if(sa.getNome().startsWith(this.oldtipoprov+"_"+this.oldnomeprov+"/")) {
sa.setNome(sa.getNome().replace(this.oldtipoprov+"_"+this.oldnomeprov+"/", this.tipoprov+"_"+this.nomeprov+"/"));
}
// nameEquals: __gw_ENTE/gw_TEST/1__Specific2
// nameConnettoreMultiplo: __gw_ENTE/gw_TEST/v1__Specific2__SA2
else if(sa.getNome().startsWith("__"+this.oldtipoprov+"_"+this.oldnomeprov+"/")) {
sa.setNome(sa.getNome().replace("__"+this.oldtipoprov+"_"+this.oldnomeprov+"/", "__"+this.tipoprov+"_"+this.nomeprov+"/"));
}
}
/**NON SERVE, sono riferiti tramite id e prima modifico le porte applicative!! portaApplicativaSA.setNome(sa.getNome());
// Inoltre anche se cambio il nome del soggetto, l'id del soggetto rimane lo stesso*/
listaPAeSA.put(sa.getNome(), sa);
/** ?? nei connettori multipli, salta break;*/
}
}
}
// modifica nome Servizi Applicativi che riflette il nome della PA
// Controllo policy di Rate Limiting
ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
List<AttivazionePolicy> listaPolicies = null;
try {
listaPolicies = this.confCore.attivazionePolicyList(ricercaPolicies, RuoloPolicy.APPLICATIVA, nomeAttuale);
}catch(Exception e) {
// ignore
}
if(listaPolicies!=null && !listaPolicies.isEmpty()) {
for (AttivazionePolicy ap : listaPolicies) {
if(ap.getFiltro()!=null && nomeAttuale.equals(ap.getFiltro().getNomePorta())) {
// aggiorno nome porta
if(newNome!=null) {
ap.getFiltro().setNomePorta(newNome);
}
updateFiltroSoggettoEngine(ap);
listaPolicyPA.put(ap.getIdActivePolicy(), ap);
}
}
}
// fine Controllo policy di Rate Limiting
if(this.confCore.isConfigurazioneAllarmiEnabled()) {
// Controllo allarmi
ConsoleSearch ricercaAllarmi = new ConsoleSearch(true);
List<ConfigurazioneAllarmeBean> listaAllarmi = null;
try {
listaAllarmi = this.confCore.allarmiList(ricercaAllarmi, RuoloPorta.APPLICATIVA, nomeAttuale);
}catch(Exception e) {
// ignore
}
if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
if(allarme.getFiltro()!=null && nomeAttuale.equals(allarme.getFiltro().getNomePorta())) {
// aggiorno nome porta
if(newNome!=null) {
allarme.getFiltro().setNomePorta(newNome);
}
updateFiltroSoggettoEngine(allarme);
listaAllarmiPA.put(allarme.getNome(), allarme);
}
}
}
// fine Controllo allarmi
}
}
// ** Fine Verifica per soggetto proprietario ** //
// ** Verifica per soggetto proprietario differente da quello modificato ** //
// effettuo controlli per le porte applicative che hanno un proprietario differente
List<IDPortaApplicativa> listDaVerificare = new ArrayList<>();
// controllo SoggettoVirtuale
List<PortaApplicativa> tmpListSoggettiVirtuali = this.porteApplicativeCore.getPorteApplicativeBySoggettoVirtuale(new IDSoggetto(this.oldtipoprov,this.oldnomeprov));
if(tmpListSoggettiVirtuali!=null && !tmpListSoggettiVirtuali.isEmpty()) {
for (PortaApplicativa portaApplicativa : tmpListSoggettiVirtuali) {
if(listaPA.containsKey(portaApplicativa.getNome())) {
continue; // modifica gia' effettuata
}
IDPortaApplicativa idPortaApplicativa = new IDPortaApplicativa();
idPortaApplicativa.setNome(portaApplicativa.getNome());
listDaVerificare.add(idPortaApplicativa);
}
}
// Fine controllo SoggettoVirtuale
// controlloSoggetti Autorizzati per le porte applicative che hanno un proprietario differente
FiltroRicercaPorteApplicative filtroRicercaPAConAuthSoggetti = new FiltroRicercaPorteApplicative();
filtroRicercaPAConAuthSoggetti.setIdSoggettoAutorizzato(new IDSoggetto(this.oldtipoprov, this.oldnomeprov));
List<IDPortaApplicativa> list = this.porteApplicativeCore.getAllIdPorteApplicative(filtroRicercaPAConAuthSoggetti);
if(list!=null && !list.isEmpty()) {
for (IDPortaApplicativa idPortaApplicativa : list) {
if(listaPA.containsKey(idPortaApplicativa.getNome())) {
continue; // modifica gia' effettuata
}
listDaVerificare.add(idPortaApplicativa);
}
}
// fine controlloSoggetti Autorizzati per le porte applicative che hanno un proprietario differente
// controlloServiziApplicativi Autorizzati per le porte applicative che hanno un proprietario differente
// non serve, sono tramite id. Serve solo l'update interno delle Porte applicative se trovato con altri metodi
// fine controlloServiziApplicativi Autorizzati per le porte applicative che hanno un proprietario differente
// controlloSoggetti riferiti nelle trasformazioni per le porte applicative che hanno un proprietario differente
FiltroRicercaPorteApplicative filtroRicercaPAConTrasformazioneSoggetti = new FiltroRicercaPorteApplicative();
filtroRicercaPAConTrasformazioneSoggetti.setIdSoggettoRiferitoApplicabilitaTrasformazione(new IDSoggetto(this.oldtipoprov, this.oldnomeprov));
list = this.porteApplicativeCore.getAllIdPorteApplicative(filtroRicercaPAConTrasformazioneSoggetti);
if(list!=null && !list.isEmpty()) {
for (IDPortaApplicativa idPortaApplicativa : list) {
if(listaPA.containsKey(idPortaApplicativa.getNome())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listDaVerificare.add(idPortaApplicativa);
}
}
// fine controlloSoggetti riferiti nelle trasformazioni per le porte applicative che hanno un proprietario differente
// controlloServiziApplicativi riferiti nelle trasformazioni per le porte applicative che hanno un proprietario differente
// non serve, sono tramite id. Serve solo l'update interno delle Porte applicative se trovato con altri metodi
// fine controlloServiziApplicativi riferiti nelle trasformazioni per le porte applicative che hanno un proprietario differente
if(listDaVerificare!=null && !listDaVerificare.isEmpty()) {
for (IDPortaApplicativa idPortaApplicativa : listDaVerificare) {
if(listaPA.containsKey(idPortaApplicativa.getNome())) {
continue; // modifica gia' effettuata
}
PortaApplicativa pa = null;
try {
pa = this.porteApplicativeCore.getPortaApplicativa(idPortaApplicativa);
}catch(DriverConfigurazioneNotFound notFound) {
// ignore
}
if(pa!=null) {
// soggetti virtuali
if(pa.getSoggettoVirtuale()!=null &&
this.oldtipoprov.equals(pa.getSoggettoVirtuale().getTipo()) &&
this.oldnomeprov.equals(pa.getSoggettoVirtuale().getNome())) {
pa.getSoggettoVirtuale().setTipo(this.tipoprov);
pa.getSoggettoVirtuale().setNome(this.nomeprov);
}
updateSoggettoInListeEngine(pa);
listaPA.put(pa.getNome(), pa);
}
}
}
// Controllo policy di Rate Limiting
List<AttivazionePolicy> listPolicyDaVerificare = new ArrayList<>();
IDSoggetto filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
List<AttivazionePolicy> listaPolicies = null;
try {
listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.APPLICATIVA, null,
filtroSoggettoFruitore, null, null,
null, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaPolicies!=null && !listaPolicies.isEmpty()) {
for (AttivazionePolicy ap : listaPolicies) {
if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listPolicyDaVerificare.add(ap);
}
}
IDSoggetto filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ricercaPolicies = new ConsoleSearch(true);
listaPolicies = null;
try {
listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, RuoloPolicy.APPLICATIVA, null,
null, null, null,
filtroSoggettoErogatore, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaPolicies!=null && !listaPolicies.isEmpty()) {
for (AttivazionePolicy ap : listaPolicies) {
if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listPolicyDaVerificare.add(ap);
}
}
if(listPolicyDaVerificare!=null && !listPolicyDaVerificare.isEmpty()) {
for (AttivazionePolicy ap : listPolicyDaVerificare) {
if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
if(ap.getFiltro()!=null) {
updateFiltroSoggettoEngine(ap);
listaPolicyPA.put(ap.getIdActivePolicy(), ap);
}
}
}
// fine Controllo policy di Rate Limiting
if(this.confCore.isConfigurazioneAllarmiEnabled()) {
// Controllo allarmi
List<ConfigurazioneAllarmeBean> listAllarmiDaVerificare = new ArrayList<>();
filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ConsoleSearch ricercaAllarmi = new ConsoleSearch(true);
List<ConfigurazioneAllarmeBean> listaAllarmi = null;
try {
listaAllarmi = this.confCore.allarmiListByFilter(ricercaAllarmi, RuoloPorta.APPLICATIVA, null,
filtroSoggettoFruitore, null, null,
null, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
if(listaAllarmiPA.containsKey(allarme.getNome())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listAllarmiDaVerificare.add(allarme);
}
}
filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ricercaAllarmi = new ConsoleSearch(true);
listaAllarmi = null;
try {
listaAllarmi = this.confCore.allarmiListByFilter(ricercaAllarmi, RuoloPorta.APPLICATIVA, null,
null, null, null,
filtroSoggettoErogatore, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaAllarmi!=null && !listaAllarmi.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listaAllarmi) {
if(listaAllarmiPA.containsKey(allarme.getNome())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
listAllarmiDaVerificare.add(allarme);
}
}
if(listAllarmiDaVerificare!=null && !listAllarmiDaVerificare.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listAllarmiDaVerificare) {
if(listaAllarmiPA.containsKey(allarme.getNome())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
if(allarme.getFiltro()!=null) {
updateFiltroSoggettoEngine(allarme);
listaAllarmiPA.put(allarme.getNome(), allarme);
}
}
}
// fine Controllo allarmi
}
// ** Fine Verifica per soggetto proprietario differente da quello modificato ** //
}
// aggiorno le porte applicative
if(listaPA!=null && !listaPA.isEmpty()) {
for (PortaApplicativa portaApplicativa : listaPA.values()) {
this.oggettiDaAggiornare.add(portaApplicativa);
}
}
// aggiorno i servizi applicativi associati alle porte applicative (vanno aggiornati dopo le PA poiche sono riferiti con i vecchi nomi dentro le pa)
if(listaPAeSA!=null && !listaPAeSA.isEmpty()) {
for (ServizioApplicativo sa : listaPAeSA.values()) {
this.oggettiDaAggiornare.add(sa);
}
}
// aggiorno le policy di rate limiting associate alle porte applicative
if(listaPolicyPA!=null && !listaPolicyPA.isEmpty()) {
for (AttivazionePolicy ap : listaPolicyPA.values()) {
this.oggettiDaAggiornare.add(ap);
}
}
if(this.confCore.isConfigurazioneAllarmiEnabled() &&
// aggiorno gli allarmi associati alle porte applicative
listaAllarmiPA!=null && !listaAllarmiPA.isEmpty()) {
for (ConfigurazioneAllarmeBean allarme : listaAllarmiPA.values()) {
this.oggettiDaAggiornare.add(allarme);
}
}
}
}
private void updateSoggettoInListeEngine(PortaApplicativa portaApplicativa) {
// controlloSoggetti Autorizzati
if(portaApplicativa.getSoggetti()!=null && portaApplicativa.getSoggetti().sizeSoggettoList()>0) {
for (PortaApplicativaAutorizzazioneSoggetto portaApplicativaAuthSoggetto : portaApplicativa.getSoggetti().getSoggettoList()) {
if (this.oldtipoprov.equals(portaApplicativaAuthSoggetto.getTipo()) &&
this.oldnomeprov.equals(portaApplicativaAuthSoggetto.getNome())) {
portaApplicativaAuthSoggetto.setTipo(this.tipoprov);
portaApplicativaAuthSoggetto.setNome(this.nomeprov);
break;
}
}
}
// fine controlloSoggetti Autorizzati
// controlloServiziApplicativi Autorizzati
if(portaApplicativa.getServiziApplicativiAutorizzati()!=null && portaApplicativa.getServiziApplicativiAutorizzati().sizeServizioApplicativoList()>0) {
for (PortaApplicativaAutorizzazioneServizioApplicativo portaApplicativaAuthSa : portaApplicativa.getServiziApplicativiAutorizzati().getServizioApplicativoList()) {
if (this.oldtipoprov.equals(portaApplicativaAuthSa.getTipoSoggettoProprietario()) &&
this.oldnomeprov.equals(portaApplicativaAuthSa.getNomeSoggettoProprietario())) {
portaApplicativaAuthSa.setTipoSoggettoProprietario(this.tipoprov);
portaApplicativaAuthSa.setNomeSoggettoProprietario(this.nomeprov);
break;
}
}
}
// fine controlloServiziApplicativi Autorizzati
// controlloSoggetti riferiti nelle Trasformazioni
if(portaApplicativa.getTrasformazioni()!=null && portaApplicativa.getTrasformazioni().sizeRegolaList()>0) {
for (TrasformazioneRegola trRegola : portaApplicativa.getTrasformazioni().getRegolaList()) {
if(trRegola.getApplicabilita()!=null && trRegola.getApplicabilita().sizeSoggettoList()>0) {
for (TrasformazioneRegolaApplicabilitaSoggetto trSoggetto : trRegola.getApplicabilita().getSoggettoList()) {
if (this.oldtipoprov.equals(trSoggetto.getTipo()) &&
this.oldnomeprov.equals(trSoggetto.getNome())) {
trSoggetto.setTipo(this.tipoprov);
trSoggetto.setNome(this.nomeprov);
break;
}
}
}
}
}
// fine controlloSoggetti riferiti nelle Trasformazioni
// controlloServiziApplicativi riferiti nelle Trasformazioni
if(portaApplicativa.getTrasformazioni()!=null && portaApplicativa.getTrasformazioni().sizeRegolaList()>0) {
for (TrasformazioneRegola trRegola : portaApplicativa.getTrasformazioni().getRegolaList()) {
if(trRegola.getApplicabilita()!=null && trRegola.getApplicabilita().sizeServizioApplicativoList()>0) {
for (TrasformazioneRegolaApplicabilitaServizioApplicativo trSA : trRegola.getApplicabilita().getServizioApplicativoList()) {
if (this.oldtipoprov.equals(trSA.getTipoSoggettoProprietario()) &&
this.oldnomeprov.equals(trSA.getNomeSoggettoProprietario())) {
trSA.setTipoSoggettoProprietario(this.tipoprov);
trSA.setNomeSoggettoProprietario(this.nomeprov);
break;
}
}
}
}
}
// fine controlloSoggetti riferiti nelle Trasformazioni
}
private void updateFiltroSoggettoEngine(AttivazionePolicy ap) {
if(ap.getFiltro()!=null) {
// aggiorno soggetto fruitore
if(ap.getFiltro().getTipoFruitore()!=null && ap.getFiltro().getNomeFruitore()!=null &&
this.oldtipoprov.equals(ap.getFiltro().getTipoFruitore()) &&
this.oldnomeprov.equals(ap.getFiltro().getNomeFruitore())) {
ap.getFiltro().setTipoFruitore(this.tipoprov);
ap.getFiltro().setNomeFruitore(this.nomeprov);
}
// aggiorno soggetto erogatore
if(ap.getFiltro().getTipoErogatore()!=null && ap.getFiltro().getNomeErogatore()!=null &&
this.oldtipoprov.equals(ap.getFiltro().getTipoErogatore()) &&
this.oldnomeprov.equals(ap.getFiltro().getNomeErogatore())) {
ap.getFiltro().setTipoErogatore(this.tipoprov);
ap.getFiltro().setNomeErogatore(this.nomeprov);
}
}
}
private void updateFiltroSoggettoEngine(ConfigurazioneAllarmeBean allarme) {
if(allarme.getFiltro()!=null) {
// aggiorno soggetto fruitore
if(allarme.getFiltro().getTipoFruitore()!=null && allarme.getFiltro().getNomeFruitore()!=null &&
this.oldtipoprov.equals(allarme.getFiltro().getTipoFruitore()) &&
this.oldnomeprov.equals(allarme.getFiltro().getNomeFruitore())) {
allarme.getFiltro().setTipoFruitore(this.tipoprov);
allarme.getFiltro().setNomeFruitore(this.nomeprov);
}
// aggiorno soggetto erogatore
if(allarme.getFiltro().getTipoErogatore()!=null && allarme.getFiltro().getNomeErogatore()!=null &&
this.oldtipoprov.equals(allarme.getFiltro().getTipoErogatore()) &&
this.oldnomeprov.equals(allarme.getFiltro().getNomeErogatore())) {
allarme.getFiltro().setTipoErogatore(this.tipoprov);
allarme.getFiltro().setNomeErogatore(this.nomeprov);
}
}
}
public void checkFruitori() throws DriverRegistroServiziException{
// Fruitori nei servizi
if(this.soggettiCore.isRegistroServiziLocale() &&
(!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
){
List<AccordoServizioParteSpecifica> sfruitori = this.apsCore.servizioWithSoggettoFruitore(new IDSoggetto(this.oldtipoprov,this.oldnomeprov));
for(int i=0; i<sfruitori.size(); i++){
AccordoServizioParteSpecifica asps = sfruitori.get(i);
if(asps.getTipoSoggettoErogatore().equals(this.oldtipoprov) &&
asps.getNomeSoggettoErogatore().equals(this.oldnomeprov)){
asps.setTipoSoggettoErogatore(this.tipoprov);
asps.setNomeSoggettoErogatore(this.nomeprov);
}
// Check accordo di Servizio
IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
if(idAccordo.getSoggettoReferente()!=null &&
idAccordo.getSoggettoReferente().getTipo().equals(this.oldtipoprov) &&
idAccordo.getSoggettoReferente().getNome().equals(this.oldnomeprov)){
idAccordo.getSoggettoReferente().setTipo(this.tipoprov);
idAccordo.getSoggettoReferente().setNome(this.nomeprov);
asps.setAccordoServizioParteComune(IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordo));
}
// Fruitori
for(int j=0; j<asps.sizeFruitoreList(); j++){
if(asps.getFruitore(j).getTipo().equals(this.oldtipoprov) &&
asps.getFruitore(j).getNome().equals(this.oldnomeprov)){
asps.getFruitore(j).setTipo(this.tipoprov);
asps.getFruitore(j).setNome(this.nomeprov);
}
}
this.oggettiDaAggiornare.add(asps);
}
}
}
public void checkPolicyGlobali() {
if(this.soggettiCore.isRegistroServiziLocale() &&
(!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
){
Map<String, AttivazionePolicy> listaPolicyPA = new HashMap<>();
IDSoggetto filtroSoggettoFruitore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ConsoleSearch ricercaPolicies = new ConsoleSearch(true);
List<AttivazionePolicy> listaPolicies = null;
try {
listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, null, null,
filtroSoggettoFruitore, null, null,
null, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaPolicies!=null && !listaPolicies.isEmpty()) {
for (AttivazionePolicy ap : listaPolicies) {
if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
if(ap.getFiltro()!=null) {
updateFiltroSoggettoEngine(ap);
listaPolicyPA.put(ap.getIdActivePolicy(), ap);
}
}
}
IDSoggetto filtroSoggettoErogatore = new IDSoggetto(this.oldtipoprov, this.oldnomeprov);
ricercaPolicies = new ConsoleSearch(true);
listaPolicies = null;
try {
listaPolicies = this.confCore.attivazionePolicyListByFilter(ricercaPolicies, null, null,
null, null, null,
filtroSoggettoErogatore, null,
null, null);
}catch(Exception e) {
// ignore
}
if(listaPolicies!=null && !listaPolicies.isEmpty()) {
for (AttivazionePolicy ap : listaPolicies) {
if(listaPolicyPA.containsKey(ap.getIdActivePolicy())) {
continue; // modifica gia' effettuata o cmq gestita dopo poiche' porta gia trovata
}
if(ap.getFiltro()!=null) {
updateFiltroSoggettoEngine(ap);
listaPolicyPA.put(ap.getIdActivePolicy(), ap);
}
}
}
// fine Controllo policy di Rate Limiting
// aggiorno le policy di rate limiting globali
if(listaPolicyPA!=null && !listaPolicyPA.isEmpty()) {
for (AttivazionePolicy ap : listaPolicyPA.values()) {
this.oggettiDaAggiornare.add(ap);
}
}
}
}
public void checkConfigurazione() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
if(this.soggettiCore.isRegistroServiziLocale() &&
(!this.oldnomeprov.equals(this.nomeprov) || !this.oldtipoprov.equals(this.tipoprov))
){
Configurazione configurazioneGenerale = this.confCore.getConfigurazioneGenerale();
boolean updated = false;
if(configurazioneGenerale!=null && configurazioneGenerale.getUrlInvocazione()!=null && configurazioneGenerale.getUrlInvocazione().sizeRegolaList()>0) {
for (ConfigurazioneUrlInvocazioneRegola regola : configurazioneGenerale.getUrlInvocazione().getRegolaList()) {
if(regola.getSoggetto()!=null &&
this.oldtipoprov.equals(regola.getSoggetto().getTipo()) &&
this.oldnomeprov.equals(regola.getSoggetto().getNome())
) {
regola.getSoggetto().setTipo(this.tipoprov);
regola.getSoggetto().setNome(this.nomeprov);
updated = true;
}
}
}
if(updated) {
this.oggettiDaAggiornare.add(configurazioneGenerale);
}
}
}
}