PorteApplicativeConnettoriMultipliConfigProprietaNotifiche.java

/*
 * GovWay - A customizable API Gateway
 * https://govway.org
 * 
 * Copyright (c) 2005-2024 Link.it srl (https://link.it). 
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3, as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */


package org.openspcoop2.web.ctrlstat.servlet.pa;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.openspcoop2.core.commons.Liste;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
import org.openspcoop2.core.config.PortaApplicativaServizioApplicativoConnettore;
import org.openspcoop2.core.config.ProprietaOggetto;
import org.openspcoop2.core.config.constants.TipoBehaviour;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.config.constants.CostantiConfigurazione;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.message.constants.ServiceBinding;
import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneGestioneConsegnaNotifiche;
import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.TipoGestioneNotificaFault;
import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.TipoGestioneNotificaTrasporto;
import org.openspcoop2.pdd.core.jmx.JMXUtils;
import org.openspcoop2.utils.date.DateManager;
import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniCostanti;
import org.openspcoop2.web.lib.mvc.Costanti;
import org.openspcoop2.web.lib.mvc.DataElement;
import org.openspcoop2.web.lib.mvc.ForwardParams;
import org.openspcoop2.web.lib.mvc.GeneralData;
import org.openspcoop2.web.lib.mvc.PageData;
import org.openspcoop2.web.lib.mvc.Parameter;
import org.openspcoop2.web.lib.mvc.ServletUtils;
import org.openspcoop2.web.lib.mvc.TipoOperazione;

/**
 * PorteApplicativeConnettoriMultipliConfigLoadBalance
 * 
 * @author Andrea Poli (apoli@link.it)
 * @author Giuliano Pintori (pintori@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 * 
 */
public final class PorteApplicativeConnettoriMultipliConfigProprietaNotifiche extends Action {

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


		HttpSession session = request.getSession(true);

		// Inizializzo PageData
		PageData pd = new PageData();

		GeneralHelper generalHelper = new GeneralHelper(session);

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

		try {
			PorteApplicativeHelper porteApplicativeHelper = new PorteApplicativeHelper(request, pd, session);
			// prelevo il flag che mi dice da quale pagina ho acceduto la sezione delle porte applicative
			Integer parentPA = ServletUtils.getIntegerAttributeFromSession(PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT, session, request);
			if(parentPA == null) parentPA = PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_NONE;
			String idPorta = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID);
			int idInt = Integer.parseInt(idPorta);
			String idsogg = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_SOGGETTO);
			String idAsps = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_ASPS);
			if(idAsps == null) 
				idAsps = "";

			String idConnTab = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_ID_CONN_TAB);
			if(StringUtils.isNotEmpty(idConnTab)) {
				ServletUtils.setObjectIntoSession(request, session, idConnTab, CostantiControlStation.PARAMETRO_ID_CONN_TAB);
			}

			String nomeSAConnettore = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOME_SA);
			String coda = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODA);
			String priorita = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_PRIORITA);
			String prioritaMax = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_PRIORITA_MAX);
			String cadenzaRispedizione = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CADENZA_RISPEDIZIONE);
			String codiceRisposta2xx = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_2XX); 
			String codiceRisposta2xxValueMin = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_2XX_VALUE_MIN); 
			String codiceRisposta2xxValueMax = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_2XX_VALUE_MAX); 
			String codiceRisposta2xxValue = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_2XX_VALUE);
			String codiceRisposta3xx = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_3XX); 
			String codiceRisposta3xxValueMin = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_3XX_VALUE_MIN); 
			String codiceRisposta3xxValueMax = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_3XX_VALUE_MAX); 
			String codiceRisposta3xxValue = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_3XX_VALUE);
			String codiceRisposta4xx = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_4XX); 
			String codiceRisposta4xxValueMin = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_4XX_VALUE_MIN); 
			String codiceRisposta4xxValueMax = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_4XX_VALUE_MAX); 
			String codiceRisposta4xxValue = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_4XX_VALUE);
			String codiceRisposta5xx = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_5XX); 
			String codiceRisposta5xxValueMin = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_5XX_VALUE_MIN); 
			String codiceRisposta5xxValueMax = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_5XX_VALUE_MAX); 
			String codiceRisposta5xxValue = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_5XX_VALUE);
			String gestioneFault = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_GESTIONE); 
			String faultCode = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODE); 
			String faultActor = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_ACTOR); 
			String faultMessage = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_MESSAGE); 

			String connettoreTipoMessaggioDaNotificare = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_TIPO_MESSAGGIO_DA_NOTIFICARE);
			String connettoreIniettaContestoSincrono = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_INIETTA_CONTESTO_SINCRONO);
			String httpMethodDaNotificare = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_TIPO_HTTP_NOTIFICA);
			
			boolean accessoDaListaAPS = false;
			String accessoDaAPSParametro = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORE_DA_LISTA_APS);
			if(Costanti.CHECK_BOX_ENABLED_TRUE.equals(accessoDaAPSParametro)) {
				accessoDaListaAPS = true;
			}

			boolean isModalitaCompleta = porteApplicativeHelper.isModalitaCompleta();
			Boolean vistaErogazioni = ServletUtils.getBooleanAttributeFromSession(ErogazioniCostanti.ASPS_EROGAZIONI_ATTRIBUTO_VISTA_EROGAZIONI, session, request).getValue();

			// Preparo il menu
			porteApplicativeHelper.makeMenu();

			// Prendo nome, tipo e pdd del soggetto
			PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore();
			AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(porteApplicativeCore);
			AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore(porteApplicativeCore);

			// Prendo nome della porta applicativa
			PortaApplicativa pa = porteApplicativeCore.getPortaApplicativa(idInt);
			String idporta = pa.getNome();
			TipoBehaviour beaBehaviourType = TipoBehaviour.toEnumConstant(pa.getBehaviour().getNome());
			long idAspsLong = Long.parseLong(idAsps);
			AccordoServizioParteSpecifica asps = apsCore.getAccordoServizioParteSpecifica(idAspsLong);
			AccordoServizioParteComuneSintetico as = null;
			if(porteApplicativeCore.isRegistroServiziLocale()){
				int idAcc = asps.getIdAccordo().intValue();
				as = apcCore.getAccordoServizioSintetico(idAcc);
			}
			else{
				as = apcCore.getAccordoServizioSintetico(IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune()));
			}
			
			ServiceBinding serviceBinding = porteApplicativeCore.toMessageServiceBinding(as.getServiceBinding());

			// valora iniziale della configurazione
			PortaApplicativaServizioApplicativo oldPaSA = null;
			boolean connettoreDefault = false;
			TipoBehaviour behaviourType = null;
			if(pa.getBehaviour()!=null) {
				behaviourType = TipoBehaviour.toEnumConstant(pa.getBehaviour().getNome());
			}
			for (PortaApplicativaServizioApplicativo paSATmp : pa.getServizioApplicativoList()) {
				if(paSATmp.getNome().equals(nomeSAConnettore)) {
					oldPaSA = paSATmp;
					connettoreDefault = porteApplicativeHelper.isConnettoreDefault(oldPaSA);
				}
			}
			boolean consegnaSincrona = connettoreDefault && TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType);
			
			ConfigurazioneGestioneConsegnaNotifiche oldConfigurazioneGestioneConsegnaNotifiche =
					org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.read(oldPaSA);
			
			
			String postBackElementName = porteApplicativeHelper.getPostBackElementName();
			if(postBackElementName != null ){
				if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_2XX)) {
					codiceRisposta2xxValueMin = "";
					codiceRisposta2xxValueMax = "";
					codiceRisposta2xxValue = "";
				}
				
				if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_3XX)) {
					codiceRisposta3xxValueMin = "";
					codiceRisposta3xxValueMax = "";
					codiceRisposta3xxValue = "";
				}
				
				if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_4XX)) {
					codiceRisposta4xxValueMin = "";
					codiceRisposta4xxValueMax = "";
					codiceRisposta4xxValue = "";
				}
				
				if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_CODICE_RISPOSTA_HTTP_5XX)) {
					codiceRisposta5xxValueMin = "";
					codiceRisposta5xxValueMax = "";
					codiceRisposta5xxValue = "";
				}
				
				if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_GESTIONE)) {
					faultCode = "";
					faultActor = "";
					faultMessage = "";
				}
				
				if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_NOTIFICHE_TIPO_MESSAGGIO_DA_NOTIFICARE)) {
					httpMethodDaNotificare = null;
				}
			}
			

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

			String labelPerPorta = null;
			if(parentPA!=null && (parentPA.intValue() == PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE)) {
				if(accessoDaListaAPS) {
					if(!isModalitaCompleta) {
						if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
							labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI;
						} else {
							labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_DI+
									porteApplicativeHelper.getLabelIdServizio(asps);
						}
					}
					else {
						labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI;
					}
				}
				else {
					labelPerPorta = porteApplicativeCore.getLabelRegolaMappingErogazionePortaApplicativa(
							PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_DI,
							PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI,
							pa);
				}
			}
			else {
				labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_DI+idporta;
			}

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

			List<Parameter> listParametersConfigutazioneConnettoriMultipli = new ArrayList<>();
			Parameter pIdPorta = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID, idPorta);
			Parameter pNomePorta = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_NOME, pa.getNome());
			Parameter pIdSogg = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_SOGGETTO, idsogg);
			Parameter pIdAsps = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_ASPS, idAsps);
			String idTabP = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_ID_TAB);
			Parameter pIdTab = new Parameter(CostantiControlStation.PARAMETRO_ID_TAB, idTabP != null ? idTabP : "");
			Parameter pIdConnTab = new Parameter(CostantiControlStation.PARAMETRO_ID_CONN_TAB, idConnTab != null ? idConnTab : "");
			Parameter pAccessoDaAPS = new Parameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORE_DA_LISTA_APS, accessoDaAPSParametro != null ? accessoDaAPSParametro : "");
			String connettoreAccessoGruppi = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_ACCESSO_DA_GRUPPI);
			String connettoreRegistro = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_REGISTRO);
			Parameter pConnettoreAccessoDaGruppi = new Parameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_ACCESSO_DA_GRUPPI, connettoreAccessoGruppi);
			Parameter pConnettoreAccesso = new Parameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_REGISTRO, connettoreRegistro);
			String connettoreAccessoListaConnettori = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTORE_ACCESSO_DA_LISTA_CONNETTORI_MULTIPLI);

			String nomeConnettoreChangeListBreadcump = null;
			{
				// valora iniziale della configurazione
				PortaApplicativaServizioApplicativo paSA = null;
				for (PortaApplicativaServizioApplicativo paSATmp : pa.getServizioApplicativoList()) {
					if(paSATmp.getNome().equals(nomeSAConnettore)) {
						paSA = paSATmp;					
					}
				}
	
				PortaApplicativaServizioApplicativoConnettore datiConnettore = paSA.getDatiConnettore();
				
				if(datiConnettore!=null) {
					nomeConnettoreChangeListBreadcump = datiConnettore.getNome();
				}
				if(nomeConnettoreChangeListBreadcump==null) {
					nomeConnettoreChangeListBreadcump = CostantiConfigurazione.NOME_CONNETTORE_DEFAULT;
				}
			}
			Parameter pChangeNomeConnettoreBreadcump = new Parameter(CostantiControlStation.PARAMETRO_FROM_BREADCUMP_CHANGE_NOME_CONNETTORE, nomeConnettoreChangeListBreadcump);
						
			listParametersConfigutazioneConnettoriMultipli.add(pIdSogg);
			listParametersConfigutazioneConnettoriMultipli.add(pIdPorta);
			listParametersConfigutazioneConnettoriMultipli.add(pNomePorta);
			listParametersConfigutazioneConnettoriMultipli.add(pIdAsps);
			listParametersConfigutazioneConnettoriMultipli.add(pIdTab);
			listParametersConfigutazioneConnettoriMultipli.add(pIdConnTab);
			listParametersConfigutazioneConnettoriMultipli.add(pAccessoDaAPS);
			listParametersConfigutazioneConnettoriMultipli.add(pConnettoreAccessoDaGruppi);
			listParametersConfigutazioneConnettoriMultipli.add(pConnettoreAccesso);
			listParametersConfigutazioneConnettoriMultipli.add(pChangeNomeConnettoreBreadcump);

			lstParam.add(new Parameter(labelPerPorta,  PorteApplicativeCostanti.SERVLET_NAME_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_LIST, listParametersConfigutazioneConnettoriMultipli.toArray(new Parameter[1])));

			String labelDi = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_GESTIONE_NOTIFICHE_DI;
			String label = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_GESTIONE_NOTIFICHE;
			if(consegnaSincrona) {
				labelDi = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_GESTIONE_CONSEGNA_DI;
				label = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_GESTIONE_CONSEGNA;
			}
			
			// Label diversa in base all'operazione
			String labelPagina = porteApplicativeHelper.getLabelNomePortaApplicativaServizioApplicativo(
					labelDi,
					label,
					oldPaSA);

			lstParam.add(new Parameter(labelPagina, null));

			// setto la barra del titolo
			ServletUtils.setPageDataTitle(pd, lstParam);

			// Se nome = null, devo visualizzare la pagina per l'inserimento
			// dati
			if (porteApplicativeHelper.isEditModeInProgress()) {

				if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType) && !consegnaSincrona) {
					if(connettoreTipoMessaggioDaNotificare==null) {
						if(oldConfigurazioneGestioneConsegnaNotifiche!=null && oldConfigurazioneGestioneConsegnaNotifiche.getMessaggioDaNotificare()!=null) {
							connettoreTipoMessaggioDaNotificare = oldConfigurazioneGestioneConsegnaNotifiche.getMessaggioDaNotificare().getValue(); 
						}
						if(connettoreTipoMessaggioDaNotificare==null) {
							connettoreTipoMessaggioDaNotificare = PorteApplicativeCostanti.VALORE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONNETTORE_MESSAGGIO_DA_NOTIFICARE_RICHIESTA;
						}
					}
					if(connettoreIniettaContestoSincrono==null &&
						oldConfigurazioneGestioneConsegnaNotifiche!=null && oldConfigurazioneGestioneConsegnaNotifiche.isInjectTransactionSyncContext()) {
						connettoreIniettaContestoSincrono = Costanti.CHECK_BOX_ENABLED;
					}
					if(httpMethodDaNotificare==null) {
						if(oldConfigurazioneGestioneConsegnaNotifiche!=null && oldConfigurazioneGestioneConsegnaNotifiche.getHttpMethod()!=null) {
							httpMethodDaNotificare = oldConfigurazioneGestioneConsegnaNotifiche.getHttpMethod().name(); 
						}
						if(httpMethodDaNotificare==null) {
							if(PorteApplicativeCostanti.VALORE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONNETTORE_MESSAGGIO_DA_NOTIFICARE_RICHIESTA.equals(connettoreTipoMessaggioDaNotificare)) {
								httpMethodDaNotificare = PorteApplicativeCostanti.VALORE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONNETTORE_MESSAGGIO_HTTP_NOTIFICA_DEFAULT_RICHIESTA;
							}
							else {
								httpMethodDaNotificare = PorteApplicativeCostanti.VALORE_PARAMETRO_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONNETTORE_MESSAGGIO_HTTP_NOTIFICA_DEFAULT;
							}
						}
					}
				}
				
				if(coda==null) {
					if(oldPaSA!=null && oldPaSA.getDatiConnettore()!=null) {
						coda = oldPaSA.getDatiConnettore().getCoda();
					}
					if(coda==null) {
						coda = CostantiConfigurazione.CODA_DEFAULT;
					}
				}
				if(priorita==null) {
					if(oldPaSA!=null && oldPaSA.getDatiConnettore()!=null) {
						priorita = oldPaSA.getDatiConnettore().getPriorita();
						prioritaMax = oldPaSA.getDatiConnettore().isPrioritaMax() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
					}
					if(priorita==null) {
						priorita = CostantiConfigurazione.PRIORITA_DEFAULT;
					}
				}
				
				if(cadenzaRispedizione == null) {
					if(oldConfigurazioneGestioneConsegnaNotifiche != null) {
						// cadenza rispedizione
						cadenzaRispedizione = oldConfigurazioneGestioneConsegnaNotifiche.getCadenzaRispedizione() != null ? oldConfigurazioneGestioneConsegnaNotifiche.getCadenzaRispedizione()+ "" : "";
						
						TipoGestioneNotificaTrasporto gestioneTrasporto2xxE = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto2xx();
						if(gestioneTrasporto2xxE != null) {
							codiceRisposta2xx = gestioneTrasporto2xxE.getValue();
							codiceRisposta2xxValueMin = "";
							codiceRisposta2xxValueMax = "";
							codiceRisposta2xxValue = "";

							switch(gestioneTrasporto2xxE) {
							case CONSEGNA_COMPLETATA:
							case CONSEGNA_FALLITA:
								break;
							case CODICI_CONSEGNA_COMPLETATA:
								StringBuilder sb = new StringBuilder();
								for(Integer x : oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto2xx_codes()) {
									if(sb.length() > 0) {
										sb.append(",");
									}
									sb.append(x+ "");
								}
								codiceRisposta2xxValue = sb.toString();
								break;
							case INTERVALLO_CONSEGNA_COMPLETATA:
								codiceRisposta2xxValueMin = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto2xx_leftInterval() + "";
								codiceRisposta2xxValueMax = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto2xx_rightInterval() + "";
								break;
							}
						} else {
							codiceRisposta2xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
							codiceRisposta2xxValueMin = "";
							codiceRisposta2xxValueMax = "";
							codiceRisposta2xxValue = "";
						}
						
						TipoGestioneNotificaTrasporto gestioneTrasporto3xxE = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto3xx();
						if(gestioneTrasporto3xxE != null) {
							codiceRisposta3xx = gestioneTrasporto3xxE.getValue();
							codiceRisposta3xxValueMin = "";
							codiceRisposta3xxValueMax = "";
							codiceRisposta3xxValue = "";

							switch(gestioneTrasporto3xxE) {
							case CONSEGNA_COMPLETATA:
							case CONSEGNA_FALLITA:
								break;
							case CODICI_CONSEGNA_COMPLETATA:
								StringBuilder sb = new StringBuilder();
								for(Integer x : oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto3xx_codes()) {
									if(sb.length() > 0) {
										sb.append(",");
									}
									sb.append(x+ "");
								}
								codiceRisposta3xxValue = sb.toString();
								break;
							case INTERVALLO_CONSEGNA_COMPLETATA:
								codiceRisposta3xxValueMin = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto3xx_leftInterval() + "";
								codiceRisposta3xxValueMax = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto3xx_rightInterval() + "";
								break;
							}
						} else {
							codiceRisposta3xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
							codiceRisposta3xxValueMin = "";
							codiceRisposta3xxValueMax = "";
							codiceRisposta3xxValue = "";
						}
						
						TipoGestioneNotificaTrasporto gestioneTrasporto4xxE = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto4xx();
						if(gestioneTrasporto4xxE != null) {
							codiceRisposta4xx = gestioneTrasporto4xxE.getValue();
							codiceRisposta4xxValueMin = "";
							codiceRisposta4xxValueMax = "";
							codiceRisposta4xxValue = "";

							switch(gestioneTrasporto4xxE) {
							case CONSEGNA_COMPLETATA:
							case CONSEGNA_FALLITA:
								break;
							case CODICI_CONSEGNA_COMPLETATA:
								StringBuilder sb = new StringBuilder();
								for(Integer x : oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto4xx_codes()) {
									if(sb.length() > 0) {
										sb.append(",");
									}
									sb.append(x+ "");
								}
								codiceRisposta4xxValue = sb.toString();
								break;
							case INTERVALLO_CONSEGNA_COMPLETATA:
								codiceRisposta4xxValueMin = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto4xx_leftInterval() + "";
								codiceRisposta4xxValueMax = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto4xx_rightInterval() + "";
								break;
							}
						} else {
							codiceRisposta4xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
							codiceRisposta4xxValueMin = "";
							codiceRisposta4xxValueMax = "";
							codiceRisposta4xxValue = "";
						}
						
						TipoGestioneNotificaTrasporto gestioneTrasporto5xxE = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto5xx();
						if(gestioneTrasporto5xxE != null) {
							codiceRisposta5xx = gestioneTrasporto5xxE.getValue();
							codiceRisposta5xxValueMin = "";
							codiceRisposta5xxValueMax = "";
							codiceRisposta5xxValue = "";

							switch(gestioneTrasporto5xxE) {
							case CONSEGNA_COMPLETATA:
							case CONSEGNA_FALLITA:
								break;
							case CODICI_CONSEGNA_COMPLETATA:
								StringBuilder sb = new StringBuilder();
								for(Integer x : oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto5xx_codes()) {
									if(sb.length() > 0) {
										sb.append(",");
									}
									sb.append(x+ "");
								}
								codiceRisposta5xxValue = sb.toString();
								break;
							case INTERVALLO_CONSEGNA_COMPLETATA:
								codiceRisposta5xxValueMin = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto5xx_leftInterval() + "";
								codiceRisposta5xxValueMax = oldConfigurazioneGestioneConsegnaNotifiche.getGestioneTrasporto5xx_rightInterval() + "";
								break;
							}
						} else {
							codiceRisposta5xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
							codiceRisposta5xxValueMin = "";
							codiceRisposta5xxValueMax = "";
							codiceRisposta5xxValue = "";
						}
						
						if(oldConfigurazioneGestioneConsegnaNotifiche.getFault() != null) {
							gestioneFault = oldConfigurazioneGestioneConsegnaNotifiche.getFault().getValue();
						} else {
							gestioneFault = TipoGestioneNotificaFault.CONSEGNA_COMPLETATA.getValue();
						}
						
						faultCode = oldConfigurazioneGestioneConsegnaNotifiche.getFaultCode() != null ? oldConfigurazioneGestioneConsegnaNotifiche.getFaultCode() : "";
						faultActor = oldConfigurazioneGestioneConsegnaNotifiche.getFaultActor() != null ? oldConfigurazioneGestioneConsegnaNotifiche.getFaultActor() : "";
						faultMessage = oldConfigurazioneGestioneConsegnaNotifiche.getFaultMessage() != null ? oldConfigurazioneGestioneConsegnaNotifiche.getFaultMessage() : "";
						
					} else {
						cadenzaRispedizione = "";
						codiceRisposta2xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
						codiceRisposta2xxValueMin = "";
						codiceRisposta2xxValueMax = "";
						codiceRisposta2xxValue = "";
						codiceRisposta3xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
						codiceRisposta3xxValueMin = "";
						codiceRisposta3xxValueMax = "";
						codiceRisposta3xxValue = "";
						codiceRisposta4xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
						codiceRisposta4xxValueMin = "";
						codiceRisposta4xxValueMax = "";
						codiceRisposta4xxValue = "";
						codiceRisposta5xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
						codiceRisposta5xxValueMin = "";
						codiceRisposta5xxValueMax = "";
						codiceRisposta5xxValue = "";
						gestioneFault = TipoGestioneNotificaFault.CONSEGNA_COMPLETATA.getValue();
						faultCode = "";
						faultActor = "";
						faultMessage = "";
					}
				}

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

				dati = porteApplicativeHelper.addConnettoriMultipliNotificheToDati(dati, TipoOperazione.OTHER, beaBehaviourType, nomeSAConnettore, serviceBinding, cadenzaRispedizione, 
						codiceRisposta2xx, codiceRisposta2xxValueMin, codiceRisposta2xxValueMax, codiceRisposta2xxValue, 
						codiceRisposta3xx, codiceRisposta3xxValueMin, codiceRisposta3xxValueMax, codiceRisposta3xxValue, 
						codiceRisposta4xx, codiceRisposta4xxValueMin, codiceRisposta4xxValueMax, codiceRisposta4xxValue, 
						codiceRisposta5xx, codiceRisposta5xxValueMin, codiceRisposta5xxValueMax, codiceRisposta5xxValue, 
						gestioneFault, faultCode, faultActor, faultMessage,
						consegnaSincrona,
						coda, priorita, prioritaMax,
						connettoreTipoMessaggioDaNotificare, connettoreIniettaContestoSincrono, httpMethodDaNotificare);

				dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER, idPorta, idsogg, idPorta,idAsps, dati);

				dati = porteApplicativeHelper.addInformazioniGruppiAsHiddenToDati(TipoOperazione.OTHER, dati, idTabP, idConnTab, accessoDaAPSParametro != null ? accessoDaAPSParametro : "", 
						connettoreAccessoGruppi, connettoreRegistro, connettoreAccessoListaConnettori);

				pd.setDati(dati);

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

				return ServletUtils.getStrutsForwardEditModeInProgress(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIGURAZIONE_PROPRIETA_NOTIFICHE,
						ForwardParams.OTHER(""));
			}

			// Controlli sui campi immessi
			boolean isOk = porteApplicativeHelper.connettoriMultipliNotificheCheckData(TipoOperazione.OTHER, pa, beaBehaviourType, serviceBinding, nomeSAConnettore, cadenzaRispedizione,
					codiceRisposta2xx, codiceRisposta2xxValueMin, codiceRisposta2xxValueMax, codiceRisposta2xxValue, 
					codiceRisposta3xx, codiceRisposta3xxValueMin, codiceRisposta3xxValueMax, codiceRisposta3xxValue, 
					codiceRisposta4xx, codiceRisposta4xxValueMin, codiceRisposta4xxValueMax, codiceRisposta4xxValue, 
					codiceRisposta5xx, codiceRisposta5xxValueMin, codiceRisposta5xxValueMax, codiceRisposta5xxValue, 
					gestioneFault, faultCode, faultActor, faultMessage);

			if (!isOk) {

				// preparo i campi
				List<DataElement> dati = new ArrayList<>();

				dati.add(ServletUtils.getDataElementForEditModeFinished());

				dati = porteApplicativeHelper.addConnettoriMultipliNotificheToDati(dati, TipoOperazione.OTHER, beaBehaviourType, nomeSAConnettore, serviceBinding, cadenzaRispedizione, 
						codiceRisposta2xx, codiceRisposta2xxValueMin, codiceRisposta2xxValueMax, codiceRisposta2xxValue, 
						codiceRisposta3xx, codiceRisposta3xxValueMin, codiceRisposta3xxValueMax, codiceRisposta3xxValue, 
						codiceRisposta4xx, codiceRisposta4xxValueMin, codiceRisposta4xxValueMax, codiceRisposta4xxValue, 
						codiceRisposta5xx, codiceRisposta5xxValueMin, codiceRisposta5xxValueMax, codiceRisposta5xxValue, 
						gestioneFault, faultCode, faultActor, faultMessage,
						consegnaSincrona,
						coda, priorita, prioritaMax,
						connettoreTipoMessaggioDaNotificare, connettoreIniettaContestoSincrono, httpMethodDaNotificare);

				dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER, idPorta, idsogg, idPorta, idAsps, dati);

				dati = porteApplicativeHelper.addInformazioniGruppiAsHiddenToDati(TipoOperazione.OTHER, dati, idTabP, idConnTab, accessoDaAPSParametro != null ? accessoDaAPSParametro : "", 
						connettoreAccessoGruppi, connettoreRegistro, connettoreAccessoListaConnettori);	

				pd.setDati(dati);

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

				return ServletUtils.getStrutsForwardEditModeCheckError(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIGURAZIONE_PROPRIETA_NOTIFICHE, 
						ForwardParams.OTHER(""));
			}

			// valora iniziale della configurazione
			PortaApplicativaServizioApplicativo paSA = null;
			for (PortaApplicativaServizioApplicativo paSATmp : pa.getServizioApplicativoList()) {
				if(paSATmp.getNome().equals(nomeSAConnettore)) {
					paSA = paSATmp;					
				}
			}
			
			PortaApplicativaServizioApplicativoConnettore datiConnettore = paSA.getDatiConnettore();
			
			boolean oldValuePrioritaMax = false;
			String oldCoda = null;
			
			if(datiConnettore == null) { // succede solo se e' la prima volta che modifico la configurazione di default
				datiConnettore = new PortaApplicativaServizioApplicativoConnettore();
				datiConnettore.setNome(CostantiConfigurazione.NOME_CONNETTORE_DEFAULT);
			}
			else {
				oldValuePrioritaMax = datiConnettore.isPrioritaMax();
				oldCoda = datiConnettore.getCoda();
			}
			
			datiConnettore.setCoda(coda);
			datiConnettore.setPriorita(priorita);
			datiConnettore.setPrioritaMax(ServletUtils.isCheckBoxEnabled(prioritaMax));
			
			paSA.setDatiConnettore(datiConnettore);
			
			ConfigurazioneGestioneConsegnaNotifiche nuovaConfigurazioneGestioneConsegnaNotifiche  = porteApplicativeHelper.getConfigurazioneGestioneConsegnaNotifiche(beaBehaviourType, serviceBinding, cadenzaRispedizione,
					codiceRisposta2xx, codiceRisposta2xxValueMin, codiceRisposta2xxValueMax, codiceRisposta2xxValue,
					codiceRisposta3xx, codiceRisposta3xxValueMin, codiceRisposta3xxValueMax, codiceRisposta3xxValue,
					codiceRisposta4xx, codiceRisposta4xxValueMin, codiceRisposta4xxValueMax, codiceRisposta4xxValue, 
					codiceRisposta5xx, codiceRisposta5xxValueMin, codiceRisposta5xxValueMax, codiceRisposta5xxValue,
					gestioneFault, faultCode, faultActor, faultMessage,
					consegnaSincrona,
					connettoreTipoMessaggioDaNotificare, connettoreIniettaContestoSincrono, httpMethodDaNotificare);
			
			org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.save(paSA, nuovaConfigurazioneGestioneConsegnaNotifiche);

			String userLogin = ServletUtils.getUserLoginFromSession(session);

			if(datiConnettore.getProprietaOggetto()==null) {
				datiConnettore.setProprietaOggetto(new ProprietaOggetto());
			}
			datiConnettore.getProprietaOggetto().setUtenteUltimaModifica(userLogin);
			datiConnettore.getProprietaOggetto().setDataUltimaModifica(DateManager.getDate());
			
			porteApplicativeCore.performUpdateOperation(userLogin, porteApplicativeHelper.smista(), pa);

			boolean resetCoda = false;
			if(oldValuePrioritaMax != datiConnettore.isPrioritaMax()) {
				resetConnettoriPrioritari(coda, porteApplicativeCore);
				resetCoda = true;
			}
			if(!coda.equals(oldCoda)) {
				resetConnettoriPrioritari(oldCoda, porteApplicativeCore);
				if(!resetCoda) {
					resetConnettoriPrioritari(coda, porteApplicativeCore);
				}
			}
			
			// Serve per le breadcump
			ServletUtils.removeRisultatiRicercaFromSession(request, session, Liste.PORTE_APPLICATIVE_CONNETTORI_MULTIPLI);
			
			// ricarico la configurazione
			pa = porteApplicativeCore.getPortaApplicativa(Integer.parseInt(idPorta));

			boolean rimanereInEditPage = false;
			
			if(rimanereInEditPage) {
			
				paSA = null;
				for (PortaApplicativaServizioApplicativo paSATmp : pa.getServizioApplicativoList()) {
					if(paSATmp.getNome().equals(nomeSAConnettore)) {
						paSA = paSATmp;					
					}
				}
				
				ConfigurazioneGestioneConsegnaNotifiche configurazioneGestioneConsegnaNotifiche =
						org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.read(paSA);
	
				if(configurazioneGestioneConsegnaNotifiche != null) {
					// cadenza rispedizione
					cadenzaRispedizione = configurazioneGestioneConsegnaNotifiche.getCadenzaRispedizione() != null ? configurazioneGestioneConsegnaNotifiche.getCadenzaRispedizione()+ "" : "";
					
					TipoGestioneNotificaTrasporto gestioneTrasporto2xxE = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto2xx();
					if(gestioneTrasporto2xxE != null) {
						codiceRisposta2xx = gestioneTrasporto2xxE.getValue();
						codiceRisposta2xxValueMin = "";
						codiceRisposta2xxValueMax = "";
						codiceRisposta2xxValue = "";
	
						switch(gestioneTrasporto2xxE) {
						case CONSEGNA_COMPLETATA:
						case CONSEGNA_FALLITA:
							break;
						case CODICI_CONSEGNA_COMPLETATA:
							StringBuilder sb = new StringBuilder();
							for(Integer x : configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto2xx_codes()) {
								if(sb.length() > 0) {
									sb.append(",");
								}
								sb.append(x+ "");
							}
							codiceRisposta2xxValue = sb.toString();
							break;
						case INTERVALLO_CONSEGNA_COMPLETATA:
							codiceRisposta2xxValueMin = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto2xx_leftInterval() + "";
							codiceRisposta2xxValueMax = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto2xx_rightInterval() + "";
							break;
						}
					} else {
						codiceRisposta2xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
						codiceRisposta2xxValueMin = "";
						codiceRisposta2xxValueMax = "";
						codiceRisposta2xxValue = "";
					}
					
					TipoGestioneNotificaTrasporto gestioneTrasporto3xxE = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto3xx();
					if(gestioneTrasporto3xxE != null) {
						codiceRisposta3xx = gestioneTrasporto3xxE.getValue();
						codiceRisposta3xxValueMin = "";
						codiceRisposta3xxValueMax = "";
						codiceRisposta3xxValue = "";
	
						switch(gestioneTrasporto3xxE) {
						case CONSEGNA_COMPLETATA:
						case CONSEGNA_FALLITA:
							break;
						case CODICI_CONSEGNA_COMPLETATA:
							StringBuilder sb = new StringBuilder();
							for(Integer x : configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto3xx_codes()) {
								if(sb.length() > 0) {
									sb.append(",");
								}
								sb.append(x+ "");
							}
							codiceRisposta3xxValue = sb.toString();
							break;
						case INTERVALLO_CONSEGNA_COMPLETATA:
							codiceRisposta3xxValueMin = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto3xx_leftInterval() + "";
							codiceRisposta3xxValueMax = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto3xx_rightInterval() + "";
							break;
						}
					} else {
						codiceRisposta3xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
						codiceRisposta3xxValueMin = "";
						codiceRisposta3xxValueMax = "";
						codiceRisposta3xxValue = "";
					}
					
					TipoGestioneNotificaTrasporto gestioneTrasporto4xxE = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto4xx();
					if(gestioneTrasporto4xxE != null) {
						codiceRisposta4xx = gestioneTrasporto4xxE.getValue();
						codiceRisposta4xxValueMin = "";
						codiceRisposta4xxValueMax = "";
						codiceRisposta4xxValue = "";
	
						switch(gestioneTrasporto4xxE) {
						case CONSEGNA_COMPLETATA:
						case CONSEGNA_FALLITA:
							break;
						case CODICI_CONSEGNA_COMPLETATA:
							StringBuilder sb = new StringBuilder();
							for(Integer x : configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto4xx_codes()) {
								if(sb.length() > 0) {
									sb.append(",");
								}
								sb.append(x+ "");
							}
							codiceRisposta4xxValue = sb.toString();
							break;
						case INTERVALLO_CONSEGNA_COMPLETATA:
							codiceRisposta4xxValueMin = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto4xx_leftInterval() + "";
							codiceRisposta4xxValueMax = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto4xx_rightInterval() + "";
							break;
						}
					} else {
						codiceRisposta4xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
						codiceRisposta4xxValueMin = "";
						codiceRisposta4xxValueMax = "";
						codiceRisposta4xxValue = "";
					}
					
					TipoGestioneNotificaTrasporto gestioneTrasporto5xxE = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto5xx();
					if(gestioneTrasporto5xxE != null) {
						codiceRisposta5xx = gestioneTrasporto5xxE.getValue();
						codiceRisposta5xxValueMin = "";
						codiceRisposta5xxValueMax = "";
						codiceRisposta5xxValue = "";
	
						switch(gestioneTrasporto5xxE) {
						case CONSEGNA_COMPLETATA:
						case CONSEGNA_FALLITA:
							break;
						case CODICI_CONSEGNA_COMPLETATA:
							StringBuilder sb = new StringBuilder();
							for(Integer x : configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto5xx_codes()) {
								if(sb.length() > 0) {
									sb.append(",");
								}
								sb.append(x+ "");
							}
							codiceRisposta5xxValue = sb.toString();
							break;
						case INTERVALLO_CONSEGNA_COMPLETATA:
							codiceRisposta5xxValueMin = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto5xx_leftInterval() + "";
							codiceRisposta5xxValueMax = configurazioneGestioneConsegnaNotifiche.getGestioneTrasporto5xx_rightInterval() + "";
							break;
						}
					} else {
						codiceRisposta5xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
						codiceRisposta5xxValueMin = "";
						codiceRisposta5xxValueMax = "";
						codiceRisposta5xxValue = "";
					}
					
					if(configurazioneGestioneConsegnaNotifiche.getFault() != null) {
						gestioneFault = configurazioneGestioneConsegnaNotifiche.getFault().getValue();
					} else {
						gestioneFault = TipoGestioneNotificaFault.CONSEGNA_COMPLETATA.getValue();
					}
					
					faultCode = configurazioneGestioneConsegnaNotifiche.getFaultCode() != null ? configurazioneGestioneConsegnaNotifiche.getFaultCode() : "";
					faultActor = configurazioneGestioneConsegnaNotifiche.getFaultActor() != null ? configurazioneGestioneConsegnaNotifiche.getFaultActor() : "";
					faultMessage = configurazioneGestioneConsegnaNotifiche.getFaultMessage() != null ? configurazioneGestioneConsegnaNotifiche.getFaultMessage() : "";
					
				} else {
					cadenzaRispedizione = "";
					codiceRisposta2xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
					codiceRisposta2xxValueMin = "";
					codiceRisposta2xxValueMax = "";
					codiceRisposta2xxValue = "";
					codiceRisposta3xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
					codiceRisposta3xxValueMin = "";
					codiceRisposta3xxValueMax = "";
					codiceRisposta3xxValue = "";
					codiceRisposta4xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
					codiceRisposta4xxValueMin = "";
					codiceRisposta4xxValueMax = "";
					codiceRisposta4xxValue = "";
					codiceRisposta5xx = TipoGestioneNotificaTrasporto.CONSEGNA_COMPLETATA.getValue();
					codiceRisposta5xxValueMin = "";
					codiceRisposta5xxValueMax = "";
					codiceRisposta5xxValue = "";
					gestioneFault = TipoGestioneNotificaFault.CONSEGNA_COMPLETATA.getValue();
					faultCode = "";
					faultActor = "";
					faultMessage = "";
				}
	
				// preparo i campi
				List<DataElement> dati = new ArrayList<>();
	
				dati.add(ServletUtils.getDataElementForEditModeFinished());
	
				dati = porteApplicativeHelper.addConnettoriMultipliNotificheToDati(dati, TipoOperazione.OTHER, beaBehaviourType, nomeSAConnettore, serviceBinding, cadenzaRispedizione, 
						codiceRisposta2xx, codiceRisposta2xxValueMin, codiceRisposta2xxValueMax, codiceRisposta2xxValue, 
						codiceRisposta3xx, codiceRisposta3xxValueMin, codiceRisposta3xxValueMax, codiceRisposta3xxValue, 
						codiceRisposta4xx, codiceRisposta4xxValueMin, codiceRisposta4xxValueMax, codiceRisposta4xxValue, 
						codiceRisposta5xx, codiceRisposta5xxValueMin, codiceRisposta5xxValueMax, codiceRisposta5xxValue, 
						gestioneFault, faultCode, faultActor, faultMessage,
						consegnaSincrona,
						coda, priorita, prioritaMax,
						connettoreTipoMessaggioDaNotificare, connettoreIniettaContestoSincrono, httpMethodDaNotificare);
	
				dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.OTHER, idPorta, idsogg, idPorta, idAsps, dati);
	
				dati = porteApplicativeHelper.addInformazioniGruppiAsHiddenToDati(TipoOperazione.OTHER, dati, idTabP, idConnTab, accessoDaAPSParametro != null ? accessoDaAPSParametro : "", 
						connettoreAccessoGruppi, connettoreRegistro, connettoreAccessoListaConnettori);	
	
				pd.setDati(dati);
	
				pd.setMessage(CostantiControlStation.LABEL_AGGIORNAMENTO_EFFETTUATO_CON_SUCCESSO, Costanti.MESSAGE_TYPE_INFO);
				
			}
			
			else {
				
				// Preparo la lista
				ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);

				int idLista = Liste.PORTE_APPLICATIVE_CONNETTORI_MULTIPLI;

				ricerca = porteApplicativeHelper.checkSearchParameters(idLista, ricerca);

				IDSoggetto idSoggettoProprietario = new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario());
				List<PortaApplicativaServizioApplicativo> listaFiltrata = porteApplicativeHelper.applicaFiltriRicercaConnettoriMultipli(ricerca, idLista, pa.getServizioApplicativoList(), idSoggettoProprietario);
				
				String nomeConnettoreChangeList = datiConnettore.getNome();
				if(nomeConnettoreChangeList==null) {
					nomeConnettoreChangeList = CostantiConfigurazione.NOME_CONNETTORE_DEFAULT;
				}
				
				porteApplicativeHelper.preparePorteAppConnettoriMultipliList_fromChangeConnettore(pa.getNome(), ricerca, listaFiltrata, pa,
						nomeConnettoreChangeList);
				
			}

			ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
			// Forward control to the specified success URI
			return ServletUtils.getStrutsForwardEditModeFinished(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIGURAZIONE_PROPRIETA_NOTIFICHE, 
					ForwardParams.OTHER(""));
		} catch (Exception e) {
			return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping, 
					PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_CONNETTORI_MULTIPLI_CONFIGURAZIONE_PROPRIETA_NOTIFICHE,
					ForwardParams.OTHER(""));
		}  
	}
	
	private void resetConnettoriPrioritari(String coda, PorteApplicativeCore porteApplicativeCore) {
		List<String> aliasJmx = porteApplicativeCore.getJmxPdDAliases();
		if(aliasJmx!=null && !aliasJmx.isEmpty()) {
			for (String alias : aliasJmx) {
				String metodo = porteApplicativeCore.getJmxPdDConfigurazioneSistemaNomeMetodoUpdateConnettoriPrioritari(alias);
				try{
					String stato = porteApplicativeCore.getInvoker().invokeJMXMethod(alias, 
							porteApplicativeCore.getJmxPdDConfigurazioneSistemaType(alias),
							porteApplicativeCore.getJmxPdDConfigurazioneSistemaNomeRisorsaConsegnaContenutiApplicativi(alias), 
							metodo, 
							coda);
					if(stato==null) {
						throw new ServletException("Aggiornamento fallito");
					}
					if(
							!(
								JMXUtils.MSG_OPERAZIONE_EFFETTUATA_SUCCESSO.equals(stato)
								||
								(stato!=null && stato.startsWith(JMXUtils.MSG_OPERAZIONE_EFFETTUATA_SUCCESSO_PREFIX))
							)
						){
						throw new ServletException(stato);
					}
				}catch(Exception e){
					String msgErrore = "Errore durante l'aggiornamento dei connettori prioritari (coda:"+coda+") via jmx (jmxMethod '"+metodo+"') (node:"+alias+"): "+e.getMessage();
					ControlStationCore.logError(msgErrore, e);
				}
			}
		}
	}
}