PorteApplicativeConnettoriMultipliConfig.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.pa;

  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.commons.lang.StringUtils;
  27. import org.apache.struts.action.Action;
  28. import org.apache.struts.action.ActionForm;
  29. import org.apache.struts.action.ActionForward;
  30. import org.apache.struts.action.ActionMapping;
  31. import org.openspcoop2.core.config.PortaApplicativa;
  32. import org.openspcoop2.core.config.PortaApplicativaBehaviour;
  33. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  34. import org.openspcoop2.core.config.constants.TipoBehaviour;
  35. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  36. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  37. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  38. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  39. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  40. import org.openspcoop2.message.constants.ServiceBinding;
  41. import org.openspcoop2.pdd.core.behaviour.built_in.load_balance.ConfigurazioneLoadBalancer;
  42. import org.openspcoop2.pdd.core.behaviour.built_in.load_balance.health_check.HealthCheckConfigurazione;
  43. import org.openspcoop2.pdd.core.behaviour.built_in.load_balance.health_check.HealthCheckUtils;
  44. import org.openspcoop2.pdd.core.behaviour.built_in.load_balance.sticky.StickyConfigurazione;
  45. import org.openspcoop2.pdd.core.behaviour.built_in.load_balance.sticky.StickyUtils;
  46. import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneMultiDeliver;
  47. import org.openspcoop2.pdd.core.behaviour.conditional.ConfigurazioneCondizionale;
  48. import org.openspcoop2.pdd.core.behaviour.conditional.ConfigurazioneSelettoreCondizione;
  49. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  50. import org.openspcoop2.web.ctrlstat.core.ControlStationLogger;
  51. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  52. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  53. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  54. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  55. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniCostanti;
  56. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  57. import org.openspcoop2.web.lib.mvc.Costanti;
  58. import org.openspcoop2.web.lib.mvc.DataElement;
  59. import org.openspcoop2.web.lib.mvc.ForwardParams;
  60. import org.openspcoop2.web.lib.mvc.GeneralData;
  61. import org.openspcoop2.web.lib.mvc.PageData;
  62. import org.openspcoop2.web.lib.mvc.Parameter;
  63. import org.openspcoop2.web.lib.mvc.ServletUtils;
  64. import org.openspcoop2.web.lib.mvc.TipoOperazione;


  65. /**    
  66.  * PorteApplicativeConnettoriMultipliConfig
  67.  *
  68.  * @author Giuliano Pintori (pintori@link.it)
  69.  * @author $Author$
  70.  * @version $Rev$, $Date$
  71.  */
  72. public class PorteApplicativeConnettoriMultipliConfig extends Action {

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

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

  76.         // Inizializzo PageData
  77.         PageData pd = new PageData();

  78.         GeneralHelper generalHelper = new GeneralHelper(session);

  79.         // Inizializzo GeneralData
  80.         GeneralData gd = generalHelper.initGeneralData(request);

  81.         try {
  82.             PorteApplicativeHelper porteApplicativeHelper = new PorteApplicativeHelper(request, pd, session);
  83.            
  84.             Boolean vistaErogazioni = ServletUtils.getBooleanAttributeFromSession(ErogazioniCostanti.ASPS_EROGAZIONI_ATTRIBUTO_VISTA_EROGAZIONI, session, request).getValue();
  85.            
  86.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione delle porte applicative
  87.             Integer parentPA = ServletUtils.getIntegerAttributeFromSession(PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT, session, request);
  88.             if(parentPA == null) parentPA = PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_NONE;
  89.            
  90.             boolean isModalitaCompleta = porteApplicativeHelper.isModalitaCompleta();
  91.             // Preparo il menu
  92.             porteApplicativeHelper.makeMenu();

  93.             String id = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID);
  94.             int idInt = Integer.parseInt(id);
  95.             String idsogg = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_SOGGETTO);
  96.             String idAsps = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_ASPS);
  97.             if(idAsps == null)
  98.                 idAsps = "";

  99.             // Prendo il nome della porta
  100.             PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore();
  101.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(porteApplicativeCore);
  102.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore(porteApplicativeCore);
  103.             SoggettiCore soggettiCore = new SoggettiCore(porteApplicativeCore);
  104.            
  105.             PortaApplicativa portaApplicativa = porteApplicativeCore.getPortaApplicativa(idInt);
  106.             String idporta = portaApplicativa.getNome();
  107.            
  108.             String protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(portaApplicativa.getTipoSoggettoProprietario());

  109.             MappingErogazionePortaApplicativa mappingErogazionePortaApplicativa = porteApplicativeCore.getMappingErogazionePortaApplicativa(portaApplicativa);

  110.             AccordoServizioParteSpecifica asps = apsCore.getAccordoServizioParteSpecifica(Long.parseLong(idAsps));
  111.             AccordoServizioParteComuneSintetico as = null;
  112.             if(porteApplicativeCore.isRegistroServiziLocale()){
  113.                 int idAcc = asps.getIdAccordo().intValue();
  114.                 as = apcCore.getAccordoServizioSintetico(idAcc);
  115.             }
  116.             else{
  117.                 as = apcCore.getAccordoServizioSintetico(IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune()));
  118.             }

  119.             ServiceBinding serviceBinding = porteApplicativeCore.toMessageServiceBinding(as.getServiceBinding());


  120.             String stato = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_STATO);
  121.             String modalitaConsegna = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA);
  122.             String tipoCustom = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA_CUSTOM_TIPO);
  123.             String loadBalanceStrategia = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA_LOAD_BALANCE_STRATEGIA);

  124.             String consegnaCondizionaleS = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONSEGNA_CONDIZIONALE);
  125.             boolean consegnaCondizionale = ServletUtils.isCheckBoxEnabled(consegnaCondizionaleS);

  126.             String connettoreImplementaAPI = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONNETTORE_IMPLEMENTA_API);
  127.             String notificheCondizionaliEsitoS = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CONDIZIONALI_ESITO);
  128.             boolean notificheCondizionaliEsito = ServletUtils.isCheckBoxEnabled(notificheCondizionaliEsitoS);
  129.             String [] esitiTransazione = porteApplicativeHelper.getParameterValues(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_ESITI_TRANSAZIONE);
  130.            
  131.             String selezioneConnettoreBy = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY);
  132.             String identificazioneCondizionale = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_IDENTIFICAZIONE_CONDIZIONALE);
  133.             String identificazioneCondizionalePattern = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_IDENTIFICAZIONE_CONDIZIONALE_PATTERN);
  134.             String identificazioneCondizionalePrefisso = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_IDENTIFICAZIONE_CONDIZIONALE_PREFISSO);
  135.             String identificazioneCondizionaleSuffisso = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_IDENTIFICAZIONE_CONDIZIONALE_SUFFISSO);
  136.            
  137.             String servletRegolePerAzioni = PorteApplicativeCostanti.SERVLET_NAME_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIG_AZIONI_LIST;
  138.             List<Parameter> listaParametriServletRegolePerAzioni = new ArrayList<>();
  139.             int numeroRegolePerAzioni = 0;
  140.            
  141.             String condizioneNonIdentificataAbortTransactionS = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_ABORT_TRANSACTION);
  142.             boolean condizioneNonIdentificataAbortTransaction = ServletUtils.isCheckBoxEnabled(condizioneNonIdentificataAbortTransactionS);
  143.             String condizioneNonIdentificataDiagnostico = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO);
  144.             String condizioneNonIdentificataConnettore = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_CONNETTORE);
  145.            
  146.             String connettoreNonTrovatoAbortTransactionS = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONNETTORE_NON_TROVATO_ABORT_TRANSACTION);
  147.             boolean connettoreNonTrovatoAbortTransaction = ServletUtils.isCheckBoxEnabled(connettoreNonTrovatoAbortTransactionS);
  148.             String connettoreNonTrovatoDiagnostico = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONNETTORE_NON_TROVATO_DIAGNOSTICO);
  149.             String connettoreNonTrovatoConnettore = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONNETTORE_NON_TROVATO_CONNETTORE);
  150.            
  151.             String stickyS = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA_LOAD_BALANCE_STICKY);
  152.             boolean sticky = ServletUtils.isCheckBoxEnabled(stickyS);
  153.             String stickyTipoSelettore = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA_LOAD_BALANCE_STICKY_TIPO_SELETTORE);
  154.             String stickyTipoSelettorePattern = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA_LOAD_BALANCE_STICKY_PATTERN);
  155.             String stickyMaxAge = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA_LOAD_BALANCE_STICKY_MAX_AGE);
  156.            
  157.             String passiveHealthCheckS = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA_LOAD_BALANCE_PASSIVE_HEALTH_CHECK);
  158.             boolean passiveHealthCheck = ServletUtils.isCheckBoxEnabled(passiveHealthCheckS);
  159.             String passiveHealthCheckExcludeForSeconds = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA_LOAD_BALANCE_PASSIVE_HEALTH_CHECK_EXCLUDE_FOR_SECONDS);
  160.            
  161.             boolean accessoDaListaAPS = false;
  162.             String accessoDaAPSParametro = null;
  163.             // nell'erogazione vale sempre
  164.             accessoDaAPSParametro = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORE_DA_LISTA_APS);
  165.             if(Costanti.CHECK_BOX_ENABLED_TRUE.equals(accessoDaAPSParametro)) {
  166.                 accessoDaListaAPS = true;
  167.             }

  168.             String idTab = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_ID_TAB);
  169.             if(!porteApplicativeHelper.isModalitaCompleta() && StringUtils.isNotEmpty(idTab)) {
  170.                 ServletUtils.setObjectIntoSession(request, session, idTab, CostantiControlStation.PARAMETRO_ID_TAB);
  171.             }

  172.             int numeroProprietaCustom = portaApplicativa.getBehaviour() != null ? portaApplicativa.getBehaviour().sizeProprietaList() : 0;
  173.             String servletProprietaCustom = PorteApplicativeCostanti.SERVLET_NAME_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIG_PROPERTIES_LIST;
  174.             List<Parameter> listaParametriServletProprietaCustom = new ArrayList<>();
  175.             Parameter pIdPorta = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID, id);
  176.             Parameter pNomePorta = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_NOME, idporta);
  177.             Parameter pIdSogg = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_SOGGETTO, idsogg);
  178.             Parameter pIdAsps = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_ASPS, idAsps);
  179.             String idTabP = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_ID_TAB);
  180.             Parameter pIdTab = new Parameter(CostantiControlStation.PARAMETRO_ID_TAB, idTabP != null ? idTabP : "");
  181.             Parameter pAccessoDaAPS = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORE_DA_LISTA_APS, accessoDaAPSParametro != null ? accessoDaAPSParametro : "");
  182.             String connettoreAccessoGruppi = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_ACCESSO_DA_GRUPPI);
  183.             String connettoreRegistro = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_REGISTRO);
  184.             Parameter pConnettoreAccessoDaGruppi = new Parameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_ACCESSO_DA_GRUPPI, connettoreAccessoGruppi);
  185.             Parameter pConnettoreAccesso = new Parameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_REGISTRO, connettoreRegistro);

  186.             listaParametriServletProprietaCustom.add(pIdSogg);
  187.             listaParametriServletProprietaCustom.add(pIdPorta);
  188.             listaParametriServletProprietaCustom.add(pNomePorta);
  189.             listaParametriServletProprietaCustom.add(pIdAsps);
  190.             listaParametriServletProprietaCustom.add(pIdTab);
  191.             listaParametriServletProprietaCustom.add(pAccessoDaAPS);
  192.             listaParametriServletProprietaCustom.add(pConnettoreAccessoDaGruppi);
  193.             listaParametriServletProprietaCustom.add(pConnettoreAccesso);
  194.            
  195.             listaParametriServletRegolePerAzioni.addAll(listaParametriServletProprietaCustom);

  196.             boolean visualizzaLinkProprietaCustom = false;
  197.             boolean modificaStatoAbilitata = true;
  198.             boolean visualizzaLinkRegolePerAzioni = false;
  199.             org.openspcoop2.pdd.core.behaviour.conditional.ConfigurazioneCondizionale configurazioneCondizionaleOld = null;
  200.             if(portaApplicativa.getBehaviour() != null) {
  201.                 TipoBehaviour behaviourType = TipoBehaviour.toEnumConstant(portaApplicativa.getBehaviour().getNome());
  202.                 visualizzaLinkProprietaCustom = behaviourType.equals(TipoBehaviour.CUSTOM);

  203.                 if(portaApplicativa.sizeServizioApplicativoList() > 1)
  204.                     modificaStatoAbilitata = false;
  205.                
  206.                 if(org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.isConfigurazioneCondizionale(portaApplicativa, ControlStationCore.getLog())){
  207.                     configurazioneCondizionaleOld = org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.read(portaApplicativa, ControlStationCore.getLog());
  208.                     numeroRegolePerAzioni = configurazioneCondizionaleOld.getRegoleOrdinate().size();
  209.                     visualizzaLinkRegolePerAzioni = true;
  210.                 }
  211.             }

  212.             String postBackElementName = porteApplicativeHelper.getPostBackElementName();
  213.             if(postBackElementName != null ){
  214.                
  215.                 boolean reinitParametriCondizionali = false;
  216.                
  217.                 if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONSEGNA_CONDIZIONALE)) {
  218.                     reinitParametriCondizionali = consegnaCondizionale;
  219.                 }
  220.                 else if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_MODALITA_CONSEGNA)) {
  221.                     reinitParametriCondizionali = TipoBehaviour.CONSEGNA_CONDIZIONALE.getValue().equals(modalitaConsegna);
  222.                     consegnaCondizionale = false;
  223.                    
  224.                     if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.getValue().equals(modalitaConsegna)) {
  225.                         // uso il default
  226.                         ConfigurazioneMultiDeliver config = new ConfigurazioneMultiDeliver();
  227.                         notificheCondizionaliEsito = config.isNotificheByEsito();
  228.                         esitiTransazione = porteApplicativeHelper.getEsitiTransazione(config);
  229.                     }
  230.                 }else if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_IDENTIFICAZIONE_CONDIZIONALE)) {
  231.                     identificazioneCondizionalePattern = "";
  232.                     identificazioneCondizionalePrefisso = "";
  233.                     identificazioneCondizionaleSuffisso = "";
  234.                 }
  235.                
  236.                 if(reinitParametriCondizionali) {
  237.                     selezioneConnettoreBy = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_FILTRO;
  238.                     identificazioneCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.TipoSelettore.HEADER_BASED.getValue();
  239.                     identificazioneCondizionalePattern = "";
  240.                     identificazioneCondizionalePrefisso = "";
  241.                     identificazioneCondizionaleSuffisso = "";
  242.                     condizioneNonIdentificataAbortTransaction = true;
  243.                     condizioneNonIdentificataDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  244.                     condizioneNonIdentificataConnettore = "";
  245.                     connettoreNonTrovatoAbortTransaction = true;
  246.                     connettoreNonTrovatoDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  247.                     connettoreNonTrovatoConnettore = "";
  248.                 }
  249.             }

  250.             boolean isSoapOneWay = false;

  251.             if(stato!= null && stato.equals(PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_STATO_ABILITATO)) {
  252.                 isSoapOneWay = porteApplicativeHelper.isSoapOneWay(portaApplicativa, mappingErogazionePortaApplicativa, asps, as, serviceBinding);
  253.             }

  254.             // select list della sezione notifiche
  255.             List<String> connettoriImplementaAPIValues = new ArrayList<>();
  256.             List<String> connettoriImplementaAPILabels = new ArrayList<>();
  257.             String connettorePrincipale = null;
  258.             List<PortaApplicativaServizioApplicativo> servizioApplicativoList = portaApplicativa.getServizioApplicativoList();
  259.             if(servizioApplicativoList != null) {
  260.                 TipoBehaviour behaviourType = null;
  261.                 if(portaApplicativa.getBehaviour()!=null) {
  262.                     behaviourType = TipoBehaviour.toEnumConstant(portaApplicativa.getBehaviour().getNome());
  263.                 }
  264.                 for (PortaApplicativaServizioApplicativo paSA : servizioApplicativoList) {
  265.                     String nomeConnettorePaSA = porteApplicativeHelper.getLabelNomePortaApplicativaServizioApplicativo(paSA);

  266.                     connettoriImplementaAPIValues.add(nomeConnettorePaSA);
  267.                     connettoriImplementaAPILabels.add(nomeConnettorePaSA);
  268.                    
  269.                     if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType) && porteApplicativeHelper.isConnettoreDefault(paSA)) {
  270.                         connettorePrincipale=nomeConnettorePaSA;
  271.                     }
  272.                 }
  273.             }
  274.             if(connettoreImplementaAPI!=null && !"".equals(connettoreImplementaAPI)) {
  275.                 connettorePrincipale=connettoreImplementaAPI; // posso averlo cambiato
  276.             }

  277.             List<Parameter> lstParam = porteApplicativeHelper.getTitoloPA(parentPA, idsogg, idAsps);

  278.             String labelPerPorta = null;
  279.             if(parentPA!=null && (parentPA.intValue() == PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE)) {
  280.                 if(accessoDaListaAPS) {
  281.                     if(!isModalitaCompleta) {
  282.                         if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  283.                             labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIG;
  284.                         } else {
  285.                             labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIG_DI+
  286.                                     porteApplicativeHelper.getLabelIdServizio(asps);
  287.                         }
  288.                     }
  289.                     else {
  290.                         labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIG;
  291.                     }
  292.                 }
  293.                 else {
  294.                     labelPerPorta = porteApplicativeCore.getLabelRegolaMappingErogazionePortaApplicativa(
  295.                             PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIG_DI,
  296.                             PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIG,
  297.                             portaApplicativa);
  298.                 }
  299.             }
  300.             else {
  301.                 labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIG_DI+idporta;
  302.             }

  303.             if(accessoDaListaAPS) {
  304.                 lstParam.remove(lstParam.size()-1);
  305.             }

  306.             lstParam.add(new Parameter(labelPerPorta,  null));

  307.             // setto la barra del titolo
  308.             ServletUtils.setPageDataTitle(pd, lstParam);
  309.            
  310.             // imposta menu' contestuale
  311.             porteApplicativeHelper.impostaComandiMenuContestualePA(asps, protocollo);

  312.             if( porteApplicativeHelper.isEditModeInProgress()){

  313.                 if(stato == null) {
  314.                     if(portaApplicativa.getBehaviour() == null) {
  315.                         stato = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_STATO_DISABILITATO;
  316.                         modalitaConsegna = TipoBehaviour.CONSEGNA_LOAD_BALANCE.getValue();
  317.                         consegnaCondizionale = false;
  318.                         connettoreImplementaAPI = "";
  319.                         notificheCondizionaliEsito = false;
  320.                         esitiTransazione = null;
  321.                        
  322.                         selezioneConnettoreBy = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_FILTRO;
  323.                         identificazioneCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.TipoSelettore.HEADER_BASED.getValue();
  324.                         identificazioneCondizionalePattern = "";
  325.                         identificazioneCondizionalePrefisso = "";
  326.                         identificazioneCondizionaleSuffisso = "";
  327.                         condizioneNonIdentificataAbortTransaction = true;
  328.                         condizioneNonIdentificataDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  329.                         condizioneNonIdentificataConnettore = "";
  330.                         connettoreNonTrovatoAbortTransaction = true;
  331.                         connettoreNonTrovatoDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  332.                         connettoreNonTrovatoConnettore = "";
  333.                        
  334.                     } else {
  335.                         stato = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_STATO_ABILITATO;

  336.                         TipoBehaviour behaviourType = TipoBehaviour.toEnumConstant(portaApplicativa.getBehaviour().getNome());

  337.                         modalitaConsegna = behaviourType.getValue();
  338.                        
  339.                         isSoapOneWay = porteApplicativeHelper.isSoapOneWay(portaApplicativa, mappingErogazionePortaApplicativa, asps, as, serviceBinding);
  340.                                                                        
  341.                         if(behaviourType.equals(TipoBehaviour.CONSEGNA_LOAD_BALANCE)) {
  342.                             loadBalanceStrategia = ConfigurazioneLoadBalancer.readLoadBalancerType(portaApplicativa.getBehaviour());
  343.                            
  344.                             if(StickyUtils.isConfigurazioneSticky(portaApplicativa, ControlStationLogger.getPddConsoleCoreLogger())) {
  345.                                 sticky = true;
  346.                                 StickyConfigurazione stickyConfig = StickyUtils.read(portaApplicativa, ControlStationLogger.getPddConsoleCoreLogger());
  347.                                 stickyTipoSelettore = stickyConfig.getTipoSelettore().getValue();
  348.                                 stickyTipoSelettorePattern = stickyConfig.getPattern();
  349.                                 if(stickyConfig.getMaxAgeSeconds()!=null && stickyConfig.getMaxAgeSeconds()>0) {
  350.                                     stickyMaxAge = stickyConfig.getMaxAgeSeconds().intValue()+"";
  351.                                 }
  352.                                 else {
  353.                                     stickyMaxAge = null;
  354.                                 }
  355.                             }
  356.                             else {
  357.                                 sticky = false;
  358.                             }
  359.                            
  360.                             HealthCheckConfigurazione config = HealthCheckUtils.read(portaApplicativa, ControlStationLogger.getPddConsoleCoreLogger());
  361.                             passiveHealthCheck = config.isPassiveCheckEnabled();
  362.                             if(passiveHealthCheck) {
  363.                                 passiveHealthCheckExcludeForSeconds = config.getPassiveHealthCheck_excludeForSeconds().intValue()+"";
  364.                             }
  365.                            
  366.                             consegnaCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.isConfigurazioneCondizionale(portaApplicativa, ControlStationCore.getLog());
  367.                                                        
  368.                         } else if(behaviourType.equals(TipoBehaviour.CONSEGNA_MULTIPLA) ||
  369.                                 behaviourType.equals(TipoBehaviour.CONSEGNA_CONDIZIONALE) ||
  370.                                 behaviourType.equals(TipoBehaviour.CONSEGNA_CON_NOTIFICHE)) {
  371.                             consegnaCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.isConfigurazioneCondizionale(portaApplicativa, ControlStationCore.getLog());

  372.                             if(!behaviourType.equals(TipoBehaviour.CONSEGNA_MULTIPLA)) {
  373.                                 org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneMultiDeliver configurazioneMultiDeliver = org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.read(portaApplicativa);
  374.                                 connettoreImplementaAPI = configurazioneMultiDeliver.getTransazioneSincrona_nomeConnettore() != null ? configurazioneMultiDeliver.getTransazioneSincrona_nomeConnettore() : "";
  375.                                 notificheCondizionaliEsito = configurazioneMultiDeliver.isNotificheByEsito();
  376.                                 esitiTransazione = porteApplicativeHelper.getEsitiTransazione(configurazioneMultiDeliver);
  377.                             } else {
  378.                                 connettoreImplementaAPI = "";
  379.                                 notificheCondizionaliEsito = false;
  380.                                 esitiTransazione = null;
  381.                             }
  382.                         }
  383.                         else if(behaviourType.equals(TipoBehaviour.CUSTOM)) {
  384.                             visualizzaLinkProprietaCustom = true;
  385.                             tipoCustom = portaApplicativa.getBehaviour().getNome();
  386.                         }
  387.                        
  388.                         if(consegnaCondizionale) {
  389.                             org.openspcoop2.pdd.core.behaviour.conditional.ConfigurazioneCondizionale configurazioneCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.read(portaApplicativa, ControlStationCore.getLog());
  390.                            
  391.                             ConfigurazioneSelettoreCondizione configurazioneSelettoreCondizione = configurazioneCondizionale.getDefaultConfig();
  392.                            
  393.                             selezioneConnettoreBy = configurazioneCondizionale.isByFilter() ? PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_FILTRO:
  394.                                 PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_NOME;
  395.                             identificazioneCondizionale = configurazioneSelettoreCondizione.getTipoSelettore().getValue();
  396.                             identificazioneCondizionalePattern = configurazioneSelettoreCondizione.getPattern();
  397.                             identificazioneCondizionalePrefisso = configurazioneSelettoreCondizione.getPrefix();
  398.                             identificazioneCondizionaleSuffisso = configurazioneSelettoreCondizione.getSuffix();
  399.                            
  400.                             org.openspcoop2.pdd.core.behaviour.conditional.IdentificazioneFallitaConfigurazione condizioneNonIdentificata = configurazioneCondizionale.getCondizioneNonIdentificata();
  401.                            
  402.                             condizioneNonIdentificataAbortTransaction = condizioneNonIdentificata.isAbortTransaction();
  403.                            
  404.                             if(!condizioneNonIdentificata.isEmitDiagnosticError() && !condizioneNonIdentificata.isEmitDiagnosticInfo())
  405.                                 condizioneNonIdentificataDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  406.                             else if(condizioneNonIdentificata.isEmitDiagnosticError())
  407.                                 condizioneNonIdentificataDiagnostico = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO_ERROR;
  408.                             else if(condizioneNonIdentificata.isEmitDiagnosticInfo())
  409.                                 condizioneNonIdentificataDiagnostico = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO_INFO;
  410.                                
  411.                             condizioneNonIdentificataConnettore = condizioneNonIdentificata.getNomeConnettore();
  412.                            
  413.                             org.openspcoop2.pdd.core.behaviour.conditional.IdentificazioneFallitaConfigurazione connettoreNonTrovato = configurazioneCondizionale.getNessunConnettoreTrovato();
  414.                            
  415.                             connettoreNonTrovatoAbortTransaction = connettoreNonTrovato.isAbortTransaction();
  416.                            
  417.                             if(!connettoreNonTrovato.isEmitDiagnosticError() && !connettoreNonTrovato.isEmitDiagnosticInfo())
  418.                                 connettoreNonTrovatoDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  419.                             else if(connettoreNonTrovato.isEmitDiagnosticError())
  420.                                 connettoreNonTrovatoDiagnostico = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO_ERROR;
  421.                             else if(connettoreNonTrovato.isEmitDiagnosticInfo())
  422.                                 connettoreNonTrovatoDiagnostico = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO_INFO;
  423.                                
  424.                             connettoreNonTrovatoConnettore = connettoreNonTrovato.getNomeConnettore();
  425.                         } else {
  426.                             selezioneConnettoreBy = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_FILTRO;
  427.                             identificazioneCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.TipoSelettore.HEADER_BASED.getValue();
  428.                             identificazioneCondizionalePattern = "";
  429.                             identificazioneCondizionalePrefisso = "";
  430.                             identificazioneCondizionaleSuffisso = "";
  431.                             condizioneNonIdentificataAbortTransaction = true;
  432.                             condizioneNonIdentificataDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  433.                             condizioneNonIdentificataConnettore = "";
  434.                             connettoreNonTrovatoAbortTransaction = true;
  435.                             connettoreNonTrovatoDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  436.                             connettoreNonTrovatoConnettore = "";
  437.                         }
  438.                     }
  439.                 }

  440.                 // preparo i campi
  441.                 List<DataElement> dati = new ArrayList<>();
  442.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  443.                 dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER,id, idsogg, null,idAsps, dati);

  444.                 dati = porteApplicativeHelper.addConnettoriMultipliConfigurazioneToDati(dati, TipoOperazione.OTHER, protocollo, accessoDaAPSParametro, stato, modalitaConsegna, tipoCustom,
  445.                         numeroProprietaCustom, servletProprietaCustom, listaParametriServletProprietaCustom, visualizzaLinkProprietaCustom, loadBalanceStrategia, modificaStatoAbilitata,
  446.                         consegnaCondizionale, isSoapOneWay, connettoreImplementaAPI, connettoriImplementaAPIValues, connettoriImplementaAPILabels, connettorePrincipale,
  447.                         notificheCondizionaliEsito, esitiTransazione,
  448.                         serviceBinding, selezioneConnettoreBy, identificazioneCondizionale, identificazioneCondizionalePattern,
  449.                         identificazioneCondizionalePrefisso, identificazioneCondizionaleSuffisso, visualizzaLinkRegolePerAzioni, servletRegolePerAzioni, listaParametriServletRegolePerAzioni,
  450.                         numeroRegolePerAzioni,  condizioneNonIdentificataAbortTransaction,  condizioneNonIdentificataDiagnostico, condizioneNonIdentificataConnettore,
  451.                         connettoreNonTrovatoAbortTransaction, connettoreNonTrovatoDiagnostico, connettoreNonTrovatoConnettore,
  452.                         sticky, stickyTipoSelettore, stickyTipoSelettorePattern, stickyMaxAge,
  453.                         passiveHealthCheck, passiveHealthCheckExcludeForSeconds
  454.                         );

  455.                 pd.setDati(dati);

  456.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  457.                 // Forward control to the specified success URI
  458.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_CONFIGURAZIONE_CONNETTORI_MULTIPLI,
  459.                         ForwardParams.OTHER(""));
  460.             }

  461.             // Controlli sui campi immessi
  462.             boolean isOk = porteApplicativeHelper.connettoriMultipliConfigurazioneCheckData(TipoOperazione.OTHER, stato, modalitaConsegna, tipoCustom, loadBalanceStrategia, isSoapOneWay,
  463.                     sticky, stickyTipoSelettore, stickyTipoSelettorePattern, stickyMaxAge,
  464.                     passiveHealthCheck, passiveHealthCheckExcludeForSeconds,
  465.                     serviceBinding);

  466.             if(!isOk) {
  467.                 // preparo i campi
  468.                 List<DataElement> dati = new ArrayList<>();

  469.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  470.                 dati = porteApplicativeHelper.addConnettoriMultipliConfigurazioneToDati(dati, TipoOperazione.OTHER, protocollo, accessoDaAPSParametro, stato, modalitaConsegna, tipoCustom,
  471.                         numeroProprietaCustom, servletProprietaCustom, listaParametriServletProprietaCustom, visualizzaLinkProprietaCustom, loadBalanceStrategia, modificaStatoAbilitata,
  472.                         consegnaCondizionale, isSoapOneWay, connettoreImplementaAPI, connettoriImplementaAPIValues, connettoriImplementaAPILabels, connettorePrincipale,
  473.                         notificheCondizionaliEsito, esitiTransazione,
  474.                         serviceBinding, selezioneConnettoreBy, identificazioneCondizionale, identificazioneCondizionalePattern,
  475.                         identificazioneCondizionalePrefisso, identificazioneCondizionaleSuffisso, visualizzaLinkRegolePerAzioni, servletRegolePerAzioni, listaParametriServletRegolePerAzioni,
  476.                         numeroRegolePerAzioni,  condizioneNonIdentificataAbortTransaction,  condizioneNonIdentificataDiagnostico,  condizioneNonIdentificataConnettore,
  477.                         connettoreNonTrovatoAbortTransaction, connettoreNonTrovatoDiagnostico, connettoreNonTrovatoConnettore,
  478.                         sticky, stickyTipoSelettore, stickyTipoSelettorePattern, stickyMaxAge,
  479.                         passiveHealthCheck, passiveHealthCheckExcludeForSeconds
  480.                         );

  481.                 dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER,id, idsogg, null,idAsps, dati);

  482.                 pd.setDati(dati);

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

  484.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping,
  485.                         PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_CONFIGURAZIONE_CONNETTORI_MULTIPLI,
  486.                         ForwardParams.OTHER(""));
  487.             }

  488.             if(stato.equals(PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_STATO_ABILITATO)) {
  489.                 PortaApplicativaBehaviour behaviour = new PortaApplicativaBehaviour();
  490.                 portaApplicativa.setBehaviour(behaviour);
  491.                
  492.                 TipoBehaviour behaviourType = TipoBehaviour.toEnumConstant(modalitaConsegna);

  493.                 switch (behaviourType) {
  494.                 case CONSEGNA_LOAD_BALANCE: {
  495.                     behaviour.setNome(modalitaConsegna);
  496.                     ConfigurazioneLoadBalancer.addLoadBalancerType(behaviour, loadBalanceStrategia);
  497.                    
  498.                     // configurazione sticky
  499.                     org.openspcoop2.pdd.core.behaviour.built_in.load_balance.sticky.StickyConfigurazione stickyConfig =
  500.                             porteApplicativeHelper.toConfigurazioneSticky(sticky, stickyTipoSelettore, stickyTipoSelettorePattern, stickyMaxAge);
  501.                     StickyUtils.save(portaApplicativa, stickyConfig);
  502.                    
  503.                     // configurazione healthCheck
  504.                     org.openspcoop2.pdd.core.behaviour.built_in.load_balance.health_check.HealthCheckConfigurazione healthCheckConfig =
  505.                             porteApplicativeHelper.toConfigurazioneHealthCheck(passiveHealthCheck, passiveHealthCheckExcludeForSeconds);
  506.                     HealthCheckUtils.save(portaApplicativa, healthCheckConfig);
  507.                    
  508.                     // configurazione multideliver
  509.                     org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneMultiDeliver configurazioneMultiDeliver = porteApplicativeHelper.toConfigurazioneMultiDeliver(connettoreImplementaAPI, notificheCondizionaliEsito, esitiTransazione);
  510.                     boolean differenziazioneConsegnaDaNotifiche = false;
  511.                     org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.save(portaApplicativa, configurazioneMultiDeliver, differenziazioneConsegnaDaNotifiche);
  512.                    
  513.                     // configurazione condizionale
  514.                     if(consegnaCondizionale) {
  515.                         ConfigurazioneCondizionale configurazioneCondizionale = porteApplicativeHelper.toConfigurazioneCondizionale(consegnaCondizionale, selezioneConnettoreBy, identificazioneCondizionale, identificazioneCondizionalePattern, identificazioneCondizionalePrefisso, identificazioneCondizionaleSuffisso, condizioneNonIdentificataAbortTransaction, condizioneNonIdentificataDiagnostico, condizioneNonIdentificataConnettore, connettoreNonTrovatoAbortTransaction, connettoreNonTrovatoDiagnostico, connettoreNonTrovatoConnettore);
  516.                         org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.save(portaApplicativa, configurazioneCondizionale);
  517.                     }
  518.                    
  519.                 }
  520.                 break;
  521.                 case CONSEGNA_MULTIPLA:
  522.                 case CONSEGNA_CONDIZIONALE:
  523.                 case CONSEGNA_CON_NOTIFICHE:
  524.                 {
  525.                     behaviour.setNome(modalitaConsegna);
  526.                    
  527.                     // configurazione multideliver
  528.                     org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneMultiDeliver configurazioneMultiDeliver = porteApplicativeHelper.toConfigurazioneMultiDeliver(connettoreImplementaAPI, notificheCondizionaliEsito, esitiTransazione);
  529.                     boolean differenziazioneConsegnaDaNotifiche = TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType);
  530.                     org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.save(portaApplicativa, configurazioneMultiDeliver, differenziazioneConsegnaDaNotifiche);
  531.                    
  532.                     // configurazione condizionale
  533.                     if(consegnaCondizionale) {
  534.                         ConfigurazioneCondizionale configurazioneCondizionale = porteApplicativeHelper.toConfigurazioneCondizionale(consegnaCondizionale, selezioneConnettoreBy, identificazioneCondizionale, identificazioneCondizionalePattern, identificazioneCondizionalePrefisso, identificazioneCondizionaleSuffisso, condizioneNonIdentificataAbortTransaction, condizioneNonIdentificataDiagnostico, condizioneNonIdentificataConnettore, connettoreNonTrovatoAbortTransaction, connettoreNonTrovatoDiagnostico, connettoreNonTrovatoConnettore);
  535.                         if(configurazioneCondizionaleOld!=null && configurazioneCondizionaleOld.sizeRegole()>0) {
  536.                             configurazioneCondizionale.setRegolaList(configurazioneCondizionaleOld.getRegolaList());
  537.                         }
  538.                         org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.save(portaApplicativa, configurazioneCondizionale);
  539.                     }
  540.                 }
  541.                 break;
  542.                 case CUSTOM:
  543.                     behaviour.setNome(tipoCustom);
  544.                     break;
  545.                 }
  546.             } else {
  547.                 portaApplicativa.setBehaviour(null);
  548.             }

  549.             String userLogin = ServletUtils.getUserLoginFromSession(session);

  550.             porteApplicativeCore.performUpdateOperation(userLogin, porteApplicativeHelper.smista(), portaApplicativa);

  551.             // rileggo la configurazione
  552.             portaApplicativa = porteApplicativeCore.getPortaApplicativa(idInt);

  553.             visualizzaLinkProprietaCustom = false;
  554.             numeroProprietaCustom = 0;
  555.             visualizzaLinkRegolePerAzioni = false;
  556.             numeroRegolePerAzioni = 0;

  557.             if(portaApplicativa.getBehaviour() == null) {
  558.                 stato = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_STATO_DISABILITATO;
  559.                 modalitaConsegna = TipoBehaviour.CONSEGNA_LOAD_BALANCE.getValue();
  560.                 consegnaCondizionale = false;
  561.                 connettoreImplementaAPI = "";
  562.                 notificheCondizionaliEsito = false;
  563.                 esitiTransazione = null;
  564.                
  565.                 selezioneConnettoreBy = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_FILTRO;
  566.                 identificazioneCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.TipoSelettore.HEADER_BASED.getValue();
  567.                 identificazioneCondizionalePattern = "";
  568.                 identificazioneCondizionalePrefisso = "";
  569.                 identificazioneCondizionaleSuffisso = "";
  570.                 condizioneNonIdentificataAbortTransaction = true;
  571.                 condizioneNonIdentificataDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  572.                 condizioneNonIdentificataConnettore = "";
  573.                 connettoreNonTrovatoAbortTransaction = true;
  574.                 connettoreNonTrovatoDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  575.                 connettoreNonTrovatoConnettore = "";
  576.             } else {
  577.                 stato = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_STATO_ABILITATO;

  578.                 TipoBehaviour behaviourType = TipoBehaviour.toEnumConstant(portaApplicativa.getBehaviour().getNome());

  579.                 modalitaConsegna = behaviourType.getValue();
  580.                 if(behaviourType.equals(TipoBehaviour.CONSEGNA_LOAD_BALANCE)) {
  581.                     loadBalanceStrategia = ConfigurazioneLoadBalancer.readLoadBalancerType(portaApplicativa.getBehaviour());
  582.                     if(StickyUtils.isConfigurazioneSticky(portaApplicativa, ControlStationLogger.getPddConsoleCoreLogger())) {
  583.                         sticky = true;
  584.                         StickyConfigurazione stickyConfig = StickyUtils.read(portaApplicativa, ControlStationLogger.getPddConsoleCoreLogger());
  585.                         stickyTipoSelettore = stickyConfig.getTipoSelettore().getValue();
  586.                         stickyTipoSelettorePattern = stickyConfig.getPattern();
  587.                         if(stickyConfig.getMaxAgeSeconds()!=null && stickyConfig.getMaxAgeSeconds()>0) {
  588.                             stickyMaxAge = stickyConfig.getMaxAgeSeconds().intValue()+"";
  589.                         }
  590.                         else {
  591.                             stickyMaxAge = null;
  592.                         }
  593.                     }
  594.                     else {
  595.                         sticky = false;
  596.                     }
  597.                    
  598.                     HealthCheckConfigurazione config = HealthCheckUtils.read(portaApplicativa, ControlStationLogger.getPddConsoleCoreLogger());
  599.                     passiveHealthCheck = config.isPassiveCheckEnabled();
  600.                     if(passiveHealthCheck) {
  601.                         passiveHealthCheckExcludeForSeconds = config.getPassiveHealthCheck_excludeForSeconds().intValue()+"";
  602.                     }
  603.                    
  604.                     consegnaCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.isConfigurazioneCondizionale(portaApplicativa, ControlStationCore.getLog());
  605.                 } else if(behaviourType.equals(TipoBehaviour.CONSEGNA_MULTIPLA)) {
  606.                     consegnaCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.isConfigurazioneCondizionale(portaApplicativa, ControlStationCore.getLog());

  607.                     if(!behaviourType.equals(TipoBehaviour.CONSEGNA_MULTIPLA)) {
  608.                         org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneMultiDeliver configurazioneMultiDeliver = org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.read(portaApplicativa);
  609.                         connettoreImplementaAPI = configurazioneMultiDeliver.getTransazioneSincrona_nomeConnettore() != null ? configurazioneMultiDeliver.getTransazioneSincrona_nomeConnettore() : "";
  610.                         notificheCondizionaliEsito = configurazioneMultiDeliver.isNotificheByEsito();
  611.                         esitiTransazione = porteApplicativeHelper.getEsitiTransazione(configurazioneMultiDeliver);
  612.                     } else {
  613.                         connettoreImplementaAPI = "";
  614.                         notificheCondizionaliEsito = false;
  615.                         esitiTransazione = null;
  616.                     }
  617.                 }
  618.                 else if(behaviourType.equals(TipoBehaviour.CUSTOM)) {
  619.                     visualizzaLinkProprietaCustom = true;
  620.                     tipoCustom = portaApplicativa.getBehaviour().getNome();
  621.                     numeroProprietaCustom = portaApplicativa.getBehaviour().sizeProprietaList();
  622.                 }
  623.                
  624.                 if(consegnaCondizionale) {
  625.                     org.openspcoop2.pdd.core.behaviour.conditional.ConfigurazioneCondizionale configurazioneCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.ConditionalUtils.read(portaApplicativa, ControlStationCore.getLog());
  626.                    
  627.                     ConfigurazioneSelettoreCondizione configurazioneSelettoreCondizione = configurazioneCondizionale.getDefaultConfig();
  628.                    
  629.                     selezioneConnettoreBy = configurazioneCondizionale.isByFilter() ? PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_FILTRO:
  630.                         PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_NOME;
  631.                     identificazioneCondizionale = configurazioneSelettoreCondizione.getTipoSelettore().getValue();
  632.                     identificazioneCondizionalePattern = configurazioneSelettoreCondizione.getPattern();
  633.                     identificazioneCondizionalePrefisso = configurazioneSelettoreCondizione.getPrefix();
  634.                     identificazioneCondizionaleSuffisso = configurazioneSelettoreCondizione.getSuffix();
  635.                    
  636.                     org.openspcoop2.pdd.core.behaviour.conditional.IdentificazioneFallitaConfigurazione condizioneNonIdentificata = configurazioneCondizionale.getCondizioneNonIdentificata();
  637.                    
  638.                     condizioneNonIdentificataAbortTransaction = condizioneNonIdentificata.isAbortTransaction();
  639.                    
  640.                     if(!condizioneNonIdentificata.isEmitDiagnosticError() && !condizioneNonIdentificata.isEmitDiagnosticInfo())
  641.                         condizioneNonIdentificataDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  642.                     else if(condizioneNonIdentificata.isEmitDiagnosticError())
  643.                         condizioneNonIdentificataDiagnostico = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO_ERROR;
  644.                     else if(condizioneNonIdentificata.isEmitDiagnosticInfo())
  645.                         condizioneNonIdentificataDiagnostico = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO_INFO;
  646.                        
  647.                     condizioneNonIdentificataConnettore = condizioneNonIdentificata.getNomeConnettore();
  648.                    
  649.                     org.openspcoop2.pdd.core.behaviour.conditional.IdentificazioneFallitaConfigurazione connettoreNonTrovato = configurazioneCondizionale.getNessunConnettoreTrovato();
  650.                    
  651.                     connettoreNonTrovatoAbortTransaction = connettoreNonTrovato.isAbortTransaction();
  652.                    
  653.                     if(!connettoreNonTrovato.isEmitDiagnosticError() && !connettoreNonTrovato.isEmitDiagnosticInfo())
  654.                         connettoreNonTrovatoDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  655.                     else if(connettoreNonTrovato.isEmitDiagnosticError())
  656.                         connettoreNonTrovatoDiagnostico = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO_ERROR;
  657.                     else if(connettoreNonTrovato.isEmitDiagnosticInfo())
  658.                         connettoreNonTrovatoDiagnostico = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONDIZIONE_NON_IDENTIFICATA_DIAGNOSTICO_INFO;
  659.                        
  660.                     connettoreNonTrovatoConnettore = connettoreNonTrovato.getNomeConnettore();
  661.                     numeroRegolePerAzioni = configurazioneCondizionale.getRegoleOrdinate().size();
  662.                     visualizzaLinkRegolePerAzioni = true;
  663.                 } else {
  664.                     selezioneConnettoreBy = PorteApplicativeCostanti.VALUE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_SELEZIONE_CONNETTORE_BY_FILTRO;
  665.                     identificazioneCondizionale = org.openspcoop2.pdd.core.behaviour.conditional.TipoSelettore.HEADER_BASED.getValue();
  666.                     identificazioneCondizionalePattern = "";
  667.                     identificazioneCondizionalePrefisso = "";
  668.                     identificazioneCondizionaleSuffisso = "";
  669.                     condizioneNonIdentificataAbortTransaction = true;
  670.                     condizioneNonIdentificataDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  671.                     condizioneNonIdentificataConnettore = "";
  672.                     connettoreNonTrovatoAbortTransaction = true;
  673.                     connettoreNonTrovatoDiagnostico = StatoFunzionalita.DISABILITATO.getValue();
  674.                     connettoreNonTrovatoConnettore = "";
  675.                 }
  676.             }

  677.             // select list della sezione notifiche
  678.             connettoriImplementaAPIValues = new ArrayList<>();
  679.             connettoriImplementaAPILabels = new ArrayList<>();
  680.             connettorePrincipale = null;
  681.             servizioApplicativoList = portaApplicativa.getServizioApplicativoList();
  682.             if(servizioApplicativoList != null) {
  683.                 TipoBehaviour behaviourType = null;
  684.                 if(portaApplicativa.getBehaviour()!=null) {
  685.                     behaviourType = TipoBehaviour.toEnumConstant(portaApplicativa.getBehaviour().getNome());
  686.                 }
  687.                 for (PortaApplicativaServizioApplicativo paSA : servizioApplicativoList) {
  688.                     String nomeConnettorePaSA = porteApplicativeHelper.getLabelNomePortaApplicativaServizioApplicativo(paSA);

  689.                     connettoriImplementaAPIValues.add(nomeConnettorePaSA);
  690.                     connettoriImplementaAPILabels.add(nomeConnettorePaSA);
  691.                    
  692.                     if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType) && porteApplicativeHelper.isConnettoreDefault(paSA)) {
  693.                         connettorePrincipale=nomeConnettorePaSA;
  694.                     }
  695.                 }
  696.             }
  697.            
  698.             // preparo i campi
  699.             List<DataElement> dati = new ArrayList<>();

  700.             dati = porteApplicativeHelper.addConnettoriMultipliConfigurazioneToDati(dati, TipoOperazione.OTHER, protocollo, accessoDaAPSParametro, stato, modalitaConsegna, tipoCustom,
  701.                     numeroProprietaCustom, servletProprietaCustom, listaParametriServletProprietaCustom, visualizzaLinkProprietaCustom,loadBalanceStrategia, modificaStatoAbilitata,
  702.                     consegnaCondizionale, isSoapOneWay, connettoreImplementaAPI, connettoriImplementaAPIValues, connettoriImplementaAPILabels, connettorePrincipale,
  703.                     notificheCondizionaliEsito, esitiTransazione,
  704.                     serviceBinding, selezioneConnettoreBy, identificazioneCondizionale, identificazioneCondizionalePattern,
  705.                     identificazioneCondizionalePrefisso, identificazioneCondizionaleSuffisso, visualizzaLinkRegolePerAzioni, servletRegolePerAzioni, listaParametriServletRegolePerAzioni,
  706.                     numeroRegolePerAzioni,  condizioneNonIdentificataAbortTransaction,  condizioneNonIdentificataDiagnostico,  condizioneNonIdentificataConnettore,
  707.                     connettoreNonTrovatoAbortTransaction, connettoreNonTrovatoDiagnostico, connettoreNonTrovatoConnettore,
  708.                     sticky, stickyTipoSelettore, stickyTipoSelettorePattern, stickyMaxAge,
  709.                     passiveHealthCheck, passiveHealthCheckExcludeForSeconds
  710.                     );

  711.             dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER,id, idsogg, null, idAsps, dati);

  712.             pd.setDati(dati);

  713.             pd.setMessage(CostantiControlStation.LABEL_AGGIORNAMENTO_EFFETTUATO_CON_SUCCESSO, Costanti.MESSAGE_TYPE_INFO);

  714.             dati.add(ServletUtils.getDataElementForEditModeFinished());

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


  716.             // Forward control to the specified success URI
  717.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_CONFIGURAZIONE_CONNETTORI_MULTIPLI, ForwardParams.OTHER(""));

  718.         } catch (Exception e) {
  719.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  720.                     PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_CONFIGURAZIONE_CONNETTORI_MULTIPLI ,
  721.                     ForwardParams.OTHER(""));
  722.         }
  723.     }

  724. }