ConfigurazioneUtilities.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.config;

  21. import java.util.ArrayList;
  22. import java.util.List;

  23. import org.apache.commons.lang.StringUtils;
  24. import org.openspcoop2.core.allarmi.Allarme;
  25. import org.openspcoop2.core.allarmi.AllarmeHistory;
  26. import org.openspcoop2.core.allarmi.IdAllarme;
  27. import org.openspcoop2.core.allarmi.constants.RuoloPorta;
  28. import org.openspcoop2.core.config.Configurazione;
  29. import org.openspcoop2.core.config.PortaApplicativa;
  30. import org.openspcoop2.core.config.PortaDelegata;
  31. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  32. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  33. import org.openspcoop2.core.config.utils.ConfigurazionePdDUtils;
  34. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  35. import org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy;
  36. import org.openspcoop2.core.controllo_traffico.beans.InfoPolicy;
  37. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  38. import org.openspcoop2.core.id.IDPortaApplicativa;
  39. import org.openspcoop2.core.id.IDPortaDelegata;
  40. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  41. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  42. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  43. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  44. import org.openspcoop2.message.constants.ServiceBinding;
  45. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  46. import org.openspcoop2.web.ctrlstat.core.ControlStationCoreException;
  47. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
  48. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationNotFound;
  49. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  50. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  51. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  52. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  53. /**
  54.  * ConfigurazioneUtilities
  55.  *
  56.  * @author Andrea Poli (apoli@link.it)
  57.  * @author $Author$
  58.  * @version $Rev$, $Date$
  59.  *
  60.  */
  61. public class ConfigurazioneUtilities {

  62.     public static boolean alreadyExists(TipoOperazione tipoOperazione, ConfigurazioneCore confCore, ConfigurazioneHelper confHelper,
  63.             AttivazionePolicy policy, InfoPolicy infoPolicy, RuoloPolicy ruoloPorta, String nomePorta, ServiceBinding serviceBinding,
  64.             StringBuilder existsMessage, String newLine, String modalita) throws Exception {
  65.         if(infoPolicy!=null){
  66.            
  67.             String perApi = "globale";
  68.             if(ruoloPorta!=null && nomePorta!=null && !"".equals(nomePorta)) {
  69.                 perApi = "per l'API";
  70.             }
  71.            
  72.             AttivazionePolicy p = null;
  73.             try {
  74.                 p = confCore.getPolicy(policy.getIdPolicy(),policy.getFiltro(), policy.getGroupBy(),
  75.                         ruoloPorta, nomePorta);
  76.             }catch(DriverControlStationNotFound e) {
  77.                 //ignore
  78.             }
  79.             if(p!=null){
  80.                 if(TipoOperazione.ADD.equals(tipoOperazione) || (p.getId()!=null && policy.getId()!=null && p.getId().longValue()!=policy.getId().longValue())){
  81.                    
  82.                     String prefisso = "Esiste già una attivazione "+perApi+" della policy '"+
  83.                             policy.getIdPolicy()+"' ";
  84.                     if(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_MODALITA_BUILT_IN.equals(modalita)) {
  85.                         prefisso = "Esiste già una policy "+perApi+" con i criteri indicati ";
  86.                     }
  87.                    
  88.                     String messaggio = prefisso+newLine+
  89.                             "e"+newLine+
  90.                             "Raggruppamento: "+ confHelper.toStringCompactGroupBy(policy.getGroupBy(),ruoloPorta,nomePorta,serviceBinding)+newLine+
  91.                             "e"+newLine+    
  92.                             "Filtro: "+ confHelper.toStringCompactFilter(policy.getFiltro(),ruoloPorta,nomePorta,serviceBinding);
  93.                     existsMessage.append(messaggio);
  94.                     return true;
  95.                 }
  96.             }
  97.            
  98.             AttivazionePolicy pAlias = null;
  99.             if(policy.getAlias()!=null && !"".equals(policy.getAlias())) {
  100.                 try {
  101.                     pAlias = confCore.getPolicyByAlias(policy.getAlias(),
  102.                             ruoloPorta, nomePorta);
  103.                 }catch(DriverControlStationNotFound e) {
  104.                     //ignore
  105.                 }
  106.                 if(pAlias!=null){
  107.                     if(TipoOperazione.ADD.equals(tipoOperazione) || (pAlias.getId()!=null && policy.getId()!=null && pAlias.getId().longValue()!=policy.getId().longValue())){
  108.                         String messaggio = "Esiste già una policy "+perApi+" con "+ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ALIAS+" '"+policy.getAlias()+"'";
  109.                         existsMessage.append(messaggio);
  110.                         return true;
  111.                     }
  112.                 }
  113.             }
  114.         }
  115.        
  116.         return false;
  117.     }

  118.     private static String _getAttivazionePolicyTipo(AttivazionePolicy attivazionePolicy) {
  119.         String tipo = "";
  120.         if(attivazionePolicy.getFiltro()!=null && attivazionePolicy.getFiltro().getRuoloPorta()!=null &&
  121.                 StringUtils.isNotEmpty(attivazionePolicy.getFiltro().getNomePorta())) {
  122.             tipo = attivazionePolicy.getFiltro().getRuoloPorta().getValue()+"_"+attivazionePolicy.getFiltro().getNomePorta();
  123.         }
  124.         else {
  125.             tipo = "globale";
  126.         }
  127.         return tipo;
  128.     }
  129.     private static String _buildLabelApi(Allarme allarme, ConfigurazioneHelper confHelper, ConfigurazioneCore confCore) {
  130.         if(allarme.getFiltro()!=null && allarme.getFiltro().isEnabled() &&
  131.                 allarme.getFiltro().getRuoloPorta()!=null &&
  132.                 allarme.getFiltro().getNomePorta()!=null && StringUtils.isNotEmpty(allarme.getFiltro().getNomePorta())) {
  133.             switch (allarme.getFiltro().getRuoloPorta()) {
  134.             case APPLICATIVA:
  135.                 try {
  136.                     PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore(confCore);
  137.                     IDPortaApplicativa idPA = new IDPortaApplicativa();
  138.                     idPA.setNome(allarme.getFiltro().getNomePorta());
  139.                     PortaApplicativa paFound = porteApplicativeCore.getPortaApplicativa(idPA);
  140.                     MappingErogazionePortaApplicativa mappingPA = porteApplicativeCore.getMappingErogazionePortaApplicativa(paFound);
  141.                     String labelErogazione = confHelper.getLabelIdServizio(mappingPA.getIdServizio());
  142.                     if(!mappingPA.isDefault()) {
  143.                         labelErogazione = labelErogazione+" (gruppo:"+mappingPA.getDescrizione()+")";
  144.                     }
  145.                     return labelErogazione;
  146.                 }catch(Throwable t) {
  147.                     ControlStationCore.getLog().error("Errore durante l'identificazione dell'erogazione: "+t.getMessage(),t);
  148.                 }
  149.                 break;
  150.             case DELEGATA:
  151.                 try {
  152.                     PorteDelegateCore porteDelegateCore = new PorteDelegateCore(confCore);
  153.                     SoggettiCore soggettiCore = new SoggettiCore(confCore);
  154.                     IDPortaDelegata idPD = new IDPortaDelegata();
  155.                     idPD.setNome(allarme.getFiltro().getNomePorta());
  156.                     PortaDelegata pdFound = porteDelegateCore.getPortaDelegata(idPD);
  157.                     MappingFruizionePortaDelegata mappingPD = porteDelegateCore.getMappingFruizionePortaDelegata(pdFound);
  158.                     String labelFruizione = confHelper.getLabelServizioFruizione(soggettiCore.getProtocolloAssociatoTipoSoggetto(mappingPD.getIdFruitore().getTipo()),
  159.                             mappingPD.getIdFruitore(), mappingPD.getIdServizio());
  160.                     if(!mappingPD.isDefault()) {
  161.                         labelFruizione = labelFruizione+" (gruppo:"+mappingPD.getDescrizione()+")";
  162.                     }
  163.                     return labelFruizione;
  164.                 }catch(Throwable t) {
  165.                     ControlStationCore.getLog().error("Errore durante l'identificazione della fruizione: "+t.getMessage(),t);
  166.                 }
  167.                 break;
  168.             default:
  169.                 break;
  170.             }
  171.         }
  172.         return null;
  173.     }
  174.     public static void deleteAttivazionePolicy(List<AttivazionePolicy> policies , ConfigurazioneHelper confHelper, ConfigurazioneCore confCore, String userLogin,
  175.             StringBuilder inUsoMessage, String newLine, List<AttivazionePolicy> policiesRimosse) throws DriverControlStationException, DriverConfigurazioneNotFound, DriverConfigurazioneException, DriverRegistroServiziNotFound, DriverRegistroServiziException, ControlStationCoreException, Exception {
  176.        
  177.         StringBuilder deleteMessage = new StringBuilder();
  178.        
  179.         boolean oneOnlyConfig = false;
  180.         if(policies.size()==1) {
  181.             oneOnlyConfig=true;
  182.         }
  183.         else {
  184.             oneOnlyConfig = true;
  185.             String tipo = _getAttivazionePolicyTipo(policies.get(0));
  186.             for (int i = 1; i < policies.size(); i++) {
  187.                 AttivazionePolicy attivazionePolicyI = policies.get(i);
  188.                 String tipoI = _getAttivazionePolicyTipo(attivazionePolicyI);
  189.                 if(!tipoI.equals(tipo)) {
  190.                     oneOnlyConfig = false;
  191.                     break;
  192.                 }
  193.             }
  194.         }
  195.        
  196.         for (AttivazionePolicy attivazionePolicy : policies) {
  197.            
  198.             boolean delete = true;
  199.            
  200.             boolean policyApi = attivazionePolicy.getFiltro()!=null && attivazionePolicy.getFiltro().isEnabled() &&
  201.                     attivazionePolicy.getFiltro().getRuoloPorta()!=null &&
  202.                     attivazionePolicy.getFiltro().getNomePorta()!=null && StringUtils.isNotEmpty(attivazionePolicy.getFiltro().getNomePorta());
  203.             if("DimensioneMassimaMessaggi".equals(attivazionePolicy.getAlias()) && !policyApi) {
  204.                 if(deleteMessage.length()>0){
  205.                     deleteMessage.append(newLine);
  206.                 }
  207.                 StringBuilder bf = new StringBuilder();
  208.                 bf.append(newLine);
  209.                 bf.append("La policy '"+attivazionePolicy.getAlias()+"' non è eliminabile; è consentito modificarne i valori di soglia o disabilitarla");
  210.                 deleteMessage.append(bf.toString());
  211.                 delete = false;
  212.             }
  213.            
  214.             if(delete && confCore.isConfigurazioneAllarmiEnabled()){
  215.                
  216.                 RuoloPorta ruoloPorta = null;
  217.                 String nomePorta = null;
  218.                 if(attivazionePolicy.getFiltro()!=null && attivazionePolicy.getFiltro().getRuoloPorta()!=null &&
  219.                         StringUtils.isNotEmpty(attivazionePolicy.getFiltro().getNomePorta())) {
  220.                     switch (attivazionePolicy.getFiltro().getRuoloPorta()) {
  221.                     case DELEGATA:
  222.                         ruoloPorta = RuoloPorta.DELEGATA;
  223.                         break;
  224.                     case APPLICATIVA:
  225.                         ruoloPorta = RuoloPorta.APPLICATIVA;
  226.                         break;
  227.                     default:
  228.                         break;
  229.                     }
  230.                     nomePorta = attivazionePolicy.getFiltro().getNomePorta();
  231.                 }
  232.                
  233.                 /** throw new NotImplementedException("Da implementare quando verranno aggiunti gli allarmi."); */
  234.                 List<Allarme> allarmiObjectUtilizzanoPolicy = confCore.allarmiForPolicyRateLimiting(attivazionePolicy.getIdActivePolicy(),ruoloPorta,nomePorta);
  235.                 List<String> allarmiUtilizzanoPolicy = null;
  236.                 if(allarmiObjectUtilizzanoPolicy!=null && !allarmiObjectUtilizzanoPolicy.isEmpty()) {
  237.                     allarmiUtilizzanoPolicy = new ArrayList<>();
  238.                     for (Allarme allarme : allarmiObjectUtilizzanoPolicy) {
  239.                         String nomeAllarme = allarme.getAlias();
  240.                         if(!oneOnlyConfig) {
  241.                             String labelApi = _buildLabelApi(allarme, confHelper, confCore);
  242.                             if(labelApi!=null) {
  243.                                 nomeAllarme = nomeAllarme + " - "+ labelApi;
  244.                             }
  245.                         }
  246.                         allarmiUtilizzanoPolicy.add(nomeAllarme);              
  247.                     }
  248.                 }
  249.                
  250.                 if(allarmiUtilizzanoPolicy!=null && !allarmiUtilizzanoPolicy.isEmpty()){
  251.                     StringBuilder bf = new StringBuilder();
  252.                     bf.append(newLine);
  253.                     bf.append("La policy '"+attivazionePolicy.getAlias()+"' risulta utilizzata da ");
  254.                     bf.append(allarmiUtilizzanoPolicy.size());
  255.                     if(allarmiUtilizzanoPolicy.size()<2){
  256.                         bf.append(" allarme");
  257.                     }else{
  258.                         bf.append(" allarmi");
  259.                     }
  260.                     if(oneOnlyConfig) {
  261.                         boolean globale = !(attivazionePolicy.getFiltro()!=null && attivazionePolicy.getFiltro().getRuoloPorta()!=null &&
  262.                                 StringUtils.isNotEmpty(attivazionePolicy.getFiltro().getNomePorta()));
  263.                         if(!globale) {
  264.                             bf.append(RuoloPolicy.APPLICATIVA.equals(attivazionePolicy.getFiltro().getRuoloPorta())?" configurati sull'erogazione":" configurati sulla fruizione");
  265.                         }
  266.                     }
  267.                     bf.append(": ");
  268.                     for (int j = 0; j < allarmiUtilizzanoPolicy.size(); j++) {
  269.                         bf.append(newLine);
  270.                         bf.append("- ").append(allarmiUtilizzanoPolicy.get(j));
  271.                     }
  272.                    
  273.                     if(deleteMessage.length()>0){
  274.                         deleteMessage.append(newLine);
  275.                     }
  276.                     deleteMessage.append(bf.toString());
  277.                     delete = false;
  278.                 }
  279.             }

  280.             if(delete) {
  281.                 // aggiungo elemento alla lista di quelli da cancellare
  282.                 policiesRimosse.add(attivazionePolicy);
  283.             }
  284.            
  285.         }
  286.        
  287.         if(deleteMessage.length()>0){
  288.             if(!policiesRimosse.isEmpty()){
  289.                 inUsoMessage.append("Non è stato possibile completare l'eliminazione di tutti gli elementi selezionati:"+newLine+deleteMessage.toString());
  290.             }
  291.             else{
  292.                 inUsoMessage.append("Non è stato possibile eliminare gli elementi selezionati:"+newLine+deleteMessage.toString());
  293.             }
  294.         }
  295.        
  296.         if(!policiesRimosse .isEmpty()) {
  297. //          eseguo delete
  298.             confCore.performDeleteOperation(userLogin, confHelper.smista(), (Object[]) policiesRimosse.toArray(new AttivazionePolicy[1]));
  299.         }
  300.            
  301.     }
  302.    
  303.     public static void updatePosizioneAttivazionePolicy(ConfigurazioneCore confCore, InfoPolicy infoPolicy, AttivazionePolicy policy,
  304.             RuoloPolicy ruoloPorta, String nomePorta) throws Exception {
  305.         confCore.updatePosizioneAttivazionePolicy(infoPolicy, policy,
  306.                 ruoloPorta, nomePorta);
  307.     }
  308.    
  309.     public static int getProssimaPosizioneUrlInvocazioneRegola(Configurazione config) {
  310.         return ConfigurazionePdDUtils.getProssimaPosizioneUrlInvocazioneRegola(config);
  311.     }
  312.    
  313.     public static AllarmeHistory createAllarmeHistory(Allarme allarme, String userLogin) {
  314.         // registro la modifica
  315.         AllarmeHistory history = new AllarmeHistory();
  316.         history.setEnabled(allarme.getEnabled());
  317.         history.setAcknowledged(allarme.getAcknowledged());
  318.         history.setDettaglioStato(allarme.getDettaglioStato());
  319.         IdAllarme idConfigurazioneAllarme = new IdAllarme();
  320.         idConfigurazioneAllarme.setNome(allarme.getNome());
  321.         history.setIdAllarme(idConfigurazioneAllarme);
  322.         history.setStato(allarme.getStato());
  323.         history.setTimestampUpdate(allarme.getLasttimestampUpdate());
  324.         history.setUtente(userLogin);
  325.         return history;
  326.     }
  327.    
  328.     public static void deleteAllarmi(List<Allarme> allarmiToRemove , ConfigurazioneHelper confHelper, ConfigurazioneCore confCore, String userLogin,
  329.             StringBuilder inUsoMessage, String newLine, List<Allarme> allarmiRimossi) throws DriverControlStationException, DriverConfigurazioneNotFound, DriverConfigurazioneException, DriverRegistroServiziNotFound, DriverRegistroServiziException, ControlStationCoreException, Exception {
  330.        
  331.         StringBuilder deleteMessage = new StringBuilder();
  332.        
  333.         for (Allarme allarmeDaEliminare : allarmiToRemove) {
  334.            
  335.             boolean delete = true;
  336.            
  337.             List<ConfigurazionePolicy> policyObjectUtilizzanoAllarme = confCore.configurazioneControlloTrafficoConfigurazionePolicyListConApplicabilitaAllarme(allarmeDaEliminare.getNome());
  338.             List<String> policyUtilizzanoAllarme = null;
  339.             if(policyObjectUtilizzanoAllarme!=null && !policyObjectUtilizzanoAllarme.isEmpty()) {
  340.                 policyUtilizzanoAllarme = new ArrayList<>();
  341.                 for (ConfigurazionePolicy policy : policyObjectUtilizzanoAllarme) {
  342.                     String nomePolicy = policy.getIdPolicy();
  343.                     policyUtilizzanoAllarme.add(nomePolicy);                
  344.                 }
  345.             }
  346.            
  347.             if(policyUtilizzanoAllarme!=null && policyUtilizzanoAllarme.size()>0){
  348.                 StringBuilder bf = new StringBuilder();
  349.                 bf.append(newLine);
  350.                 bf.append("L'allarme '"+allarmeDaEliminare.getAlias()+"' risulta utilizzata da ");
  351.                 bf.append(policyUtilizzanoAllarme.size());
  352.                 bf.append(" policy del Controllo del Traffico (criterio di applicabilità)");
  353.                 bf.append(": ");
  354.                 for (int j = 0; j < policyUtilizzanoAllarme.size(); j++) {
  355.                     //if(j>0){
  356.                     bf.append(newLine);
  357.                     //}
  358.                     bf.append("- ").append(policyUtilizzanoAllarme.get(j));
  359.                 }
  360.                
  361.                 if(deleteMessage.length()>0){
  362.                     deleteMessage.append(newLine);
  363.                 }
  364.                 deleteMessage.append(bf.toString());
  365.                 delete = false;
  366.             }
  367.        
  368.             if(delete) {
  369.                 // aggiungo elemento alla lista di quelli da cancellare
  370.                 allarmiRimossi.add(allarmeDaEliminare);
  371.             }
  372.         }
  373.        
  374.         if(deleteMessage.length()>0){
  375.             if(allarmiRimossi.size()>0){
  376.                 inUsoMessage.append("Non è stato possibile completare l'eliminazione di tutti gli elementi selezionati:"+newLine+deleteMessage.toString());
  377.             }
  378.             else{
  379.                 inUsoMessage.append("Non è stato possibile eliminare gli elementi selezionati:"+newLine+deleteMessage.toString());
  380.             }
  381.         }
  382.        
  383.     }
  384. }