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

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

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.config.Configurazione;
import org.openspcoop2.core.config.ConfigurazioneTracciamentoPorta;
import org.openspcoop2.core.config.Dump;
import org.openspcoop2.core.config.MessaggiDiagnostici;
import org.openspcoop2.core.config.Tracciamento;
import org.openspcoop2.core.config.TracciamentoConfigurazione;
import org.openspcoop2.core.config.TracciamentoConfigurazioneFiletrace;
import org.openspcoop2.core.config.TracciamentoConfigurazioneFiletraceConnector;
import org.openspcoop2.core.config.Transazioni;
import org.openspcoop2.core.config.constants.Severita;
import org.openspcoop2.core.config.constants.StatoFunzionalita;
import org.openspcoop2.core.config.utils.TracciamentoCompatibilitaFiltroEsiti;
import org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName;
import org.openspcoop2.protocol.utils.EsitiConfigUtils;
import org.openspcoop2.protocol.utils.EsitiProperties;
import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
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;

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

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

		TipoOperazione tipoOperazione = TipoOperazione.OTHER;
		
		HttpSession session = request.getSession(true);

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

		GeneralHelper generalHelper = new GeneralHelper(session);

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

		String userLogin = ServletUtils.getUserLoginFromSession(session);	

		try {
			ConfigurazioneHelper confHelper = new ConfigurazioneHelper(request, pd, session);
			
			Boolean contaListe = ServletUtils.getContaListeFromSession(session);
			
			// Preparo il menu
			confHelper.makeMenu();
			
			ConfigurazioneCore confCore = new ConfigurazioneCore();
			
			Configurazione oldConfigurazione = confCore.getConfigurazioneGenerale();
			
			// Stato [si usa per capire se sono entrato per la prima volta nella schermata]		
			boolean first = confHelper.isFirstTimeFromHttpParameters(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_FIRST_TIME);
			
			String tipoConfigurazione = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE);
			
			String severita = null;
			String severitaLog4j = null;
			String registrazioneTracce = null;
			
			ConfigurazioneTracciamentoPorta oldConfigurazioneTracciamento = null;
			
			String dbStato = null;
			String dbStatoReqIn = null;
			String dbStatoReqOut = null;
			String dbStatoResOut = null;
			String dbStatoResOutComplete = null;
			boolean dbFiltroEsiti = false;
			
			String fsStato = null;
			String fsStatoReqIn = null;
			String fsStatoReqOut = null;
			String fsStatoResOut = null;
			String fsStatoResOutComplete = null;
			boolean fsFiltroEsiti = false;
			
			String nuovaConfigurazioneEsiti = null;
			String tracciamentoEsitiSelezionePersonalizzataOk = null;
			String tracciamentoEsitiSelezionePersonalizzataFault = null;
			String tracciamentoEsitiSelezionePersonalizzataFallite = null;
			String tracciamentoEsitiSelezionePersonalizzataScartate = null;
			String tracciamentoEsitiSelezionePersonalizzataRateLimiting = null;
			String tracciamentoEsitiSelezionePersonalizzataMax = null;
			String tracciamentoEsitiSelezionePersonalizzataCors = null;
			
			String tracciamentoEsitiSelezionePersonalizzataAll = null;
			boolean selectAll = false;
			
			String transazioniTempiElaborazione = null;
			String transazioniToken = null;
			
			String fileTraceStato = null;
			String fileTraceConfigFile = null;
			String fileTraceClient = null; 
			String fileTraceClientHdr = null; 
			String fileTraceClientBody = null;
			String fileTraceServer = null;
			String fileTraceServerHdr = null; 
			String fileTraceServerBody = null;
			
			String dumpApplicativo = null;
			String dumpPD = null;
			String dumpPA = null;
			
			if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO.equals(tipoConfigurazione)) {
				
				severita = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_LIVELLO_SEVERITA);
				severitaLog4j = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_LIVELLO_SEVERITA_LOG4J);
				registrazioneTracce = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_TRACCE);
				
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)
					||
					ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)) {
				
				dbStato = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO);
				dbStatoReqIn = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_REQ_IN);
				dbStatoReqOut = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_REQ_OUT);
				dbStatoResOut = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_RES_OUT);
				dbStatoResOutComplete = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_RES_OUT_COMPLETE);
				String dbFiltroEsitiParam = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_FILTRA_ESITI);
				dbFiltroEsiti = ServletUtils.isCheckBoxEnabled(dbFiltroEsitiParam);
				
				fsStato = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO);
				fsStatoReqIn = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_REQ_IN);
				fsStatoReqOut = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_REQ_OUT);
				fsStatoResOut = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_RES_OUT);
				fsStatoResOutComplete = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_RES_OUT_COMPLETE);
				String fsFiltroEsitiParam = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_FILTRA_ESITI);
				fsFiltroEsiti = ServletUtils.isCheckBoxEnabled(fsFiltroEsitiParam);
				
				if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)) {
					oldConfigurazioneTracciamento = oldConfigurazione.getTracciamento().getPortaDelegata();
				}
				else {
					oldConfigurazioneTracciamento = oldConfigurazione.getTracciamento().getPortaApplicativa();
				}
				nuovaConfigurazioneEsiti = confHelper.readConfigurazioneRegistrazioneEsitiFromHttpParameters(oldConfigurazioneTracciamento!=null ? oldConfigurazioneTracciamento.getEsiti() : null, first);
				
				tracciamentoEsitiSelezionePersonalizzataOk = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_ESITI_OK);
				tracciamentoEsitiSelezionePersonalizzataFault = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_ESITI_FAULT);
				tracciamentoEsitiSelezionePersonalizzataFallite = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_ESITI_FALLITE);
				tracciamentoEsitiSelezionePersonalizzataScartate = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_ESITI_SCARTATE);
				tracciamentoEsitiSelezionePersonalizzataRateLimiting = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_ESITI_RATE_LIMITING);
				tracciamentoEsitiSelezionePersonalizzataMax = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_ESITI_MAX_REQUEST);
				tracciamentoEsitiSelezionePersonalizzataCors = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_ESITI_CORS);
				
				tracciamentoEsitiSelezionePersonalizzataAll = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_ESITI_ALL);
				selectAll = ServletUtils.isCheckBoxEnabled(tracciamentoEsitiSelezionePersonalizzataAll);
				
				transazioniTempiElaborazione = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_TRANSAZIONE_TEMPI);
				transazioniToken = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_REGISTRAZIONE_TRANSAZIONE_TOKEN);
				
				fileTraceStato = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_FILETRACE_STATO);
				fileTraceConfigFile = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_FILETRACE_CONFIGURAZIONE);
				fileTraceClient = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_FILETRACE_CLIENT);
				fileTraceClientHdr = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_FILETRACE_CLIENT_HEADER);
				fileTraceClientBody = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_FILETRACE_CLIENT_PAYLOAD);
				fileTraceServer = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_FILETRACE_SERVER);
				fileTraceServerHdr = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_FILETRACE_SERVER_HEADER);
				fileTraceServerBody = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_FILETRACE_SERVER_PAYLOAD);
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
				
				dumpApplicativo = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_DUMP_APPLICATIVO);
				dumpPD = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_DUMP_CONNETTORE_PD);
				dumpPA = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_DUMP_CONNETTORE_PA);
			}
			
					
			
			
			// setto la barra del titolo
			List<Parameter> lstParam = new ArrayList<>();
			Parameter pMenu = null;
			String servlet = null;
			if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)
						||
						ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)) {
				pMenu = new Parameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE, ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO);
				servlet = ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_TRACCIAMENTO_TRANSAZIONI;
			}
			if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
				lstParam.add(new Parameter(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_REGISTRAZIONE_MESSAGGI, null));
			}
			else {
				if(pMenu!=null) {
					lstParam.add(new Parameter(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_TRACCIAMENTO, servlet, pMenu));
				}
				else {
					lstParam.add(new Parameter(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_TRACCIAMENTO, null));
				}
			}
			
			if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)){
				lstParam.add(new Parameter(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_TRACCIAMENTO_CONFIGURAZIONE_EROGAZIONI, null));
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)){
				lstParam.add(new Parameter(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_TRACCIAMENTO_CONFIGURAZIONE_FRUIZIONI, null));
			}
			
			
			// edit in progress
			if (confHelper.isEditModeInProgress()) {
				ServletUtils.setPageDataTitle(pd, lstParam);
				
				if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO.equals(tipoConfigurazione)) {
					if(severita == null) {
						if(oldConfigurazione.getMessaggiDiagnostici().getSeverita()!=null)
							severita = oldConfigurazione.getMessaggiDiagnostici().getSeverita().toString();
						if(oldConfigurazione.getMessaggiDiagnostici().getSeveritaLog4j()!=null)
							severitaLog4j = oldConfigurazione.getMessaggiDiagnostici().getSeveritaLog4j().toString();
						if(oldConfigurazione.getTracciamento().getStato()!=null)
							registrazioneTracce = oldConfigurazione.getTracciamento().getStato().toString();
					}
				}
				else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)
						||
						ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)) {
					
					boolean initDB = false;
					boolean initFileTrace = false;
					if(first && oldConfigurazioneTracciamento!=null) {
													
						if(oldConfigurazioneTracciamento.getDatabase()!=null) {
							dbStato = (oldConfigurazioneTracciamento.getDatabase().getStato()!=null) ? oldConfigurazioneTracciamento.getDatabase().getStato().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO;
							dbStatoReqIn = (oldConfigurazioneTracciamento.getDatabase().getRequestIn()!=null) ? oldConfigurazioneTracciamento.getDatabase().getRequestIn().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_REQ_IN;
							dbStatoReqOut = (oldConfigurazioneTracciamento.getDatabase().getRequestOut()!=null) ? oldConfigurazioneTracciamento.getDatabase().getRequestOut().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_REQ_OUT;
							dbStatoResOut = (oldConfigurazioneTracciamento.getDatabase().getResponseOut()!=null) ? oldConfigurazioneTracciamento.getDatabase().getResponseOut().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_RES_OUT;
							dbStatoResOutComplete = (oldConfigurazioneTracciamento.getDatabase().getResponseOutComplete()!=null) ? oldConfigurazioneTracciamento.getDatabase().getResponseOutComplete().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_RES_OUT_COMPLETE;
							dbFiltroEsiti = (oldConfigurazioneTracciamento.getDatabase().getFiltroEsiti()!=null) ? StatoFunzionalita.ABILITATO.equals(oldConfigurazioneTracciamento.getDatabase().getFiltroEsiti()) : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_FILTRA_ESITI;
							initDB=true;
						}
						
						if(oldConfigurazioneTracciamento.getFiletrace()!=null) {
							fsStato = (oldConfigurazioneTracciamento.getFiletrace().getStato()!=null) ? oldConfigurazioneTracciamento.getFiletrace().getStato().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO;
							fsStatoReqIn = (oldConfigurazioneTracciamento.getFiletrace().getRequestIn()!=null) ? oldConfigurazioneTracciamento.getFiletrace().getRequestIn().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_REQ_IN;
							fsStatoReqOut = (oldConfigurazioneTracciamento.getFiletrace().getRequestOut()!=null) ? oldConfigurazioneTracciamento.getFiletrace().getRequestOut().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_REQ_OUT;
							fsStatoResOut = (oldConfigurazioneTracciamento.getFiletrace().getResponseOut()!=null) ? oldConfigurazioneTracciamento.getFiletrace().getResponseOut().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_RES_OUT;
							fsStatoResOutComplete = (oldConfigurazioneTracciamento.getFiletrace().getResponseOutComplete()!=null) ? oldConfigurazioneTracciamento.getFiletrace().getResponseOutComplete().getValue() : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_RES_OUT_COMPLETE;
							fsFiltroEsiti = (oldConfigurazioneTracciamento.getFiletrace().getFiltroEsiti()!=null) ? StatoFunzionalita.ABILITATO.equals(oldConfigurazioneTracciamento.getFiletrace().getFiltroEsiti()) : 
								ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_FILTRA_ESITI;
							initFileTrace=true;
						}
						
					}
					if(first && !initDB) {
						dbStato = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO;
						dbStatoReqIn = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_REQ_IN;
						dbStatoReqOut = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_REQ_OUT;
						dbStatoResOut = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_RES_OUT;
						dbStatoResOutComplete = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_STATO_RES_OUT_COMPLETE;
						dbFiltroEsiti = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_DATABASE_FILTRA_ESITI;
					}
					if(first && !initFileTrace) {
						fsStato = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO;
						fsStatoReqIn = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_REQ_IN;
						fsStatoReqOut = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_REQ_OUT;
						fsStatoResOut = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_RES_OUT;
						fsStatoResOutComplete = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_STATO_RES_OUT_COMPLETE;
						fsFiltroEsiti = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_AVANZATA_TRACCIAMENTO_FILETRACE_FILTRA_ESITI;
					}
					
					if(tracciamentoEsitiSelezionePersonalizzataOk==null) {
						
						List<String> attivi = new ArrayList<>();
						if(nuovaConfigurazioneEsiti!=null){
							String [] tmp = nuovaConfigurazioneEsiti.split(",");
							if(tmp!=null){
								for (int i = 0; i < tmp.length; i++) {
									attivi.add(tmp[i].trim());
								}
							}
						}
						
						EsitiProperties esiti = EsitiConfigUtils.getEsitiPropertiesForConfiguration(ControlStationCore.getLog());
						
						boolean isOkTotale = false;
						List<Integer> listOk = confHelper.getListaEsitiOkSenzaCors(esiti);
						if(confHelper.isCompleteEnabled(attivi, listOk)) {
							tracciamentoEsitiSelezionePersonalizzataOk = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
							isOkTotale = true;
						}
						else if(confHelper.isCompleteDisabled(attivi, listOk)) {
							tracciamentoEsitiSelezionePersonalizzataOk = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						else {
							tracciamentoEsitiSelezionePersonalizzataOk = ConfigurazioneCostanti.TRACCIAMENTO_ESITI_PERSONALIZZATO;
						}
						
						boolean isFaultTotale = false;
						List<Integer> listFault = esiti.getEsitiCodeFaultApplicativo();
						if(confHelper.isCompleteEnabled(attivi, listFault)) {
							tracciamentoEsitiSelezionePersonalizzataFault = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
							isFaultTotale = true;
						}
						else if(confHelper.isCompleteDisabled(attivi, listFault)) {
							tracciamentoEsitiSelezionePersonalizzataFault = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						else {
							tracciamentoEsitiSelezionePersonalizzataFault = ConfigurazioneCostanti.TRACCIAMENTO_ESITI_PERSONALIZZATO;
						}
						
						boolean isFalliteSenzaMaxThreadsScartateTotale = false;
						List<Integer> listFalliteSenzaMaxThreadsScartate = confHelper.getListaEsitiFalliteSenza_RateLimiting_MaxThreads_Scartate(esiti);
						if(confHelper.isCompleteEnabled(attivi, listFalliteSenzaMaxThreadsScartate)) {
							tracciamentoEsitiSelezionePersonalizzataFallite = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
							isFalliteSenzaMaxThreadsScartateTotale = true;
						}
						else if(confHelper.isCompleteDisabled(attivi, listFalliteSenzaMaxThreadsScartate)) {
							tracciamentoEsitiSelezionePersonalizzataFallite = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						else {
							tracciamentoEsitiSelezionePersonalizzataFallite = ConfigurazioneCostanti.TRACCIAMENTO_ESITI_PERSONALIZZATO;
						}
						
						boolean isScartateTotale = false;
						List<Integer> listScartate = esiti.getEsitiCodeRichiestaScartate();
						if(confHelper.isCompleteEnabled(attivi, listScartate)) {
							tracciamentoEsitiSelezionePersonalizzataScartate = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
							isScartateTotale = true;
						}
						else if(confHelper.isCompleteDisabled(attivi, listScartate)) {
							tracciamentoEsitiSelezionePersonalizzataScartate = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						else {
							tracciamentoEsitiSelezionePersonalizzataScartate = ConfigurazioneCostanti.TRACCIAMENTO_ESITI_PERSONALIZZATO;
						}
						
						boolean isRateLimiting = false;
						if(attivi.contains((esiti.convertoToCode(EsitoTransazioneName.CONTROLLO_TRAFFICO_POLICY_VIOLATA)+""))) {
							tracciamentoEsitiSelezionePersonalizzataRateLimiting = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
							isRateLimiting = true;
						}	
						else {
							tracciamentoEsitiSelezionePersonalizzataRateLimiting = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						
						boolean isMaxThreads = false;
						if(attivi.contains((esiti.convertoToCode(EsitoTransazioneName.CONTROLLO_TRAFFICO_MAX_THREADS)+""))) {
							tracciamentoEsitiSelezionePersonalizzataMax = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
							isMaxThreads = true;
						}	
						else {
							tracciamentoEsitiSelezionePersonalizzataMax = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						
						boolean isCorsTotale = false;
						List<Integer> listCors = confHelper.getListaEsitiCors(esiti);
						if(confHelper.isCompleteEnabled(attivi, listCors)) {
							tracciamentoEsitiSelezionePersonalizzataCors = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
							isCorsTotale = true;
						}
						else if(confHelper.isCompleteDisabled(attivi, listCors)) {
							tracciamentoEsitiSelezionePersonalizzataCors = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						else {
							tracciamentoEsitiSelezionePersonalizzataCors = ConfigurazioneCostanti.TRACCIAMENTO_ESITI_PERSONALIZZATO;
						}
						
						selectAll = isOkTotale && isFaultTotale && 
								isFalliteSenzaMaxThreadsScartateTotale && isScartateTotale && 
								isRateLimiting && isMaxThreads && isCorsTotale;
					}
					
					if(first &&
						oldConfigurazioneTracciamento!=null && oldConfigurazioneTracciamento.getTransazioni()!=null) {
						if(oldConfigurazioneTracciamento.getTransazioni().getTempiElaborazione()!=null) {
							transazioniTempiElaborazione = oldConfigurazioneTracciamento.getTransazioni().getTempiElaborazione().toString();
						}
						if(oldConfigurazioneTracciamento.getTransazioni().getToken()!=null) {
							transazioniToken = oldConfigurazioneTracciamento.getTransazioni().getToken().toString();
						}
					}
					
					if( ConfigurazioneCostanti.PARAMETRO_FILETRACE_STATO.equals(confHelper.getPostBackElementName())) {
						if(fileTraceClient==null || StringUtils.isEmpty(fileTraceClient)) {
							fileTraceClient = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						if(fileTraceClientHdr==null || StringUtils.isEmpty(fileTraceClientHdr)) {
							fileTraceClientHdr = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
						}
						if(fileTraceClientBody==null || StringUtils.isEmpty(fileTraceClientBody)) {
							fileTraceClientBody = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
						}
						if(fileTraceServer==null || StringUtils.isEmpty(fileTraceServer)) {
							fileTraceServer = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
						}
						if(fileTraceServerHdr==null || StringUtils.isEmpty(fileTraceServerHdr)) {
							fileTraceServerHdr = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
						}
						if(fileTraceServerBody==null || StringUtils.isEmpty(fileTraceServerBody)) {
							fileTraceServerBody = ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO;
						}
					}
					else if( first &&
							oldConfigurazioneTracciamento!=null) {
						if(oldConfigurazioneTracciamento.getFiletraceConfig()!=null) {
							fileTraceStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO;
							fileTraceConfigFile = oldConfigurazioneTracciamento.getFiletraceConfig().getConfig();
							if(oldConfigurazioneTracciamento.getFiletraceConfig().getDumpIn()!=null) {
								fileTraceClient = StatoFunzionalita.ABILITATO.equals(oldConfigurazioneTracciamento.getFiletraceConfig().getDumpIn().getStato()) ? 
										ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO : ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
								fileTraceClientHdr = StatoFunzionalita.ABILITATO.equals(oldConfigurazioneTracciamento.getFiletraceConfig().getDumpIn().getHeader()) ? 
										ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO : ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
								fileTraceClientBody = StatoFunzionalita.ABILITATO.equals(oldConfigurazioneTracciamento.getFiletraceConfig().getDumpIn().getPayload()) ? 
										ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO : ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
							}
							else {
								fileTraceClient = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
							}
							if(oldConfigurazioneTracciamento.getFiletraceConfig().getDumpOut()!=null) {
								fileTraceServer = StatoFunzionalita.ABILITATO.equals(oldConfigurazioneTracciamento.getFiletraceConfig().getDumpOut().getStato()) ? 
										ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO : ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
								fileTraceServerHdr = StatoFunzionalita.ABILITATO.equals(oldConfigurazioneTracciamento.getFiletraceConfig().getDumpOut().getHeader()) ? 
										ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO : ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
								fileTraceServerBody = StatoFunzionalita.ABILITATO.equals(oldConfigurazioneTracciamento.getFiletraceConfig().getDumpOut().getPayload()) ? 
										ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO : ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
							}
							else {
								fileTraceServer = ConfigurazioneCostanti.DEFAULT_VALUE_DISABILITATO;
							}
						}
						else {
							fileTraceStato = CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_DEFAULT;
						}
					}
				}
				else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
					if(first &&
						oldConfigurazione.getDump().getStato()!=null) {
						dumpApplicativo = oldConfigurazione.getDump().getStato().toString();
					}
					if(first) {
						if(oldConfigurazione.getDump().getDumpBinarioPortaDelegata()!=null)
							dumpPD = oldConfigurazione.getDump().getDumpBinarioPortaDelegata().toString();
						if(oldConfigurazione.getDump().getDumpBinarioPortaApplicativa()!=null)
							dumpPA = oldConfigurazione.getDump().getDumpBinarioPortaApplicativa().toString();
					}
				}
				

				
				
				
				// preparo i campi
				List<DataElement> dati = new ArrayList<>();
				dati.add(ServletUtils.getDataElementForEditModeFinished());
				
				// Set First is false
				confHelper.addToDatiFirstTimeDisabled(dati,ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_FIRST_TIME);
				// Set Tipo Operazione
				confHelper.addToDatiHiddenParameter(dati, ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE, tipoConfigurazione);
				
				if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO.equals(tipoConfigurazione)) {
					
					confHelper.addConfigurazioneTracciamentoToDati(dati);
					
					confHelper.addMessaggiDiagnosticiToDati(severita, severitaLog4j, oldConfigurazione, dati, contaListe);

					confHelper.addTracciamentoToDati(registrazioneTracce, oldConfigurazione, dati, contaListe);
					
				}
				else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)
						||
						ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)) {
					
					confHelper.addToDatiConfigurazioneAvanzataTracciamento(dati, tipoOperazione,
							dbStato,
							dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
							dbFiltroEsiti,
							fsStato,
							fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
							fsFiltroEsiti,
							false);
					
					TracciamentoConfigurazione database = confCore.buildTracciamentoConfigurazioneDatabase(dbStato,
							dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
							dbFiltroEsiti);
					TracciamentoConfigurazione filetrace = confCore.buildTracciamentoConfigurazioneFiletrace(fsStato,
							fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
							fsFiltroEsiti);
					TracciamentoCompatibilitaFiltroEsiti tracciamentoCompatibilitaFiltroEsiti = new TracciamentoCompatibilitaFiltroEsiti(database, filetrace);
					
					confHelper.addToDatiRegistrazioneEsiti(dati, tipoOperazione, nuovaConfigurazioneEsiti, 
							selectAll,
							tracciamentoEsitiSelezionePersonalizzataOk, tracciamentoEsitiSelezionePersonalizzataFault, 
							tracciamentoEsitiSelezionePersonalizzataFallite, tracciamentoEsitiSelezionePersonalizzataScartate,  
							tracciamentoEsitiSelezionePersonalizzataRateLimiting, tracciamentoEsitiSelezionePersonalizzataMax, tracciamentoEsitiSelezionePersonalizzataCors,
							tracciamentoCompatibilitaFiltroEsiti); 
					
					confHelper.addToDatiRegistrazioneTransazione(dati, tipoOperazione, 
							transazioniTempiElaborazione, transazioniToken); 
					
					confHelper.addToDatiRegistrazioneConfigurazioneFileTrace(dati, 
							fileTraceStato, fileTraceConfigFile,
							fileTraceClient, fileTraceClientHdr, fileTraceClientBody,
							fileTraceServer, fileTraceServerHdr, fileTraceServerBody,
							tracciamentoCompatibilitaFiltroEsiti);
					
				}
				else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
					
					confHelper.addRegistrazioneMessaggiToDati(dumpApplicativo, dumpPD, dumpPA, oldConfigurazione, dati, contaListe);
				
				}
				
				pd.setDati(dati);

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

				return ServletUtils.getStrutsForwardEditModeInProgress(mapping,	ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_TRACCIAMENTO_TRANSAZIONI,	ForwardParams.OTHER(""));
			}
			
			// Controlli sui campi immessi
			boolean isOk = confHelper.checkConfigurazioneTracciamento(tipoOperazione, nuovaConfigurazioneEsiti, tipoConfigurazione);
			if (!isOk) {
				
				ServletUtils.setPageDataTitle(pd, lstParam);
				
				// preparo i campi
				List<DataElement> dati = new ArrayList<>();
				dati.add(ServletUtils.getDataElementForEditModeFinished());
				
				// Set First is false
				confHelper.addToDatiFirstTimeDisabled(dati,ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_FIRST_TIME);
				// Set Tipo Operazione
				confHelper.addToDatiHiddenParameter(dati, ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE, tipoConfigurazione);
				
				if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO.equals(tipoConfigurazione)) {
					
					confHelper.addConfigurazioneTracciamentoToDati(dati);
					
					confHelper.addMessaggiDiagnosticiToDati(severita, severitaLog4j, oldConfigurazione, dati, contaListe);

					confHelper.addTracciamentoToDati(registrazioneTracce, oldConfigurazione, dati, contaListe);
					
				}
				else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)
						||
						ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)) {
					
					confHelper.addToDatiConfigurazioneAvanzataTracciamento(dati, tipoOperazione,
							dbStato,
							dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
							dbFiltroEsiti,
							fsStato,
							fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
							fsFiltroEsiti,
							false);
					
					TracciamentoConfigurazione database = confCore.buildTracciamentoConfigurazioneDatabase(dbStato,
							dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
							dbFiltroEsiti);
					TracciamentoConfigurazione filetrace = confCore.buildTracciamentoConfigurazioneFiletrace(fsStato,
							fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
							fsFiltroEsiti);
					TracciamentoCompatibilitaFiltroEsiti tracciamentoCompatibilitaFiltroEsiti = new TracciamentoCompatibilitaFiltroEsiti(database, filetrace);
					
					confHelper.addToDatiRegistrazioneEsiti(dati, tipoOperazione, nuovaConfigurazioneEsiti, 
							selectAll,
							tracciamentoEsitiSelezionePersonalizzataOk, tracciamentoEsitiSelezionePersonalizzataFault, 
							tracciamentoEsitiSelezionePersonalizzataFallite, tracciamentoEsitiSelezionePersonalizzataScartate,  
							tracciamentoEsitiSelezionePersonalizzataRateLimiting, tracciamentoEsitiSelezionePersonalizzataMax, tracciamentoEsitiSelezionePersonalizzataCors,
							tracciamentoCompatibilitaFiltroEsiti); 
					
					confHelper.addToDatiRegistrazioneTransazione(dati, tipoOperazione, 
							transazioniTempiElaborazione, transazioniToken); 
					
					confHelper.addToDatiRegistrazioneConfigurazioneFileTrace(dati, 
							fileTraceStato, fileTraceConfigFile,
							fileTraceClient, fileTraceClientHdr, fileTraceClientBody,
							fileTraceServer, fileTraceServerHdr, fileTraceServerBody,
							tracciamentoCompatibilitaFiltroEsiti);
							
				}
				else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
					
					confHelper.addRegistrazioneMessaggiToDati(dumpApplicativo, dumpPD, dumpPA, oldConfigurazione, dati, contaListe); 
				
				}
				
				
				pd.setDati(dati);

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

				return ServletUtils.getStrutsForwardEditModeCheckError(mapping, ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_TRACCIAMENTO_TRANSAZIONI,	ForwardParams.OTHER(""));
			}
			
			Configurazione newConfigurazione = confCore.getConfigurazioneGenerale();
			
			if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO.equals(tipoConfigurazione)) {
				
				if (newConfigurazione.getMessaggiDiagnostici() != null) {
					newConfigurazione.getMessaggiDiagnostici().setSeverita(Severita.toEnumConstant(severita));
					newConfigurazione.getMessaggiDiagnostici().setSeveritaLog4j(Severita.toEnumConstant(severitaLog4j));
				} else {
					MessaggiDiagnostici md = new MessaggiDiagnostici();
					md.setSeverita(Severita.toEnumConstant(severita));
					md.setSeveritaLog4j(Severita.toEnumConstant(severitaLog4j));
					newConfigurazione.setMessaggiDiagnostici(md);
				}
				
				if (newConfigurazione.getTracciamento() != null) {
					newConfigurazione.getTracciamento().setStato(StatoFunzionalita.toEnumConstant(registrazioneTracce));
				} else {
					Tracciamento t = new Tracciamento();
					t.setStato(StatoFunzionalita.toEnumConstant(registrazioneTracce));
					newConfigurazione.setTracciamento(t);
				}
				
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)
					||
					ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)) {
				
				ConfigurazioneTracciamentoPorta porta = null;
				if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)) {
					porta = newConfigurazione.getTracciamento().getPortaDelegata();
				}
				else {
					porta = newConfigurazione.getTracciamento().getPortaApplicativa();
				}
				if(porta==null) {
					porta = new ConfigurazioneTracciamentoPorta();
					if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)) {
						newConfigurazione.getTracciamento().setPortaDelegata(porta);
					}
					else {
						newConfigurazione.getTracciamento().setPortaApplicativa(porta);
					}
				}
				
				TracciamentoConfigurazione database = confCore.buildTracciamentoConfigurazioneDatabase(dbStato,
						dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
						dbFiltroEsiti);
				porta.setDatabase(database);
				
				TracciamentoConfigurazione filetrace = confCore.buildTracciamentoConfigurazioneFiletrace(fsStato,
						fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
						fsFiltroEsiti);
				porta.setFiletrace(filetrace);
				
				if(StringUtils.isEmpty(nuovaConfigurazioneEsiti)) {
					porta.setEsiti(EsitiConfigUtils.TUTTI_ESITI_DISABILITATI+"");
				}
				else {
					porta.setEsiti(nuovaConfigurazioneEsiti);
				}
				
				if(porta.getTransazioni()==null) {
					porta.setTransazioni( new Transazioni() );
				}
				porta.getTransazioni().setTempiElaborazione(StatoFunzionalita.toEnumConstant(transazioniTempiElaborazione));
				porta.getTransazioni().setToken(StatoFunzionalita.toEnumConstant(transazioniToken));
				
				if(CostantiControlStation.VALUE_PARAMETRO_DUMP_STATO_RIDEFINITO.equals(fileTraceStato)) {
					porta.setFiletraceConfig(new TracciamentoConfigurazioneFiletrace());
					porta.getFiletraceConfig().setConfig(fileTraceConfigFile);
					
					porta.getFiletraceConfig().setDumpIn(new TracciamentoConfigurazioneFiletraceConnector());			
					porta.getFiletraceConfig().getDumpIn().setStato(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceClient) ?
							StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
					porta.getFiletraceConfig().getDumpIn().setHeader(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceClientHdr) ?
							StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
					porta.getFiletraceConfig().getDumpIn().setPayload(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceClientBody) ?
							StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
					
					porta.getFiletraceConfig().setDumpOut(new TracciamentoConfigurazioneFiletraceConnector());			
					porta.getFiletraceConfig().getDumpOut().setStato(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceServer) ?
							StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
					porta.getFiletraceConfig().getDumpOut().setHeader(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceServerHdr) ?
							StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
					porta.getFiletraceConfig().getDumpOut().setPayload(ConfigurazioneCostanti.DEFAULT_VALUE_ABILITATO.equals(fileTraceServerBody) ?
							StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
				}
				else {
					porta.setFiletraceConfig(null);
				}
				
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
				
				if (newConfigurazione.getDump() != null) {
					newConfigurazione.getDump().setStato(StatoFunzionalita.toEnumConstant(dumpApplicativo));
					newConfigurazione.getDump().setDumpBinarioPortaDelegata(StatoFunzionalita.toEnumConstant(dumpPD));
					newConfigurazione.getDump().setDumpBinarioPortaApplicativa(StatoFunzionalita.toEnumConstant(dumpPA));
				} else {
					Dump d = new Dump();
					d.setStato(StatoFunzionalita.toEnumConstant(dumpApplicativo));
					d.setDumpBinarioPortaDelegata(StatoFunzionalita.toEnumConstant(dumpPD));
					d.setDumpBinarioPortaApplicativa(StatoFunzionalita.toEnumConstant(dumpPA));
					newConfigurazione.setDump(d);
				}
				
				if(StatoFunzionalita.DISABILITATO.equals(newConfigurazione.getDump().getStato())) {
					newConfigurazione.getDump().setConfigurazionePortaApplicativa(null);
					newConfigurazione.getDump().setConfigurazionePortaDelegata(null);
				}
				
			}
			
			
			confCore.performUpdateOperation(userLogin, confHelper.smista(), newConfigurazione);

			// Preparo la lista
			if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
				pd.setMessage(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_DUMP_CONFIGURAZIONE_CON_SUCCESSO, Costanti.MESSAGE_TYPE_INFO);
			}
			else {
				pd.setMessage(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_TRACCIAMENTO_ESITI_CON_SUCCESSO, Costanti.MESSAGE_TYPE_INFO);
			}
			
			ServletUtils.setPageDataTitle(pd, lstParam);
			
			// preparo i campi
			List<DataElement> dati = new ArrayList<>();
			
			// ricarico la configurazione
			newConfigurazione = confCore.getConfigurazioneGenerale();
			
			if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO.equals(tipoConfigurazione)) {
				
				if(newConfigurazione.getMessaggiDiagnostici().getSeverita()!=null)
					severita = newConfigurazione.getMessaggiDiagnostici().getSeverita().toString();
				if(newConfigurazione.getMessaggiDiagnostici().getSeveritaLog4j()!=null)
					severitaLog4j = newConfigurazione.getMessaggiDiagnostici().getSeveritaLog4j().toString();
				if(newConfigurazione.getTracciamento().getStato()!=null)
					registrazioneTracce = newConfigurazione.getTracciamento().getStato().toString();
				
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)
					||
					ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)) {
				
				if(newConfigurazione.getTransazioni()!=null) {
					if(newConfigurazione.getTransazioni().getTempiElaborazione()!=null) {
						transazioniTempiElaborazione = newConfigurazione.getTransazioni().getTempiElaborazione().toString();
					}
					if(newConfigurazione.getTransazioni().getToken()!=null) {
						transazioniToken = newConfigurazione.getTransazioni().getToken().toString();
					}
				}
				
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
				
				if(newConfigurazione.getDump().getStato()!=null)
					dumpApplicativo = newConfigurazione.getDump().getStato().toString();
				if(newConfigurazione.getDump().getDumpBinarioPortaDelegata()!=null)
					dumpPD = newConfigurazione.getDump().getDumpBinarioPortaDelegata().toString();
				if(newConfigurazione.getDump().getDumpBinarioPortaApplicativa()!=null)
					dumpPA = newConfigurazione.getDump().getDumpBinarioPortaApplicativa().toString();
				
			}

			
			// Set First is false
			confHelper.addToDatiFirstTimeDisabled(dati,ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_FIRST_TIME);
			// Set Tipo Operazione
			confHelper.addToDatiHiddenParameter(dati, ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE, tipoConfigurazione);
			
			if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO.equals(tipoConfigurazione)) {
				
				confHelper.addConfigurazioneTracciamentoToDati(dati);
				
				confHelper.addMessaggiDiagnosticiToDati(severita, severitaLog4j, newConfigurazione, dati, contaListe);

				confHelper.addTracciamentoToDati(registrazioneTracce, newConfigurazione, dati, contaListe);
				
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PD.equals(tipoConfigurazione)
					||
					ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_TRACCIAMENTO_PA.equals(tipoConfigurazione)) {
			
				confHelper.addToDatiConfigurazioneAvanzataTracciamento(dati, tipoOperazione,
						dbStato,
						dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
						dbFiltroEsiti,
						fsStato,
						fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
						fsFiltroEsiti,
						false);
				
				TracciamentoConfigurazione database = confCore.buildTracciamentoConfigurazioneDatabase(dbStato,
						dbStatoReqIn, dbStatoReqOut, dbStatoResOut, dbStatoResOutComplete,
						dbFiltroEsiti);
				TracciamentoConfigurazione filetrace = confCore.buildTracciamentoConfigurazioneFiletrace(fsStato,
						fsStatoReqIn, fsStatoReqOut, fsStatoResOut, fsStatoResOutComplete,
						fsFiltroEsiti);
				TracciamentoCompatibilitaFiltroEsiti tracciamentoCompatibilitaFiltroEsiti = new TracciamentoCompatibilitaFiltroEsiti(database, filetrace);
				
				confHelper.addToDatiRegistrazioneEsiti(dati, tipoOperazione, newConfigurazione.getTracciamento().getEsiti(), 
						selectAll,
						tracciamentoEsitiSelezionePersonalizzataOk, tracciamentoEsitiSelezionePersonalizzataFault, 
						tracciamentoEsitiSelezionePersonalizzataFallite, tracciamentoEsitiSelezionePersonalizzataScartate,  
						tracciamentoEsitiSelezionePersonalizzataRateLimiting, tracciamentoEsitiSelezionePersonalizzataMax, tracciamentoEsitiSelezionePersonalizzataCors,
						tracciamentoCompatibilitaFiltroEsiti); 
				
				confHelper.addToDatiRegistrazioneTransazione(dati, tipoOperazione, 
						transazioniTempiElaborazione, transazioniToken); 
				
				confHelper.addToDatiRegistrazioneConfigurazioneFileTrace(dati, 
						fileTraceStato, fileTraceConfigFile,
						fileTraceClient, fileTraceClientHdr, fileTraceClientBody,
						fileTraceServer, fileTraceServerHdr, fileTraceServerBody,
						tracciamentoCompatibilitaFiltroEsiti);
				
			}
			else if(ConfigurazioneCostanti.VALORE_PARAMETRO_CONFIGURAZIONE_TIPO_OPERAZIONE_REGISTRAZIONE_MESSAGGI.equals(tipoConfigurazione)) {
			
				confHelper.addRegistrazioneMessaggiToDati(dumpApplicativo, dumpPD, dumpPA, newConfigurazione, dati, contaListe);
				
			}
			
			
			
			pd.setDati(dati);
			pd.disableEditMode();

			ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
			
			return ServletUtils.getStrutsForwardEditModeFinished(mapping, ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_TRACCIAMENTO_TRANSAZIONI, ForwardParams.OTHER(""));
		} catch (Exception e) {
			return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping, 
					ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_TRACCIAMENTO_TRANSAZIONI, ForwardParams.OTHER(""));
		}
	}
}