ConfigurazioneControlloTrafficoAttivazionePolicyAdd.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 javax.servlet.http.HttpServletRequest;
  24. import javax.servlet.http.HttpServletResponse;
  25. import javax.servlet.http.HttpSession;

  26. import org.apache.struts.action.Action;
  27. import org.apache.struts.action.ActionForm;
  28. import org.apache.struts.action.ActionForward;
  29. import org.apache.struts.action.ActionMapping;
  30. import org.openspcoop2.core.commons.Filtri;
  31. import org.openspcoop2.core.commons.Liste;
  32. import org.openspcoop2.core.config.PortaApplicativa;
  33. import org.openspcoop2.core.config.PortaDelegata;
  34. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  35. import org.openspcoop2.core.controllo_traffico.AttivazionePolicyFiltro;
  36. import org.openspcoop2.core.controllo_traffico.AttivazionePolicyRaggruppamento;
  37. import org.openspcoop2.core.controllo_traffico.beans.InfoPolicy;
  38. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  39. import org.openspcoop2.core.controllo_traffico.constants.TipoRisorsaPolicyAttiva;
  40. import org.openspcoop2.core.controllo_traffico.driver.PolicyGroupByActiveThreadsType;
  41. import org.openspcoop2.core.controllo_traffico.utils.ControlloTrafficoDriverUtils;
  42. import org.openspcoop2.core.id.IDPortaApplicativa;
  43. import org.openspcoop2.core.id.IDPortaDelegata;
  44. import org.openspcoop2.message.constants.ServiceBinding;
  45. import org.openspcoop2.pdd.core.controllo_traffico.policy.config.PolicyConfiguration;
  46. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  47. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  48. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  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.Costanti;
  53. import org.openspcoop2.web.lib.mvc.DataElement;
  54. import org.openspcoop2.web.lib.mvc.ForwardParams;
  55. import org.openspcoop2.web.lib.mvc.GeneralData;
  56. import org.openspcoop2.web.lib.mvc.PageData;
  57. import org.openspcoop2.web.lib.mvc.Parameter;
  58. import org.openspcoop2.web.lib.mvc.ServletUtils;
  59. import org.openspcoop2.web.lib.mvc.TipoOperazione;


  60. /**    
  61.  * ConfigurazioneControlloTrafficoAttivazionePolicyAdd
  62.  *
  63.  * @author Pintori Giuliano (pintori@link.it)
  64.  * @author $Author$
  65.  * @version $Rev$, $Date$
  66.  */
  67. public class ConfigurazioneControlloTrafficoAttivazionePolicyAdd extends Action {

  68.     @Override
  69.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

  70.         HttpSession session = request.getSession(true);

  71.         // Inizializzo PageData
  72.         PageData pd = new PageData();

  73.         GeneralHelper generalHelper = new GeneralHelper(session);

  74.         // Inizializzo GeneralData
  75.         GeneralData gd = generalHelper.initGeneralData(request);

  76.         String userLogin = ServletUtils.getUserLoginFromSession(session);  
  77.        
  78.         TipoOperazione tipoOperazione = TipoOperazione.ADD;

  79.         try {
  80.             StringBuilder sbParsingError = new StringBuilder();
  81.            
  82.             ConfigurazioneHelper confHelper = new ConfigurazioneHelper(request, pd, session);
  83.            
  84.             ConfigurazioneCore confCore = new ConfigurazioneCore();
  85.             SoggettiCore soggettiCore = new SoggettiCore(confCore);
  86.             PorteDelegateCore pdCore = new PorteDelegateCore(confCore);
  87.             PorteApplicativeCore paCore = new PorteApplicativeCore(confCore);
  88.            
  89.             org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazioneControlloTraffico = confCore.getConfigurazioneControlloTraffico();
  90.            
  91.             AttivazionePolicy policy = new AttivazionePolicy();
  92.             policy.setFiltro(new AttivazionePolicyFiltro());
  93.             policy.getFiltro().setRuoloPorta(RuoloPolicy.ENTRAMBI);
  94.             policy.setGroupBy(new AttivazionePolicyRaggruppamento());
  95.            
  96.             // uso nome porta per capire se sono entrato per la prima volta nella schermata
  97.             boolean first = confHelper.isFirstTimeFromHttpParameters(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_FIRST_TIME);
  98.            
  99.             String ruoloPortaParam = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_RATE_LIMITING_POLICY_GLOBALI_LINK_RUOLO_PORTA);
  100.             RuoloPolicy ruoloPorta = null;
  101.             if(ruoloPortaParam!=null) {
  102.                 ruoloPorta = RuoloPolicy.toEnumConstant(ruoloPortaParam);
  103.             }
  104.             String nomePorta = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_RATE_LIMITING_POLICY_GLOBALI_LINK_NOME_PORTA);
  105.             ServiceBinding serviceBinding = null;
  106.             String serviceBindingParam = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_RATE_LIMITING_POLICY_GLOBALI_LINK_SERVICE_BINDING);
  107.             if(serviceBindingParam!=null && !"".equals(serviceBindingParam)) {
  108.                 serviceBinding = ServiceBinding.valueOf(serviceBindingParam);
  109.             }
  110.            
  111.             String modalita = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_MODALITA);
  112.             if(modalita==null) {
  113.                 modalita = ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_MODALITA_DEFAULT;
  114.             }
  115.             boolean builtIn = ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_MODALITA_BUILT_IN.equals(modalita);
  116.            
  117.             // nome della Policy
  118.             String idPolicy = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_POLICY_ACTIVE_POLICY_ID);
  119.             if(idPolicy!=null && !"".equals(idPolicy) && !"-".equals(idPolicy)){
  120.                 policy.setIdPolicy(idPolicy);
  121.             }
  122.             else{
  123.                 if(!first){
  124.                     policy.setIdPolicy(null);
  125.                 }
  126.             }  
  127.            
  128.             InfoPolicy infoPolicy = null;
  129.             if(policy.getIdPolicy()!=null){
  130.                 infoPolicy = confCore.getInfoPolicy(policy.getIdPolicy());
  131.                
  132.                 if(TipoOperazione.ADD.equals(tipoOperazione) && infoPolicy!=null){
  133.                     String serialId = confCore.getNextPolicyInstanceSerialId(infoPolicy.getIdPolicy());
  134.                     policy.setIdActivePolicy(ControlloTrafficoDriverUtils.buildIdActivePolicy(infoPolicy.getIdPolicy(), serialId));
  135.                 }
  136.             }
  137.            
  138.             // Dati Attivazione
  139.             String errorAttivazione = confHelper.readDatiAttivazionePolicyFromHttpParameters(policy, first, tipoOperazione, infoPolicy);
  140.             if(errorAttivazione!=null){
  141.                 confHelper.addParsingError(sbParsingError,errorAttivazione);
  142.             }
  143.            
  144.             PolicyGroupByActiveThreadsType type = null;
  145.            
  146.             if(ruoloPorta!=null) {
  147.                
  148.                 String protocollo = null;
  149.                 String tipoSoggettoProprietario = null;
  150.                 String nomeSoggettoProprietario = null;
  151.                 if(RuoloPolicy.DELEGATA.equals(ruoloPorta)) {
  152.                     IDPortaDelegata idPD = new IDPortaDelegata();
  153.                     idPD.setNome(nomePorta);
  154.                     PortaDelegata porta = pdCore.getPortaDelegata(idPD);
  155.                     protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(porta.getTipoSoggettoProprietario());
  156.                     // il tipo e nome serve per l'applicativo fruitore
  157.                     tipoSoggettoProprietario = porta.getTipoSoggettoProprietario();
  158.                     nomeSoggettoProprietario = porta.getNomeSoggettoProprietario();
  159.                     // tipo
  160.                     PolicyConfiguration config = new PolicyConfiguration(porta.getProprietaRateLimitingList(), confCore.getControlloTrafficoPolicyRateLimitingTipiGestori(), false);
  161.                     type = config.getType();
  162.                 }
  163.                 else {
  164.                     IDPortaApplicativa idPA = new IDPortaApplicativa();
  165.                     idPA.setNome(nomePorta);
  166.                     PortaApplicativa porta = paCore.getPortaApplicativa(idPA);
  167.                     protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(porta.getTipoSoggettoProprietario());
  168.                     // tipo
  169.                     PolicyConfiguration config = new PolicyConfiguration(porta.getProprietaRateLimitingList(), confCore.getControlloTrafficoPolicyRateLimitingTipiGestori(), false);
  170.                     type = config.getType();
  171.                 }
  172.                
  173.                 policy.getFiltro().setEnabled(true);
  174.                 policy.getFiltro().setProtocollo(protocollo);
  175.                 policy.getFiltro().setRuoloPorta(ruoloPorta);
  176.                 policy.getFiltro().setNomePorta(nomePorta);
  177.                 if(RuoloPolicy.DELEGATA.equals(ruoloPorta)) {
  178.                     policy.getFiltro().setTipoFruitore(tipoSoggettoProprietario);
  179.                     policy.getFiltro().setNomeFruitore(nomeSoggettoProprietario);
  180.                 }
  181.                
  182.                 // verifico rispetto alla configurazione globale
  183.                 if(type==null) {
  184.                     PolicyConfiguration pc = confCore.getConfigurazioneControlloTrafficoRateLimitingProperties();
  185.                     if(pc!=null) {
  186.                         type = pc.getType();
  187.                     }
  188.                 }
  189.             }
  190.             else {
  191.                 PolicyConfiguration pc = confCore.getConfigurazioneControlloTrafficoRateLimitingProperties();
  192.                 if(pc!=null) {
  193.                     type = pc.getType();
  194.                 }
  195.             }
  196.            
  197.            
  198.             // Preparo il menu
  199.             confHelper.makeMenu();
  200.            
  201.             // setto la barra del titolo
  202.            
  203.             List<Parameter> lstParamPorta = null;
  204.             if(ruoloPorta!=null) {
  205.                 lstParamPorta = confHelper.getTitleListAttivazionePolicy(ruoloPorta, nomePorta, serviceBinding, Costanti.PAGE_DATA_TITLE_LABEL_AGGIUNGI);
  206.             }
  207.            
  208.             List<Parameter> lstParam = null;
  209.             if(lstParamPorta!=null) {
  210.                 lstParam = lstParamPorta;
  211.             }
  212.             else {
  213.                 lstParam = new ArrayList<>();
  214.                 lstParam.add(new Parameter(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_CONTROLLO_TRAFFICO, ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO));
  215.                 lstParam.add(new Parameter(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_RATE_LIMITING_POLICY_GLOBALI_LINK, ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY_LIST));
  216.                 lstParam.add(ServletUtils.getParameterAggiungi());
  217.             }
  218.            
  219.             List<InfoPolicy> infoPolicies = confCore.infoPolicyList(builtIn);
  220.            
  221.             // Se tipo = null, devo visualizzare la pagina per l'inserimento
  222.             // dati
  223.             if (confHelper.isEditModeInProgress()) {
  224.                 ServletUtils.setPageDataTitle(pd, lstParam);
  225.                
  226.                 // preparo i campi
  227.                 List<DataElement> dati = new ArrayList<>();
  228.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  229.                
  230.                 // Controllo spostato dentro addAttivazionePolicyToDati
  231.                 /**
  232. //              if(infoPolicies==null || infoPolicies.size()<=0){
  233. //                  pd.setMessage(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY_POSSIBILI_COMPLETATE_GLOBALI, MessageType.INFO);
  234. //                  pd.disableEditMode();
  235. //                  pd.setDati(dati);
  236. //          
  237. //                  ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  238. //
  239. //                  return ServletUtils.getStrutsForwardEditModeInProgress(mapping, ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY,    ForwardParams.ADD());
  240. //              }*/
  241.                
  242.                 // Attivazione
  243.                 confHelper.addAttivazionePolicyToDati(dati, tipoOperazione, policy,ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY, infoPolicies, ruoloPorta, nomePorta, serviceBinding, modalita, type);
  244.                
  245.                 // Set First is false
  246.                 confHelper.addToDatiFirstTimeDisabled(dati,ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_FIRST_TIME);
  247.                
  248.                 pd.setDati(dati);

  249.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  250.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping,
  251.                         ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY,
  252.                         ForwardParams.ADD());
  253.             }
  254.            
  255.             // Controlli sui campi immessi
  256.             boolean isOk = confHelper.attivazionePolicyCheckData(sbParsingError, tipoOperazione, configurazioneControlloTraffico,
  257.                     policy,infoPolicy, ruoloPorta, nomePorta, serviceBinding, modalita);
  258.             if (!isOk) {
  259.                
  260.                 ServletUtils.setPageDataTitle(pd, lstParam);
  261.                
  262.                 // preparo i campi
  263.                 List<DataElement> dati = new ArrayList<>();
  264.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  265.                
  266.                 // Attivazione
  267.                 confHelper.addAttivazionePolicyToDati(dati, tipoOperazione, policy,ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY, infoPolicies, ruoloPorta, nomePorta, serviceBinding, modalita, type);
  268.                
  269.                 // Set First is false
  270.                 confHelper.addToDatiFirstTimeDisabled(dati,ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_CONTROLLO_TRAFFICO_FIRST_TIME);
  271.                
  272.                 pd.setDati(dati);

  273.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  274.                
  275.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping,
  276.                         ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY,
  277.                         ForwardParams.ADD());
  278.             }

  279.            
  280.             // aggiorno prossima posizione nella policy
  281.             ConfigurazioneUtilities.updatePosizioneAttivazionePolicy(confCore, infoPolicy, policy, ruoloPorta, nomePorta);
  282.            
  283.             // insert sul db
  284.             confCore.performCreateOperation(userLogin, confHelper.smista(), policy);
  285.            
  286.             String msgCompletato = confHelper.eseguiResetJmx(TipoOperazione.ADD, ruoloPorta, nomePorta);
  287.             if(msgCompletato!=null && !"".equals(msgCompletato)){
  288.                 pd.setMessage(msgCompletato,Costanti.MESSAGE_TYPE_INFO);
  289.             }
  290.            
  291.             // Preparo la lista
  292.             int idLista = Liste.CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY;
  293.            
  294.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  295.            
  296.             ricerca = confHelper.checkSearchParameters(idLista, ricerca);

  297.             List<TipoRisorsaPolicyAttiva> listaTipoRisorsa =
  298.                     confHelper.gestisciCriteriFiltroRisorsaPolicy(ricerca, ruoloPorta, nomePorta);
  299.            
  300.             // imposto come filtro il tipo di risorsa creata in modo da vederlo subito nella lista
  301.             ricerca.addFilter(idLista, Filtri.FILTRO_TIPO_RISORSA_POLICY, infoPolicy.getTipoRisorsa().getValue());
  302.            
  303.             List<AttivazionePolicy> lista = confCore.attivazionePolicyList(ricerca, ruoloPorta, nomePorta);
  304.            
  305.             confHelper.prepareAttivazionePolicyList(ricerca, lista, listaTipoRisorsa,
  306.                     idLista, ruoloPorta, nomePorta, serviceBinding);
  307.            
  308.             // salvo l'oggetto ricerca nella sessione
  309.             ServletUtils.setSearchObjectIntoSession(request, session, ricerca);
  310.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  311.            
  312.             // Forward control to the specified success URI
  313.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY, ForwardParams.ADD());
  314.         } catch (Exception e) {
  315.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  316.                     ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_CONTROLLO_TRAFFICO_ATTIVAZIONE_POLICY, ForwardParams.ADD());
  317.         }  
  318.     }
  319. }