PorteDelegateUtilities.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.pd;

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

  23. import org.apache.commons.lang.StringUtils;
  24. import org.openspcoop2.core.config.Configurazione;
  25. import org.openspcoop2.core.config.PortaDelegata;
  26. import org.openspcoop2.core.config.PortaTracciamento;
  27. import org.openspcoop2.core.config.TracciamentoConfigurazione;
  28. import org.openspcoop2.core.config.TracciamentoConfigurazioneFiletrace;
  29. import org.openspcoop2.core.config.TracciamentoConfigurazioneFiletraceConnector;
  30. import org.openspcoop2.core.config.Transazioni;
  31. import org.openspcoop2.core.config.TrasformazioneRegola;
  32. import org.openspcoop2.core.config.constants.Severita;
  33. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  34. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  35. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  36. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  37. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  38. import org.openspcoop2.core.registry.ConfigurazioneServizioAzione;
  39. import org.openspcoop2.core.registry.Fruitore;
  40. import org.openspcoop2.protocol.utils.EsitiConfigUtils;
  41. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  42. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  43. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCostanti;

  44. /**
  45.  * PorteDelegateUtilities
  46.  *
  47.  * @author Andrea Poli (apoli@link.it)
  48.  * @author $Author$
  49.  * @version $Rev$, $Date$
  50.  *
  51.  */
  52. public class PorteDelegateUtilities {
  53.    
  54.     private PorteDelegateUtilities() {}

  55.     public static void deletePortaDelegataAzioni(PortaDelegata portaDelegata, AccordoServizioParteSpecifica asps,
  56.             PorteDelegateCore porteDelegateCore, PorteDelegateHelper porteDelegateHelper,
  57.             StringBuilder inUsoMessage, List<String> azioni,
  58.             String userLogin) throws Exception {
  59.        
  60.         String azioneGiaEsistente = portaDelegata.getAzione().getAzioneDelegata(0); // prendo la prima
  61.        
  62.         ConfigurazioneServizioAzione configAzioni = null;
  63.         boolean updateASPS = false;
  64.        
  65.         Fruitore fruitore = null;
  66.         for (Fruitore fruitoreCheck : asps.getFruitoreList()) {
  67.             if(fruitoreCheck.getTipo().equals(portaDelegata.getTipoSoggettoProprietario()) && fruitoreCheck.getNome().equals(portaDelegata.getNomeSoggettoProprietario())) {
  68.                 fruitore = fruitoreCheck;
  69.                 break;
  70.             }
  71.         }
  72.         if(fruitore==null) {
  73.             throw new Exception("Fruitore con id '"+portaDelegata.getTipoSoggettoProprietario()+"/"+portaDelegata.getNomeSoggettoProprietario()+"' non trovata");
  74.         }
  75.         for (int j = 0; j < fruitore.sizeConfigurazioneAzioneList(); j++) {
  76.             ConfigurazioneServizioAzione config = fruitore.getConfigurazioneAzione(j);
  77.             if(config!=null) {
  78.                 if(config.getAzioneList().contains(azioneGiaEsistente)) {
  79.                     configAzioni = config;
  80.                     break;
  81.                 }
  82.             }
  83.         }
  84.        
  85.         ConfigurazioneCore confCore = new ConfigurazioneCore(porteDelegateCore);
  86.         StringBuilder bfTrasformazioni = new StringBuilder();
  87.         StringBuilder bfCT = new StringBuilder();
  88.        
  89.         for (int i = 0; i < azioni.size(); i++) {

  90.             String azione = azioni.get(i);
  91.            
  92.             boolean usedInTrasformazioni = false;
  93.             if(portaDelegata.getTrasformazioni()!=null && portaDelegata.getTrasformazioni().sizeRegolaList()>0) {
  94.                 for (TrasformazioneRegola trasformazioneRegola : portaDelegata.getTrasformazioni().getRegolaList()) {
  95.                     if(trasformazioneRegola.getApplicabilita()!=null && trasformazioneRegola.getApplicabilita().getAzioneList()!=null &&
  96.                             trasformazioneRegola.getApplicabilita().getAzioneList().contains(azione)) {
  97.                         usedInTrasformazioni = true;
  98.                         break;
  99.                     }
  100.                 }
  101.             }
  102.            
  103.             if(confCore.usedInConfigurazioneControlloTrafficoAttivazionePolicy(RuoloPolicy.DELEGATA, portaDelegata.getNome(), azione)) {
  104.                 if(bfCT.length()>0) {
  105.                     bfCT.append(",");
  106.                 }
  107.                 bfCT.append(azione);
  108.             }  
  109.             else if(usedInTrasformazioni) {
  110.                 if(bfTrasformazioni.length()>0) {
  111.                     bfTrasformazioni.append(",");
  112.                 }
  113.                 bfTrasformazioni.append(azione);
  114.             }
  115.             else {
  116.                 for (int j = 0; j < portaDelegata.getAzione().sizeAzioneDelegataList(); j++) {
  117.                     String azioneDelegata = portaDelegata.getAzione().getAzioneDelegata(j);
  118.                     if (azione.equals(azioneDelegata)) {
  119.                         portaDelegata.getAzione().removeAzioneDelegata(j);
  120.                         break;
  121.                     }
  122.                 }
  123.                
  124.                 if(configAzioni!=null) {
  125.                     for (int j = 0; j < configAzioni.sizeAzioneList(); j++) {
  126.                         if(configAzioni.getAzione(j).equals(azione)) {
  127.                             configAzioni.removeAzione(j);
  128.                             updateASPS = true;
  129.                             break;
  130.                         }
  131.                     }
  132.                 }
  133.             }

  134.         }
  135.        
  136.         // non posso eliminare tutte le azioni
  137.         if(portaDelegata.getAzione().sizeAzioneDelegataList() == 0) {
  138.             inUsoMessage.append(PorteDelegateCostanti.MESSAGGIO_ERRORE_NON_E_POSSIBILE_ELIMINARE_TUTTE_LE_AZIONI_ASSOCIATE_ALLA_CONFIGURAZIONE);
  139.         }
  140.         else if(bfCT.length()>0) {
  141.             inUsoMessage.append("Non è stato possibile procedere con l'eliminazione poichè utilizzate in configurazione di Rate Limiting: "+bfCT.toString());
  142.         }
  143.         else if(bfTrasformazioni.length()>0) {
  144.             inUsoMessage.append("Non è stato possibile procedere con l'eliminazione poichè utilizzate in criteri di applicabilità di una Trasformazione: "+bfTrasformazioni.toString());
  145.         }
  146.         else {
  147.            
  148.             List<Object> listaOggettiDaModificare = new ArrayList<>();
  149.            
  150.             listaOggettiDaModificare.add(portaDelegata);
  151.            
  152.             if(updateASPS) {
  153.                 listaOggettiDaModificare.add(asps);
  154.             }
  155.            
  156.             porteDelegateCore.performUpdateOperation(userLogin, porteDelegateHelper.smista(), listaOggettiDaModificare.toArray());
  157.            
  158.         }
  159.        
  160.     }
  161.    
  162.     public static void initTracciamento(PortaDelegata pde, PorteDelegateCore porteDelegateCore, Configurazione config,
  163.             String tracciamentoStato, String statoDiagnostici, String severita) throws DriverConfigurazioneNotFound, DriverConfigurazioneException {
  164.         PortaTracciamento portaTracciamento = pde.getTracciamento();
  165.         if(portaTracciamento==null) {
  166.             portaTracciamento = new PortaTracciamento();
  167.             pde.setTracciamento(portaTracciamento);
  168.         }
  169.        
  170.         portaTracciamento.setStato(CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO.equals(tracciamentoStato) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  171.         if(CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO.equals(tracciamentoStato)) {
  172.             if(config==null) {
  173.                 config = porteDelegateCore.getConfigurazioneGenerale();
  174.             }
  175.             if(config.getTracciamento()!=null && config.getTracciamento().getPortaDelegata()!=null) {
  176.                 portaTracciamento.setDatabase(config.getTracciamento().getPortaDelegata().getDatabase());
  177.                 portaTracciamento.setFiletrace(config.getTracciamento().getPortaDelegata().getFiletrace());
  178.                 if(portaTracciamento.getFiletrace()!=null && org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.CONFIGURAZIONE_ESTERNA.equals(portaTracciamento.getFiletrace().getStato())) {
  179.                     portaTracciamento.getFiletrace().setStato(org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione.DISABILITATO);
  180.                 }
  181.                 portaTracciamento.setFiletraceConfig(config.getTracciamento().getPortaDelegata().getFiletraceConfig());
  182.                 portaTracciamento.setEsiti(config.getTracciamento().getPortaDelegata().getEsiti());
  183.                 portaTracciamento.setTransazioni(config.getTracciamento().getPortaDelegata().getTransazioni());
  184.             }
  185.         }
  186.        
  187.         if(CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO.equals(statoDiagnostici)) {
  188.             portaTracciamento.setSeverita(Severita.toEnumConstant(severita));
  189.         }
  190.         else {
  191.             portaTracciamento.setSeverita(null);
  192.         }
  193.     }
  194.    
  195.     public static void setTracciamentoTransazioni(PortaDelegata pde, PorteDelegateCore porteDelegateCore,
  196.             String dbStato,
  197.             String dbStatoReqIn, String dbStatoReqOut, String dbStatoResOut, String dbStatoResOutComplete,
  198.             boolean dbFiltroEsiti,
  199.             String fsStato,
  200.             String fsStatoReqIn, String fsStatoReqOut, String fsStatoResOut, String fsStatoResOutComplete,
  201.             boolean fsFiltroEsiti,
  202.             String nuovaConfigurazioneEsiti,
  203.             String transazioniTempiElaborazione, String transazioniToken,
  204.             String fileTraceStato, String fileTraceConfigFile,
  205.             String fileTraceClient, String fileTraceClientHdr, String fileTraceClientBody,
  206.             String fileTraceServer, String fileTraceServerHdr, String fileTraceServerBody) {
  207.         PortaTracciamento portaTracciamento = pde.getTracciamento();
  208.         if(portaTracciamento==null) {
  209.             portaTracciamento = new PortaTracciamento();
  210.             pde.setTracciamento(portaTracciamento);
  211.         }
  212.        
  213.         TracciamentoConfigurazione database = porteDelegateCore.buildTracciamentoConfigurazioneDatabase(dbStato,
  214.                 dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
  215.                 dbFiltroEsiti);
  216.         portaTracciamento.setDatabase(database);
  217.        
  218.         TracciamentoConfigurazione filetrace = porteDelegateCore.buildTracciamentoConfigurazioneFiletrace(fsStato,
  219.                 fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
  220.                 fsFiltroEsiti);
  221.         portaTracciamento.setFiletrace(filetrace);
  222.        
  223.         if(StringUtils.isEmpty(nuovaConfigurazioneEsiti)) {
  224.             portaTracciamento.setEsiti(EsitiConfigUtils.TUTTI_ESITI_DISABILITATI+"");
  225.         }
  226.         else {
  227.             portaTracciamento.setEsiti(nuovaConfigurazioneEsiti);
  228.         }
  229.        
  230.         if(portaTracciamento.getTransazioni()==null) {
  231.             portaTracciamento.setTransazioni( new Transazioni() );
  232.         }
  233.         portaTracciamento.getTransazioni().setTempiElaborazione(StatoFunzionalita.toEnumConstant(transazioniTempiElaborazione));
  234.         portaTracciamento.getTransazioni().setToken(StatoFunzionalita.toEnumConstant(transazioniToken));
  235.        
  236.         if(CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO.equals(fileTraceStato)) {
  237.             portaTracciamento.setFiletraceConfig(new TracciamentoConfigurazioneFiletrace());
  238.             portaTracciamento.getFiletraceConfig().setConfig(fileTraceConfigFile);
  239.            
  240.             portaTracciamento.getFiletraceConfig().setDumpIn(new TracciamentoConfigurazioneFiletraceConnector());          
  241.             portaTracciamento.getFiletraceConfig().getDumpIn().setStato(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceClient) ?
  242.                     StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  243.             portaTracciamento.getFiletraceConfig().getDumpIn().setHeader(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceClientHdr) ?
  244.                     StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  245.             portaTracciamento.getFiletraceConfig().getDumpIn().setPayload(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceClientBody) ?
  246.                     StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  247.            
  248.             portaTracciamento.getFiletraceConfig().setDumpOut(new TracciamentoConfigurazioneFiletraceConnector());          
  249.             portaTracciamento.getFiletraceConfig().getDumpOut().setStato(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceServer) ?
  250.                     StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  251.             portaTracciamento.getFiletraceConfig().getDumpOut().setHeader(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceServerHdr) ?
  252.                     StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  253.             portaTracciamento.getFiletraceConfig().getDumpOut().setPayload(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceServerBody) ?
  254.                     StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  255.         }
  256.         else {
  257.             portaTracciamento.setFiletraceConfig(null);
  258.         }
  259.     }
  260. }