AccordiServizioParteComuneHelper.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.apc;

import java.net.URI;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

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

import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.openspcoop2.core.commons.Filtri;
import org.openspcoop2.core.commons.ISearch;
import org.openspcoop2.core.commons.Liste;
import org.openspcoop2.core.commons.SearchUtils;
import org.openspcoop2.core.config.CanaleConfigurazione;
import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
import org.openspcoop2.core.constants.TipiConnettore;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.AccordoCooperazione;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Azione;
import org.openspcoop2.core.registry.Connettore;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.IdSoggetto;
import org.openspcoop2.core.registry.Message;
import org.openspcoop2.core.registry.MessagePart;
import org.openspcoop2.core.registry.Operation;
import org.openspcoop2.core.registry.PortType;
import org.openspcoop2.core.registry.Resource;
import org.openspcoop2.core.registry.ResourceParameter;
import org.openspcoop2.core.registry.ResourceRepresentation;
import org.openspcoop2.core.registry.ResourceRequest;
import org.openspcoop2.core.registry.ResourceResponse;
import org.openspcoop2.core.registry.Soggetto;
import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneServizioCompostoSintetico;
import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
import org.openspcoop2.core.registry.beans.OperationSintetica;
import org.openspcoop2.core.registry.beans.PortTypeSintetico;
import org.openspcoop2.core.registry.beans.ResourceSintetica;
import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
import org.openspcoop2.core.registry.constants.FormatoSpecifica;
import org.openspcoop2.core.registry.constants.HttpMethod;
import org.openspcoop2.core.registry.constants.ParameterType;
import org.openspcoop2.core.registry.constants.ProfiloCollaborazione;
import org.openspcoop2.core.registry.constants.RepresentationType;
import org.openspcoop2.core.registry.constants.RepresentationXmlType;
import org.openspcoop2.core.registry.constants.StatiAccordo;
import org.openspcoop2.core.registry.constants.StatoFunzionalita;
import org.openspcoop2.core.registry.constants.TipologiaServizio;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.message.constants.MessageType;
import org.openspcoop2.message.constants.ServiceBinding;
import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
import org.openspcoop2.protocol.engine.utils.NamingUtils;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.constants.ArchiveType;
import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
import org.openspcoop2.protocol.sdk.validator.ValidazioneResult;
import org.openspcoop2.utils.rest.ValidatorException;
import org.openspcoop2.utils.rest.api.ApiParameterSchema;
import org.openspcoop2.utils.rest.api.ApiResponse;
import org.openspcoop2.utils.rest.api.ApiUtilities;
import org.openspcoop2.utils.transport.http.HttpRequestMethod;
import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
import org.openspcoop2.web.ctrlstat.core.ControlStationCoreException;
import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
import org.openspcoop2.web.ctrlstat.costanti.InUsoType;
import org.openspcoop2.web.ctrlstat.plugins.ExtendedConnettore;
import org.openspcoop2.web.ctrlstat.servlet.apc.api.ApiCostanti;
import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCostanti;
import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviCostanti;
import org.openspcoop2.web.ctrlstat.servlet.archivi.ExporterUtils;
import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriHelper;
import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;
import org.openspcoop2.web.lib.mvc.AreaBottoni;
import org.openspcoop2.web.lib.mvc.BinaryParameter;
import org.openspcoop2.web.lib.mvc.Costanti;
import org.openspcoop2.web.lib.mvc.DataElement;
import org.openspcoop2.web.lib.mvc.DataElementType;
import org.openspcoop2.web.lib.mvc.Dialog;
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;

/**
 * AccordiServizioParteComuneHelper
 *
 * @author Poli Andrea (apoli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */
public class AccordiServizioParteComuneHelper extends ConnettoriHelper {

	public AccordiServizioParteComuneHelper(HttpServletRequest request, PageData pd, 
			HttpSession session) throws Exception {
		super(request, pd,  session);
	}
	public AccordiServizioParteComuneHelper(ControlStationCore core, HttpServletRequest request, PageData pd, 
			HttpSession session) throws Exception {
		super(core, request, pd,  session);
	}

	public boolean asWithAllegatiXsd(AccordoServizioParteComune as) {
		boolean asWithAllegati = false;
		
		if(as.getByteWsdlDefinitorio()!=null) {
			asWithAllegati = true;
		}
		
		if(as.sizeAllegatoList()>0) {
			for (Documento doc : as.getAllegatoList()) {
				if("xsd".equalsIgnoreCase(doc.getTipo()) || "xml".equalsIgnoreCase(doc.getTipo())) {
					asWithAllegati = true;
					break;
				}
			}
		}
		
		if(as.sizeSpecificaSemiformaleList()>0) {
			for (Documento doc : as.getSpecificaSemiformaleList()) {
				if("xsd".equalsIgnoreCase(doc.getTipo()) || "xml".equalsIgnoreCase(doc.getTipo())) {
					asWithAllegati = true;
					break;
				}
			}
		}
		
		return asWithAllegati;
	}


	/**
	 * Utilita converte i valori CostantiRegistroServizi in una Stringa
	 * presentabile all'utente
	 * 
	 * @param toConvert
	 * @return valore convertito
	 */
	public static String convertProfiloCollaborazioneDB2View(String toConvert) {
		String profilo = "";
		if ((toConvert == null) || toConvert.equals("")) {
			profilo = "";
		} else if (toConvert.equals(CostantiRegistroServizi.ONEWAY.getValue())) {
			profilo = "oneway";
		} else if (toConvert.equals(CostantiRegistroServizi.SINCRONO.getValue())) {
			profilo = "sincrono";
		} else if (toConvert.equals(CostantiRegistroServizi.ASINCRONO_SIMMETRICO.getValue())) {
			profilo = "asincronoSimmetrico";
		} else if (toConvert.equals(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.getValue())) {
			profilo = "asincronoAsimmetrico";
		}

		return profilo;
	}
	public static String convertProfiloCollaborazioneDB2View(ProfiloCollaborazione toConvert) {
		String profilo = "";
		if ((toConvert == null) || toConvert.equals("")) {
			profilo = "";
		} else if (toConvert.equals(CostantiRegistroServizi.ONEWAY)) {
			profilo = "oneway";
		} else if (toConvert.equals(CostantiRegistroServizi.SINCRONO)) {
			profilo = "sincrono";
		} else if (toConvert.equals(CostantiRegistroServizi.ASINCRONO_SIMMETRICO)) {
			profilo = "asincronoSimmetrico";
		} else if (toConvert.equals(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO)) {
			profilo = "asincronoAsimmetrico";
		}

		return profilo;
	}


	/**
	 * Utilita di conversione della stringa passata dalla vista, a valori
	 * CostantiRegistroServizi come da specifica
	 * 
	 * @param toConvert
	 * @return valore convertito
	 */
	public static String convertProfiloCollaborazioneView2DB(String toConvert) {
		String profilo = "";
		if ((toConvert == null) || toConvert.equals("")) {
			profilo = "";
		} else if (toConvert.equals("oneway")) {
			profilo = CostantiRegistroServizi.ONEWAY.toString();
		} else if (toConvert.equals("sincrono")) {
			profilo = CostantiRegistroServizi.SINCRONO.toString();
		} else if (toConvert.equals("asincronoSimmetrico")) {
			profilo = CostantiRegistroServizi.ASINCRONO_SIMMETRICO.toString();
		} else if (toConvert.equals("asincronoAsimmetrico")) {
			profilo = CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.toString();
		}

		return profilo;
	}

	/**
	 * Utilita di conversione della stringa passata dalla vista, a valori
	 * CostantiRegistroServizi come da specifica
	 * 
	 * @param toConvert
	 * @return valore convertito
	 */
	public static String convertAbilitatoDisabilitatoView2DB(String toConvert) {
		String value = null;
		if ((toConvert == null) || ("".equals(toConvert))) {
			value = null;
		} else {
			if (toConvert.equals("yes")) {
				value = CostantiRegistroServizi.ABILITATO.toString();
			} else {
				value = CostantiRegistroServizi.DISABILITATO.toString();
			}
		}

		return value;
	}

	/**
	 * Utilita di conversione della stringa passata dalla vista, a valori
	 * CostantiRegistroServizi come da specifica
	 * 
	 * @param toConvert
	 * @return valore convertito
	 */
	public static String convertAbilitatoDisabilitatoDB2View(String toConvert) {
		if (CostantiRegistroServizi.ABILITATO.equals(toConvert))
			return "yes";
		else
			return "no";
	}
	public static String convertAbilitatoDisabilitatoDB2View(StatoFunzionalita toConvert) {
		if (CostantiRegistroServizi.ABILITATO.equals(toConvert))
			return "yes";
		else
			return "no";
	}





	public void prepareAccordiErogatoriList(AccordoServizioParteComune as, List<org.openspcoop2.core.registry.Soggetto> lista, ISearch ricerca,String tipoAccordo)
			throws Exception {
		try {

			String id = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);

			String uri = null;
			uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as); 

			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_EROGATORI,
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO, tipoAccordo),
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri));


			Boolean contaListe = ServletUtils.getContaListeFromSession(this.session);

			int idLista = Liste.ACCORDI_EROGATORI;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));

			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				ServletUtils.setPageDataTitle(this.pd, 
						new Parameter(AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo),
								AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST+"?"+
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
										new Parameter(AccordiServizioParteComuneCostanti.LABEL_ACCORDI_EROGATORI_DI + labelASTitle, null)
						);
			}else{
				ServletUtils.setPageDataTitle(this.pd, 
						new Parameter(AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo),
								AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST+"?"+
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
										new Parameter(AccordiServizioParteComuneCostanti.LABEL_ACCORDI_EROGATORI_DI + " di " + labelASTitle, 
												AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_EROGATORI_LIST+"?"+
														AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID+"="+id+"&"+
														AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME+"="+uri+"&"+
														AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
														AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
														new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null)
						);
			}


			// controllo eventuali risultati ricerca
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_SOGGETTO);
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_ACCORDI_EROGATORI, search);
			}

			// setto le label delle colonne
			// String[] labels = { "Soggetto", "Servizio",
			// "Accordo unilaterale", "Fruitori" };
			String[] labels = { AccordiServizioParteComuneCostanti.LABEL_SOGGETTO, 
					AccordiServizioParteComuneCostanti.LABEL_ACCORDO_SERVIZIO_PARTE_SPECIFICA, 
					AccordiServizioParteComuneCostanti.LABEL_FRUITORI};
			this.pd.setLabels(labels);

			// Prendo la lista di soggetti dell'utente connesso
			/*List<Long> idsSogg = new ArrayList<Long>();
					List<Soggetto> listaSog = this.core.soggettiRegistroList(superUser, new Search(true));
					Iterator<Soggetto> itS = listaSog.iterator();
					while (itS.hasNext()) {
						Soggetto ss = (Soggetto) itS.next();
						idsSogg.add(ss.getId());
					}*/

			// Prendo la lista di servizi dell'utente connesso
			/*List<Long> idsServ = new ArrayList<Long>();
					List<AccordoServizioParteSpecifica> listaServ = this.core.soggettiAccordoServizioParteSpecificaoList(superUser, new Search(true));
					Iterator<AccordoServizioParteSpecifica> itServ = listaServ.iterator();
					while (itServ.hasNext()) {
						AccordoServizioParteSpecifica ss = (AccordoServizioParteSpecifica) itServ.next();
						idsServ.add(ss.getId());
					}*/

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

			if (lista != null) {
				Iterator<org.openspcoop2.core.registry.Soggetto> it = lista.iterator();

				while (it.hasNext()) {
					org.openspcoop2.core.registry.Soggetto sog = it.next();

					// per ogni soggetto stampo i servizi
					ArrayList<AccordoServizioParteSpecifica> listaServizi = new ArrayList<AccordoServizioParteSpecifica>();
					// i servizi
					for (int i = 0; i < sog.sizeAccordoServizioParteSpecificaList(); i++) {
						listaServizi.add(sog.getAccordoServizioParteSpecifica(i));
					}

					// Nota: sog e' il soggetto erogatore
					// Non posso usare sog.getId per ottenere l'id
					// del soggetto
					IDSoggetto tmpIdSoggetto = new IDSoggetto(sog.getTipo(), sog.getNome());
					org.openspcoop2.core.registry.Soggetto tmpSog = null;
					try {
						tmpSog = this.soggettiCore.getSoggettoRegistro(tmpIdSoggetto);

					} catch (DriverRegistroServiziNotFound drsnf) {
						// ok
					}

					// creo la lista
					for (int i = 0; i < listaServizi.size(); i++) {

						AccordoServizioParteSpecifica asps = listaServizi.get(i);

						String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(sog.getTipo());
						
						List<DataElement> e = new ArrayList<>();

						DataElement de = new DataElement();
						//if (idsSogg.contains(tmpSog.getId()))
						de.setUrl(SoggettiCostanti.SERVLET_NAME_SOGGETTI_CHANGE, 
								new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_ID,tmpSog.getId()+""),
								new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_NOME,sog.getNome()),
								new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_TIPO,sog.getTipo()));
						de.setValue(this.getLabelNomeSoggetto(protocollo, sog.getTipo() , sog.getNome()));
						e.add(de);

						boolean isServizioCorrelato = TipologiaServizio.CORRELATO.equals(asps.getTipologiaServizio());

						int idServ = asps.getId().intValue();
						de = new DataElement();
						//if (idsServ.contains(servizio.getId()))
						de.setUrl(AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE,
								new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID,idServ+""),
								new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SERVIZIO,asps.getNome()),
								new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SERVIZIO,asps.getTipo()));
								new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_VERSIONE,asps.getVersione().intValue()+"");
						//de.setValue(IDServizioFactory.getInstance().getUriFromAccordo(asps) + (isServizioCorrelato ? " ["+AccordiServizioParteSpecificaCostanti.LABEL_APS_CORRELATO+"]" : ""));
						String correlato = (isServizioCorrelato ? " ["+AccordiServizioParteSpecificaCostanti.LABEL_APS_CORRELATO+"]" : "");
						de.setValue(this.getLabelNomeServizio(protocollo, asps.getTipo(), asps.getNome(), asps.getVersione())+correlato);
						e.add(de);

						de = new DataElement();
						Parameter pIdsoggErogatore = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID_SOGGETTO_EROGATORE, ""+sog.getId());
						Parameter pNomeServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SERVIZIO, asps.getNome());
						Parameter pTipoServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SERVIZIO, asps.getTipo());
						Parameter pVersioneServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_VERSIONE, asps.getVersione().intValue()+"");
						de.setUrl(
								AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_FRUITORI_LIST,
								new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID, asps.getId() + ""),
								pNomeServizio, pTipoServizio,pVersioneServizio, pIdsoggErogatore);
						//						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_EROGATORI_FRUITORI_CHANGE, 
						//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID,id),
						//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_EROGATORI_NOME_SOGGETTO,sog.getNome()),
						//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_EROGATORI_TIPO_SOGGETTO,sog.getTipo()),
						//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_EROGATORI_NOME_SERVIZIO,servizio.getNome()),
						//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_EROGATORI_TIPO_SERVIZIO,servizio.getTipo()),
						//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_EROGATORI_NOME_ACCORDO,uri),
						//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_EROGATORI_CORRELATO,isServizioCorrelato+""),
						//								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));

						if (contaListe) {
							int numEr = asps.sizeFruitoreList();
							ServletUtils.setDataElementVisualizzaLabel(de, Long.valueOf(numEr));
						} else
							ServletUtils.setDataElementVisualizzaLabel(de);
						e.add(de);

						dati.add(e);
					}// eo for servizi
				}// eo while soggetti

			}

			this.pd.setDati(dati);
			this.pd.setSelect(false);

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public void prepareAccordiAllegatiList(AccordoServizioParteComune as, ISearch ricerca, List<Documento> lista,String tipoAccordo) throws Exception {
		try {
			String uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as); 
			
			Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
			Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, as.getId() + "");
			Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri);

			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_ALLEGATI,pIdAccordo, pNomeAccordo, pTipoAccordo);

			int idLista = Liste.ACCORDI_ALLEGATI;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));


			Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
			List<Parameter> listaParams = this.getTitoloApc(TipoOperazione.LIST, as, tipoAccordo, labelASTitle, null, false);
			
			String labelAllegati = isModalitaVistaApiCustom ? AccordiServizioParteComuneCostanti.LABEL_ALLEGATI : AccordiServizioParteComuneCostanti.LABEL_ALLEGATI + " di " + labelASTitle;
			
			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				listaParams.add(new Parameter(labelAllegati, null));
			}else{
				listaParams.add(new Parameter(labelAllegati, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_ALLEGATI_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));
				listaParams.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}
			ServletUtils.setPageDataTitle(this.pd, listaParams);

			// controllo eventuali risultati ricerca
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_ALLEGATI, search);
			}

			// setto le label delle colonne
			String[] labels = { AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME, 
					AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_RUOLO, 
					AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_TIPO_FILE , 
					AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_DOCUMENTO };
			this.pd.setLabels(labels);

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

			if (lista != null) {
				Iterator<Documento> it = lista.iterator();
				while (it.hasNext()) {
					Documento doc = it.next();

					List<DataElement> e = new ArrayList<>();

					DataElement de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_ALLEGATI_CHANGE, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ALLEGATO, doc.getId()+""),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, as.getId()+""),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_NOME_DOCUMENTO, doc.getFile()),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
					de.setValue(doc.getFile());
					de.setIdToRemove(""+doc.getId());
					e.add(de);

					de = new DataElement();
					de.setValue(doc.getRuolo());
					e.add(de);

					de = new DataElement();
					de.setValue(doc.getTipo());
					e.add(de);

					de = new DataElement();
					if(this.core.isShowAllegati()) {
						de.setValue(Costanti.LABEL_VISUALIZZA);
						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_ALLEGATI_VIEW, 
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ALLEGATO, doc.getId()+""),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, as.getId()+""),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_NOME_DOCUMENTO, doc.getFile()),
								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
					}
					else {
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_DOWNLOAD.toLowerCase());
						de.setUrl(ArchiviCostanti.SERVLET_NAME_DOCUMENTI_EXPORT, 
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ALLEGATO, doc.getId()+""),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, as.getId()+""),
								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
								new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE));
						de.setDisabilitaAjaxStatus();
					}
					e.add(de);

					dati.add(e);
				}
			}

			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}



	public List<Object> addAccordiAllegatiToDati(List<Object> dati,TipoOperazione tipoOperazione,String idAccordo,
			String ruolo,String [] ruoli,String []tipiAmmessi,String []tipiAmmessiLabel,String tipoAccordo,String tipoFile,
			String idAllegato, Documento doc, AccordoServizioParteComune as, String errore,StringBuilder contenutoAllegato, List<BinaryParameter> binaryParameterDocumenti) throws Exception {
		try{


			if(TipoOperazione.ADD.equals(tipoOperazione)){
				DataElement de = new DataElement();
				de.setValue(idAccordo);
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
				dati.add(de);
			}
			else {
				DataElement de = new DataElement();
				de.setValue(idAllegato);
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ALLEGATO);
				dati.add(de);

				de = new DataElement();
				de.setValue(idAccordo);
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO);
				dati.add(de);
			}

			DataElement de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_ALLEGATO);
			dati.add(de);
			
			boolean stato = this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage());
			
			if(!stato && TipoOperazione.CHANGE.equals(tipoOperazione)) {
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_WSDL_ATTUALE);
				de.setType(DataElementType.SUBTITLE);
				dati.add(de);
			}
			
			de = new DataElement();
			if(TipoOperazione.ADD.equals(tipoOperazione)){
				de.setValue(idAccordo);
				de.setType(DataElementType.SELECT);
				de.setSelected(ruolo!=null ? ruolo : "");
				de.setValues(ruoli);
			}else{
				de.setValue(doc.getRuolo());
				de.setType(DataElementType.TEXT);
			}
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_RUOLO);			
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_RUOLO);
			de.setPostBack(true);
			//			de.setOnChange("CambiaTipoDocumento('accordiAllegati')");
			de.setSize(this.getSize());
			dati.add(de);


			if(tipiAmmessi!=null){
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_TIPO_FILE);
				de.setType(DataElementType.SELECT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_TIPO_FILE);
				de.setValues(tipiAmmessi);
				de.setLabels(tipiAmmessiLabel);
				de.setSize(this.getSize());
				de.setSelected(tipoFile);
				dati.add(de);
			}

			if(TipoOperazione.ADD.equals(tipoOperazione)==false){
				de = new DataElement();
				de.setValue(doc.getFile());
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
				de.setType(DataElementType.TEXT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_NOME_DOCUMENTO);
				de.setSize(this.getSize());
				dati.add(de);
			}

			if(TipoOperazione.ADD.equals(tipoOperazione)){
				// dal parametro in posizione 0 leggiamo i dati per creare l'elemento grafico
				BinaryParameter allegato0 = binaryParameterDocumenti.get(0);
				
				DataElement fileDataElement = allegato0.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_DOCUMENTO, "", getSize());
				fileDataElement.setType(DataElementType.MULTI_FILE);
				fileDataElement.setRequired(true);
				
				dati.add(fileDataElement);
				dati.addAll(BinaryParameter.getFileNameDataElement(binaryParameterDocumenti));
				dati.add(BinaryParameter.getFileIdDataElement(binaryParameterDocumenti));
			}

			if(TipoOperazione.ADD.equals(tipoOperazione)==false){
				de = new DataElement();
				de.setValue(doc.getTipo());
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_TIPO_FILE);
				de.setType(DataElementType.TEXT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_TIPO_FILE);
				de.setSize(this.getSize());
				dati.add(de);
			}

			de = new DataElement();
			de.setValue(tipoAccordo);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
			dati.add(de);

			if(TipoOperazione.CHANGE.equals(tipoOperazione)){

				if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
					this.pd.disableEditMode();
				}
				else{
					
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_WSDL_NUOVO);
					de.setType(DataElementType.SUBTITLE);
					dati.add(de);
					
					de = new DataElement();
					de.setType(DataElementType.FILE);
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_DOCUMENTO);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_DOCUMENTO);
					de.setSize(this.getSize());
					dati.add(de);
				}
			}

			if(TipoOperazione.OTHER.equals(tipoOperazione)){

				if(this.core.isShowAllegati()) {
					if(errore!=null){
						de = new DataElement();
						de.setValue(errore);
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_DOCUMENTO);
						de.setType(DataElementType.TEXT);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_DOCUMENTO_VIEW);
						de.setSize(this.getSize());
						dati.add(de);
					}
					else{
						de = new DataElement();
						de.setLabel("");//AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ALLEGATI_DOCUMENTO);
						de.setType(DataElementType.TEXT_AREA_NO_EDIT);
						de.setValue(contenutoAllegato.toString());
						de.setRows(CostantiControlStation.LABEL_PARAMETRO_TEXT_AREA_API_SIZE);
						de.setCols(CostantiControlStation.LABEL_PARAMETRO_TEXT_AREA_API_COLUMNS);
						dati.add(de);
					}
				}
				
				DataElement saveAs = new DataElement();
				saveAs.setValue(AccordiServizioParteComuneCostanti.LABEL_DOWNLOAD);
				saveAs.setType(DataElementType.LINK);
				saveAs.setUrl(ArchiviCostanti.SERVLET_NAME_DOCUMENTI_EXPORT, 
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, idAccordo),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ALLEGATO, idAllegato),
						new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE));
				saveAs.setDisabilitaAjaxStatus();
				dati.add(saveAs);

				this.pd.disableEditMode();

			}

			return dati;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public void prepareAccordiPorttypeOperationsList(ISearch ricerca, List<Operation> lista, String idAs, AccordoServizioParteComune as,String tipoAccordo,String nomept) throws Exception {
		try {
			String uri = null;
			uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as); 
			
			Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
			Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idAs);
			Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri);
			Parameter pNomePortTypes = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME,nomept);

			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_PORT_TYPE_OPERATIONS,
					pIdAccordo,pNomeAccordo,pTipoAccordo, pNomePortTypes);

			Map<String, String> campiHidden = new HashMap<>();
			campiHidden.put("nomept", nomept);
			this.pd.setHidden(campiHidden);

			int idLista = Liste.ACCORDI_PORTTYPE_AZIONI;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));
			
			Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
			List<Parameter> listaParams = this.getTitoloApc(TipoOperazione.LIST, as, tipoAccordo, labelASTitle, null, false);
			
			String labelPortTypes = isModalitaVistaApiCustom ? AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES  : AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES + " di " + labelASTitle;
			
			listaParams.add(new Parameter(labelPortTypes, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPES_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));
			
			String labelOperations = AccordiServizioParteComuneCostanti.LABEL_AZIONI  + " di " + nomept;
			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				listaParams.add(new Parameter(labelOperations, null));
			}else{
				listaParams.add(new Parameter(labelOperations, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomePortTypes));
				listaParams.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}
			ServletUtils.setPageDataTitle(this.pd, listaParams);

			// controllo eventuali risultati ricerca
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_AZIONI, search);
			}

			// setto le label delle colonne
			String[] labels = { 
					AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME, 
					CostantiControlStation.LABEL_IN_USO_COLONNA_HEADER // inuso 
			};
			this.pd.setLabels(labels);

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

			if (lista != null) {
				Iterator<Operation> it = lista.iterator();
				while (it.hasNext()) {
					Operation op = it.next();

					List<DataElement> e = new ArrayList<>();

					DataElement de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_CHANGE,
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idAs),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME, nomept),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_NOME, op.getNome()),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
							);
					de.setSize(this.core.getElenchiMenuIdentificativiLunghezzaMassima());
					de.setValue(op.getNome());
					de.setIdToRemove(op.getNome());
					e.add(de);

					this.addInUsoButtonVisualizzazioneClassica(e, op.getNome(), op.getNome()+"@"+nomept+"@"+this.idAccordoFactory.getUriFromAccordo(as), InUsoType.OPERAZIONE);
					
					dati.add(e);
				}
			}

			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public boolean accordiPorttypeOperationCheckData(TipoOperazione tipoOperazione,String id, String nomept, String nomeop, String profProtocollo, String filtrodupop,
			String confricop, String idcollop, String idRifRichiestaOp, String consordop, String scadenzaop, String servcorr, String azicorr, String profcollop, String styleOp,
			String soapActionOp, String useOpParam, String opTypeOp, String nsWSDLOp ) throws Exception {

		try{
			if ((filtrodupop != null) && filtrodupop.equals("null")) {
				filtrodupop = null;
			}
			if ((confricop != null) && confricop.equals("null")) {
				confricop = null;
			}
			if ((idcollop != null) && idcollop.equals("null")) {
				idcollop = null;
			}
			if ((idRifRichiestaOp != null) && idRifRichiestaOp.equals("null")) {
				idRifRichiestaOp = null;
			}
			if ((consordop != null) && consordop.equals("null")) {
				consordop = null;
			}
			if (servcorr == null || servcorr.equals(""))
				servcorr = "-";
			if (azicorr == null || azicorr.equals(""))
				azicorr = "-";

			if(profcollop == null)
				profcollop = "";
			//parametri WSDL
			if(styleOp == null)
				styleOp = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_STYLE;
			if(soapActionOp == null)
				soapActionOp = "";
			@SuppressWarnings("unused")
			String useOp = useOpParam;
			if(useOpParam == null)
				useOp = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_USE;
			if(nsWSDLOp == null)
				nsWSDLOp = "";

			// Campi obbligatori
			if (nomeop.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Nome");
				return false;
			}

			// Se isShowCorrelazioneAsincronaInAccordi ed è
			// stato specificato un servcorr, azicorr non può
			// essere "-"
			if (this.core.isShowCorrelazioneAsincronaInAccordi()) {
				if (!servcorr.equals("-") && azicorr.equals("-")) {
					this.pd.setMessage("Indicare un'azione correlata");
					return false;
				}
			}

			// check lunghezza
			if(this.checkLength255(nomeop, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME)==false) {
				return false;
			}
			if(soapActionOp!=null && !"".equals(soapActionOp)) {
				if(this.checkLength255(soapActionOp, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_SOAP_ACTION)==false) {
					return false;
				}
			}
			if(nsWSDLOp!=null && !"".equals(nsWSDLOp)) {
				if(this.checkLength255(nsWSDLOp, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NS)==false) {
					return false;
				}
			}
			
			// Il nome deve contenere solo lettere e numeri e '_' '-' '.'
			if(this.checkNCName(nomeop, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME)==false){
				return false;
			}

			// Controllo che i campi "select" abbiano uno dei valori ammessi
			if (!profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT) && !profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO)) {
				this.pd.setMessage("Il profilo dev'essere \""+AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_PORT_TYPE[0]+"\" o \""+
						AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_PORT_TYPE[1]+"\"");
				return false;
			}

			// profilo : default || ridefinisci
			if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo)) {
				// Controllo che i campi "checkbox" abbiano uno dei valori ammessi
				if ((filtrodupop != null) && !filtrodupop.equals(Costanti.CHECK_BOX_ENABLED) && !filtrodupop.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !filtrodupop.equals(Costanti.CHECK_BOX_DISABLED) && !filtrodupop.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage("Filtro duplicati dev'essere selezionato o deselezionato");
					return false;
				}
				if ((confricop != null) && !confricop.equals(Costanti.CHECK_BOX_ENABLED) && !confricop.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !confricop.equals(Costanti.CHECK_BOX_DISABLED) && !confricop.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage("Conferma Ricezione dev'essere selezionata o deselezionata");
					return false;
				}
				if ((idcollop != null) && !idcollop.equals(Costanti.CHECK_BOX_ENABLED) && !idcollop.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !idcollop.equals(Costanti.CHECK_BOX_DISABLED) && !idcollop.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage("ID Conversazione dev'essere selezionata o deselezionata");
					return false;
				}
				if ((idRifRichiestaOp != null) && !idRifRichiestaOp.equals(Costanti.CHECK_BOX_ENABLED) && !idRifRichiestaOp.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !idRifRichiestaOp.equals(Costanti.CHECK_BOX_DISABLED) && !idRifRichiestaOp.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage("Riferimento ID Richiesta dev'essere selezionata o deselezionata");
					return false;
				}
				if ((consordop != null) && !consordop.equals(Costanti.CHECK_BOX_ENABLED) && !consordop.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !consordop.equals(Costanti.CHECK_BOX_DISABLED) && !consordop.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage("Consegna in ordine dev'essere selezionata o deselezionata");
					return false;
				}

				// scadenzapt dev'essere numerico
				if (!scadenzaop.equals("") && !this.checkNumber(scadenzaop, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA, false)) {
					return false;
				}
			}

			AccordoServizioParteComuneSintetico as = this.apcCore.getAccordoServizioSintetico(Long.valueOf(id));
			PortTypeSintetico pt = null;
			for (int i = 0; i < as.getPortType().size(); i++) {
				PortTypeSintetico ptCheck =as.getPortType().get(i);
				if (nomept.equals(ptCheck.getNome())) {
					pt = ptCheck;
					break;
				}
			}
			if(pt==null) {
				throw new Exception("Il port type '"+nomept+"' non esiste");
			}

			// Se tipoOp = add, controllo che l'operation non sia gia' stato
			// registrato per il port-type
			if (tipoOperazione.equals(TipoOperazione.ADD)) {
				boolean giaRegistrato = this.apcCore.existsAccordoServizioPorttypeOperation(nomeop, pt.getId());
				if (giaRegistrato) {
					this.pd.setMessage("L'azione " + nomeop + " &egrave; gi&agrave; stata associata al servizio");
					return false;
				}
			}

			// Controllo che l'azione possieda SOLO azioni correlate o solo azioni NON correlate
			if(this.core.isShowCorrelazioneAsincronaInAccordi() && pt!=null){
				for (int i = 0; i < pt.getAzione().size(); i++) {
					OperationSintetica op = pt.getAzione().get(i);
					if (tipoOperazione.equals(TipoOperazione.CHANGE)) {
						if(nomeop.equals(op.getNome()))
							continue;
					}
					if(servcorr!=null && !"".equals(servcorr) && !"-".equals(servcorr) && azicorr!=null && !"".equals(azicorr) && !"-".equals(azicorr)){
						// controllo che il port type non possieda gia azioni non correlate
						if(op.getCorrelata()==null){
							this.pd.setMessage("L'azione " + nomeop + ", essendo correlata ad un'altra azione ("+azicorr+") di un altro servizio ("+servcorr+"), non pu&ograve; essere aggiunta ad un servizio che possiede azioni che non risultano correlate verso altri servizi asincroni");
							return false;
						}
					}
					else{
						// controllo che il port type non possieda gia azioni correlate ad altri servizi
						if(op.getCorrelataServizio()!=null && !pt.getNome().equals(op.getCorrelataServizio())){
							this.pd.setMessage("L'azione " + nomeop + " non pu&ograve; essere aggiunta poich&egrave; il servizio "+pt.getNome()+" possiede azioni che risultano correlate in profili asincroni (correlazione verso altri servizi)");
							return false;
						}
					}
				}
			}


			// Informazioni Wsdl
			// se il profilo dell'azione e' oneway operation type puo' essere solo input
			if(profcollop.equals(CostantiRegistroServizi.ONEWAY.getValue()) && 
					opTypeOp!=null && !opTypeOp.equals(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_OPERATION_TYPE_IN)){
				this.pd.setMessage("L'operationType di tipo " + opTypeOp + " non pu&ograve; essere utilizzata con l'azione "+nomeop+" poich&egrave; possiede un profilo "+profcollop);
				return false;		
			}

			if(profcollop.equals(CostantiRegistroServizi.SINCRONO.getValue()) && 
					opTypeOp!=null && !opTypeOp.equals(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_OPERATION_TYPE_INOUT)){
				this.pd.setMessage("L'operationType di tipo " + opTypeOp + " non pu&ograve; essere utilizzata con l'azione "+nomeop+" poich&egrave; possiede un profilo "+profcollop);
				return false;		
			}

			// contenuto del campo namespace opzionale
			if(nsWSDLOp != null  && !nsWSDLOp.equals("")){
				if(nsWSDLOp.indexOf(" ") != -1){
					this.pd.setMessage("Il campo Namespace non pu&ograve; contenere spazi");
					return false; 
				}

				try{
					URI.create(nsWSDLOp);
				}catch(Exception e){
					this.pd.setMessage("Il campo Namespace non contiene una URI valida");
					return false;
				}
			}

			if(soapActionOp != null && !soapActionOp.equals("")){
				if(soapActionOp.indexOf(" ") != -1){
					this.pd.setMessage("Il campo SOAPAction non pu&ograve; contenere spazi");
					return false; 
				}
			}

			return true;

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public List<DataElement> addAccordiPorttypeOperationToDati(List<DataElement> dati, String id, String nomept, String nomeop, String profProtocollo, 
			String filtrodupop, String deffiltrodupop, String confricop, String defconfricop, String idcollop, String defidcollop, String idRifRichiestaOp, String defIdRifRichiestaOp, String consordop, String defconsordop, 
			String scadenzaop, String defscadenzaop, TipoOperazione tipoOperazione, String defProfiloCollaborazioneOp, String profiloCollaborazioneOp, 
			String opcorr, String[] opList, String stato,String tipoSICA, String[] servCorrList, String servcorr, String[] aziCorrList, String azicorr
			,String protocollo,
			String soapActionOp, String styleOp, String useOp, String nsWSDLOp, 
			String operationTypeOp, int messageInputCnt, int messageOutputCnt,ServiceBinding serviceBinding)
					throws Exception {
		try {
			boolean modificheAbilitate = false;
			if( tipoOperazione.equals(TipoOperazione.ADD) ){
				modificheAbilitate = true;
			}else if(this.isShowGestioneWorkflowStatoDocumenti()==false){
				modificheAbilitate = true;
			}else if(StatiAccordo.finale.toString().equals(stato)==false){
				modificheAbilitate = true;
			}

			DataElement de = new DataElement();
			de.setValue(tipoSICA);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
			dati.add(de);

			de = new DataElement();
			de.setValue(id);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			dati.add(de);

			de = new DataElement();
			de.setValue(nomept);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME);
			dati.add(de);

			de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_AZIONE);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
			de.setValue(nomeop);
			if (tipoOperazione.equals(TipoOperazione.ADD)) {
				de.setType(DataElementType.TEXT_EDIT);
				de.setRequired(true);
			} else {
				de.setType(DataElementType.TEXT);
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_NOME);
			de.setSize(this.getSize());
			dati.add(de);

			List<DataElement> dataElements = new ArrayList<>();
			if (this.core.isShowCorrelazioneAsincronaInAccordi()) {
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_CORRELATA_AL_SERVIZIO);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_SERVIZIO_CORRELATO);
				if ((servCorrList != null) && ((profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT) && (defProfiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO) || defProfiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_SIMMETRICO))) || (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO) && (profiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO) || profiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_SIMMETRICO))))) {
					de.setType(DataElementType.SELECT);
					de.setValues(servCorrList);
					de.setSelected(servcorr);
					//							de.setOnChange("CambiaServCorr('" + tipoOp + "')");
					de.setPostBack(true);
					dataElements.add(de);
				} else {
					de.setType(DataElementType.HIDDEN);
					de.setValue(servcorr);
					dati.add(de);
				}

				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_CORRELATA_A_AZIONE);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_AZIONE_CORRELATA);
				if ((aziCorrList != null) && ((profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT) && (defProfiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO) || defProfiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_SIMMETRICO))) || (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO) && (profiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO) || profiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_SIMMETRICO))))) {
					de.setType(DataElementType.SELECT);
					de.setValues(aziCorrList);
					de.setSelected(azicorr);
					if(servcorr!=null && !"".equals(servcorr) && !"-".equals(servcorr)){
						if(modificheAbilitate)
							de.setRequired(true);
					}
					dataElements.add(de);
				} else {
					de.setType(DataElementType.HIDDEN);
					de.setValue(azicorr);
					dati.add(de);
				}
			} else {
				// boolean isOpCorr = false;
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_AZIONE_CORRELATA);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_CORRELATA);
				if ((opList != null) && ((profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT) && defProfiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO)) || (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO) && profiloCollaborazioneOp.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO)))) {
					// isOpCorr = true;
					de.setType(DataElementType.SELECT);
					de.setValues(opList);
					de.setSelected(opcorr);
					dataElements.add(de);
				} else {
					de.setType(DataElementType.HIDDEN);
					de.setValue(opcorr);
					dati.add(de);
				}
			}

			boolean filtroDuplicatiSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.FILTRO_DUPLICATI);
			boolean confermaRicezioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.CONFERMA_RICEZIONE);
			boolean collaborazioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.COLLABORAZIONE);
			boolean idRiferimentoRichiestaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA);
			boolean consegnaInOrdineSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.CONSEGNA_IN_ORDINE);
			boolean scadenzaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.SCADENZA);
			
			de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PROFILO_PROTOCOLLO);
			de.setType(DataElementType.SELECT);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_PROFILO_BUSTA);
			if(modificheAbilitate){
				de.setValues(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA);
				de.setLabels(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_PORT_TYPE);
				de.setSelected(profProtocollo);
				//						de.setOnChange("CambiaProfOp('" + tipoOp + "')");
				de.setPostBack(true);
			}else{
				de.setType(DataElementType.TEXT);
				if(profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)){
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_DEFAULT_PORT_TYPE);
				}else{
					de.setValue(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO);
				}
			}
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROFILO_COLLABORAZIONE);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_PROFILO_COLLABORAZIONE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defProfiloCollaborazioneOp);
			} else {
				de.setType(DataElementType.SELECT);
				de.setValues(this.core.getProfiliDiCollaborazioneSupportatiDalProtocollo(protocollo,serviceBinding));
				// de.setLabels(tipoProfcollLabel);
				de.setSelected(profiloCollaborazioneOp);
				//						de.setOnChange("CambiaProfOp('" + tipoOp + "', true)");
				de.setPostBack(true);
			}
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(deffiltrodupop);
			} 
			else if(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo) &&
					!filtroDuplicatiSupportato) {
				de.setType(DataElementType.HIDDEN);
//				if(filtroDuplicatiSupportato) {
//					// se il protocollo lo supporta, lascio il filtro abilitato per default
//					de.setValue(Costanti.CHECK_BOX_ENABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			}  else {
				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if(ServletUtils.isCheckBoxEnabled(filtrodupop)){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if(ServletUtils.isCheckBoxEnabled(filtrodupop)){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}	
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_FILTRO_DUPLICATI);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defconfricop);
			} else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo) &&
					!confermaRicezioneSupportato) {
				de.setType(DataElementType.HIDDEN);
//				if(confermaRicezioneSupportato) {
//					// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//					de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			}  else {
				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if(ServletUtils.isCheckBoxEnabled(confricop)){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if(ServletUtils.isCheckBoxEnabled(confricop)){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}	
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_CONFERMA_RICEZIONE);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defidcollop);
			} else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo) &&
					!collaborazioneSupportato) {
				de.setType(DataElementType.HIDDEN);
//				if(collaborazioneSupportato) {
//					// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//					de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			} else {
				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if(ServletUtils.isCheckBoxEnabled(idcollop)){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if(ServletUtils.isCheckBoxEnabled(idcollop)){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}	
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_COLLABORAZIONE);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defIdRifRichiestaOp);
			} else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo) &&
					!idRiferimentoRichiestaSupportato) {
				de.setType(DataElementType.HIDDEN);
//				if(idRiferimentoRichiestaSupportato) {
//					// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//					de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			} else {
				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if(ServletUtils.isCheckBoxEnabled(idRifRichiestaOp)){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if(ServletUtils.isCheckBoxEnabled(idRifRichiestaOp)){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}	
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_ID_RIFERIMENTO_RICHIESTA);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defconsordop);
			} else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo) &&
					!consegnaInOrdineSupportato) {
				de.setType(DataElementType.HIDDEN);
//				if(consegnaInOrdineSupportato) {
//					// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//					de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			}else {
				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if(ServletUtils.isCheckBoxEnabled(consordop)){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if(ServletUtils.isCheckBoxEnabled(consordop)){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}	
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_CONSEGNA_ORDINE);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA);
			de.setValue(scadenzaop);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defscadenzaop);
			}  else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo) &&
					!scadenzaSupportato) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defscadenzaop);
			} else {
				de.setType(DataElementType.TEXT_EDIT);
				de.setValue(scadenzaop);
				if( !modificheAbilitate && (scadenzaop==null || "".equals(scadenzaop)) )
					de.setValue(" ");
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_SCADENZA);
			de.setSize(this.getSize());
			dati.add(de);

			if(dataElements.size()>0){
				de = new DataElement();
				de.setType(DataElementType.TITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_CORRELAZIONE_ASINCRONA);
				dati.add(de);

				while(dataElements.size()>0){
					dati.add(dataElements.remove(0));
				}
			}

			
			if(this.isModalitaAvanzata()){
				de = new DataElement();
				de.setType(DataElementType.TITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_WSDL);
				dati.add(de);

				// SOAP Action
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_SOAP_ACTION);
				de.setValue(soapActionOp);
				de.setType(DataElementType.TEXT_EDIT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_SOAP_ACTION);
				de.setSize(this.getSize());
				dati.add(de);

				// Style
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_STYLE);
				de.setType(DataElementType.SELECT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_STYLE);
				de.setValues(AccordiServizioParteComuneCostanti.PORT_TYPES_OPERATION_STYLE);
				de.setLabels(AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES_OPERATION_STYLE);
				de.setSelected(styleOp);
				dati.add(de);

				// Use
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_USE);
				de.setType(DataElementType.SELECT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_USE);
				de.setValues(AccordiServizioParteComuneCostanti.PORT_TYPES_OPERATION_USE);
				de.setLabels(AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES_OPERATION_USE);
				de.setSelected(useOp);
				dati.add(de);

				// Namesapce WSDL
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_NS_WSDL);
				de.setValue(nsWSDLOp);
				de.setType(DataElementType.TEXT_EDIT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_NS_WSDL);
				de.setSize(this.getSize());
				dati.add(de);

				// Operation Type
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_OPERATION_TYPE);
				if(!profiloCollaborazioneOp.equalsIgnoreCase(CostantiRegistroServizi.ONEWAY.getValue()) && !profiloCollaborazioneOp.equalsIgnoreCase(CostantiRegistroServizi.SINCRONO.getValue())){
					de.setType(DataElementType.SELECT);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_OPERATION_TYPE);
					de.setValues(AccordiServizioParteComuneCostanti.PORT_TYPE_OPERATION_TYPE);
					de.setLabels(AccordiServizioParteComuneCostanti.LABEL_PORT_TYPE_OPERATION_TYPE);
					de.setSelected(operationTypeOp);
					de.setPostBack(true);
				} else{
					// operation type hidden
					de.setType(DataElementType.HIDDEN);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_OPERATION_TYPE);
					de.setValue(operationTypeOp);
					dati.add(de);

					// operation type label
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_OPERATION_TYPE);
					de.setType(DataElementType.TEXT);
					de.setValue(operationTypeOp);
				}
				dati.add(de);

				if(tipoOperazione.equals(TipoOperazione.CHANGE)){
					// messageInput
					de = new DataElement();
					de.setType(DataElementType.LINK);
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_MESSAGE_LIST,
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO, tipoSICA),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME, nomept),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_NOME, nomeop),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_TYPE, AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_INPUT )
							);

					ServletUtils.setDataElementCustomLabel(de, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_INPUT, (long) messageInputCnt);
					dati.add(de); 

					if(operationTypeOp.equals(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_OPERATION_TYPE_INOUT)){
						// messageInput
						de = new DataElement();
						de.setType(DataElementType.LINK);
						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_MESSAGE_LIST,
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO, tipoSICA),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME, nomept),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_NOME, nomeop),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_TYPE,
										AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_OUTPUT )
								);

						ServletUtils.setDataElementCustomLabel(de, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_OUTPUT, (long) messageOutputCnt);
						dati.add(de);
					}

				}
			}

			return dati;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public void prepareAccordiPorttypeList(String idApc,AccordoServizioParteComune as, List<org.openspcoop2.core.registry.PortType> lista, ISearch ricerca, String tipoAccordo)
			throws Exception {
		try {
			String uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as); 
			
			Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
			Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc);
			Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri);

			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_PORT_TYPES, pIdAccordo,pTipoAccordo,pNomeAccordo);

			Boolean contaListe = ServletUtils.getContaListeFromSession(this.session);

			int idLista = Liste.ACCORDI_PORTTYPE;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));
			
			Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
			List<Parameter> listaParams = this.getTitoloApc(TipoOperazione.LIST, as, tipoAccordo, labelASTitle, null, false);
			
			String labelPortTypes = isModalitaVistaApiCustom ? AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES : AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES + " di " + labelASTitle;
			
			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				listaParams.add(new Parameter(labelPortTypes, null));
			}else{
				listaParams.add(new Parameter(labelPortTypes, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPES_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));
				listaParams.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}
			ServletUtils.setPageDataTitle(this.pd, listaParams);

			// controllo eventuali risultati ricerca
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES, search);
			}

			// setto le label delle colonne
			// String[] labels = { "Soggetto", "Servizio",
			// "Accordo unilaterale", "Fruitori" };
			String[] labels = {AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME,
					AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE , 
					AccordiServizioParteComuneCostanti.LABEL_AZIONI,
					CostantiControlStation.LABEL_IN_USO_COLONNA_HEADER // inuso 		
			};
			this.pd.setLabels(labels);

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

			boolean existsBigDescription = false;
			if (lista != null) {
				
				Iterator<org.openspcoop2.core.registry.PortType> it = lista.iterator();
				while (it.hasNext()) {
					org.openspcoop2.core.registry.PortType pt = it.next();
					if(pt.getDescrizione()!=null && pt.getDescrizione().length()>30) {
						existsBigDescription = true;
						break;
					}
				}

				it = lista.iterator();

				while (it.hasNext()) {
					org.openspcoop2.core.registry.PortType pt = it.next();

					List<DataElement> e = new ArrayList<>();

					DataElement de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPES_CHANGE, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME, pt.getNome()),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
							);
					if(existsBigDescription==false) {
						de.setSize(this.core.getElenchiMenuIdentificativiLunghezzaMassima());
					}
					de.setValue(pt.getNome());
					de.setToolTip(pt.getNome());
					de.setIdToRemove(pt.getNome());
					e.add(de);

					de = new DataElement();
					de.setValue(pt.getDescrizione());
					e.add(de);

					de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_LIST, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME, pt.getNome()),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
							);
					if (contaListe) {
						// Prendo l'id del port-type
						int idPortType = 0;
						for (int i = 0; i < as.sizePortTypeList(); i++) {
							PortType pt1 = as.getPortType(i);
							if ((pt.getNome()).equals(pt1.getNome())) {
								idPortType = pt1.getId().intValue();
								break;
							}
						}
						// BugFix OP-674
						//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
						ConsoleSearch searchForCount = new ConsoleSearch(true,1);
						this.apcCore.accordiPorttypeOperationList(idPortType, searchForCount);
						//int num = tmpLista.size();
						int num = searchForCount.getNumEntries(Liste.ACCORDI_PORTTYPE_AZIONI);
						ServletUtils.setDataElementVisualizzaLabel(de, Long.valueOf(num));
					} else
						ServletUtils.setDataElementVisualizzaLabel(de);
					e.add(de);

					this.addInUsoButtonVisualizzazioneClassica(e, pt.getNome(), pt.getNome()+"@"+this.idAccordoFactory.getUriFromAccordo(as), InUsoType.PORT_TYPE);
										
					dati.add(e);
				}

			}

			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	// Controlla i dati del porttype dell'accordo
	public boolean accordiPorttypeCheckData(TipoOperazione tipoOperazione,String id,String nomept,String descr,String profProtocollo,String filtroduppt,
			String confricpt,String idcollpt,String idRifRichiestaPt,String consordpt,String scadenzapt) throws Exception {

		try{
			// Campi obbligatori
			if (nomept.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Nome");
				return false;
			}

			// check lunghezza
			if(this.checkLength255(nomept, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME)==false) {
				return false;
			}
			if(descr!=null && !"".equals(descr)) {
				if(this.checkLength255(descr, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE)==false) {
					return false;
				}
			}
			
			// Il nome deve contenere solo lettere e numeri e '_' '-' '.'
			if(this.checkNCName(nomept, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME)==false){
				return false;
			}			

			// Controllo che i campi DataElementType.SELECT abbiano uno dei valori ammessi
			if (!profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT) && !profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO)) {
				this.pd.setMessage("Il profilo dev'essere \""+AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO[0]
						+"\" o \""+AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO[1]+"\"");
				return false;
			}

			if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo)) {
				// Controllo che i campi DataElementType.CHECKBOX abbiano uno dei valori ammessi
				if ((filtroduppt != null) && !filtroduppt.equals(Costanti.CHECK_BOX_ENABLED) && !filtroduppt.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !filtroduppt.equals(Costanti.CHECK_BOX_DISABLED) && !filtroduppt.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI+" dev'essere selezionato o deselezionato");
					return false;
				}
				if ((confricpt != null) && !confricpt.equals(Costanti.CHECK_BOX_ENABLED) && !confricpt.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !confricpt.equals(Costanti.CHECK_BOX_DISABLED) && !confricpt.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((idcollpt != null) && !idcollpt.equals(Costanti.CHECK_BOX_ENABLED) && !idcollpt.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !idcollpt.equals(Costanti.CHECK_BOX_DISABLED) && !idcollpt.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((idRifRichiestaPt != null) && !idRifRichiestaPt.equals(Costanti.CHECK_BOX_ENABLED) && !idRifRichiestaPt.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !idRifRichiestaPt.equals(Costanti.CHECK_BOX_DISABLED) && !idRifRichiestaPt.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((consordpt != null) && !consordpt.equals(Costanti.CHECK_BOX_ENABLED) && !consordpt.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !consordpt.equals(Costanti.CHECK_BOX_DISABLED) && !consordpt.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE+" dev'essere selezionata o deselezionata");
					return false;
				}

				// scadenzapt dev'essere numerico
				if (!scadenzapt.equals("") && !this.checkNumber(scadenzapt, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA, false)) {
					return false;
				}
			}

			// Se tipoOp = add, controllo che il porttype non sia gia' stato
			// registrato per l'accordo
			if (tipoOperazione.equals(TipoOperazione.ADD)) {
				boolean giaRegistrato = this.apcCore.existsAccordoServizioPorttype(nomept, Integer.parseInt(id));
				if (giaRegistrato) {
					this.pd.setMessage("Il servizio " + nomept + " &egrave; gi&agrave; stato associato alla API");
					return false;
				}
			}
			return true;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public List<DataElement> addAccordiPorttypeToDati(List<DataElement> dati, String id, String nomept, String profProtocollo, 
			String filtroduppt, String deffiltroduppt, String confricpt, String defconfricpt, String idcollpt, String defidcollpt, String idRifRichiestaPt, String defIdRifRichiestaPt,
			String consordpt, String defconsordpt, String scadenzapt, String defscadenzapt, 
			TipoOperazione tipoOperazione, String defProfiloCollaborazionePT, String profiloCollaborazionePT, 
			String descr, String stato, String tipoAccordo,String protocollo,String servizioStyle,ServiceBinding serviceBinding,
			IProtocolFactory<?> protocolFactory, MessageType messageType)
					throws Exception {
		try {
			boolean modificheAbilitate = false;
			if( tipoOperazione.equals(TipoOperazione.ADD) ){
				modificheAbilitate = true;
			}else if(this.isShowGestioneWorkflowStatoDocumenti()==false){
				modificheAbilitate = true;
			}else if(StatiAccordo.finale.toString().equals(stato)==false){
				modificheAbilitate = true;
			}

			DataElement de = new DataElement();
			de.setValue(id);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			dati.add(de);

			de = new DataElement();
			de.setValue(tipoAccordo);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
			dati.add(de);

			de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PORT_TYPE);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
			de.setValue(nomept);
			if (tipoOperazione.equals(TipoOperazione.ADD)) {
				de.setType(DataElementType.TEXT_EDIT);
				de.setRequired(true);
			} else {
				de.setType(DataElementType.TEXT);
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME);
			de.setSize(this.getSize());
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE);
			de.setValue(descr);
			de.setType(DataElementType.TEXT_EDIT);
			if( !modificheAbilitate && (descr==null || "".equals(descr)) )
				de.setValue(" ");
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_DESCRIZIONE);
			de.setSize(this.getSize());
			dati.add(de);
			
			dati.add(this.getMessageTypeDataElement(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_MESSAGE_TYPE,
					protocolFactory, serviceBinding, messageType));
			
			if (this.isModalitaStandard()) {
				profProtocollo = AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO;
			}


			boolean filtroDuplicatiSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.FILTRO_DUPLICATI);
			boolean confermaRicezioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.CONFERMA_RICEZIONE);
			boolean collaborazioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.COLLABORAZIONE);
			boolean idRiferimentoRichiestaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA);
			boolean consegnaInOrdineSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.CONSEGNA_IN_ORDINE);
			boolean scadenzaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.SCADENZA);

			/*
			if (this.isModalitaStandard()) {

				de = new DataElement();
				de.setType(DataElementType.TITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI);
				dati.add(de);


				de = new DataElement();
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_BUSTA);
				de.setValue(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO);
				dati.add(de);


				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROFILO_COLLABORAZIONE);
				de.setType(DataElementType.SELECT);
				de.setValues(this.core.getProfiliDiCollaborazioneSupportatiDalProtocollo(protocollo,serviceBinding));
				// de.setLabels(tipoProfcollLabel);
				de.setSelected(profiloCollaborazionePT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_PROFILO_COLLABORAZIONE);
				dati.add(de);

				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI);
				de.setType(DataElementType.HIDDEN);
				if(ServletUtils.isCheckBoxEnabled(filtroduppt) || CostantiRegistroServizi.ABILITATO.equals(filtroduppt)){
					de.setValue(Costanti.CHECK_BOX_ENABLED);
				}else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
				}
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_FILTRO_DUPLICATI);
				dati.add(de);

				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE);
				de.setType(DataElementType.HIDDEN);
				if(ServletUtils.isCheckBoxEnabled(confricpt) || CostantiRegistroServizi.ABILITATO.equals(confricpt)){
					de.setValue(Costanti.CHECK_BOX_ENABLED);
				}else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
				}
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_CONFERMA_RICEZIONE);
				dati.add(de);

				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE);
				de.setType(DataElementType.HIDDEN);
				if(ServletUtils.isCheckBoxEnabled(idcollpt) || CostantiRegistroServizi.ABILITATO.equals(idcollpt)){
					de.setValue(Costanti.CHECK_BOX_ENABLED);
				}else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
				}
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_COLLABORAZIONE);
				dati.add(de);
				
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
				de.setType(DataElementType.HIDDEN);
				if(ServletUtils.isCheckBoxEnabled(idRifRichiestaPt) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiestaPt)){
					de.setValue(Costanti.CHECK_BOX_ENABLED);
				}else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
				}
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_ID_RIFERIMENTO_RICHIESTA);
				dati.add(de);

				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE);
				de.setType(DataElementType.HIDDEN);
				if(ServletUtils.isCheckBoxEnabled(consordpt) || CostantiRegistroServizi.ABILITATO.equals(consordpt)){
					de.setValue(Costanti.CHECK_BOX_ENABLED);
				}else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
				}
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_CONSEGNA_ORDINE);
				dati.add(de);

				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA);
				de.setType(DataElementType.HIDDEN);
				de.setValue(scadenzapt);
				if( !modificheAbilitate && (scadenzapt==null || "".equals(scadenzapt)) )
					de.setValue(" ");
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_SCADENZA);
				dati.add(de);

			} else {
			*/

			de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI);
			dati.add(de);

			if (this.isModalitaStandard()) {
				de = new DataElement();
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_BUSTA);
				de.setValue(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO);
				dati.add(de);
				profProtocollo = AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO; // forzo
			}
			else {
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PROFILO_PROTOCOLLO);
				de.setType(DataElementType.SELECT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_BUSTA);
				if(modificheAbilitate){
					de.setValues(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA);
					de.setLabels(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO);
					de.setSelected(profProtocollo);
					//							de.setOnChange("CambiaProfPT('" + tipoOp + "')");
					de.setPostBack(true);
				}else{
					de.setType(DataElementType.TEXT);
					if(profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)){
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_DEFAULT_ACCORDO);
					}else{
						de.setValue(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO);
					}
				}
				dati.add(de);
			}

			// Parametro duplicato
//				de = new DataElement();
//				de.setType(DataElementType.HIDDEN);
//				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_BUSTA);
//				de.setValue(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO);
//				dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROFILO_COLLABORAZIONE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defProfiloCollaborazionePT);
			} else {
				de.setType(DataElementType.SELECT);
				de.setValues(this.core.getProfiliDiCollaborazioneSupportatiDalProtocollo(protocollo,serviceBinding));
				// de.setLabels(tipoProfcollLabel);
				de.setSelected(profiloCollaborazionePT);
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_PROFILO_COLLABORAZIONE);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(deffiltroduppt);
			} else {
				if(!filtroDuplicatiSupportato){
					de.setType(DataElementType.HIDDEN);
//					if(filtroDuplicatiSupportato) {
//						// se il protocollo lo supporta, lascio il filtro abilitato per default
//						de.setValue(Costanti.CHECK_BOX_ENABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else {
					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if(ServletUtils.isCheckBoxEnabled(filtroduppt) || CostantiRegistroServizi.ABILITATO.equals(filtroduppt)){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if(ServletUtils.isCheckBoxEnabled(filtroduppt) || CostantiRegistroServizi.ABILITATO.equals(filtroduppt)){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_FILTRO_DUPLICATI);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defconfricpt);
			} else {
				if(!confermaRicezioneSupportato){
					de.setType(DataElementType.HIDDEN);
//					if(confermaRicezioneSupportato) {
//						// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//						de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else {
					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if(ServletUtils.isCheckBoxEnabled(confricpt) || CostantiRegistroServizi.ABILITATO.equals(confricpt)){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if(ServletUtils.isCheckBoxEnabled(confricpt) || CostantiRegistroServizi.ABILITATO.equals(confricpt)){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_CONFERMA_RICEZIONE);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defidcollpt);
			} else {
				if(!collaborazioneSupportato){
					de.setType(DataElementType.HIDDEN);
//					if(collaborazioneSupportato) {
//						// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//						de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else {
					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if(ServletUtils.isCheckBoxEnabled(idcollpt) || CostantiRegistroServizi.ABILITATO.equals(idcollpt)){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if(ServletUtils.isCheckBoxEnabled(idcollpt) || CostantiRegistroServizi.ABILITATO.equals(idcollpt)){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_COLLABORAZIONE);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defIdRifRichiestaPt);
			} else {
				if(!idRiferimentoRichiestaSupportato){
					de.setType(DataElementType.HIDDEN);
//					if(idRiferimentoRichiestaSupportato) {
//						// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//						de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else {
					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if(ServletUtils.isCheckBoxEnabled(idRifRichiestaPt) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiestaPt)){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if(ServletUtils.isCheckBoxEnabled(idRifRichiestaPt) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiestaPt)){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_ID_RIFERIMENTO_RICHIESTA);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defconsordpt);
			} else {
				if(!consegnaInOrdineSupportato){
					de.setType(DataElementType.HIDDEN);
//					if(consegnaInOrdineSupportato) {
//						// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//						de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else {
					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if(ServletUtils.isCheckBoxEnabled(consordpt) || CostantiRegistroServizi.ABILITATO.equals(consordpt)){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if(ServletUtils.isCheckBoxEnabled(consordpt) || CostantiRegistroServizi.ABILITATO.equals(consordpt)){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}	
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_CONSEGNA_ORDINE);
			dati.add(de);


			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA);
			de.setValue(scadenzapt);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defscadenzapt);
			} else {
				if(!scadenzaSupportato){
					de.setType(DataElementType.HIDDEN);
					de.setValue(defscadenzapt);
				}else {
					de.setType(DataElementType.TEXT_EDIT);
					de.setValue(scadenzapt);
					if( !modificheAbilitate && (scadenzapt==null || "".equals(scadenzapt)) )
						de.setValue(" ");
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_SCADENZA);
			de.setSize(this.getSize());
			dati.add(de);
			
			
			if (!this.isModalitaStandard()) {

				// Informazione WSDL
				de = new DataElement();
				de.setType(DataElementType.TITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_WSDL);
				dati.add(de);

				// Style
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_STYLE);
				de.setType(DataElementType.SELECT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_STYLE);
				de.setValues(AccordiServizioParteComuneCostanti.PORT_TYPES_STYLE);
				de.setLabels(AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES_STYLE);
				de.setSelected(servizioStyle);
				dati.add(de);
			}
			return dati;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public void prepareAccordiAzioniList(AccordoServizioParteComune as, List<Azione> lista, ISearch ricerca,String idAs, String tipoAccordo)
			throws Exception {
		try {

			String uri = null;
			uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as); 

			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_AZIONI,
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idAs),
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO, tipoAccordo),
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri));


			int idLista = Liste.ACCORDI_AZIONI;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);	

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));

			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				ServletUtils.setPageDataTitle(this.pd, 
						new Parameter(AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo),
								AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST+"?"+
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
										new Parameter(AccordiServizioParteComuneCostanti.LABEL_AZIONI + " di " + labelASTitle, null)
						);
			}else{
				ServletUtils.setPageDataTitle(this.pd, 
						new Parameter(AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo),
								AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST+"?"+
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
										new Parameter(AccordiServizioParteComuneCostanti.LABEL_AZIONI + " di " + labelASTitle, 
												AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_AZIONI_LIST+"?"+
														AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID+"="+idAs+"&"+
														AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME+"="+uri+"&"+
														AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
														AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
														new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null)
						);
			}




			// controllo eventuali risultati ricerca
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_AZIONI, search);
			}

			// setto le label delle colonne
			String[] labels = { AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME, AccordiServizioParteComuneCostanti.LABEL_PROFILO_PROTOCOLLO };
			this.pd.setLabels(labels);

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

			if (lista != null) {
				Iterator<Azione> it = lista.iterator();

				while (it.hasNext()) {
					Azione az = it.next();
					List<DataElement> e = new ArrayList<>();

					DataElement de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_AZIONI_CHANGE, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idAs),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_NOME, az.getNome()),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
					de.setValue(az.getNome());
					de.setIdToRemove(az.getNome());
					e.add(de);

					de = new DataElement();
					if (az.getProfAzione().equals(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT))
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_DEFAULT_ACCORDO);
					else
						de.setValue(az.getProfAzione());
					e.add(de);

					dati.add(e);
				}

			}

			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	// Controlla i dati dell'azione dell'accordo
	public boolean accordiAzioniCheckData(TipoOperazione tipoOperazione, String id, String nomeaz, String profProtocollo, String filtrodupaz, String confricaz, String idcollaz, String idRifRichiestaAz,
			String consordaz, String scadenzaaz) throws Exception {
		try {
			if ((filtrodupaz != null) && (filtrodupaz.equals("null") || filtrodupaz.equals(Costanti.CHECK_BOX_DISABLED))) {
				filtrodupaz = null;
			}
			if ((confricaz != null) && (confricaz.equals("null") || confricaz.equals(Costanti.CHECK_BOX_DISABLED))) {
				confricaz = null;
			}
			if ((idcollaz != null) && (idcollaz.equals("null") || idcollaz.equals(Costanti.CHECK_BOX_DISABLED))) {
				idcollaz = null;
			}
			if ((idRifRichiestaAz != null) && (idRifRichiestaAz.equals("null") || idRifRichiestaAz.equals(Costanti.CHECK_BOX_DISABLED))) {
				idRifRichiestaAz = null;
			}
			if ((consordaz != null) && (consordaz.equals("null") || consordaz.equals(Costanti.CHECK_BOX_DISABLED))) {
				consordaz = null;
			}

			if (nomeaz.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Nome");
				return false;
			}

			if ((nomeaz.indexOf(" ") != -1)) {
				this.pd.setMessage("Non inserire spazi nel nome dell'azione");
				return false;
			}

			// check lunghezza
			if(this.checkLength255(nomeaz, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME)==false) {
				return false;
			}
			
			// Il nome deve contenere solo lettere e numeri e '_' '-' '.'
			if(this.checkNCName(nomeaz, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME)==false){
				return false;
			}

			// Controllo che i campi DataElementType.SELECT abbiano uno dei valori ammessi
			if (!profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT) && !profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO)) {
				this.pd.setMessage("Il profilo  dev'essere \""+AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO[0]
						+"\" o \""+AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO[1]+"\"");
				return false;
			}

			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO)) {
				// Controllo che i campi DataElementType.CHECKBOX abbiano uno dei valori
				// ammessi
				if ((filtrodupaz != null) && !filtrodupaz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI+" dev'essere selezionato o deselezionato");
					return false;
				}
				if ((confricaz != null) && !confricaz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((idcollaz != null) && !idcollaz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((idRifRichiestaAz != null) && !idRifRichiestaAz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((consordaz != null) && !consordaz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE+" dev'essere selezionata o deselezionata");
					return false;
				}

				// scadenzaaz dev'essere numerico
				if (!scadenzaaz.equals("") && !this.checkNumber(scadenzaaz, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA, false)) {
					return false;
				}
			}

			// Se tipoOp = add, controllo che l'azione non sia gia' stata
			// registrata per l'accordo
			if (tipoOperazione.equals(TipoOperazione.ADD)) {
				int idInt = Integer.parseInt(id);
				boolean giaRegistrato = this.apcCore.existsAccordoServizioAzione(nomeaz, idInt);
				if (giaRegistrato) {
					this.pd.setMessage("L'azione " + nomeaz + " &egrave; gi&agrave; stata associata alla API " + id);
					return false;
				}
			}

			return true;

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public List<DataElement> addAccordiAzioniToDati(List<DataElement> dati, String id, String nomeaz,  String profProtocollo, 
			String filtrodupaz, String deffiltrodupaz, String confricaz, String defconfricaz, 
			String idcollaz, String defidcollaz, String idRifRichiestaAz, String defIdRifRichiestaAz, String consordaz, String defconsordaz, String scadenzaaz, 
			String defscadenzaaz, String defprofcoll, String profcoll, 
			TipoOperazione tipoOperazione, String azicorr, String[] azioniList,String stato, String tipoSICA,String protocollo,ServiceBinding serviceBinding) throws Exception{

		DataElement de = new DataElement();
		de.setValue(id);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
		dati.add(de);

		boolean modificheAbilitate = false;
		if( tipoOperazione.equals(TipoOperazione.ADD) ){
			modificheAbilitate = true;
		}else if(this.isShowGestioneWorkflowStatoDocumenti()==false){
			modificheAbilitate = true;
		}else if(StatiAccordo.finale.toString().equals(stato)==false){
			modificheAbilitate = true;
		}

		de = new DataElement();
		de.setValue(tipoSICA);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
		dati.add(de);

		de = new DataElement();
		de.setType(DataElementType.TITLE);
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_AZIONE);
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
		de.setValue(nomeaz);
		if (tipoOperazione.equals(TipoOperazione.ADD)) {
			de.setType(DataElementType.TEXT_EDIT);
			de.setRequired(true);
		} else {
			de.setType(DataElementType.TEXT);
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_NOME);
		de.setSize(this.getSize());
		dati.add(de);

		
		boolean filtroDuplicatiSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.FILTRO_DUPLICATI);
		boolean confermaRicezioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.CONFERMA_RICEZIONE);
		boolean collaborazioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.COLLABORAZIONE);
		boolean idRiferimentoRichiestaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA);
		boolean consegnaInOrdineSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.CONSEGNA_IN_ORDINE);
		boolean scadenzaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.SCADENZA);
		
		de = new DataElement();
		de.setType(DataElementType.TITLE);
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI);
		dati.add(de);

		//boolean isAziCorr = false;
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_AZIONE_CORRELATA);
		if ((azioniList != null) && 
				((profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT) && defprofcoll.equals(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.toString())) 
						|| 
						(profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO) && profcoll.equals(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.toString())))) {
			//isAziCorr = true;
			de.setType(DataElementType.SELECT);
			de.setValues(azioniList);
			de.setSelected(azicorr);
		} else {
			de.setType(DataElementType.HIDDEN);
			de.setValue(azicorr);
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_CORRELATA);
		dati.add(de);



		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PROFILO_PROTOCOLLO);
		if(modificheAbilitate){
			de.setType(DataElementType.SELECT);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_BUSTA);
			de.setValues(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA);
			de.setLabels(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO);
			de.setSelected(profProtocollo);
			//			de.setOnChange("CambiaProf(" + tipoOp + "', '" + isAziCorr + "')");
			de.setPostBack(true);
		}else{
			de.setType(DataElementType.TEXT);
			if(profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)){
				de.setValue(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_DEFAULT_ACCORDO);
			}else{
				de.setValue(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO);
			}
		}
		dati.add(de);

		// Gli elementi qui sotto devono essere visualizzati solo in modalita' avanzata  && profilobusta = 'ridefinito' && se la corrispondente proprieta e' abilitata nel protocollo

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROFILO_COLLABORAZIONE);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_COLLABORAZIONE);
		if (profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT)) {
			de.setType(DataElementType.HIDDEN);
			de.setValue(defprofcoll);
		} else {
			de.setType(DataElementType.SELECT);
			de.setValues(this.core.getProfiliDiCollaborazioneSupportatiDalProtocollo(protocollo,serviceBinding));
			de.setSelected(profcoll);
			if(modificheAbilitate){
				//				de.setOnChange("CambiaProf('" + tipoOp + "', '" + true + "')");
				de.setPostBack(true);
			}
		}
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI);
		if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
				) {
			de.setType(DataElementType.HIDDEN);
			de.setValue(deffiltrodupaz);
		} else {
			if((profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
					&& !filtroDuplicatiSupportato) ){
				de.setType(DataElementType.HIDDEN);
//				if(filtroDuplicatiSupportato) {
//					// se il protocollo lo supporta, lascio il filtro abilitato per default
//					de.setValue(Costanti.CHECK_BOX_ENABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			}
			else
			{
				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if( ServletUtils.isCheckBoxEnabled(filtrodupaz) || CostantiRegistroServizi.ABILITATO.equals(filtrodupaz) ){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if( ServletUtils.isCheckBoxEnabled(filtrodupaz) || CostantiRegistroServizi.ABILITATO.equals(filtrodupaz) ){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}
			}
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_FILTRO_DUPLICATI);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE);
		if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
				) {
			de.setType(DataElementType.HIDDEN);
			de.setValue(defconfricaz);
		} else {
			if((profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
					&& !confermaRicezioneSupportato)){
				de.setType(DataElementType.HIDDEN);
//				if(confermaRicezioneSupportato) {
//					// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//					de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			}else{

				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if( ServletUtils.isCheckBoxEnabled(confricaz) || CostantiRegistroServizi.ABILITATO.equals(confricaz) ){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if( ServletUtils.isCheckBoxEnabled(confricaz) || CostantiRegistroServizi.ABILITATO.equals(confricaz) ){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}
			}
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_CONFERMA_RICEZIONE);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE);
		if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
				) {
			de.setType(DataElementType.HIDDEN);
			de.setValue(defidcollaz);
		} else {
			if(profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
					&& !collaborazioneSupportato) {
				de.setType(DataElementType.HIDDEN);
//				if(collaborazioneSupportato) {
//					// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//					de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			}else {

				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if( ServletUtils.isCheckBoxEnabled(idcollaz) || CostantiRegistroServizi.ABILITATO.equals(idcollaz) ){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if( ServletUtils.isCheckBoxEnabled(idcollaz) || CostantiRegistroServizi.ABILITATO.equals(idcollaz) ){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}
			}
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_COLLABORAZIONE);
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
		if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
				) {
			de.setType(DataElementType.HIDDEN);
			de.setValue(defIdRifRichiestaAz);
		} else {
			if(profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
					&& !idRiferimentoRichiestaSupportato) {
				de.setType(DataElementType.HIDDEN);
//				if(idRiferimentoRichiestaSupportato) {
//					// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//					de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			}else {

				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if( ServletUtils.isCheckBoxEnabled(idRifRichiestaAz) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiestaAz) ){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if( ServletUtils.isCheckBoxEnabled(idRifRichiestaAz) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiestaAz) ){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}
			}
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_ID_RIFERIMENTO_RICHIESTA);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE);
		if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
				) {
			de.setType(DataElementType.HIDDEN);
			de.setValue(defconsordaz);
		} else {
			if((profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
					&& !consegnaInOrdineSupportato) ){
				de.setType(DataElementType.HIDDEN);
//				if(consegnaInOrdineSupportato) {
//					// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//					de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
//				else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
//				}
			}else {
				if(modificheAbilitate){
					de.setType(DataElementType.CHECKBOX);
					if( ServletUtils.isCheckBoxEnabled(consordaz) || CostantiRegistroServizi.ABILITATO.equals(consordaz) ){
						de.setSelected(true);
					}
				}else{
					de.setType(DataElementType.TEXT);
					if( ServletUtils.isCheckBoxEnabled(consordaz) || CostantiRegistroServizi.ABILITATO.equals(consordaz) ){
						de.setValue(CostantiRegistroServizi.ABILITATO.toString());
					}else{
						de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
					}
				}
			}
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_CONSEGNA_ORDINE);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA);
		de.setValue(scadenzaaz);
		if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
				) {
			de.setType(DataElementType.HIDDEN);
			de.setValue(defscadenzaaz);
		} else {
			if((profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
					&& !scadenzaSupportato)){
				de.setType(DataElementType.HIDDEN);
				de.setValue(defscadenzaaz);
			}else {
				de.setType(DataElementType.TEXT_EDIT);
				de.setValue(scadenzaaz);
				if( !modificheAbilitate && (scadenzaaz==null || "".equals(scadenzaaz)) )
					de.setValue(" ");
			}
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_SCADENZA);
		de.setSize(this.getSize());
		dati.add(de);

		return dati;
	}


	public void addAccordiWSDLChangeToDati(List<DataElement> dati,String id,String tipoAccordo,String tipo,String label,
			String oldwsdl,String statoPackage,boolean validazioneDocumenti, String tipologiaDocumentoScaricare,
			ServiceBinding serviceBinding, boolean aggiornaEsistenti, boolean eliminaNonPresentiNuovaInterfaccia) throws Exception{

		String gestioneParziale = this.getParameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE);
		if(gestioneParziale == null) {
			gestioneParziale = "";
		}
		boolean nascondiSezioneDownload = gestioneParziale.equals(ApiCostanti.VALORE_PARAMETRO_APC_API_GESTIONE_PARZIALE_WSDL_CHANGE);
		
		DataElement de = new DataElement();
		String labelWSDL = label;
		
		Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
		if(!isModalitaVistaApiCustom) {
			if(label.contains(" di ")){
				labelWSDL = label.split(" di")[0];
			}else{
				labelWSDL = tipologiaDocumentoScaricare.toUpperCase().charAt(0)+tipologiaDocumentoScaricare.substring(1);
			}
		}

		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
		de.setValue(id);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
		dati.add(de);

		de = new DataElement();
		de.setValue(tipoAccordo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
		de.setSize(this.getSize());
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL);
		de.setValue(tipo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL);
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE);
		de.setType(DataElementType.HIDDEN);
		de.setName(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE);
		de.setValue(gestioneParziale);
		dati.add(de);

		if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(statoPackage)){
			this.pd.disableEditMode();

			if(!nascondiSezioneDownload) {
				de = new DataElement();
				de.setLabel(labelWSDL);
				de.setType(DataElementType.TITLE);
				dati.add(de);
			}
			
			if(this.core.isShowInterfacceAPI()) {
				de = new DataElement();
				de.setType(DataElementType.TEXT_AREA_NO_EDIT);
//				de.setType(DataElementType.HIDDEN);
				de.setValue(oldwsdl);
				de.setRows(CostantiControlStation.LABEL_PARAMETRO_TEXT_AREA_API_SIZE);
				de.setCols(CostantiControlStation.LABEL_PARAMETRO_TEXT_AREA_API_COLUMNS);
				de.setLabel("");
				dati.add(de);
			}
			
			if(oldwsdl != null && !oldwsdl.isEmpty()){
				DataElement saveAs = new DataElement();
				saveAs.setValue(AccordiServizioParteComuneCostanti.LABEL_DOWNLOAD);
				saveAs.setType(DataElementType.LINK);
				saveAs.setUrl(ArchiviCostanti.SERVLET_NAME_DOCUMENTI_EXPORT, 
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, id),
						new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO, tipologiaDocumentoScaricare),
						new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE));
				saveAs.setDisabilitaAjaxStatus();
				dati.add(saveAs);
			} else {
				de = new DataElement();
//				de.setLabel(labelWSDL);
				de.setType(DataElementType.TEXT);
				de.setValue(AccordiServizioParteComuneCostanti.LABEL_WSDL_NOT_FOUND);
				dati.add(de);
			}
			
		}
		else{
			//			de.setLabel(label.replace(" di ", " di <BR/>")+"<BR/>Attuale:");
			if(oldwsdl != null && !oldwsdl.isEmpty()){
				if(!nascondiSezioneDownload) {
					
					de = new DataElement();
					de.setLabel(labelWSDL);
					de.setType(DataElementType.TITLE);
					dati.add(de);
					
					if(this.core.isShowInterfacceAPI()) {
						de = new DataElement();
						de.setType(DataElementType.TEXT_AREA_NO_EDIT);
	//					de.setType(DataElementType.HIDDEN);
						de.setValue(oldwsdl);
						de.setRows(CostantiControlStation.LABEL_PARAMETRO_TEXT_AREA_API_SIZE);
						de.setCols(CostantiControlStation.LABEL_PARAMETRO_TEXT_AREA_API_COLUMNS);
						//de.setLabel(AccordiServizioParteComuneCostanti.LABEL_WSDL_ATTUALE );
						dati.add(de);
					}
					
					DataElement saveAs = new DataElement();
					saveAs.setValue(AccordiServizioParteComuneCostanti.LABEL_DOWNLOAD);
					saveAs.setType(DataElementType.LINK);
					saveAs.setUrl(ArchiviCostanti.SERVLET_NAME_DOCUMENTI_EXPORT, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, id),
							new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO, tipologiaDocumentoScaricare),
							new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE));
					saveAs.setDisabilitaAjaxStatus();
					dati.add(saveAs);
				}

				de = new DataElement();
				de.setType(DataElementType.TITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_WSDL_AGGIORNAMENTO+ " "+ labelWSDL);
				de.setValue("");
				de.setSize(this.getSize());
				dati.add(de);

			}else {
				
				if(gestioneParziale!=null && !"".equals(gestioneParziale)) {
				
					de = new DataElement();
					de.setType(DataElementType.TITLE);
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INTERFACCIA+ " "+ labelWSDL);
					de.setValue("");
					de.setSize(this.getSize());
					dati.add(de);
					
				}
				else {
					
					if(!nascondiSezioneDownload) {
						de = new DataElement();
						de.setLabel(labelWSDL);
						de.setType(DataElementType.TITLE);
						dati.add(de);
					}
					
				}
				
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_WSDL_ATTUALE );
				de.setType(DataElementType.TEXT);
				de.setValue(AccordiServizioParteComuneCostanti.LABEL_WSDL_NOT_FOUND);
				dati.add(de);
			}

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VALIDAZIONE_SPECIFICA);
			de.setValue(""+validazioneDocumenti);
			if (this.isModalitaAvanzata()) {
				de.setType(DataElementType.CHECKBOX);
				de.setSelected(validazioneDocumenti);
			}else{
				de.setType(DataElementType.HIDDEN);
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VALIDAZIONE_DOCUMENTI);
			de.setSize(this.getSize());
			dati.add(de);

			de = new DataElement();
			//			de.setLabel(label.replace(" di ", " di <BR/>")+"<BR/>Nuovo:");
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_WSDL_NUOVO);
			de.setValue("");
			de.setType(DataElementType.FILE);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL);
			de.setSize(this.getSize());
			dati.add(de);

			if(oldwsdl != null && !oldwsdl.isEmpty()){
				de = new DataElement();
				de.setBold(true);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_WSDL_CHANGE_CLEAR_WARNING);
				de.setValue(AccordiServizioParteComuneCostanti.LABEL_WSDL_CHANGE_CLEAR);
				de.setType(DataElementType.NOTE);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_WARN);
				de.setSize(this.getSize());
				dati.add(de);
			}

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_UPDATE_WSDL_AGGIORNA_LEFT);
			switch (serviceBinding) {
			case REST:
				de.setLabelRight(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_UPDATE_WSDL_AGGIORNA_REST);
				break;
			case SOAP:
				de.setLabelRight(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_UPDATE_WSDL_AGGIORNA_SOAP);
				break;
			}
			de.setValue(""+aggiornaEsistenti);
			de.setType(DataElementType.CHECKBOX);
			de.setSelected(aggiornaEsistenti);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UPDATE_WSDL_AGGIORNA);
			de.setSize(this.getSize());
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_UPDATE_WSDL_ELIMINA_LEFT);
			switch (serviceBinding) {
			case REST:
				de.setLabelRight(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_UPDATE_WSDL_ELIMINA_REST);
				break;
			case SOAP:
				de.setLabelRight(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_UPDATE_WSDL_ELIMINA_SOAP);
				break;
			}
			de.setValue(""+eliminaNonPresentiNuovaInterfaccia);
			de.setType(DataElementType.CHECKBOX);
			de.setSelected(eliminaNonPresentiNuovaInterfaccia);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UPDATE_WSDL_ELIMINA);
			de.setSize(this.getSize());
			dati.add(de);

		}
	}

	public void addAccordiWSDLChangeToDatiAsHidden(List<DataElement> dati,String id,String tipoAccordo,String tipo,String label,
			String oldwsdl,String statoPackage,boolean validazioneDocumenti){

		DataElement de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
		de.setValue(id);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
		dati.add(de);

		de = new DataElement();
		de.setValue(tipoAccordo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
		de.setSize(this.getSize());
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL);
		de.setValue(tipo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL);
		dati.add(de);

		if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(statoPackage)){
			this.pd.disableEditMode();
		}
		else{
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VALIDAZIONE_SPECIFICA);
			de.setValue(""+validazioneDocumenti);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VALIDAZIONE_DOCUMENTI);
			dati.add(de);
		}
	}

	// Controlla i dati dei WSDL degli Accordi e dei Servizi
	public boolean accordiWSDLCheckData(PageData pd,String tipo, String wsdl, AccordoServizioParteComune as,boolean validazioneDocumenti, String protocollo) throws Exception {

		if(validazioneDocumenti){

			boolean validazioneParteComune = false;
			boolean validazioneSpecificaConversazione = false;

			FormatoSpecifica formato = null;
			if(as!=null) {
				formato = as.getFormatoSpecifica();
			}
			
			if (tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_DEFINITORIO)) {
				byte [] tmp = this.apcCore.getInterfaceAsByteArray(formato, wsdl);
				if(as!=null) {
					as.setByteWsdlDefinitorio(tmp);
				}
				validazioneParteComune = true;
			}
			else if (tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE)) {
				byte [] tmp = this.apcCore.getInterfaceAsByteArray(formato, wsdl);
				if(as!=null) {
					as.setByteWsdlConcettuale(tmp);
				}
				validazioneParteComune = true;
			}
			else if (tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE)) {
				byte [] tmp = this.apcCore.getInterfaceAsByteArray(formato, wsdl);
				if(as!=null) {
					as.setByteWsdlLogicoErogatore(tmp);
				}
				validazioneParteComune = true;
			}
			else if (tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE)) {
				byte [] tmp = this.apcCore.getInterfaceAsByteArray(formato, wsdl);
				if(as!=null) {
					as.setByteWsdlLogicoFruitore(tmp);
				}
				validazioneParteComune = true;
			}

			else if (tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_CONCETTUALE)) {
				byte [] tmp = this.apcCore.getInterfaceAsByteArray(formato, wsdl);
				if(as!=null) {
					as.setByteSpecificaConversazioneConcettuale(tmp);
				}
				validazioneSpecificaConversazione = true;
			}
			else if (tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_EROGATORE)) {
				byte [] tmp = this.apcCore.getInterfaceAsByteArray(formato, wsdl);
				if(as!=null) {
					as.setByteSpecificaConversazioneErogatore(tmp);
				}
				validazioneSpecificaConversazione = true;
			}
			else if (tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_FRUITORE)) {
				byte [] tmp = this.apcCore.getInterfaceAsByteArray(formato, wsdl);
				if(as!=null) {
					as.setByteSpecificaConversazioneFruitore(tmp);
				}
				validazioneSpecificaConversazione = true;
			}

			if(validazioneParteComune){
				ValidazioneResult result = this.apcCore.validaInterfacciaWsdlParteComune(as, protocollo);
				if(result.isEsito()==false){
					String msgErroreHTML = result.getMessaggioErrore();
					if(msgErroreHTML!=null) {
						msgErroreHTML = msgErroreHTML.replaceAll("\n", org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
					}
					pd.setMessage(msgErroreHTML);
				}
				else if(result.getMessaggioWarning()!=null && StringUtils.isNotEmpty(result.getMessaggioWarning())) {
					String msgWarningHTML = result.getMessaggioWarning();
					if(msgWarningHTML!=null) {
						msgWarningHTML = msgWarningHTML.replaceAll("\n", org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
					}
					this.pd.setMessage(msgWarningHTML, org.openspcoop2.web.lib.mvc.MessageType.WARN);
				}
				return result.isEsito();
			}
			if(validazioneSpecificaConversazione){
				ValidazioneResult result = this.apcCore.validaSpecificaConversazione(as, protocollo);
				if(result.isEsito()==false){
					pd.setMessage(result.getMessaggioErrore());
				}
				return result.isEsito();
			}
		}

		return true;
	}

	public List<DataElement> addAccordiToDati(List<DataElement> dati, 
			String nome, String descr, String profcoll, BinaryParameter wsdldef, BinaryParameter wsdlconc, BinaryParameter wsdlserv, BinaryParameter wsdlservcorr,
			BinaryParameter wsblconc, BinaryParameter wsblserv, BinaryParameter wsblservcorr,
			String filtrodup, String confric, String idcoll, String idRifRichiesta, String consord, String scadenza, String id, 
			TipoOperazione tipoOperazione, boolean showUtilizzoSenzaAzione, boolean utilizzoSenzaAzione,
			String referente, String versione, 
			String[] providersList, String[] providersListLabel,boolean privato,
			boolean isServizioComposto,String[] accordiCooperazioneEsistenti,String[] accordiCooperazioneEsistentiLabel,String accordoCooperazione,
			String stato,String oldStato,String tipoAccordo,boolean validazioneDocumenti,
			String tipoProtocollo, List<String> listaTipiProtocollo, boolean used, boolean asWithAllegatiXSD,
			IProtocolFactory<?> protocolFactory,
			ServiceBinding serviceBinding, MessageType messageType, org.openspcoop2.protocol.manifest.constants.InterfaceType interfaceType,
			String gruppi, List<String> elencoGruppi,
			boolean gestioneNuovaVersione, int gestioneNuovaVersioneMin, boolean gestioneNuovaVersioneRidefinisciInterfaccia, long gestioneNuovaVersioneOldIdApc,
			boolean confirm, String canaleStato, String canale, List<CanaleConfigurazione> canaleList, boolean gestioneCanaliEnabled
			) throws Exception {

		Boolean showAccordiAzioniObject = ServletUtils.getObjectFromSession(this.request, this.session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_VISUALIZZA_ACCORDI_AZIONI);
		boolean showAccordiAzioni = showAccordiAzioniObject!=null && showAccordiAzioniObject.booleanValue();
		Boolean showAccordiCooperazioneObject = ServletUtils.getObjectFromSession(this.request, this.session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_VISUALIZZA_ACCORDI_COOPERAZIONE);
		boolean showAccordiCooperazione = showAccordiCooperazioneObject != null && showAccordiCooperazioneObject.booleanValue();
		boolean isInterfacciaAvanzata = this.isModalitaAvanzata();
		boolean ripristinoStatoOperativo = this.core.isGestioneWorkflowStatoDocumentiRipristinoStatoOperativoDaFinale();

		
		boolean modificheAbilitate = false;
		if( tipoOperazione.equals(TipoOperazione.ADD)
				||
			(!this.isShowGestioneWorkflowStatoDocumenti())
				||
			(!StatiAccordo.finale.toString().equals(oldStato))
			){
			modificheAbilitate = true;
		}

		boolean modificaAbilitataServizioComposto = true;
		if (AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO.equals(tipoAccordo)){
			modificaAbilitataServizioComposto = tipoOperazione.equals(TipoOperazione.ADD);
		}

		boolean showServizioCompostoCheck = AccordiServizioParteComuneUtilities.showFlagServizioComposto();

		Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
		String apiGestioneParziale = this.getParameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE);
		
		DataElement de = new DataElement();
		de.setName(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE);
		de.setValue(apiGestioneParziale);
		de.setType(DataElementType.HIDDEN);
		dati.add(de);
		
		Parameter pApiGestioneParziale = null;
		if(isModalitaVistaApiCustom!=null && isModalitaVistaApiCustom) {
			pApiGestioneParziale = new Parameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE, apiGestioneParziale);
		}
		else {
			pApiGestioneParziale = new Parameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE, "");
		}
		
		boolean gestioneInformazioniGenerali = false;
		boolean gestioneInformazioniProfilo = false;
		boolean gestioneSoggettoReferente = false;
		boolean gestioneDescrizione = false;
		boolean gestioneSpecificaInterfacce = false;
		boolean gestioneInformazioniProtocollo = false;
		boolean gestioneGruppi = false;
		boolean gestioneCanale = false;
		if(TipoOperazione.ADD.equals(tipoOperazione) || 
				(isModalitaVistaApiCustom==null) || 
				(!isModalitaVistaApiCustom.booleanValue())
			) {
			gestioneInformazioniGenerali = true;
			gestioneInformazioniProfilo = true;
			gestioneSoggettoReferente = true;
			gestioneDescrizione = true;
			gestioneSpecificaInterfacce = true;
			gestioneInformazioniProtocollo = true;
			gestioneGruppi = true;
			gestioneCanale = true;
		}
		else  {
			if(ApiCostanti.VALORE_PARAMETRO_APC_API_INFORMAZIONI_GENERALI.equals(apiGestioneParziale)) {
				gestioneInformazioniGenerali = true;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_PROFILO.equals(apiGestioneParziale)) {
				gestioneInformazioniProfilo = true;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_SOGGETTO_REFERENTE.equals(apiGestioneParziale)) {
				gestioneSoggettoReferente = true;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_DESCRIZIONE.equals(apiGestioneParziale)) {
				gestioneDescrizione = true;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_GESTIONE_SPECIFICA_INTERFACCE.equals(apiGestioneParziale)) {
				gestioneSpecificaInterfacce = true;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_OPZIONI_AVANZATE.equals(apiGestioneParziale)) {
				gestioneInformazioniProtocollo = true;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_GRUPPI.equals(apiGestioneParziale)) {
				gestioneGruppi = true;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_CANALE.equals(apiGestioneParziale)) {
				gestioneCanale = true;
			}
		}
		
		if(gestioneInformazioniProfilo) {
			// nop
		}
		
		if(gestioneNuovaVersione) {
			de = new DataElement();
			de.setValue(gestioneNuovaVersione+"");
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_API_NUOVA_VERSIONE);
			de.setSize(this.getSize());
			dati.add(de);
			
			de = new DataElement();
			de.setValue(gestioneNuovaVersioneMin+"");
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_API_NUOVA_VERSIONE_MIN);
			de.setSize(this.getSize());
			dati.add(de);
			
			de = new DataElement();
			de.setValue(gestioneNuovaVersioneOldIdApc+"");
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_API_NUOVA_VERSIONE_OLD_ID_APC);
			de.setSize(this.getSize());
			dati.add(de);
			
		}
		
		de = new DataElement();
		de.setValue(tipoAccordo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
		de.setSize(this.getSize());
		dati.add(de);

		if(gestioneInformazioniGenerali) {
			de = new DataElement();
			String labelAccordoServizio = AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo);
			de.setLabel(labelAccordoServizio);
			de.setType(DataElementType.TITLE);
			dati.add(de);
		}
		if(TipoOperazione.CHANGE.equals(tipoOperazione) && (isModalitaVistaApiCustom!=null && isModalitaVistaApiCustom) && gestioneSoggettoReferente) {
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_REFERENTE);
			de.setType(DataElementType.TITLE);
			dati.add(de);
		}
		if(TipoOperazione.CHANGE.equals(tipoOperazione) && (isModalitaVistaApiCustom!=null && isModalitaVistaApiCustom) && gestioneDescrizione) {
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE);
			de.setType(DataElementType.TITLE);
			dati.add(de);
		}
		if(TipoOperazione.CHANGE.equals(tipoOperazione) && (isModalitaVistaApiCustom!=null && isModalitaVistaApiCustom) && gestioneGruppi) {
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_GRUPPI);
			de.setType(DataElementType.TITLE);
			dati.add(de);
		}
		
		// Protocollo

		if(TipoOperazione.CHANGE.equals(tipoOperazione)){
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			de.setValue(id);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO);

			if( gestioneInformazioniGenerali && (listaTipiProtocollo != null && listaTipiProtocollo.size() > 1) ){
				boolean usedCheckForProtocollo;
				/**usedCheckForProtocollo = used;*/
				usedCheckForProtocollo = true; // forzo l'indicazione in modo che il protocollo in change informazioni generali non sia modificabile
				if(usedCheckForProtocollo){
					
					DataElement deLABEL = new DataElement();
					deLABEL.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO);
					deLABEL.setType(DataElementType.TEXT);
					deLABEL.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO+CostantiControlStation.PARAMETRO_SUFFIX_LABEL);
					deLABEL.setValue(this.getLabelProtocollo(tipoProtocollo));
					dati.add(deLABEL);
					
					de.setValue(tipoProtocollo);
					de.setType(DataElementType.HIDDEN);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
				}else {
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO);
					de.setValues(listaTipiProtocollo);
					de.setLabels(this.getLabelsProtocolli(listaTipiProtocollo));
					de.setSelected(tipoProtocollo);
					de.setType(DataElementType.SELECT);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
					de.setPostBack(true);
				}
			} else {
				de.setValue(tipoProtocollo);
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
			}
			de.setSize(this.getSize());
			dati.add(de);
		}

		// Gestione del tipo protocollo per la maschera add
		if(TipoOperazione.ADD.equals(tipoOperazione)){
			de = new DataElement();
			if(!gestioneNuovaVersione && listaTipiProtocollo != null && listaTipiProtocollo.size() > 1){
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO);
				de.setValues(listaTipiProtocollo);
				de.setLabels(this.getLabelsProtocolli(listaTipiProtocollo));
				de.setSelected(tipoProtocollo);
				de.setType(DataElementType.SELECT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
				de.setPostBack(true);
			}else {
				de.setValue(tipoProtocollo);
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
			}
			de.setSize(this.getSize());
			dati.add(de);
			
		}
		
		// Service Binding
		boolean forceHiddenServiceBinding = !gestioneInformazioniGenerali;
		boolean usedCheckForServiceBinding = used;
		if( gestioneInformazioniGenerali && TipoOperazione.CHANGE.equals(tipoOperazione)  ) {
			usedCheckForServiceBinding = true; // forzo l'indicazione in modo che il tipo rest/soap in change informazioni generali non sia modificabile
		}
		if(gestioneNuovaVersione) {
			forceHiddenServiceBinding = true;
		}
		de = this.getServiceBindingDataElement(protocolFactory, usedCheckForServiceBinding, serviceBinding, forceHiddenServiceBinding);
		dati.add(de);
		
		// messagetype
		boolean nascondiMessageType = !isInterfacciaAvanzata || !gestioneInformazioniGenerali ;
		de = this.getMessageTypeDataElement(AccordiServizioParteComuneCostanti.PARAMETRO_APC_MESSAGE_TYPE,protocolFactory, serviceBinding, messageType,nascondiMessageType);
		dati.add(de);

		
		
		// Referente

		boolean showReferente = false;
		if(gestioneSoggettoReferente) {
			if(showAccordiCooperazione && isServizioComposto){
				showReferente = true;
			}
			else {
				showReferente = this.apcCore.isSupportatoSoggettoReferente(protocolFactory.getProtocol());
			}
		}
		
		de = new DataElement();
		if(TipoOperazione.ADD.equals(tipoOperazione) || isModalitaVistaApiCustom==null || (!isModalitaVistaApiCustom.booleanValue()) ) {
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_REFERENTE);
		}
		else {
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_REFERENTE);
		if(showReferente) {
			de.setPostBack(true);
			Soggetto sogg = null;
			if (referente != null && !"".equals(referente) && !"-".equals(referente) &&
				(Integer.parseInt(referente)>0)
				){
				sogg = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(referente));
			}
			if( modificheAbilitate && modificaAbilitataServizioComposto && !gestioneNuovaVersione && !confirm ){
	
				de.setType(DataElementType.SELECT);
				de.setValues(providersList);
				de.setLabels(providersListLabel);
				if (referente != null && !"".equals(referente) && !"-".equals(referente)) {
					de.setSelected(referente);
				}else{
					de.setSelected("-");
				}
				/**if(this.core.isBackwardCompatibilityAccordo11()==false){*/
				de.setRequired(true);
	
			}else{
				de.setType(DataElementType.HIDDEN);
				de.setValue(referente);
				dati.add(de);
	
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_REFERENTE);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_REFERENTE_1_2);
				de.setType(DataElementType.TEXT);
				if (referente != null && !"".equals(referente) && !"-".equals(referente)) {
					de.setValue(this.getLabelNomeSoggetto(tipoProtocollo,sogg.getTipo(),sogg.getNome()));
				}else{
					de.setValue("-");
				}
			}	
		}
		else {
			de.setType(DataElementType.HIDDEN);
			de.setValue(referente);
		}
		dati.add(de);
		
		
		
		if(showAccordiCooperazione && isServizioComposto){

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ACCORDO_COOPERAZIONE);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ACCORDO_COOPERAZIONE);
			if( gestioneInformazioniGenerali && modificheAbilitate && modificaAbilitataServizioComposto && !gestioneNuovaVersione){
				de.setType(DataElementType.SELECT);
				de.setValues(accordiCooperazioneEsistenti);
				de.setLabels(accordiCooperazioneEsistentiLabel);
				de.setSelected(accordoCooperazione!=null ? accordoCooperazione : "-");
				de.setRequired(true);
				de.setPostBack(true);
			}else{
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ACCORDO_COOPERAZIONE);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ACCORDO_COOPERAZIONE);
				de.setType(DataElementType.HIDDEN);
				de.setValue(accordoCooperazione);
				if(gestioneInformazioniGenerali) {
					dati.add(de);
	
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ACCORDO_COOPERAZIONE);
					de.setType(DataElementType.TEXT);
					for(int i=0;i<accordiCooperazioneEsistenti.length;i++){
						if(accordiCooperazioneEsistenti[i].equals(accordoCooperazione)){
							de.setValue(accordiCooperazioneEsistentiLabel[i]);
							break;
						}
					}
				}
			}
			dati.add(de);
		}
		

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
		de.setValue(nome);
		if( tipoOperazione.equals(TipoOperazione.ADD) || (gestioneInformazioniGenerali && modificheAbilitate) ){
			if(gestioneNuovaVersione) {
				de.setType(DataElementType.TEXT);
			}
			else {
				de.setType(DataElementType.TEXT_EDIT);
				de.setRequired(true);
			}
		}else{
			if(gestioneInformazioniGenerali) {
				de.setType(DataElementType.TEXT);
			}
			else {
				de.setType(DataElementType.HIDDEN);
			}
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME);
		de.setSize(this.getSize());
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE);
		de.setValue(StringEscapeUtils.escapeHtml(descr));
		if( tipoOperazione.equals(TipoOperazione.ADD) || (gestioneDescrizione && modificheAbilitate)){
			de.setType(DataElementType.TEXT_AREA);
			if(gestioneDescrizione && !tipoOperazione.equals(TipoOperazione.ADD)) {
				de.setRows(CostantiControlStation.TEXT_AREA_DESCRIZIONE_ROWS);
				de.setLabel(CostantiControlStation.LABEL_PROPRIETA_DESCRIZIONE_EMPTY);
			}
		}else{
			if(gestioneDescrizione) {
				de.setType(DataElementType.TEXT);
			}
			else {
				de.setType(DataElementType.HIDDEN);
			}
			if( !modificheAbilitate && StringUtils.isBlank(descr))
				de.setValue("");
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_DESCRIZIONE);
		de.setSize(this.getSize());
		dati.add(de);	
		
		// gruppi
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_GRUPPI);
		de.setValue(gruppi);
		de.setLabels(elencoGruppi);	
		de.setValues(elencoGruppi);
		
		if( tipoOperazione.equals(TipoOperazione.ADD) || (gestioneGruppi && modificheAbilitate)){
			de.setType(DataElementType.TEXT_EDIT);
		}else{
			if(gestioneGruppi) {
				de.setType(DataElementType.TEXT);
			}
			else {
				de.setType(DataElementType.HIDDEN);
			}
			if( !modificheAbilitate && StringUtils.isBlank(gruppi))
				de.setValue("");
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_GRUPPI);
		de.setSize(this.getSize());
		
		if(modificheAbilitate) {
			if(tipoOperazione.equals(TipoOperazione.ADD)) {
				de.enableTags();
			} else {
				de.enableTags(true);
				// supporto con i colori dei tag gia' presenti
				if(!StringUtils.isBlank(gruppi)) {
					// colleziono i tags registrati
					List<String> tagsDisponibili = this.gruppiCore.getAllGruppiOrdinatiPerDataRegistrazione();
					List<String> nomiGruppi = Arrays.asList(gruppi.split(","));
					
					for (String nomeGruppo : nomiGruppi) {
						int indexOf = tagsDisponibili.indexOf(nomeGruppo);
						if(indexOf == -1)
							indexOf = 0;
						
						indexOf = indexOf % CostantiControlStation.NUMERO_GRUPPI_CSS;
						
						de.addStatus(nomeGruppo, "label-info-"+indexOf, "");
					}
				}
			}
		}
		
		dati.add(de);
		
		// Canale
		this.addCanaleToDati(dati, tipoOperazione, canaleStato, canale, canaleList, gestioneCanaliEnabled, modificheAbilitate,	gestioneCanale);

		de = new DataElement();
		if( gestioneInformazioniGenerali && modificheAbilitate ){
			de = this.getVersionDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VERSIONE, 
					AccordiServizioParteComuneCostanti.PARAMETRO_APC_VERSIONE, 
					versione, false);
			if(gestioneNuovaVersione) {
				de.setMinValue(gestioneNuovaVersioneMin);
			}
		}else{
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VERSIONE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VERSIONE);
			de.setValue(versione);
			if(gestioneInformazioniGenerali) {
				de.setType(DataElementType.TEXT);
			}
			else {
				de.setType(DataElementType.HIDDEN);
			}
		}
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PRIVATO);
		if(privato){
			de.setValue(
					//privato ? 
						Costanti.CHECK_BOX_ENABLED 
					//	: Costanti.CHECK_BOX_DISABLED 
					);
			de.setSelected(
					//privato ? 
						Costanti.CHECK_BOX_ENABLED 
					//	: Costanti.CHECK_BOX_DISABLED 
					);
		}
		if (this.core.isShowFlagPrivato() &&  modificheAbilitate  && isInterfacciaAvanzata && gestioneInformazioniGenerali) {
			de.setType(DataElementType.CHECKBOX);
		} else {
			de.setType(DataElementType.HIDDEN);
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PRIVATO);
		dati.add(de);

		if(this.core.isShowFlagPrivato() && !modificheAbilitate && isInterfacciaAvanzata && gestioneInformazioniGenerali){
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PRIVATO_INFORMATIVA_VISIBILITA);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PRIVATO_INFORMATIVA_VISIBILITA);
			if(privato){
				de.setValue(AccordiServizioParteComuneCostanti.INFORMATIVA_VISIBILITA_PRIVATA);
			}else{
				de.setValue(AccordiServizioParteComuneCostanti.INFORMATIVA_VISIBILITA_PUBBLICA);
			}
			dati.add(de);
		}

		if(showAccordiCooperazione){
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_IS_SERVIZIO_COMPOSTO);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_IS_SERVIZIO_COMPOSTO);
			de.setValue(isServizioComposto ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED);
			if( modificheAbilitate && showServizioCompostoCheck && gestioneInformazioniGenerali){
				de.setSelected(isServizioComposto ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED);
				de.setType(DataElementType.CHECKBOX);
				de.setPostBack(true);
			}else{
				de.setType(DataElementType.HIDDEN);
			}
			de.setSize(getSize());
			dati.add(de);
		}


		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_STATO_PACKAGE);
		if(this.isShowGestioneWorkflowStatoDocumenti()){
			if( tipoOperazione.equals(TipoOperazione.ADD)){
				/**				if(isInterfacciaAvanzata)
				//					de.setType(DataElementType.TEXT);
				//				else 
				// Lascio sempre HIDDEN in ADD tanto poi se viene caricato il wsdl viene automaticamente impostato ad operativo
				// altrimenti in edit sara' possibile modificarlo.*/
				de.setType(DataElementType.HIDDEN);
				de.setValue(StatiAccordo.bozza.toString());
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_STATO_PACKAGE);
			} 
			else if(!StatiAccordo.finale.toString().equals(oldStato) && gestioneInformazioniGenerali ){
				de.setType(DataElementType.SELECT);
				de.setValues(StatiAccordo.toArray());
				de.setLabels(StatiAccordo.toLabel());
				de.setSelected(stato);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_STATO_PACKAGE);
			}else{
				
				if(gestioneInformazioniGenerali) {
					DataElement deLabel = new DataElement();
					deLabel.setType(DataElementType.TEXT);
					deLabel.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_STATO_PACKAGE);
					deLabel.setValue(StatiAccordo.upper(StatiAccordo.finale.toString()));
					deLabel.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_STATO_PACKAGE+CostantiControlStation.PARAMETRO_SUFFIX_LABEL);
					dati.add(deLabel);
				}
				
				de.setType(DataElementType.HIDDEN);
				de.setValue(StatiAccordo.finale.toString());
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_STATO_PACKAGE);

				if(ripristinoStatoOperativo && gestioneInformazioniGenerali){
					dati.add(de);

					de = new DataElement();
					de.setType(DataElementType.LINK);
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE,
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, nome),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RIPRISTINA_STATO, StatiAccordo.operativo.toString()),
							new Parameter(Costanti.DATA_ELEMENT_EDIT_MODE_NAME, Costanti.DATA_ELEMENT_EDIT_MODE_VALUE_EDIT_IN_PROGRESS));
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RIPRISTINA_STATO_OPERATIVO);
				} 
			}
		}else{
			de.setType(DataElementType.HIDDEN);
			de.setValue(StatiAccordo.finale.toString());
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_STATO_PACKAGE);
		}

		dati.add(de);		

		boolean showConversazioni = false;
		boolean showWsdlDefinitorio = false;
		boolean showWsdlAsincroni = false;
		if(isInterfacciaAvanzata && serviceBinding.equals(ServiceBinding.SOAP)) {
		
			if(tipoProtocollo!=null){
				showConversazioni = this.apcCore.showConversazioni(tipoProtocollo,serviceBinding,interfaceType);
			}
			else{
				showConversazioni = false;
			}
			showConversazioni = showConversazioni && isInterfacciaAvanzata;
		
			showWsdlDefinitorio = this.apcCore.showWsdlDefinitorio(tipoProtocollo,serviceBinding,interfaceType);
			
			showWsdlAsincroni = this.core.isProfiloDiCollaborazioneAsincronoSupportatoDalProtocollo(tipoProtocollo,serviceBinding);
			
		}
		
		DataElement deValidazione = new DataElement();
		deValidazione.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VALIDAZIONE_SPECIFICA);
		deValidazione.setValue(""+validazioneDocumenti);
		if ( tipoOperazione.equals(TipoOperazione.ADD) && this.isModalitaAvanzata() ) {
			deValidazione.setType(DataElementType.CHECKBOX);
			deValidazione.setSelected(validazioneDocumenti);
			
			if(showConversazioni || showWsdlDefinitorio || showWsdlAsincroni) {
				deValidazione.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VALIDAZIONE_SPECIFICHE);
			}
			
		}else{
			deValidazione.setType(DataElementType.HIDDEN);
		}
		deValidazione.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VALIDAZIONE_DOCUMENTI);
		deValidazione.setSize(this.getSize());
		if((!tipoOperazione.equals(TipoOperazione.ADD)) || showConversazioni) {
			dati.add(deValidazione);
		}

		Boolean contaListeObject = ServletUtils.getContaListeFromSession(this.session);
		boolean contaListe = contaListeObject!=null && contaListeObject.booleanValue();
		
		if (!tipoOperazione.equals(TipoOperazione.ADD)) {

			if(this.isModalitaCompleta()) {
				switch(serviceBinding) {
				case REST:
						de = new DataElement();
						de.setType(DataElementType.LINK);
						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_LIST, 
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID,id),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME,nome),
								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
						if(contaListe){
							// BugFix OP-674
							/** int num = this.apcCore.accordiAzioniList(Integer.parseInt(id), new Search(true)).size();*/
							ConsoleSearch searchForCount = new ConsoleSearch(true,1);
							this.apcCore.accordiResourceList(Integer.parseInt(id), searchForCount);
							int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES);
							de.setValue(AccordiServizioParteComuneCostanti.LABEL_RISORSE+" ("+num+")");
						}else{
							de.setValue(AccordiServizioParteComuneCostanti.LABEL_RISORSE);
						}
						dati.add(de);
					break;
				case SOAP:
				default:
					if (showAccordiAzioni) {
						de = new DataElement();
						de.setType(DataElementType.LINK);
						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_AZIONI_LIST, 
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID,id),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME,nome),
								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
						if(contaListe){
							// BugFix OP-674
							/** int num = this.apcCore.accordiAzioniList(Integer.parseInt(id), new Search(true)).size();*/
							ConsoleSearch searchForCount = new ConsoleSearch(true,1);
							this.apcCore.accordiAzioniList(Integer.parseInt(id), searchForCount);
							int num = searchForCount.getNumEntries(Liste.ACCORDI_AZIONI);
							de.setValue(AccordiServizioParteComuneCostanti.LABEL_AZIONI+" ("+num+")");
						}else{
							de.setValue(AccordiServizioParteComuneCostanti.LABEL_AZIONI);
						}
						dati.add(de);
					}
	
					// PortType
					de = new DataElement();
					de.setType(DataElementType.LINK);
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPES_LIST, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID,id),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME,nome),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
					if(contaListe){
						// BugFix OP-674
						/** int num = this.apcCore.accordiPorttypeList(Integer.parseInt(id), new Search(true)).size();*/
						ConsoleSearch searchForCount = new ConsoleSearch(true,1);
						this.apcCore.accordiPorttypeList(Integer.parseInt(id), searchForCount);
						int num = searchForCount.getNumEntries(Liste.ACCORDI_PORTTYPE);
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES+" ("+num+")");
					}else{
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES);
					}
					dati.add(de);
					break;
				
				}

				de = new DataElement();
				de.setType(DataElementType.LINK);
				de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_ALLEGATI_LIST, 
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID,id),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME,nome),
						AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
				if(contaListe){
					// BugFix OP-674
					/** int num = this.apcCore.accordiAllegatiList(Integer.parseInt(id), new Search(true)).size(); */
					ConsoleSearch searchForCount = new ConsoleSearch(true,1);
					this.apcCore.accordiAllegatiList(Integer.parseInt(id), searchForCount);
					int num = searchForCount.getNumEntries(Liste.ACCORDI_ALLEGATI);
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_ALLEGATI+" ("+num+")");
				}else{
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_ALLEGATI);
				}
				dati.add(de);
			}

			if(showAccordiCooperazione && isServizioComposto && gestioneInformazioniGenerali){
				de = new DataElement();
				de.setType(DataElementType.LINK);
				de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_COMPONENTI_LIST, 
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID,id),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME,nome));
				if(contaListe){
					// BugFix OP-674
					/** int num = this.apcCore.accordiComponentiList(Integer.parseInt(id), new Search(true)).size(); */
					ConsoleSearch searchForCount = new ConsoleSearch(true,1);
					this.apcCore.accordiComponentiList(Integer.parseInt(id), searchForCount);
					int num = searchForCount.getNumEntries(Liste.ACCORDI_COMPONENTI);
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_SERVIZI_COMPONENTI+" ("+num+")");
				}else{
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_SERVIZI_COMPONENTI);
				}
				dati.add(de);
			}

		}
		
		if(TipoOperazione.CHANGE.equals(tipoOperazione) && this.isModalitaCompleta()) {
			de = new DataElement();
			de.setType(DataElementType.LINK);
			de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_EROGATORI_LIST, 
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID,id),
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME,nome),
					AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
			if (!tipoOperazione.equals(TipoOperazione.ADD)) {
				// BugFix OP-674
				/** int num = this.apcCore.accordiErogatoriList(Integer.parseInt(id), new Search(true)).size(); */
				ConsoleSearch searchForCount = new ConsoleSearch(true,1);
				this.apcCore.accordiErogatoriList(Integer.parseInt(id), searchForCount);
				int num = searchForCount.getNumEntries(Liste.ACCORDI_EROGATORI);
				de.setValue(AccordiServizioParteComuneCostanti.LABEL_ACCORDI_EROGATORI+" ("+num+")");
			}else{
				de.setValue(AccordiServizioParteComuneCostanti.LABEL_ACCORDI_EROGATORI);
			}
			dati.add(de);
		}

		if(gestioneNuovaVersione && !gestioneNuovaVersioneRidefinisciInterfaccia) {
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_SPECIFICA_INTERFACCE);
			de.setType(DataElementType.TITLE);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_API_NUOVA_VERSIONE_RIDEFINISCI_INTERFACCIA);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_API_NUOVA_VERSIONE_RIDEFINISCI_INTERFACCIA);
			de.setType(DataElementType.CHECKBOX);
			de.setSelected(gestioneNuovaVersioneRidefinisciInterfaccia);
			de.setPostBack(true);
			dati.add(de);
			
		}
		else {
		
			List<org.openspcoop2.protocol.manifest.constants.InterfaceType> interfaceTypeList = this.core.getInterfaceTypeList(protocolFactory, serviceBinding);
			
			// interfacetype
			DataElement deInterfaceType = this.getInterfaceTypeDataElement(tipoOperazione,protocolFactory, serviceBinding,interfaceType);
			if(interfaceTypeList == null || interfaceTypeList.isEmpty()) {
				dati.add(deInterfaceType);
			} else {
				
				if(tipoOperazione.equals(TipoOperazione.ADD) || gestioneSpecificaInterfacce) {
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_SPECIFICA_INTERFACCE);
					de.setType(DataElementType.TITLE);
					dati.add(de);
				}
				
				if(gestioneNuovaVersione) {
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_API_NUOVA_VERSIONE_RIDEFINISCI_INTERFACCIA);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_API_NUOVA_VERSIONE_RIDEFINISCI_INTERFACCIA);
					de.setType(DataElementType.CHECKBOX);
					de.setSelected(gestioneNuovaVersioneRidefinisciInterfaccia);
					de.setPostBack(true);
					dati.add(de);
				}
				
				// interfacetype
				dati.add(deInterfaceType);
				
				if((tipoOperazione.equals(TipoOperazione.ADD)) && !showConversazioni) {
					dati.add(deValidazione);
				}
				
				if(isInterfacciaAvanzata){
					if (tipoOperazione.equals(TipoOperazione.ADD)) {
						if(serviceBinding.equals(ServiceBinding.SOAP)) {
							
							//visualizza il link al wsdl definitorio se e' abilitato
							if(showWsdlDefinitorio){
								dati.add(wsdldef.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_DEFINITORIO, "", getSize()));
								dati.addAll(wsdldef.getFileNameDataElement());
								dati.add(wsdldef.getFileIdDataElement());
							} else {
								de = new DataElement();
								de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_DEFINITORIO);
								String wsdldefS = wsdldef.getValue() != null ?  new String(wsdldef.getValue()) : "";
								de.setValue(wsdldefS);
								de.setType(DataElementType.HIDDEN);
								de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_DEFINITORIO);
								dati.add(de);
							}
			
							//se il protocollo supporta almeno un profilo asincrono tengo la visualizzazione attuale altrimenti mostro solo un elemento WSDL Logico.
			
							if(showWsdlAsincroni){
								
								dati.add(wsdlconc.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_CONCETTUALE, "", getSize()));
								dati.addAll(wsdlconc.getFileNameDataElement());
								dati.add(wsdlconc.getFileIdDataElement());
								
								dati.add(wsdlserv.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_EROGATORE, "", getSize()));
								dati.addAll(wsdlserv.getFileNameDataElement());
								dati.add(wsdlserv.getFileIdDataElement());
								
								dati.add(wsdlservcorr.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_FRUITORE, "", getSize()));
								dati.addAll(wsdlservcorr.getFileNameDataElement());
								dati.add(wsdlservcorr.getFileIdDataElement());
								
							} else {
								de = new DataElement();
								de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_CONCETTUALE);
								String wsdlconcS = wsdlconc.getValue() != null ?  new String(wsdlconc.getValue()) : "";
								de.setValue(wsdlconcS);
								de.setType(DataElementType.HIDDEN);
								de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE);
								dati.add(de);
								
								dati.add(wsdlserv.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_LOGICO, "", getSize()));
								dati.addAll(wsdlserv.getFileNameDataElement());
								dati.add(wsdlserv.getFileIdDataElement());
			
								de = new DataElement();
								de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_FRUITORE);
								String wsdlservcorrS = wsdlservcorr.getValue() != null ?  new String(wsdlservcorr.getValue()) : "";
								de.setValue(wsdlservcorrS);
								de.setType(DataElementType.HIDDEN);
								de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE);
								dati.add(de);
							}
						} else { // Service Binding REST
							// Formato Specifica
							
							// campo wsdconcettuale utilizzato per la specifica 
							String labelWsdlCon = this.getLabelWSDLFromFormatoSpecifica(interfaceType);
							dati.add(wsdlconc.getFileDataElement(labelWsdlCon, "", getSize()));
							dati.addAll(wsdlconc.getFileNameDataElement());
							dati.add(wsdlconc.getFileIdDataElement());
							
							de = new DataElement();
							de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_EROGATORE);
							String wsdlservS = wsdlserv.getValue() != null ?  new String(wsdlserv.getValue()) : "";
							de.setValue(wsdlservS);
							de.setType(DataElementType.HIDDEN);
							de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE);
							dati.add(de);
							
							de = new DataElement();
							de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_FRUITORE);
							String wsdlservcorrS = wsdlservcorr.getValue() != null ?  new String(wsdlservcorr.getValue()) : "";
							de.setValue(wsdlservcorrS);
							de.setType(DataElementType.HIDDEN);
							de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE);
							dati.add(de);
							
						}
					} else {
						if(gestioneSpecificaInterfacce) {
							if(serviceBinding.equals(ServiceBinding.SOAP)) {
								//visualizza il link al wsdl definitorio se e' abilitato
								if(showWsdlDefinitorio){
									de = new DataElement();
									de.setType(DataElementType.LINK);
									de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_DEFINITORIO),
											AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
											pApiGestioneParziale);
									de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_DEFINITORIO);
									dati.add(de);
								}
				
								//se il protocollo supporta almeno un profilo asincrono tengo la visualizzazione attuale altrimenti mostro solo un elemento WSDL Logico.
				
								if(showWsdlAsincroni){
				
									de = new DataElement();
									de.setType(DataElementType.LINK);
									de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE),
											AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
											pApiGestioneParziale);
									de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_CONCETTUALE);
									dati.add(de);
				
									de = new DataElement();
									de.setType(DataElementType.LINK);
									de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE),
											AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
											pApiGestioneParziale);
									de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_EROGATORE);
									dati.add(de);
				
									de = new DataElement();
									de.setType(DataElementType.LINK);
									de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE),
											AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
											pApiGestioneParziale);
									de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_FRUITORE);
									dati.add(de);
								}else {
									de = new DataElement();
									de.setType(DataElementType.LINK);
									de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE),
											AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
											pApiGestioneParziale);
									de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_LOGICO);
									dati.add(de);
								}
								
								if(asWithAllegatiXSD){
									DataElement saveAs = new DataElement();
									saveAs.setValue(AccordiServizioParteComuneCostanti.LABEL_XSD_SCHEMA_COLLECTION);
									saveAs.setType(DataElementType.LINK);
									saveAs.setUrl(ArchiviCostanti.SERVLET_NAME_DOCUMENTI_EXPORT, 
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, id),
											new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE),
											new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_XSD_SCHEMA_COLLECTION),
											pApiGestioneParziale);
									saveAs.setDisabilitaAjaxStatus();
									dati.add(saveAs);
								}
							} else { // Service Binding REST
								String labelWsdlCon = this.getLabelWSDLFromFormatoSpecifica(interfaceType);
								de = new DataElement();
								de.setType(DataElementType.LINK);
								de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
										new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
										new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE),
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
										pApiGestioneParziale);
								de.setValue(labelWsdlCon);
								dati.add(de);
								
								if(asWithAllegatiXSD){
									DataElement saveAs = new DataElement();
									saveAs.setValue(AccordiServizioParteComuneCostanti.LABEL_XSD_SCHEMA_COLLECTION);
									saveAs.setType(DataElementType.LINK);
									saveAs.setUrl(ArchiviCostanti.SERVLET_NAME_DOCUMENTI_EXPORT, 
											new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, id),
											new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE),
											new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_XSD_SCHEMA_COLLECTION),
											pApiGestioneParziale);
									saveAs.setDisabilitaAjaxStatus();
									dati.add(saveAs);
								}
							}	
						}
					}
				}else{
					// Interfaccia standard mostro solo quello LogicoErogatore, lascio gli altri campi hidden
					if(serviceBinding.equals(ServiceBinding.SOAP)) {
						if (tipoOperazione.equals(TipoOperazione.ADD)) {
							de = new DataElement();
							de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_DEFINITORIO);
							String wsdldefS = wsdldef.getValue() != null ?  new String(wsdldef.getValue()) : "";
							de.setValue(wsdldefS);
							de.setType(DataElementType.HIDDEN);
							de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_DEFINITORIO);
							dati.add(de);
			
							de = new DataElement();
							de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_CONCETTUALE);
							String wsdlconcS = wsdlconc.getValue() != null ?  new String(wsdlconc.getValue()) : "";
							de.setValue(wsdlconcS);
							de.setType(DataElementType.HIDDEN);
							de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE);
							dati.add(de);
			
							dati.add(wsdlserv.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL, "", getSize()));
							dati.addAll(wsdlserv.getFileNameDataElement());
							dati.add(wsdlserv.getFileIdDataElement());
							
							de = new DataElement();
							de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_FRUITORE);
							String wsdlservcorrS = wsdlservcorr.getValue() != null ?  new String(wsdlservcorr.getValue()) : "";
							de.setValue(wsdlservcorrS);
							de.setType(DataElementType.HIDDEN);
							de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE);
							dati.add(de);
						} else {
							//L'interfaccia standard deve far vedere solo il link al wsdl del servzio
							if(gestioneSpecificaInterfacce) {
								de = new DataElement();
								de.setType(DataElementType.LINK);
								de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
										new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
										new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE),
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
										pApiGestioneParziale);
								de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL);
								dati.add(de);
							}
			
						}
					} else { // Service Binding REST
						if (tipoOperazione.equals(TipoOperazione.ADD)) {
							
							de = new DataElement();
							de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_DEFINITORIO);
							String wsdldefS = wsdldef.getValue() != null ?  new String(wsdldef.getValue()) : "";
							de.setValue(wsdldefS);
							de.setType(DataElementType.HIDDEN);
							de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_DEFINITORIO);
							dati.add(de);
							
							// campo wsdconcettuale utilizzato per la specifica 
							String labelWsdlCon = this.getLabelWSDLFromFormatoSpecifica(interfaceType);
							dati.add(wsdlconc.getFileDataElement(labelWsdlCon, "", getSize()));
							dati.addAll(wsdlconc.getFileNameDataElement());
							dati.add(wsdlconc.getFileIdDataElement());
							
							de = new DataElement();
							de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_EROGATORE);
							String wsdlservS = wsdlserv.getValue() != null ?  new String(wsdlserv.getValue()) : "";
							de.setValue(wsdlservS);
							de.setType(DataElementType.HIDDEN);
							de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE);
							dati.add(de);
							
							de = new DataElement();
							de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_FRUITORE);
							String wsdlservcorrS = wsdlservcorr.getValue() != null ?  new String(wsdlservcorr.getValue()) : "";
							de.setValue(wsdlservcorrS);
							de.setType(DataElementType.HIDDEN);
							de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE);
							dati.add(de);
						} else {
							if(gestioneSpecificaInterfacce) {
								String labelWsdlCon = this.getLabelWSDLFromFormatoSpecifica(interfaceType);
								de = new DataElement();
								de.setType(DataElementType.LINK);
								de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
										new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
										new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE),
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
										pApiGestioneParziale);
								de.setValue(labelWsdlCon);
								dati.add(de);
							}
						}
					}
				}
			}
	
			if(showConversazioni){
	
				if(tipoOperazione.equals(TipoOperazione.ADD) || gestioneSpecificaInterfacce) {
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_SPECIFICA_CONVERSAZIONI);
					de.setType(DataElementType.TITLE);
					dati.add(de);
				}
	
				if (tipoOperazione.equals(TipoOperazione.ADD)) {
					
					dati.add(wsblconc.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_CONCETTUALE, "", getSize()));
					dati.addAll(wsblconc.getFileNameDataElement());
					dati.add(wsblconc.getFileIdDataElement());
	
					dati.add(wsblserv.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_EROGATORE, "", getSize()));
					dati.addAll(wsblserv.getFileNameDataElement());
					dati.add(wsblserv.getFileIdDataElement());
					
					dati.add(wsblservcorr.getFileDataElement(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_FRUITORE, "", getSize()));
					dati.addAll(wsblservcorr.getFileNameDataElement());
					dati.add(wsblservcorr.getFileIdDataElement());
	
				} else {
	
					if(gestioneSpecificaInterfacce) {
						de = new DataElement();
						de.setType(DataElementType.LINK);
						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_CONCETTUALE),
								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
								pApiGestioneParziale);
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_CONCETTUALE);
						dati.add(de);
		
						de = new DataElement();
						de.setType(DataElementType.LINK);
						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_EROGATORE),
								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
								pApiGestioneParziale);
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_EROGATORE);
						dati.add(de);
		
						de = new DataElement();
						de.setType(DataElementType.LINK);
						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, 
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL,AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_FRUITORE),
								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo),
								pApiGestioneParziale);
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_FRUITORE);
						dati.add(de);
					}
				}
	
			}
			
		}

		Boolean gestioneInfoProtocollo = ServletUtils.getObjectFromSession(this.request, this.session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_GESTIONE_INFO_PROTOCOLLO);
		boolean isSoap = serviceBinding.equals(ServiceBinding.SOAP);

		boolean filtroDuplicatiSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(tipoProtocollo, serviceBinding, FunzionalitaProtocollo.FILTRO_DUPLICATI);
		boolean confermaRicezioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(tipoProtocollo, serviceBinding, FunzionalitaProtocollo.CONFERMA_RICEZIONE);
		boolean collaborazioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(tipoProtocollo, serviceBinding, FunzionalitaProtocollo.COLLABORAZIONE);
		boolean idRiferimentoRichiestaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(tipoProtocollo, serviceBinding, FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA);
		boolean consegnaInOrdineSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(tipoProtocollo, serviceBinding, FunzionalitaProtocollo.CONSEGNA_IN_ORDINE);
		boolean scadenzaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(tipoProtocollo, serviceBinding, FunzionalitaProtocollo.SCADENZA);
		boolean almostOneSupported = filtroDuplicatiSupportato || 
				confermaRicezioneSupportato ||
				collaborazioneSupportato ||
				idRiferimentoRichiestaSupportato ||
				consegnaInOrdineSupportato ||
				scadenzaSupportato;	
		
		if(gestioneInfoProtocollo!=null && gestioneInfoProtocollo &&
			(!gestioneInformazioniProtocollo) 
			){
			gestioneInfoProtocollo = false;
		}
		
		de = new DataElement();
		if(isModalitaVistaApiCustom!=null && isModalitaVistaApiCustom) {
			de.setLabel(ApiCostanti.APC_API_LABEL_GESTIONE_OPZIONI_AVANZATE);
		}
		else {
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI);
		}
		if ( (gestioneInfoProtocollo!=null) && gestioneInfoProtocollo.booleanValue() && (almostOneSupported || isSoap) ) { // se soap sicuramente c'è il protocollo di collaborazione
			de.setType(DataElementType.TITLE);
		} else {
			de.setType(DataElementType.HIDDEN);
			de.setValue("");
		}
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROFILO_COLLABORAZIONE);
		if (gestioneInfoProtocollo!=null && gestioneInfoProtocollo && isSoap) {
			de.setType(DataElementType.SELECT);
			de.setValues(this.core.getProfiliDiCollaborazioneSupportatiDalProtocollo(tipoProtocollo,serviceBinding));
			de.setSelected(profcoll);
		} else {
			de.setType(DataElementType.HIDDEN);
			de.setValue(profcoll);
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROFILO_COLLABORAZIONE);
		dati.add(de);

		// nel caso di change visualizzo il checkbox utilizzoSenzaAzione
		// solo se showUtilizzoSenzaAzione e' true
		if (showUtilizzoSenzaAzione && gestioneInfoProtocollo) {
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_UTILIZZO_SENZA_AZIONE);
			if(modificheAbilitate){
				de.setType(DataElementType.CHECKBOX);
			}else{
				de.setType(DataElementType.TEXT);
				if(utilizzoSenzaAzione){
					de.setValue(CostantiRegistroServizi.ABILITATO.toString());
				}else{
					de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UTILIZZO_SENZA_AZIONE);
			if (utilizzoSenzaAzione) {
				de.setSelected(true);
			}
			dati.add(de);
		}

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_FILTRO_DUPLICATI);
		if (gestioneInfoProtocollo!=null && gestioneInfoProtocollo && filtroDuplicatiSupportato) {
			if(modificheAbilitate){
				de.setType(DataElementType.CHECKBOX);
				if ( ServletUtils.isCheckBoxEnabled(filtrodup) || CostantiRegistroServizi.ABILITATO.equals(filtrodup) ) {
					de.setSelected(true);
				}
			}else{
				de.setType(DataElementType.TEXT);
				if ( ServletUtils.isCheckBoxEnabled(filtrodup) || CostantiRegistroServizi.ABILITATO.equals(filtrodup) ) {
					de.setValue(CostantiRegistroServizi.ABILITATO.toString());
				}else{
					de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
				}
			}	
		} else {
			de.setType(DataElementType.HIDDEN);
			if(filtroDuplicatiSupportato) {
				// se il protocollo lo supporta, lascio il filtro abilitato per default
				de.setValue(Costanti.CHECK_BOX_ENABLED);
			}
			else {
				de.setValue(Costanti.CHECK_BOX_DISABLED);
			}
		}
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CONFERMA_RICEZIONE);
		if (gestioneInfoProtocollo!=null && gestioneInfoProtocollo && confermaRicezioneSupportato) {
			if(modificheAbilitate){
				de.setType(DataElementType.CHECKBOX);
				if (ServletUtils.isCheckBoxEnabled(confric) || CostantiRegistroServizi.ABILITATO.equals(confric)) {
					de.setSelected(true);
				}
			}else{
				de.setType(DataElementType.TEXT);
				if (ServletUtils.isCheckBoxEnabled(confric) || CostantiRegistroServizi.ABILITATO.equals(confric)) {
					de.setValue(CostantiRegistroServizi.ABILITATO.toString());
				}else{
					de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
				}
			}
		} else {
			de.setType(DataElementType.HIDDEN);
			/**if(confermaRicezioneSupportato) {
				// anche se il protocollo lo supporta, lascio il filtro disabilitato per default */
				de.setValue(Costanti.CHECK_BOX_DISABLED);
			/**}
			//else {
			//	de.setValue(Costanti.CHECK_BOX_DISABLED);
			//}*/
		}
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_COLLABORAZIONE);
		if (gestioneInfoProtocollo!=null && gestioneInfoProtocollo && collaborazioneSupportato) {
			if(modificheAbilitate){
				de.setType(DataElementType.CHECKBOX);
				if (ServletUtils.isCheckBoxEnabled(idcoll) || CostantiRegistroServizi.ABILITATO.equals(idcoll)) {
					de.setSelected(true);
				}
			}else{
				de.setType(DataElementType.TEXT);
				if (ServletUtils.isCheckBoxEnabled(idcoll) || CostantiRegistroServizi.ABILITATO.equals(idcoll)) {
					de.setValue(CostantiRegistroServizi.ABILITATO.toString());
				}else{
					de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
				}
			}
		} else {
			de.setType(DataElementType.HIDDEN);
			/**if(collaborazioneSupportato) {
				// anche se il protocollo lo supporta, lascio il filtro disabilitato per default*/
			de.setValue(Costanti.CHECK_BOX_DISABLED);
			/**}
			//else {
			//	de.setValue(Costanti.CHECK_BOX_DISABLED);
			//}*/
		}
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
		if (gestioneInfoProtocollo!=null && gestioneInfoProtocollo && idRiferimentoRichiestaSupportato) {
			if(modificheAbilitate){
				de.setType(DataElementType.CHECKBOX);
				if (ServletUtils.isCheckBoxEnabled(idRifRichiesta) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiesta)) {
					de.setSelected(true);
				}
			}else{
				de.setType(DataElementType.TEXT);
				if (ServletUtils.isCheckBoxEnabled(idRifRichiesta) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiesta)) {
					de.setValue(CostantiRegistroServizi.ABILITATO.toString());
				}else{
					de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
				}
			}
		} else {
			de.setType(DataElementType.HIDDEN);
			/**if(idRiferimentoRichiestaSupportato) {
				// anche se il protocollo lo supporta, lascio il filtro disabilitato per default*/
				de.setValue(Costanti.CHECK_BOX_DISABLED);
			/**}
			//else {
			//	de.setValue(Costanti.CHECK_BOX_DISABLED);
			//}*/
		}
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CONSEGNA_ORDINE);
		if (gestioneInfoProtocollo!=null && gestioneInfoProtocollo && consegnaInOrdineSupportato) {
			if(modificheAbilitate){
				de.setType(DataElementType.CHECKBOX);
				if (ServletUtils.isCheckBoxEnabled(consord) || CostantiRegistroServizi.ABILITATO.equals(consord)) {
					de.setSelected(true);
				}
			}else{
				de.setType(DataElementType.TEXT);
				if (ServletUtils.isCheckBoxEnabled(consord) || CostantiRegistroServizi.ABILITATO.equals(consord)) {
					de.setValue(CostantiRegistroServizi.ABILITATO.toString());
				}else{
					de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
				}
			}
		} else {
			de.setType(DataElementType.HIDDEN);
			/**if(consegnaInOrdineSupportato) {
				// anche se il protocollo lo supporta, lascio il filtro disabilitato per default*/
				de.setValue(Costanti.CHECK_BOX_DISABLED);
			/**}
			//else {
			//	de.setValue(Costanti.CHECK_BOX_DISABLED);
			//}*/
		}
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA);
		de.setValue(scadenza);
		if (gestioneInfoProtocollo!=null && gestioneInfoProtocollo && scadenzaSupportato) {
			de.setType(DataElementType.TEXT_EDIT);
			if( !modificheAbilitate && (scadenza==null || "".equals(scadenza)) )
				de.setValue(" ");
		} else {
			de.setType(DataElementType.HIDDEN);
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SCADENZA);
		de.setSize(this.getSize());
		dati.add(de);

		
		
		
		if(TipoOperazione.CHANGE.equals(tipoOperazione) && isModalitaVistaApiCustom!=null && isModalitaVistaApiCustom.booleanValue() && gestioneSpecificaInterfacce) {
			this.pd.disableEditMode();
		}
		
		
		return dati;
	}
	
	public void addCanaleToDati(List<DataElement> dati, TipoOperazione tipoOperazione, String canaleStato, String canale,
			List<CanaleConfigurazione> canaleList, boolean gestioneCanaliEnabled, boolean modificheAbilitate,
			boolean gestioneCanale) throws DriverConfigurazioneNotFound {
		DataElement de;
		// canale
		if(gestioneCanaliEnabled) {
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CANALE_STATO);
			de.setValue(canaleStato);
			de.setValues(AccordiServizioParteComuneCostanti.VALUES_PARAMETRO_APC_CANALE_STATO);
			
			List<String> labelsCanaleStato = new ArrayList<>();
			
			CanaleConfigurazione canaleConfigurazioneDefault = getCanaleDefault(canaleList);
			
			labelsCanaleStato.add(MessageFormat.format(AccordiServizioParteComuneCostanti.LABEL_DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT, canaleConfigurazioneDefault.getNome()));
			labelsCanaleStato.add(AccordiServizioParteComuneCostanti.LABEL_DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO);
			
			de.setLabels(labelsCanaleStato);
			
			if( tipoOperazione.equals(TipoOperazione.ADD) || (gestioneCanale && modificheAbilitate)){
				de.setType(DataElementType.SELECT);
				de.setSelected(canaleStato);
			}else{
				if(gestioneCanale) {
					de.setType(DataElementType.TEXT);
				}
				else {
					de.setType(DataElementType.HIDDEN);
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CANALE_STATO);
			de.setSize(this.getSize());
			de.setPostBack(true);
			dati.add(de);
			
			if(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO.equals(canaleStato)) {
				de = new DataElement();
				de.setLabel(""); //(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CANALE);
				de.setValue(canale);
				List<String> canaliListValues = canaleList.stream().map(CanaleConfigurazione::getNome).collect(Collectors.toList());
				de.setValues(canaliListValues);
				de.setLabels(canaliListValues);
				
				if(tipoOperazione.equals(TipoOperazione.ADD) || (gestioneCanale && modificheAbilitate)){
					de.setType(DataElementType.SELECT);
					de.setSelected(canale);
				}else{
					if(gestioneCanale) {
						de.setType(DataElementType.TEXT);
					}
					else {
						de.setType(DataElementType.HIDDEN);
					}
					if( !modificheAbilitate && StringUtils.isBlank(canale))
						de.setValue("");
				}
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CANALE);
				de.setSize(this.getSize());
				dati.add(de);
			}
		}
	}
	
	public String getLabelWSDLFromFormatoSpecifica(org.openspcoop2.protocol.manifest.constants.InterfaceType formatoSpecifica) {
		switch (formatoSpecifica) {
		case SWAGGER_2:
			return AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_INTERFACE_TYPE_SWAGGER_2;
		case OPEN_API_3:
			return AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_INTERFACE_TYPE_OPEN_API_3;
		case WADL:
			return AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_INTERFACE_TYPE_WADL;
		case WSDL_11:
			return AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_INTERFACE_TYPE_WSDL_11;
		default:
			return AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_INTERFACE_TYPE_OPEN_API_3;
		}
	}


	public List<DataElement> addAccordiToDatiAsHidden(List<DataElement> dati, 
			String nome, String descr, String profcoll, String wsdldef, String wsdlconc, String wsdlserv, String wsdlservcorr, 
			String filtrodup, String confric, String idcoll, String idRifRichiesta, String consord, String scadenza, String id, 
			TipoOperazione tipoOperazione, boolean showUtilizzoSenzaAzione, boolean utilizzoSenzaAzione,
			String referente, String versione, 
			String[] providersList, String[] providersListLabel,boolean privato,
			boolean isServizioComposto,String[] accordiCooperazioneEsistenti,String[] accordiCooperazioneEsistentiLabel,String accordoCooperazione,
			String stato,String oldStato,String tipoAccordo,boolean validazioneDocumenti,
			String tipoProtocollo, List<String> listaTipiProtocollo, boolean used,
			ServiceBinding serviceBinding, MessageType messageType, org.openspcoop2.protocol.manifest.constants.InterfaceType formatoSpecifica,
			String gruppi, String canaleStato, String canale
			) throws Exception {

		Boolean showAccordiCooperazione = ServletUtils.getObjectFromSession(this.request, this.session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_VISUALIZZA_ACCORDI_COOPERAZIONE);

		boolean modificheAbilitate = false;
		if( tipoOperazione.equals(TipoOperazione.ADD) ){
			modificheAbilitate = true;
		}else if(this.isShowGestioneWorkflowStatoDocumenti()==false){
			modificheAbilitate = true;
		}else if(StatiAccordo.finale.toString().equals(oldStato)==false){
			modificheAbilitate = true;
		}

		boolean modificaAbilitataServizioComposto = true;
		if (AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO.equals(tipoAccordo)){
			modificaAbilitataServizioComposto = tipoOperazione.equals(TipoOperazione.ADD);
		}

		DataElement de = new DataElement();
		de.setValue(tipoAccordo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
		de.setSize(this.getSize());
		dati.add(de);

		if(TipoOperazione.CHANGE.equals(tipoOperazione)){
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			de.setValue(id);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			dati.add(de);
		}

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO);
		de.setValue(tipoProtocollo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
		de.setSize(this.getSize());
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
		de.setValue(nome);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME);
		de.setSize(this.getSize());
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE);
		de.setValue(descr);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_DESCRIZIONE);
		de.setSize(this.getSize());
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_GRUPPI);
		de.setValue(gruppi);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_GRUPPI);
		de.setSize(this.getSize());
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CANALE_STATO);
		de.setValue(canaleStato);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CANALE_STATO);
		de.setSize(this.getSize());
		dati.add(de);
		
		if(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO.equals(canaleStato)) {
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CANALE);
			de.setValue(canale);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CANALE);
			de.setSize(this.getSize());
			dati.add(de);
		}

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_REFERENTE);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_REFERENTE);

		Soggetto sogg = null;
		if (referente != null && !"".equals(referente) && !"-".equals(referente)) {
			if(Integer.parseInt(referente)>0){
				sogg = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(referente));
			}
		}

		if( modificheAbilitate && modificaAbilitataServizioComposto ){
			de.setType(DataElementType.HIDDEN);
			if (referente != null && !"".equals(referente) && !"-".equals(referente)) {
				de.setValue(referente);
			}else{
				de.setValue("-");
			}
		}else{
			de.setType(DataElementType.HIDDEN);
			de.setValue(referente);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_REFERENTE);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_REFERENTE_1_2);
			de.setType(DataElementType.HIDDEN);
			if (referente != null && !"".equals(referente) && !"-".equals(referente)) {
				de.setValue(sogg.getTipo()+"/"+sogg.getNome());
			}else{
				de.setValue("-");
			}
		}	
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VERSIONE);
		de.setValue(versione);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VERSIONE);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PRIVATO);
		if(privato){
			de.setValue(Costanti.CHECK_BOX_ENABLED);
			//			de.setSelected(privato ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED );
		} else 
			de.setValue(null);

		de.setType(DataElementType.HIDDEN);
		//		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PRIVATO);
		dati.add(de);

		if(showAccordiCooperazione){
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_IS_SERVIZIO_COMPOSTO);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_IS_SERVIZIO_COMPOSTO);
			de.setValue(isServizioComposto ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED);
			de.setType(DataElementType.HIDDEN);
			de.setSize(getSize());
			dati.add(de);
		}


		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_STATO_PACKAGE);
		de.setType(DataElementType.HIDDEN);
		de.setValue(stato);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_STATO_PACKAGE);
		dati.add(de);		

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VALIDAZIONE_SPECIFICA);
		de.setValue(""+validazioneDocumenti);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VALIDAZIONE_DOCUMENTI);
		de.setSize(this.getSize());
		dati.add(de);

		if(showAccordiCooperazione && isServizioComposto){

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ACCORDO_COOPERAZIONE);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ACCORDO_COOPERAZIONE);
			de.setType(DataElementType.HIDDEN);
			de.setValue(accordoCooperazione);
			dati.add(de);
			dati.add(de);
		}

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROFILO_COLLABORAZIONE);
		de.setType(DataElementType.HIDDEN);
		de.setValue(profcoll);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROFILO_COLLABORAZIONE);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_UTILIZZO_SENZA_AZIONE);
		de.setType(DataElementType.HIDDEN);
		if(utilizzoSenzaAzione){
			de.setValue(CostantiRegistroServizi.ABILITATO.toString());
		}else{
			de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UTILIZZO_SENZA_AZIONE);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_FILTRO_DUPLICATI);
		if ( ServletUtils.isCheckBoxEnabled(filtrodup) || CostantiRegistroServizi.ABILITATO.equals(filtrodup) )
			de.setValue(Costanti.CHECK_BOX_ENABLED);
		else 
			de.setValue(Costanti.CHECK_BOX_DISABLED);
		de.setType(DataElementType.HIDDEN);

		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CONFERMA_RICEZIONE);
		if (ServletUtils.isCheckBoxEnabled(confric) || CostantiRegistroServizi.ABILITATO.equals(confric)) 
			de.setValue(Costanti.CHECK_BOX_ENABLED);
		else 
			de.setValue(Costanti.CHECK_BOX_DISABLED);

		de.setType(DataElementType.HIDDEN);

		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_COLLABORAZIONE);
		if (ServletUtils.isCheckBoxEnabled(idcoll) || CostantiRegistroServizi.ABILITATO.equals(idcoll)) {
			de.setValue(Costanti.CHECK_BOX_ENABLED);
		}else 
			de.setValue(Costanti.CHECK_BOX_DISABLED);

		de.setType(DataElementType.HIDDEN);
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
		if (ServletUtils.isCheckBoxEnabled(idRifRichiesta) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiesta)) {
			de.setValue(Costanti.CHECK_BOX_ENABLED);
		}else 
			de.setValue(Costanti.CHECK_BOX_DISABLED);

		de.setType(DataElementType.HIDDEN);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CONSEGNA_ORDINE);
		if (ServletUtils.isCheckBoxEnabled(consord) || CostantiRegistroServizi.ABILITATO.equals(consord)) {
			de.setValue(Costanti.CHECK_BOX_ENABLED);
		}else 
			de.setValue(Costanti.CHECK_BOX_DISABLED);

		de.setType(DataElementType.HIDDEN);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA);
		de.setValue(scadenza);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SCADENZA);
		de.setSize(this.getSize());
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SERVICE_BINDING);
		de.setValue(serviceBinding!= null ? serviceBinding.toString() : null);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SERVICE_BINDING);
		de.setSize(this.getSize());
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_MESSAGE_TYPE);
		de.setValue(messageType != null ? messageType.toString() : null);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_MESSAGE_TYPE);
		de.setSize(this.getSize());
		dati.add(de);
		
		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_INTERFACE_TYPE);
		de.setValue(formatoSpecifica != null ? formatoSpecifica.toString() : null);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_INTERFACE_TYPE);
		de.setSize(this.getSize());
		dati.add(de);
		

		return dati;
	}


	// Controlla i dati del connettore del servizio
	boolean accordiErogatoriCheckData(List<ExtendedConnettore> listExtendedConnettore) throws Exception {
		try {
			// String id = this.getParameter("id");
			// int idInt = 0;
			// if (tipoOp.equals("change")) {
			// idInt = Integer.parseInt(id);
			// }
			String nomeprov = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_EROGATORI_NOME_SOGGETTO);
			String tipoprov = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_EROGATORI_TIPO_SOGGETTO);
			// String nomeservizio = this.getParameter("nomeservizio");
			// String tiposervizio = this.getParameter("tiposervizio");
			String endpointtype = this.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_ENDPOINT_TYPE);

			String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tipoprov);
			
			if (!this.endPointCheckData(null, protocollo, false, listExtendedConnettore)) {
				return false;
			}

			// Se il connettore e' disabilitato devo controllare che il
			// connettore del soggetto non sia disabilitato
			if (endpointtype.equals(TipiConnettore.DISABILITATO.toString())) {
				IDSoggetto ids = new IDSoggetto(tipoprov, nomeprov);
				Soggetto sogg = this.soggettiCore.getSoggettoRegistro(ids);
				Connettore conn = sogg.getConnettore();
				String eptypeprov = conn.getTipo();
				if (eptypeprov.equals(TipiConnettore.DISABILITATO.toString())) {
					this.pd.setMessage("Il connettore del servizio deve essere specificato se non &egrave; stato definito un connettore per il relativo soggetto");
					return false;
				}
			}

			return true;

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}


	// Controlla i dati degli Accordi
	public boolean accordiCheckData(TipoOperazione tipoOperazione, String nome, String descr, String profcoll, 
			BinaryParameter wsdldef, BinaryParameter wsdlconc, BinaryParameter wsdlserv, BinaryParameter wsdlservcorr, 
			String filtrodup, String confric, String idcoll, String idRifRichiesta, String consord, String scadenza, String id,
			String referente,String versione,String accordoCooperazione, 
			boolean visibilitaAccordoServizio,boolean visibilitaAccordoCooperazione,
			IDAccordo idAccordoOLD, BinaryParameter wsblconc, BinaryParameter wsblserv, BinaryParameter wsblservcorr,boolean validazioneDocumenti,
			String tipoProtocollo, String backToStato,
			ServiceBinding serviceBinding, MessageType messageType, org.openspcoop2.protocol.manifest.constants.InterfaceType formatoSpecifica,
			boolean checkReferente, String gruppi, String canaleStato, String canale, boolean gestioneCanaliEnabled)
					throws ControlStationCoreException {
		try {
			int idInt = 0;
			if (tipoOperazione.equals(TipoOperazione.CHANGE)) {
				idInt = Integer.parseInt(id);
			}
			if (referente == null) {
				referente = "";
			}

			// ripristina dello stato solo in modalita change
			if(backToStato != null && tipoOperazione.equals(TipoOperazione.CHANGE)){
				return true;
			}

			// Campi obbligatori
			if (nome==null || nome.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Nome");
				return false;
			}
			if (versione==null || versione.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare una Versione dell'accordo");
				return false;
			}
			if( 
				(referente==null || referente.equals("") || referente.equals("-"))
				&&
				(!TipoOperazione.ADD.equals(tipoOperazione) || checkReferente) 
				){
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Soggetto Referente");
				return false;
			}
		
			// service binding
			if (serviceBinding ==null) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Service Binding");
				return false;
			}
			
			// formato specifica
			if (formatoSpecifica ==null) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Formato Specifica");
				return false;
			}

			// Controllo che non ci siano spazi nei campi di testo
			if ((nome.indexOf(" ") != -1)) {
				this.pd.setMessage("Non inserire spazi nel campo di testo 'nome'");
				return false;
			}
			if ((scadenza.indexOf(" ") != -1)) {
				this.pd.setMessage("Non inserire spazi nel campo di testo 'scadenza'");
				return false;
			}

			// Check lunghezza
			if(!this.checkLength255(nome, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME)) {
				return false;
			}
			if( descr!=null && !"".equals(descr) ) {
				boolean valid = true;
				if(this.apcCore.isApiDescriptionTruncate255()) {
					valid = this.checkLength255(descr, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE);
				}
				else if(this.apcCore.isApiDescriptionTruncate4000()) {
					valid = this.checkLength4000(descr, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE);
				}
				if(!valid) {
					return false;
				}
			} 

			// Il nome deve contenere solo lettere e numeri e '_' '-' '.'
			if(!this.checkNCName(nome, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME)){
				return false;
			}
			
			// validazione dei nomi gruppi
			if(gruppi!=null && !"".equals(gruppi)) {
				List<String> nomiGruppi = Arrays.asList(gruppi.split(","));
				
				for (String nomeGruppo : nomiGruppi) {
					if(this.checkNCName(nomeGruppo, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_GRUPPI)==false){
						return false;
					}
				}
			}
			
			if(this.canaleCheckData(canaleStato, canale, gestioneCanaliEnabled) == false) {
				return false;
			}

			// La versione deve contenere solo lettere e numeri e '.'
			if (!versione.equals("") && !this.checkNumber(versione, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_VERSIONE, false)) {
				return false;
			}

			// Controllo che i campi DataElementType.SELECT abbiano uno dei valori ammessi
			if (!profcoll.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO) && 
					!profcoll.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_SIMMETRICO) && 
					!profcoll.equals(AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_SINCRONO) && 
					!profcoll.equals((AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ONEWAY) )) {
				this.pd.setMessage("Il profilo di collaborazione dev'essere "+AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO+
						", "+AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ASINCRONO_SIMMETRICO+
						", "+AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_SINCRONO+
						" o "+AccordiServizioParteComuneCostanti.TIPO_PROFILO_COLLABORAZIONE_ONEWAY);
				return false;
			}

			// Controllo che i campi DataElementType.CHECKBOX abbiano uno dei valori ammessi
			if ((filtrodup != null) && !filtrodup.equals(Costanti.CHECK_BOX_ENABLED) && !filtrodup.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !filtrodup.equals(Costanti.CHECK_BOX_DISABLED) && !filtrodup.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
				this.pd.setMessage("Filtro duplicati dev'essere selezionato o deselezionato");
				return false;
			}
			if ((confric != null) && !confric.equals(Costanti.CHECK_BOX_ENABLED) && !confric.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !confric.equals(Costanti.CHECK_BOX_DISABLED) && !confric.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
				this.pd.setMessage("Conferma ricezione dev'essere selezionata o deselezionata");
				return false;
			}
			if ((idcoll != null) && !idcoll.equals(Costanti.CHECK_BOX_ENABLED) && !idcoll.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !idcoll.equals(Costanti.CHECK_BOX_DISABLED) && !idcoll.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
				this.pd.setMessage("ID Conversazione dev'essere selezionata o deselezionata");
				return false;
			}
			if ((idRifRichiesta != null) && !idRifRichiesta.equals(Costanti.CHECK_BOX_ENABLED) && !idRifRichiesta.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !idRifRichiesta.equals(Costanti.CHECK_BOX_DISABLED) && !idRifRichiesta.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
				this.pd.setMessage("Riferimento ID Richiesta dev'essere selezionata o deselezionata");
				return false;
			}
			if ((consord != null) && !consord.equals(Costanti.CHECK_BOX_ENABLED) && !consord.equals(CostantiRegistroServizi.ABILITATO.getValue()) && !consord.equals(Costanti.CHECK_BOX_DISABLED) && !consord.equals(CostantiRegistroServizi.DISABILITATO.getValue())) {
				this.pd.setMessage("Consegna in ordine dev'essere selezionata o deselezionata");
				return false;
			}

			// scadenza dev'essere numerica
			if (!scadenza.equals("") && !this.checkNumber(scadenza, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA, false)) {
				return false;
			}

			if ("-".equals(accordoCooperazione)) {
				this.pd.setMessage("L'accordo di cooperazione e' richiesto.");
				return false;
			}
			if("-".equals(accordoCooperazione)==false && !"".equals(accordoCooperazione)  && accordoCooperazione!=null){
				// Visibilita rispetto all'accordo
				boolean nonVisibile = true;
				boolean visibile = false;
				if(visibilitaAccordoServizio==visibile){
					if(visibilitaAccordoCooperazione==nonVisibile){
						this.pd.setMessage("Non e' possibile utilizzare un accordo di cooperazione con visibilita' privata, in un accordo di servizio con visibilita' pubblica.");
						return false;
					}
				}
			}

			// Controllo che il referente appartenga alla lista di
			// providers disponibili
			IDSoggetto soggettoReferente = null;
			Soggetto sRef = null;
			if(checkReferente) {
				if(referente!=null && !referente.equals("") && !referente.equals("-")){
					boolean trovatoProv = this.soggettiCore.existsSoggetto(Integer.parseInt(referente));
					if (!trovatoProv) {
						this.pd.setMessage("Il Soggetto referente dev'essere scelto tra quelli definiti nel pannello Soggetti");
						return false;
					}else{
						sRef = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(referente));
						// Visibilita rispetto all'accordo
						boolean visibile = false;
						if(visibilitaAccordoServizio==visibile &&
							(sRef.getPrivato()!=null && sRef.getPrivato())
							){
							this.pd.setMessage("Non e' possibile utilizzare un soggetto referente con visibilita' privata, in un accordo di servizio con visibilita' pubblica.");
							return false;
						}
						soggettoReferente = new IDSoggetto(sRef.getTipo(),sRef.getNome());
					}
				}
			}
			else {
				soggettoReferente = this.apcCore.getSoggettoOperativoDefault(ServletUtils.getUserLoginFromSession(this.session), tipoProtocollo);
			}

			// Controllo che non esistano altri accordi con stesso nome
			// Se tipoOp = change, devo fare attenzione a non escludere nome
			// del servizio selezionato
			int idAcc = 0;
			IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromValues(nome,soggettoReferente,Integer.parseInt(versione));
			boolean esisteAS = this.apcCore.existsAccordoServizio(idAccordo);
			AccordoServizioParteComuneSintetico as = null;
			if (esisteAS) {
				as = this.apcCore.getAccordoServizioSintetico(idAccordo);
				idAcc = as.getId().intValue();
			}
			if ((idAcc != 0) && (tipoOperazione.equals(TipoOperazione.ADD) || (tipoOperazione.equals(TipoOperazione.CHANGE) && (idInt != idAcc)))) {
				if(soggettoReferente!=null && checkReferente) {
					this.pd.setMessage("Esiste gi&agrave; una API (versione "+versione+") con nome " + nome+" del soggetto referente "+
							this.getLabelNomeSoggetto(tipoProtocollo,soggettoReferente));
				}
				else {
					this.pd.setMessage("Esiste gi&agrave; una API (versione "+versione+") con nome " + nome);
				}
				return false;
			}

			// Controllo visibilita servizi componenti
			if (tipoOperazione.equals(TipoOperazione.CHANGE)) {

				as = this.apcCore.getAccordoServizioSintetico(idAccordoOLD);

				if((as.getPrivato()==null || !as.getPrivato()) && as.getServizioComposto()!=null){
					for(int i=0;i<as.getServizioComposto().getServizioComponente().size(); i++){
						AccordoServizioParteSpecifica asps = this.apsCore.getAccordoServizioParteSpecifica(as.getServizioComposto().getServizioComponente().get(i).getIdServizioComponente());
						if(asps.getPrivato()!=null && asps.getPrivato()){
							this.pd.setMessage("Non e' possibile impostare una visibilita' pubblica all'accordo di servizio, poiche' possiede un servizio componente ["+
									IDServizioFactory.getInstance().getUriFromAccordo(asps)+"] con visibilita' privata.");
							return false;
						}
					}
				}		
			}


			AccordoServizioParteComune accordoServizioParteComune = new AccordoServizioParteComune();
			accordoServizioParteComune.setNome(nome);
			accordoServizioParteComune.setDescrizione(descr);
			accordoServizioParteComune.setProfiloCollaborazione(ProfiloCollaborazione.toEnumConstant(profcoll));
			accordoServizioParteComune.setFiltroDuplicati(StatoFunzionalita.toEnumConstant(filtrodup));
			accordoServizioParteComune.setConfermaRicezione(StatoFunzionalita.toEnumConstant(confric));
			accordoServizioParteComune.setIdCollaborazione(StatoFunzionalita.toEnumConstant(idcoll));
			accordoServizioParteComune.setIdRiferimentoRichiesta(StatoFunzionalita.toEnumConstant(idRifRichiesta));
			accordoServizioParteComune.setConsegnaInOrdine(StatoFunzionalita.toEnumConstant(consord));
			accordoServizioParteComune.setScadenza(scadenza);
			if(sRef!=null){
				IdSoggetto soggRef = new IdSoggetto();
				soggRef.setTipo(sRef.getTipo());
				soggRef.setNome(sRef.getNome());
				accordoServizioParteComune.setSoggettoReferente(soggRef);
			}
			if(versione!=null){
				accordoServizioParteComune.setVersione(Integer.parseInt(versione));
			}

			accordoServizioParteComune.setServiceBinding(this.apcCore.fromMessageServiceBinding(serviceBinding));
			accordoServizioParteComune.setMessageType(this.apcCore.fromMessageMessageType(messageType));
			accordoServizioParteComune.setFormatoSpecifica(this.apcCore.interfaceType2FormatoSpecifica(formatoSpecifica));
			
			ValidazioneResult v = this.apcCore.validazione(accordoServizioParteComune, tipoProtocollo);
			if(!v.isEsito()){
				this.pd.setMessage(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioErrore()));
				if(v.getException()!=null)
					this.logError(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioErrore()),v.getException());
				else
					this.logError(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioErrore()));
				return false;
			}	

			// Validazione wsdl/sbl
			if(validazioneDocumenti && tipoOperazione.equals(TipoOperazione.ADD)){

				FormatoSpecifica formato = null;
				if(accordoServizioParteComune!=null) {
					formato = accordoServizioParteComune.getFormatoSpecifica();
				}
				
				// WSDL
				String wsdlDefinitorioS = wsdldef.getValue() != null ? new String(wsdldef.getValue()) : null; 
				byte [] wsdlDefinitorio = this.apcCore.getInterfaceAsByteArray(formato, wsdlDefinitorioS);
				
				String wsdlconcS = wsdlconc.getValue() != null ? new String(wsdlconc.getValue()) : null; 
				byte [] wsdlConcettuale = this.apcCore.getInterfaceAsByteArray(formato, wsdlconcS);
				
				String wsdlLogicoErogatoreS = wsdlserv.getValue() != null ? new String(wsdlserv.getValue()) : null; 
				byte [] wsdlLogicoErogatore = this.apcCore.getInterfaceAsByteArray(formato, wsdlLogicoErogatoreS);
				
				String wsdlLogicoFruitoreS = wsdlservcorr.getValue() != null ? new String(wsdlservcorr.getValue()) : null; 
				byte [] wsdlLogicoFruitore = this.apcCore.getInterfaceAsByteArray(formato, wsdlLogicoFruitoreS);
				
				// WSBL
				String wsblConcettualeS = wsblconc.getValue() != null ? new String(wsblconc.getValue()) : null; 
				byte [] wsblConcettuale = this.apcCore.getInterfaceAsByteArray(formato, wsblConcettualeS);
				
				String wsblLogicoErogatoreS = wsblserv.getValue() != null ? new String(wsblserv.getValue()) : null; 
				byte [] wsblLogicoErogatore = this.apcCore.getInterfaceAsByteArray(formato, wsblLogicoErogatoreS);
				
				String wsblLogicoFruitoreS = wsblservcorr.getValue() != null ? new String(wsblservcorr.getValue()) : null;
				byte [] wsblLogicoFruitore = this.apcCore.getInterfaceAsByteArray(formato, wsblLogicoFruitoreS);

				accordoServizioParteComune.setByteWsdlDefinitorio(wsdlDefinitorio);
				accordoServizioParteComune.setByteWsdlConcettuale(wsdlConcettuale);
				accordoServizioParteComune.setByteWsdlLogicoErogatore(wsdlLogicoErogatore);
				accordoServizioParteComune.setByteWsdlLogicoFruitore(wsdlLogicoFruitore);

				accordoServizioParteComune.setByteSpecificaConversazioneConcettuale(wsblConcettuale);
				accordoServizioParteComune.setByteSpecificaConversazioneErogatore(wsblLogicoErogatore);
				accordoServizioParteComune.setByteSpecificaConversazioneFruitore(wsblLogicoFruitore);

				v = this.apcCore.validaInterfacciaWsdlParteComune(accordoServizioParteComune, tipoProtocollo);
				if(!v.isEsito()){
					String msgErroreHTML = v.getMessaggioErrore();
					if(msgErroreHTML!=null) {
						msgErroreHTML = msgErroreHTML.replaceAll("\n", org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
					}
					this.pd.setMessage(getValidazionePrefixErrorMessage(tipoProtocollo, msgErroreHTML));
					if(v.getException()!=null)
						this.logError(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioErrore()),v.getException());
					else
						this.logError(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioErrore()));
					return false;
				}
				else if(v.getMessaggioWarning()!=null && StringUtils.isNotEmpty(v.getMessaggioWarning())) {
					String msgWarningHTML = v.getMessaggioWarning();
					if(msgWarningHTML!=null) {
						msgWarningHTML = msgWarningHTML.replaceAll("\n", org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
					}
					this.pd.setMessage(getValidazionePrefixErrorMessage(tipoProtocollo, msgWarningHTML), org.openspcoop2.web.lib.mvc.MessageType.WARN);
					if(v.getException()!=null)
						this.log.warn(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioWarning()),v.getException());
					else
						this.log.warn(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioWarning()));
				}

				v = this.apcCore.validaSpecificaConversazione(accordoServizioParteComune, tipoProtocollo);
				if(!v.isEsito()){
					String msgErroreHTML = v.getMessaggioErrore();
					if(msgErroreHTML!=null) {
						msgErroreHTML = msgErroreHTML.replaceAll("\n", org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
					}
					this.pd.setMessage(getValidazionePrefixErrorMessage(tipoProtocollo, msgErroreHTML));
					if(v.getException()!=null)
						this.logError(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioErrore()),v.getException());
					else
						this.logError(getValidazionePrefixErrorMessage(tipoProtocollo, v.getMessaggioErrore()));
					return false;
				}

			}

			return true;

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new ControlStationCoreException(e);
		}
	}
	private String getValidazionePrefixErrorMessage(String tipoProtocollo, String msg) {
		return "[validazione-"+tipoProtocollo+"] "+msg;
	}
	
	public  IDAccordo getIDAccordoFromValues(String nome, String referente, String versione,boolean visibilitaAccordoServizio) throws Exception {
		IDSoggetto soggettoReferente = null;
		IDAccordo idAccordo = null;
		Soggetto sRef = null;
		
		if(referente!=null && !referente.equals("") && !referente.equals("-")){
			boolean trovatoProv = this.soggettiCore.existsSoggetto(Integer.parseInt(referente));
			
			if(trovatoProv){
				sRef = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(referente));
				// Visibilita rispetto all'accordo
				boolean visibile = false;
				if(visibilitaAccordoServizio==visibile){
					if(sRef.getPrivato()!=null && sRef.getPrivato()==true){
//						this.pd.setMessage("Non e' possibile utilizzare un soggetto referente con visibilita' privata, in un accordo di servizio con visibilita' pubblica.");
						return null;
					}
				}
				soggettoReferente = new IDSoggetto(sRef.getTipo(),sRef.getNome());
			}
		
			idAccordo = this.idAccordoFactory.getIDAccordoFromValues(nome,soggettoReferente,Integer.parseInt(versione));
		}
		
		return idAccordo;
	}

	public void prepareAccordiList(List<AccordoServizioParteComuneSintetico> lista, ISearch ricerca, String tipoAccordo) throws Exception {
		try {
			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC,
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO, tipoAccordo));

			Boolean contaListe = ServletUtils.getContaListeFromSession(this.session);
			
			
			boolean showProtocolli = this.core.countProtocolli(this.request, this.session)>1;
			boolean showServiceBinding = true;
			boolean showResources = true;
			boolean showServices = true;
			if( !showProtocolli ) {
				List<String> l = this.core.getProtocolli(this.request, this.session);
				if(l.size()>0) {
					IProtocolFactory<?> p = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(l.get(0));
					if(p.getManifest().getBinding().getRest()==null) {
						showResources=false;
					}
					if(p.getManifest().getBinding().getSoap()==null) {
						showServices=false;
					}
					if( (!showResources) || (!showServices) ) {
						showServiceBinding = false;
					}
				}
			}
			
			int idLista = Liste.ACCORDI;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
			
			addFilterProtocol(ricerca, idLista);
			
			String filterTipoAccordo = null;
			if(showServiceBinding) {
				filterTipoAccordo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_SERVICE_BINDING);
				this.addFilterServiceBinding(filterTipoAccordo,false,false);
			}
			
			if(this.isShowGestioneWorkflowStatoDocumenti()){
				if(this.core.isGestioneWorkflowStatoDocumentiVisualizzaStatoLista()) {
					String filterStatoAccordo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_STATO_ACCORDO);
					this.addFilterStatoAccordo(filterStatoAccordo,false);
				}
			}
									
			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));

			org.openspcoop2.core.registry.constants.ServiceBinding serviceBindingFilter = null;
			if(filterTipoAccordo!=null) {
				serviceBindingFilter = org.openspcoop2.core.registry.constants.ServiceBinding.toEnumConstant(filterTipoAccordo);
			}
			
			String termine = AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo);
			//String parametroSICA = Utilities.getParametroAccordoServizio(tipoAccordo,"&");
			boolean showColonnaServizioComponenti = AccordiServizioParteComuneUtilities.showInformazioniServiziComponenti(tipoAccordo);


			// setto la barra del titolo
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				ServletUtils.setPageDataTitle(this.pd, 
						new Parameter(termine, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST));
			}
			else{
				ServletUtils.setPageDataTitle(this.pd,
						new Parameter(termine, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST),
						new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}
			
			// Ordine Colonne: 
			// Nome - [AccordoCooperazione]  - ServiceBinding - Stato - Risorse - Servizi - Azioni - Erogatori - [Componenti] - Allegati

			Boolean gestioneInfoProtocollo = ServletUtils.getObjectFromSession(this.request, this.session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_GESTIONE_INFO_PROTOCOLLO);
			Boolean showAccordiAzioni = ServletUtils.getObjectFromSession(this.request, this.session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_VISUALIZZA_ACCORDI_AZIONI);
			Boolean showAccordiCooperazione = ServletUtils.getObjectFromSession(this.request, this.session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_VISUALIZZA_ACCORDI_COOPERAZIONE);
			Boolean showColonnaAccordiCooperazione = tipoAccordo!=null && tipoAccordo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO);

			// controllo eventuali risultati ricerca
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, termine, search);
			}

			// setto le label delle colonne
			int totEl = 1;

			//Accordo cooperazione
			if(showColonnaAccordiCooperazione)
				totEl ++;
			
			//Colonna ServiceBinding
			if(showServiceBinding) {
				totEl++;
			}

			if(this.isShowGestioneWorkflowStatoDocumenti()) {
				if(this.core.isGestioneWorkflowStatoDocumentiVisualizzaStatoLista()) {
					totEl++;
				}
			}
						
			if(showResources && (serviceBindingFilter==null || org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(serviceBindingFilter))) {
				// colonna risorse
				totEl++;
			}
			
			if(showServices && (serviceBindingFilter==null || org.openspcoop2.core.registry.constants.ServiceBinding.SOAP.equals(serviceBindingFilter))) {
				if (gestioneInfoProtocollo && showAccordiAzioni)
					totEl++;
				totEl++; // portTypes
			}
			
			// accordo cooperazione
			if (showAccordiCooperazione && showColonnaServizioComponenti)
				totEl++;
			
			// protocolli
			if( showProtocolli ) {
				totEl++;
			}
			
			// erogatore++
			if(this.isModalitaCompleta()) {
				totEl++;
			}
			
			String[] labels = new String[totEl+1];

			labels[0] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME;
			//labels[1] = "Descrizione";

			int index = 1;

			if( showProtocolli ) {
				labels[index] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO_COMPATC;
				index++;
			}
			
			// Accordo cooperazione
			if(showColonnaAccordiCooperazione){
				labels[index] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ACCORDO_COOPERAZIONE ;
				index++;
			}
			
			// serviceBinding
			if(showServiceBinding) {
				labels[index] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SERVICE_BINDING;
				index++;
			}

			if(this.isShowGestioneWorkflowStatoDocumenti()){
				if(this.core.isGestioneWorkflowStatoDocumentiVisualizzaStatoLista()) {
					labels[index] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_STATO_PACKAGE;
					index++;
				}
			}

			if(showResources && (serviceBindingFilter==null || org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(serviceBindingFilter))) {
				// risorse
				labels[index] = AccordiServizioParteComuneCostanti.LABEL_RISORSE;
				index++;
			}

			if(showServices && (serviceBindingFilter==null || org.openspcoop2.core.registry.constants.ServiceBinding.SOAP.equals(serviceBindingFilter))) {
				if (gestioneInfoProtocollo && showAccordiAzioni) {
					labels[index] = AccordiServizioParteComuneCostanti.LABEL_AZIONI;
					index++;
				}
				// portTypes
				labels[index] = AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES;
				index++;
			}
			
			if(this.isModalitaCompleta()) {
				labels[index] = AccordiServizioParteComuneCostanti.LABEL_ACCORDI_EROGATORI;
				index++;
			}

			if(showAccordiCooperazione && showColonnaServizioComponenti){
				labels[index] = AccordiServizioParteComuneCostanti.LABEL_SERVIZI_COMPONENTI;
				index++;
			}

			labels[index] = AccordiServizioParteComuneCostanti.LABEL_ALLEGATI;
			index++;

			this.pd.setLabels(labels);

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

			// inizializzo i dati
			if (lista != null) {
				Iterator<AccordoServizioParteComuneSintetico> it = lista.iterator();
				AccordoServizioParteComuneSintetico accordoServizio = null;
				while (it.hasNext()) {
					accordoServizio = it.next();
					List<DataElement> e = new ArrayList<>();
					ServiceBinding serviceBinding = this.apcCore.toMessageServiceBinding(accordoServizio.getServiceBinding());
					
					String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(accordoServizio.getSoggettoReferente().getTipo());
					
					DataElement de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE,
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoServizio.getId()+""),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoServizio.getNome()),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
					IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);
					de.setValue(getLabelIdAccordo(protocollo, idAccordo));
					de.setIdToRemove("" + accordoServizio.getId());
					de.setToolTip(accordoServizio.getDescrizione());
					e.add(de);

					if(showProtocolli) {
						de = new DataElement();
						de.setValue(this.getLabelProtocollo(protocollo));
						e.add(de);
					}
					
					/*de = new DataElement();
					de.setValue(accordoServizio.getDescrizione());
					e.add(de);*/

					if(showColonnaAccordiCooperazione){
						de = new DataElement();
						// calcolo l'accordo di cooperazione
						AccordoServizioParteComuneServizioCompostoSintetico servizioComposto = accordoServizio.getServizioComposto();

						if(servizioComposto  != null){
							AccordoCooperazione accordoCooperazione = this.acCore.getAccordoCooperazione(servizioComposto.getIdAccordoCooperazione());

							de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_ACCORDI_COOPERAZIONE_CHANGE,
									new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoCooperazione.getId()+""),
									new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoCooperazione.getNome()));

							de.setValue(this.getLabelIdAccordoCooperazione(accordoCooperazione));
						}
						e.add(de);
					}

					// service binding
					if(showServiceBinding) {
						de = new DataElement();
						switch (serviceBinding) {
						case REST:
							de.setValue(CostantiControlStation.LABEL_PARAMETRO_SERVICE_BINDING_REST);
							break;
						case SOAP:
						default:
							de.setValue(CostantiControlStation.LABEL_PARAMETRO_SERVICE_BINDING_SOAP);
							break;
						}
						e.add(de);
					}
					
					if(this.isShowGestioneWorkflowStatoDocumenti()){
						if(this.core.isGestioneWorkflowStatoDocumentiVisualizzaStatoLista()) {
							de = new DataElement();
							de.setValue(StatiAccordo.upper(accordoServizio.getStatoPackage()));
							e.add(de);
						}
					}
					
					if(showResources && (serviceBindingFilter==null || org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(serviceBindingFilter))) {
						// risorse
						de = new DataElement();
						switch (serviceBinding) {
						case REST:
							de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_LIST,
									new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoServizio.getId()+""),
									new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoServizio.getNome()),
									AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
							if (contaListe) {
								// BugFix OP-674		
								//List<Resource> tmpLista = this.apcCore.accordiResourceList(accordoServizio.getId().intValue(), new Search(true));
								ConsoleSearch searchForCount = new ConsoleSearch(true,1);
								this.apcCore.accordiResourceList(accordoServizio.getId().intValue(), searchForCount);
								int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES);
								ServletUtils.setDataElementVisualizzaLabel(de,(long)num);
							} else
								ServletUtils.setDataElementVisualizzaLabel(de);
							break;
						case SOAP:
						default:
							de.setValue(CostantiControlStation.LABEL_LIST_VALORE_NON_PRESENTE);
							break;
						}
						e.add(de);
					}

					/*if (gestioneWSBL.equals(Costanti.CHECK_BOX_ENABLED)) {
						de = new DataElement();
						AccordoServizioSoggettoReferente assr = accordoServizio.getSoggettoReferente();
						if (assr != null)
							de.setValue(assr.getTipo() + "/" + assr.getNome());
						e.add(de);
					}*/

					
					if(showServices && (serviceBindingFilter==null || org.openspcoop2.core.registry.constants.ServiceBinding.SOAP.equals(serviceBindingFilter))) {
						if (gestioneInfoProtocollo && showAccordiAzioni) {
							de = new DataElement();
							switch (serviceBinding) {
							case REST:
								de.setValue(CostantiControlStation.LABEL_LIST_VALORE_NON_PRESENTE);
								break;
							case SOAP:
							default:
								de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_AZIONI_LIST,
										new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoServizio.getId()+""),
										new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoServizio.getNome()),
										AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
								if (contaListe) {
									// BugFix OP-674
									//List<Azione> tmpLista = this.apcCore.accordiAzioniList(accordoServizio.getId().intValue(), new Search(true));
									ConsoleSearch searchForCount = new ConsoleSearch(true,1);
									this.apcCore.accordiAzioniList(accordoServizio.getId().intValue(), searchForCount);
									//int num = tmpLista.size();
									int num = searchForCount.getNumEntries(Liste.ACCORDI_AZIONI);
									ServletUtils.setDataElementVisualizzaLabel(de,(long)num);
								} else
									ServletUtils.setDataElementVisualizzaLabel(de);
							break;
							}
							e.add(de);
						}
	
						// PortTypes
						de = new DataElement();
						switch (serviceBinding) {
						case REST:
							de.setValue(CostantiControlStation.LABEL_LIST_VALORE_NON_PRESENTE);
							break;
						case SOAP:
						default:
							de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPES_LIST,
									new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoServizio.getId()+""),
									new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoServizio.getNome()),
									AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
							if (contaListe) {
								// BugFix OP-674
								//List<PortType> tmpLista = this.apcCore.accordiPorttypeList(accordoServizio.getId().intValue(), new Search(true));
								ConsoleSearch searchForCount = new ConsoleSearch(true,1);
								this.apcCore.accordiPorttypeList(accordoServizio.getId().intValue(), searchForCount);
								//int num = tmpLista.size();
								int num = searchForCount.getNumEntries(Liste.ACCORDI_PORTTYPE);
								ServletUtils.setDataElementVisualizzaLabel(de,(long)num);
							} else
								ServletUtils.setDataElementVisualizzaLabel(de);
						break;
						}
						e.add(de);
					}
					
					// erogatori
					if(this.isModalitaCompleta()) {
						de = new DataElement();
						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_EROGATORI_LIST,
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoServizio.getId()+""),
								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoServizio.getNome()),
								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
						if (contaListe) {
							// BugFix OP-674
							//List<org.openspcoop2.core.registry.Soggetto> tmpLista = this.apcCore.accordiErogatoriList(accordoServizio.getId().intValue(), new Search(true));
							ConsoleSearch searchForCount = new ConsoleSearch(true,1);
							this.apcCore.accordiErogatoriList(accordoServizio.getId().intValue(), searchForCount);
							//int num = tmpLista.size();
							int num = searchForCount.getNumEntries(Liste.ACCORDI_EROGATORI);
							ServletUtils.setDataElementVisualizzaLabel(de,(long)num);
						} else
							ServletUtils.setDataElementVisualizzaLabel(de);
						e.add(de);
					}

					if (showAccordiCooperazione && showColonnaServizioComponenti){
						de = new DataElement();
						if(accordoServizio.getServizioComposto()!=null){
							de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_COMPONENTI_LIST,
									new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoServizio.getId()+""),
									new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoServizio.getNome()),
									AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
							if (contaListe) {
								AccordoServizioParteComuneServizioCompostoSintetico assc = accordoServizio.getServizioComposto();
								ServletUtils.setDataElementVisualizzaLabel(de,(long)assc.getServizioComponente().size());
							} else
								ServletUtils.setDataElementVisualizzaLabel(de);
						}else{
							de.setValue("");
						}
						e.add(de);
					}

					//allegati
					de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_ALLEGATI_LIST,
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoServizio.getId()+""),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoServizio.getNome()),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
					if (contaListe) {
						// BugFix OP-674
						//List<org.openspcoop2.core.registry.Documento> tmpLista = this.apcCore.accordiAllegatiList(accordoServizio.getId().intValue(), new Search(true));
						ConsoleSearch searchForCount = new ConsoleSearch(true,1);
						this.apcCore.accordiAllegatiList(accordoServizio.getId().intValue(), searchForCount);
						//int num = tmpLista.size();
						int num = searchForCount.getNumEntries(Liste.ACCORDI_ALLEGATI);
						ServletUtils.setDataElementVisualizzaLabel(de,(long)num);
					} else
						ServletUtils.setDataElementVisualizzaLabel(de);
					e.add(de);

					dati.add(e);
				}
			}

			this.pd.setDati(dati);
			this.pd.setAddButton(true);

			// preparo bottoni
			if(lista!=null && lista.size()>0){
				if (this.core.isShowPulsantiImportExport()) {

					ExporterUtils exporterUtils = new ExporterUtils(this.archiviCore);
					boolean exists = false;
					if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoAccordo)){
						exists = exporterUtils.existsAtLeastOneExportMode(ArchiveType.ACCORDO_SERVIZIO_PARTE_COMUNE, this.request, this.session);
					}
					else{
						exists = exporterUtils.existsAtLeastOneExportMode(ArchiveType.ACCORDO_SERVIZIO_COMPOSTO, this.request, this.session);
					}
					if(exists){

						List<AreaBottoni> bottoni = new ArrayList<>();

						AreaBottoni ab = new AreaBottoni();
						List<DataElement> otherbott = new ArrayList<>();
						DataElement de = new DataElement();
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_APC_ESPORTA_SELEZIONATI);
						if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoAccordo)){
							de.setOnClick(AccordiServizioParteComuneCostanti.LABEL_APC_ESPORTA_SELEZIONATI_ONCLICK);
						}
						else{
							de.setOnClick(AccordiServizioParteComuneCostanti.LABEL_ASC_ESPORTA_SELEZIONATI_ONCLICK);
						}
						de.setDisabilitaAjaxStatus();
						otherbott.add(de);
						ab.setBottoni(otherbott);
						bottoni.add(ab);

						this.pd.setAreaBottoni(bottoni);

					}

				}
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}





	public boolean accordiComponentiCheckData(TipoOperazione tipoOp,String idServizioComponente)
			throws Exception {

		try{

			if(idServizioComponente==null || "".equals(idServizioComponente) || "-1".equals(idServizioComponente)){
				this.pd.setMessage("&Egrave; necessario selezionare un componente.");
				return false;
			}
			return true;

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public void prepareAccordiComponentiList(AccordoServizioParteComune as, ISearch ricerca, List<AccordoServizioParteComuneServizioCompostoServizioComponente> lista,
			String tipoAccordo) throws Exception {
		try {

			String labelASTitle = this.getLabelIdAccordo(as); 
			
			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_COMPONENTI,
					new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, ""+as.getId())
					);

			int idLista = Liste.ACCORDI_COMPONENTI;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));

			String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(as.getSoggettoReferente().getTipo());
			
			// setto la barra del titolo
			List<Parameter> lstParam = new ArrayList<>();

			lstParam.add(new Parameter(AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo), 
					AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST,
					AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
					));

			if (search.equals("")) {
				this.pd.setSearchDescription("");
				lstParam.add(new Parameter(AccordiServizioParteComuneCostanti.LABEL_COMPONENTI + " di " + labelASTitle, null));
			}else {
				lstParam.add(new Parameter(AccordiServizioParteComuneCostanti.LABEL_COMPONENTI + " di " + labelASTitle,
						AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_COMPONENTI_LIST,
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, "" + as.getId()),
						AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
						));

				lstParam.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null)); 
			}

			ServletUtils.setPageDataTitle(this.pd, lstParam);

			// controllo eventuali risultati ricerca
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_COMPONENTI, search);
			}

			// setto le label delle colonne
			//String l1 = AccordiServizioParteSpecificaCostanti.LABEL_APS; 
			String[] labels = { 
					//l1, 
					AccordiServizioParteSpecificaCostanti.LABEL_APS_SERVIZIO,
					AccordiServizioParteSpecificaCostanti.LABEL_APS_SOGGETTO_EROGATORE
					};
			this.pd.setLabels(labels);

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

			if (lista != null) {
				Iterator<AccordoServizioParteComuneServizioCompostoServizioComponente> it = lista.iterator();
				while (it.hasNext()) {
					AccordoServizioParteComuneServizioCompostoServizioComponente componente = it.next();

					List<DataElement> e = new ArrayList<>();

//					DataElement de = new DataElement();
//					IDServizio idServizio = new IDServizio(componente.getTipoSoggetto(),componente.getNomeSoggetto(),
//							componente.getTipo(),componente.getNome());
//					IDAccordo idAccordoParteSpecifica = this.apsCore.getIDAccordoServizioParteSpecifica(idServizio);
//					de.setValue(this.idAccordoFactory.getUriFromIDAccordo(idAccordoParteSpecifica));
//					de.setIdToRemove(""+componente.getIdServizioComponente());
//					e.add(de);

					DataElement de = new DataElement();
					de.setValue( this.getLabelNomeServizio(protocollo, componente.getTipo(), componente.getNome(), componente.getVersione()));
					de.setIdToRemove(""+componente.getIdServizioComponente());
					e.add(de);
					
					de = new DataElement();
					de.setValue(this.getLabelNomeSoggetto(protocollo, componente.getTipoSoggetto(), componente.getNomeSoggetto()));
					e.add(de);

					dati.add(e);
				}
			}

			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public List<DataElement> addAccordiServizioComponentiToDati(TipoOperazione tipoOp, String idAccordo,
			String idServizioComponente, String tipoAccordo,
			String[] serviziList, String[] serviziListLabel,
			List<DataElement> dati) {
		
		DataElement de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_COMPONENTE);
		de.setType(DataElementType.TITLE);
		dati.add(de);
		
		de = new DataElement();
		de.setValue(idAccordo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
		dati.add(de);

		de = new DataElement();
		de.setValue(tipoAccordo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_COMPONENTI_TIPO_SICA);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteSpecificaCostanti.LABEL_APS_SERVIZIO);
		de.setType(DataElementType.SELECT);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_COMPONENTI_COMPONENTE);
		de.setValues(serviziList);
		de.setLabels(serviziListLabel);
		//de.setOnChange("CambiaAccordoComponente('componentiAdd')");
		if (idServizioComponente != null) {
			de.setSelected(idServizioComponente);
		}
		dati.add(de);

		return dati;
	}


	public void prepareAccordiPorttypeOperationMessagePartList(ISearch ricerca, List<MessagePart> lista, AccordoServizioParteComune as,String tipoAccordo,String nomePT, String nomeOp, boolean isMessageInput) throws Exception {
		try {
			String id = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			int idLista = Liste.ACCORDI_PORTTYPE_AZIONI_MESSAGE_INPUT;

//			String uri = null;
//			uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as); 

			Parameter pIdAccordo  = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id);
			Parameter pNomeAccordo  = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, as.getNome());
			Parameter pNomePt  = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME, nomePT);
			Parameter pNomeOp  = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_NOME, nomeOp);
			Parameter pTipoMsg  = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_TYPE, 
					(isMessageInput ? AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_INPUT : AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_OUTPUT));
			
			Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
			

			if(!isMessageInput){
				idLista = Liste.ACCORDI_PORTTYPE_AZIONI_MESSAGE_OUTPUT;
			}

			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_PORT_TYPE_OPERATIONS_MESSAGE,
					pIdAccordo, pTipoAccordo,  pNomePt, pNomeOp, pTipoMsg);

			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));


			Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
			List<Parameter> listaParams = this.getTitoloApc(TipoOperazione.LIST, as, tipoAccordo, labelASTitle, null, false);
		
			// porttypes
			String labelPortTypes = isModalitaVistaApiCustom ? AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES: AccordiServizioParteComuneCostanti.LABEL_PORT_TYPES + " di " + labelASTitle;
			listaParams.add(new Parameter(labelPortTypes, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPES_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));

			// azioni
			String labelOperations = AccordiServizioParteComuneCostanti.LABEL_AZIONI  + " di " + nomePT;
			listaParams.add(new Parameter(labelOperations, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomePt));
			
			// azione
			String labelOperation = nomeOp;
			listaParams.add(new Parameter(labelOperation,AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_CHANGE,pIdAccordo,pNomeOp,pNomePt,pTipoAccordo));

			String labelMessage = AccordiServizioParteComuneCostanti.LABEL_OPERATION_MESSAGE_INPUT;
			if(!isMessageInput){
				labelMessage = AccordiServizioParteComuneCostanti.LABEL_OPERATION_MESSAGE_OUTPUT;
			}
			
			labelMessage = isModalitaVistaApiCustom ? labelMessage : labelMessage + " di " + nomeOp;

			// setto la barra del titolo	
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				listaParams.add(new Parameter(labelMessage, null));
			}else{
				listaParams.add(	new Parameter(labelMessage,AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_MESSAGE_LIST,	pIdAccordo,pNomeAccordo,pNomePt, pNomePt , pTipoMsg,pTipoAccordo));
				listaParams.add (new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}

			ServletUtils.setPageDataTitle(this.pd,listaParams);

			// controllo eventuali risultati ricerca
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_AZIONI, search);
			}

			// setto le label delle colonne
			String[] labels = { AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME };
			this.pd.setLabels(labels);

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

			if (lista != null) {
				Iterator<MessagePart> it = lista.iterator();
				while (it.hasNext()) {
					MessagePart op = it.next();

					List<DataElement> e = new ArrayList<>();

					DataElement de = new DataElement();
					Parameter pPart = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NAME, op.getName());
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPE_OPERATIONS_MESSAGE_CHANGE,
							pIdAccordo, pNomeOp, pNomePt, pTipoMsg, pPart,
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
							);
					de.setValue(op.getName());
					de.setIdToRemove(op.getName());
					e.add(de);

					dati.add(e);
				}
			}

			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public List<DataElement> addAccordiPorttypeOperationMessageToDati(TipoOperazione tipoOp, List<DataElement> dati,String idAccordo,String tipoAccordo,
			String nomept, String nomeop, String messagePartName, String messagePartType, String messagePartLocalName,
			String messagePartNS, String tipoMessage){

		DataElement de = new DataElement();

		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_WSDL_PART);
		de.setType(DataElementType.TITLE);
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
		de.setValue(idAccordo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
		dati.add(de);

		de = new DataElement();
		de.setValue(tipoAccordo);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
		de.setSize(this.getSize());
		dati.add(de);

		de = new DataElement();
		de.setValue(nomept);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME);
		de.setSize(this.getSize());
		dati.add(de);

		de = new DataElement();
		de.setValue(nomeop);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_NOME);
		dati.add(de);

		de = new DataElement();
		de.setValue(tipoMessage);
		de.setType(DataElementType.HIDDEN);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_TYPE);
		dati.add(de);

		de = new DataElement();
		de.setValue(messagePartName);
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NAME);
		if(tipoOp.equals(TipoOperazione.ADD)){
			de.setType(DataElementType.TEXT_EDIT);
			de.setRequired(true); 
		}else{
			de.setType(DataElementType.TEXT);
		}
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NAME);
		de.setSize(this.getSize()); 
		dati.add(de);

		de = new DataElement();
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_TYPE);
		de.setType(DataElementType.SELECT);
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_TYPE);
		de.setValues(AccordiServizioParteComuneCostanti.PORT_TYPE_OPERATION_MESSAGE_PART_TYPE);
		de.setLabels(AccordiServizioParteComuneCostanti.LABEL_PORT_TYPE_OPERATION_MESSAGE_PART_TYPE);
		de.setSelected(messagePartType);
		de.setSize(this.getSize()); 
		dati.add(de);

		de = new DataElement();
		de.setValue(messagePartLocalName);
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_LOCAL_NAME);
		de.setType(DataElementType.TEXT_EDIT);
		de.setRequired(true); 
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_LOCAL_NAME);
		de.setSize(this.getSize()); 
		dati.add(de);

		de = new DataElement();
		de.setValue(messagePartNS);
		de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NS);
		de.setType(DataElementType.TEXT_EDIT);
		de.setRequired(true); 
		de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NS);
		de.setSize(this.getSize()); 
		dati.add(de);

		return dati;
	}


	public boolean accordiPorttypeOperationMessageCheckData(TipoOperazione tipoOperazione)
			throws Exception {

		try{

			String id = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			int idInt = Integer.parseInt(id);
			String nomept = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPES_NOME);
			String nomeop = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_NOME);
			String tipoAccordo = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
			if("".equals(tipoAccordo))
				tipoAccordo = null;

			String tipoMessage = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_TYPE);

			boolean isMessageInput = tipoMessage.equals(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_INPUT);

			String messagePartName = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NAME);
			String messagePartLocalName = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_LOCAL_NAME);
			String messagePartNs = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NS);
			//			String messagePartType = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_TYPE);

			AccordoServizioParteComune as = this.apcCore.getAccordoServizioFull(idInt);

			// Prendo il port-type e l'operation
			PortType pt = null;
			Operation operation = null;
			for (int i = 0; i < as.sizePortTypeList(); i++) {
				pt = as.getPortType(i);
				if (nomept.equals(pt.getNome())){
					for (Operation opTmp : pt.getAzioneList()) {
						if(opTmp.getNome().equals(nomeop)){
							operation = opTmp;
							break;
						}
					}
				}
			}

			Message m = null;
			if(isMessageInput)
				m = operation.getMessageInput();
			else 
				m = operation.getMessageOutput();

			if (messagePartName == null || messagePartName.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare il "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NAME+".");
				return false;
			}

			if (messagePartName.indexOf(" ") != -1 ) {
				this.pd.setMessage("Il campo "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NAME+" non pu&ograve; contenere spazi");
				return false;
			}


			if (messagePartLocalName == null || messagePartLocalName.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare il "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_LOCAL_NAME+".");
				return false;
			}

			if (messagePartLocalName.indexOf(" ") != -1 ) {
				this.pd.setMessage("Il campo "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_LOCAL_NAME+" non pu&ograve; contenere spazi");
				return false;
			}

			if (messagePartNs == null || messagePartNs.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare il "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NS+".");
				return false;
			}

			if (messagePartNs.indexOf(" ") != -1 ) {
				this.pd.setMessage("Il campo "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NS+" non pu&ograve; contenere spazi");
				return false;
			}	

			try{
				URI.create(messagePartNs);
			}catch(Exception e){
				this.pd.setMessage("Il campo "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NS+" non contiene una URI valida");
				return false;
			}

			// check lunghezza
			if(this.checkLength255(messagePartName, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NAME)==false) {
				return false;
			}
			if(this.checkLength255(messagePartLocalName, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_LOCAL_NAME)==false) {
				return false;
			}
			if(this.checkLength255(messagePartNs, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PORT_TYPE_OPERATION_MESSAGE_PART_NS)==false) {
				return false;
			}

			// controllo esistenza
			if (tipoOperazione.equals(TipoOperazione.ADD)) {
				if(m!=null){
					for (MessagePart part : m.getPartList()) {
						if(part.getName().equals(messagePartName)){
							this.pd.setMessage("Il part '" + nomeop + "' &egrave; gi&agrave; stata associato al "+(isMessageInput ? "messaggio di input." : "messaggio di output."));
							return false;
						}
					}
				}
			}

			return true;

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}
	
	public boolean setMessageWarningStatoConsistenzaAccordo(boolean create, AccordoServizioParteComune as) {
		
		String msgError = null;
		
		if(create) {
			if(org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(as.getServiceBinding())) {
				if(as.sizeResourceList()<=0) {
					msgError = AccordiServizioParteComuneCostanti.LABEL_CONFIGURAZIONE_INCOMPLETA_REST_CREATE;
				}
			}
			else {
				if(as.sizePortTypeList()<=0) {
					msgError = AccordiServizioParteComuneCostanti.LABEL_CONFIGURAZIONE_INCOMPLETA_SOAP_CREATE;
				}
				else if(as.sizePortTypeList()==1) {
					if(as.getPortType(0).sizeAzioneList()<=0) {
						msgError = AccordiServizioParteComuneCostanti.LABEL_CONFIGURAZIONE_INCOMPLETA_SOAP_AZIONE_SERVIZIO_CREATE;
					}
				}
				else {
					for (PortType portType : as.getPortTypeList()) {
						if(portType.sizeAzioneList()<=0) {
							msgError = AccordiServizioParteComuneCostanti.LABEL_CONFIGURAZIONE_INCOMPLETA_SOAP_AZIONE_SERVIZI_CREATE;
						}
					}
				}
			}
		}
		else {
			if(org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(as.getServiceBinding())) {
				if(as.sizeResourceList()<=0) {
					msgError = AccordiServizioParteComuneCostanti.LABEL_CONFIGURAZIONE_INCOMPLETA_REST_UPDATE;
				}
			}
			else {
				if(as.sizePortTypeList()<=0) {
					msgError = AccordiServizioParteComuneCostanti.LABEL_CONFIGURAZIONE_INCOMPLETA_SOAP_UPDATE;
				}
				else if(as.sizePortTypeList()==1) {
					if(as.getPortType(0).sizeAzioneList()<=0) {
						msgError = AccordiServizioParteComuneCostanti.LABEL_CONFIGURAZIONE_INCOMPLETA_SOAP_AZIONE_SERVIZIO_UPDATE;
					}
				}
				else {
					for (PortType portType : as.getPortTypeList()) {
						if(portType.sizeAzioneList()<=0) {
							msgError = AccordiServizioParteComuneCostanti.LABEL_CONFIGURAZIONE_INCOMPLETA_SOAP_AZIONE_SERVIZI_UPDATE;
						}
					}
				}
			}
		}
		
		if(msgError!=null) {
			Dialog dialog = new Dialog();
			
			dialog.setTitolo(Costanti.MESSAGE_TYPE_WARN_TITLE);
			dialog.setHeaderRiga1(msgError);
					
			String[][] bottoni = { 
					{ Costanti.LABEL_MONITOR_BUTTON_CHIUDI, "" }
					};
			
			this.pd.setBottoni(bottoni);
			
			this.pd.setDialog(dialog);
			return true;
		}
		else {
			return false;
		}
	}
	
	public void prepareAccordiResourcesList(String idApc,AccordoServizioParteComune as, List<org.openspcoop2.core.registry.Resource> lista, ISearch ricerca, String tipoAccordo)
			throws Exception {
		try {
			String uri = null;
			uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as); 
			
			Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
			Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc);
			Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri);

			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_RESOURCES,
					pIdAccordo,	pTipoAccordo, pNomeAccordo);

//			Boolean contaListe = ServletUtils.getContaListeFromSession(this.session);
//			User user = ServletUtils.getUserFromSession(this.session);
//			InterfaceType gui = user.getInterfaceType();

			int idLista = Liste.ACCORDI_API_RESOURCES;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			String filterHttpMethod = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_HTTP_METHOD);
			this.addFilterHttpMethod(filterHttpMethod, false);
			
			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));

			
			Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
			List<Parameter> listaParams = this.getTitoloApc(TipoOperazione.LIST, as, tipoAccordo, labelASTitle, null, false);
			
			String labelRisorse = isModalitaVistaApiCustom ? AccordiServizioParteComuneCostanti.LABEL_RISORSE : AccordiServizioParteComuneCostanti.LABEL_RISORSE + " di " + labelASTitle;
			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				listaParams.add(new Parameter(labelRisorse, null));
			}else{
				listaParams.add(new Parameter(labelRisorse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));
				listaParams.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}
			ServletUtils.setPageDataTitle(this.pd, listaParams);

			// controllo eventuali risultati ricerca
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH);
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_RISORSE, search);
			}

			// setto le label delle colonne
			List<String> labelList = new ArrayList<>();
			//labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD);
			labelList.add(CostantiControlStation.LABEL_PARAMETRO_HTTP_METHOD_COMPACT);
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH);
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_DESCRIZIONE);
			//labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_NOME);
//			labelList.add(AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION);
//			if(gui.equals(InterfaceType.AVANZATA))
//				labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETERS);
//			
//			labelList.add(AccordiServizioParteComuneCostanti.LABEL_RISPOSTE);
			labelList.add(CostantiControlStation.LABEL_IN_USO_COLONNA_HEADER); // inuso
			
			String[] labels = labelList.toArray(new String[labelList.size()]);
			
			this.pd.setLabels(labels);

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

			boolean existsBigDescription = false;
			if (lista != null) {
				
				Iterator<org.openspcoop2.core.registry.Resource> it = lista.iterator();
				while (it.hasNext()) {
					org.openspcoop2.core.registry.Resource risorsa = it.next();
					if(risorsa.getDescrizione()!=null && risorsa.getDescrizione().length()>30) {
						existsBigDescription = true;
						break;
					}
				}

				it = lista.iterator();
				while (it.hasNext()) {
					org.openspcoop2.core.registry.Resource risorsa = it.next();

					String labelParametroApcResourcesHttpMethodQualsiasi = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI;
					List<DataElement> e = new ArrayList<>();
					
					List<Parameter> parametriChangeRisorsa = new ArrayList<>();
					parametriChangeRisorsa.add(new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc));
					//parametriChangeRisorsa.add(new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa));
					parametriChangeRisorsa.add(new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_ID, risorsa.getId()+""));
					parametriChangeRisorsa.add(AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo));
					
					String nomeRisorsa = risorsa.getNome();
										
					//HTTP Method
					String detailURL = new Parameter("", AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_CHANGE, parametriChangeRisorsa.toArray(new Parameter[parametriChangeRisorsa.size()])).getValue(); 
					DataElement de = getDataElementHTTPMethodResource(risorsa, labelParametroApcResourcesHttpMethodQualsiasi, detailURL);
					de.setToolTip(nomeRisorsa);
					e.add(de);
					
					de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_CHANGE, parametriChangeRisorsa.toArray(new Parameter[parametriChangeRisorsa.size()]));
					
					if(risorsa.getPath()==null || "".equals(risorsa.getPath())) {
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH_QUALSIASI);
					}
					else {
						de.setValue(risorsa.getPath());
					}
					de.setToolTip(nomeRisorsa);
					de.setIdToRemove(nomeRisorsa);
					if(existsBigDescription==false) {
						de.setSize(this.core.getElenchiMenuIdentificativiLunghezzaMassima());
					}
					e.add(de);
					
					de = new DataElement();
					de.setValue(risorsa.getDescrizione());
					e.add(de);
					
//					de = new DataElement();
//					String nomeRisorsa = risorsa.getNome();
//					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_CHANGE, 
//							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc),
////							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
//							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_ID, risorsa.getId()+""),
//							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
//							);
//					de.setValue(nomeRisorsa);
//					de.setIdToRemove(nomeRisorsa);
//					e.add(de);

//					Long idRisorsa = risorsa.getId();
//
//					// link  rappresentazioni
//					de = new DataElement();
//					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_REPRESENTATIONS_LIST, 
//							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc),
//							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
//							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, "true"),
//							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
//							);
//					if (contaListe) {
//						// Prendo l'id del port-type
//
//						// BugFix OP-674
//						//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
//						Search searchForCount = new Search(true,1);
//						this.apcCore.accordiResourceRepresentationsList(idRisorsa, true, null, searchForCount);
//						//int num = tmpLista.size();
//						int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES_REPRESENTATION_REQUEST);
//						ServletUtils.setDataElementVisualizzaLabel(de, (long) num);
//					} else
//						ServletUtils.setDataElementVisualizzaLabel(de);
//					e.add(de);
//					
//					
//					if (InterfaceType.AVANZATA.equals(gui)) {
//						 // link parametri
//						de = new DataElement();
//						de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_PARAMETERS_LIST, 
//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc),
//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
//								new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, "true"),
//								AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
//								);
//						if (contaListe) {
//							// Prendo l'id del port-type
//
//							// BugFix OP-674
//							//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
//							Search searchForCount = new Search(true,1);
//							this.apcCore.accordiResourceParametersList(idRisorsa, true, null, searchForCount);
//							//int num = tmpLista.size();
//							int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES_PARAMETERS_REQUEST);
//							ServletUtils.setDataElementVisualizzaLabel(de, (long) num);
//						} else
//							ServletUtils.setDataElementVisualizzaLabel(de);
//						e.add(de);
//					}
//				
//					// link risposta
//					de = new DataElement();
//					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_LIST, 
//							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc),
//							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
//							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
//							);
//					if (contaListe) {
//						// Prendo l'id del port-type
//
//						// BugFix OP-674
//						//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
//						Search searchForCount = new Search(true,1);
//						this.apcCore.accordiResourceResponseList(idRisorsa.intValue(), searchForCount);
//						//int num = tmpLista.size();
//						int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES_RESPONSE);
//						ServletUtils.setDataElementVisualizzaLabel(de, (long) num);
//					} else
//						ServletUtils.setDataElementVisualizzaLabel(de);
//					e.add(de);

					// traduco nomeRisorsa in path
					String methodPath = NamingUtils.getLabelResource(risorsa);
					if(methodPath==null) {
						methodPath = risorsa.getNome();
					}
					this.addInUsoButtonVisualizzazioneClassica(e, methodPath, risorsa.getNome()+"@"+this.idAccordoFactory.getUriFromAccordo(as), InUsoType.RISORSA);
					
					dati.add(e);
				}

			}

			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public List<DataElement> addAccordiResourceToDati(TipoOperazione tipoOperazione, List<DataElement> dati, String idAccordo, Long idRisorsa,
			String nomeRisorsa, String descrizione, String path, String httpMethod, MessageType messageType,
			String stato, String tipoAccordo, String protocollo, IProtocolFactory<?> protocolFactory,ServiceBinding serviceBinding,MessageType messageTypeRichiesta, MessageType messageTypeRisposta,
			String profProtocollo, 
			String filtrodupaz, String deffiltrodupaz, String confricaz, String defconfricaz, 
			String idcollaz, String defidcollaz, String idRifRichiestaAz, String defIdRifRichiestaAz, String consordaz, String defconsordaz, String scadenzaaz, 
			String defscadenzaaz, boolean inUse) throws Exception {
		try {
			boolean modificheAbilitate = false;
			if( tipoOperazione.equals(TipoOperazione.ADD) ){
				modificheAbilitate = true;
			}else if(this.isShowGestioneWorkflowStatoDocumenti()==false){
				modificheAbilitate = true;
			}else if(StatiAccordo.finale.toString().equals(stato)==false){
				modificheAbilitate = true;
			}
			
			Boolean contaListe = ServletUtils.getContaListeFromSession(this.session);
			
			DataElement de = new DataElement();
			de.setValue(idAccordo);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			dati.add(de);

			de = new DataElement();
			de.setValue(tipoAccordo);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
			dati.add(de);

			de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_RISORSA);
			dati.add(de);
			
			DataElement deHttpMethod = this.getHttpMethodDataElement(tipoOperazione, httpMethod); 
			if(inUse) {
				deHttpMethod.setType(DataElementType.TEXT);
				deHttpMethod.setValue(httpMethod);
			}
			dati.add(deHttpMethod);	
			
			boolean nameRequired = (AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI.equals(httpMethod) || httpMethod==null);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH);
			de.setValue(path);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PATH);
			if(inUse) {
				de.setType(DataElementType.TEXT);
			}
			else {
				de.setType(DataElementType.TEXT_EDIT);
				de.setRequired(!(nameRequired));
				List<String> l = this.apcCore.getGetApiResourcePathQualsiasiSpecialChar();
				if(de.isRequired()) {
					boolean httpMethodAndPathQualsiasi = this.apcCore.isApiResourceHttpMethodAndPathQualsiasiEnabled();
					if(httpMethodAndPathQualsiasi && l!=null && !l.isEmpty()) {
						de.setInfo(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH, 
								AccordiServizioParteComuneCostanti.getLABEL_PARAMETRO_APC_RESOURCES_PATH_INFO(l.get(0), true));
					}
				}
				else {
					if(l!=null && !l.isEmpty()) {
						de.setInfo(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH, 
								AccordiServizioParteComuneCostanti.getLABEL_PARAMETRO_APC_RESOURCES_PATH_INFO(l.get(0), false));
					}
				}
				de.setRequired(false); // lascio sempre a false poiche' altrimenti non si capisce quando si rientra in edit che il carattere vuoto e' ammesso. Sembra un bug
			}
			if( !modificheAbilitate && (path ==null || "".equals(path)) ) {
				de.setValue(" ");
			}
			de.setSize(this.getSize());			
			dati.add(de);	
	
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_NOME);
			de.setValue(nomeRisorsa);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME);
			if(inUse) {
				de.setType(DataElementType.TEXT);
			}
			else {
				de.setType(DataElementType.TEXT_EDIT);
				if(!nameRequired) {
					de.setNote(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_NOME_NOTE);
				}
				de.setRequired(nameRequired);
			}
			de.setSize(this.getSize());
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_DESCRIZIONE);
			de.setValue(descrizione);
			de.setType(DataElementType.TEXT_AREA);
			de.setRows(3);
			if( !modificheAbilitate && (descrizione==null || "".equals(descrizione)) )
				de.setValue(" ");
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_DESCRIZIONE);
			de.setSize(this.getSize());
			dati.add(de);

			boolean hiddenMessageType = this.isModalitaStandard();
			
			dati.add(this.getMessageTypeDataElement(AccordiServizioParteComuneCostanti.PARAMETRO_APC_MESSAGE_TYPE,
					protocolFactory, serviceBinding, messageType, hiddenMessageType));
						
			
			boolean filtroDuplicatiSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.FILTRO_DUPLICATI);
			boolean confermaRicezioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.CONFERMA_RICEZIONE);
			boolean collaborazioneSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.COLLABORAZIONE);
			boolean idRiferimentoRichiestaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA);
			boolean consegnaInOrdineSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.CONSEGNA_IN_ORDINE);
			boolean scadenzaSupportato = this.core.isFunzionalitaProtocolloSupportataDalProtocollo(protocollo, serviceBinding, FunzionalitaProtocollo.SCADENZA);
			boolean almostOneSupported = filtroDuplicatiSupportato || 
					confermaRicezioneSupportato ||
					collaborazioneSupportato ||
					idRiferimentoRichiestaSupportato ||
					consegnaInOrdineSupportato ||
					scadenzaSupportato;
			
			if(almostOneSupported) {
				de = new DataElement();
				de.setType(DataElementType.TITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI);
				dati.add(de);
			}
			
			
			if (this.isModalitaStandard()) {
				de = new DataElement();
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_BUSTA);
				de.setValue(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO);
				dati.add(de);
				profProtocollo = AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO; // forzo
			}
			else {
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PROFILO_PROTOCOLLO);
				de.setType(DataElementType.SELECT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_BUSTA);
				if(modificheAbilitate && almostOneSupported){
					de.setValues(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA);
					de.setLabels(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO);
					de.setSelected(profProtocollo);
					//							de.setOnChange("CambiaProfPT('" + tipoOp + "')");
					de.setPostBack(true);
				}else{
					if(almostOneSupported) {
						de.setType(DataElementType.TEXT);
					}
					else {
						de.setType(DataElementType.HIDDEN);
					}
					if(profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)){
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_DEFAULT_ACCORDO);
					}else{
						de.setValue(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO);
					}
				}
				dati.add(de);
			}
			

			// Gli elementi qui sotto devono essere visualizzati solo in modalita' avanzata  && profilobusta = 'ridefinito' && se la corrispondente proprieta e' abilitata nel protocollo

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
					) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(deffiltrodupaz);
			} else {
				if((profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
						&& !filtroDuplicatiSupportato) ){
					de.setType(DataElementType.HIDDEN);
//					if(filtroDuplicatiSupportato) {
//						// se il protocollo lo supporta, lascio il filtro abilitato per default
//						de.setValue(Costanti.CHECK_BOX_ENABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}
				else
				{
					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if( ServletUtils.isCheckBoxEnabled(filtrodupaz) || CostantiRegistroServizi.ABILITATO.equals(filtrodupaz) ){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if( ServletUtils.isCheckBoxEnabled(filtrodupaz) || CostantiRegistroServizi.ABILITATO.equals(filtrodupaz) ){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_FILTRO_DUPLICATI);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
					) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defconfricaz);
			} else {
				if((profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
						&& !confermaRicezioneSupportato)){
					de.setType(DataElementType.HIDDEN);
//					if(confermaRicezioneSupportato) {
//						// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//						de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else{

					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if( ServletUtils.isCheckBoxEnabled(confricaz) || CostantiRegistroServizi.ABILITATO.equals(confricaz) ){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if( ServletUtils.isCheckBoxEnabled(confricaz) || CostantiRegistroServizi.ABILITATO.equals(confricaz) ){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_CONFERMA_RICEZIONE);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
					) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defidcollaz);
			} else {
				if(profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
						&& !collaborazioneSupportato) {
					de.setType(DataElementType.HIDDEN);
//					if(collaborazioneSupportato) {
//						// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//						de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else {

					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if( ServletUtils.isCheckBoxEnabled(idcollaz) || CostantiRegistroServizi.ABILITATO.equals(idcollaz) ){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if( ServletUtils.isCheckBoxEnabled(idcollaz) || CostantiRegistroServizi.ABILITATO.equals(idcollaz) ){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_COLLABORAZIONE);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
					) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defIdRifRichiestaAz);
			} else {
				if(profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
						&& !idRiferimentoRichiestaSupportato) {
					de.setType(DataElementType.HIDDEN);
//					if(idRiferimentoRichiestaSupportato) {
//						// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//						de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else {

					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if( ServletUtils.isCheckBoxEnabled(idRifRichiestaAz) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiestaAz) ){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if( ServletUtils.isCheckBoxEnabled(idRifRichiestaAz) || CostantiRegistroServizi.ABILITATO.equals(idRifRichiestaAz) ){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_ID_RIFERIMENTO_RICHIESTA);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
					) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defconsordaz);
			} else {
				if((profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
						&& !consegnaInOrdineSupportato) ){
					de.setType(DataElementType.HIDDEN);
//					if(consegnaInOrdineSupportato) {
//						// anche se il protocollo lo supporta, lascio il filtro disabilitato per default
//						de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
//					else {
					de.setValue(Costanti.CHECK_BOX_DISABLED);
//					}
				}else {
					if(modificheAbilitate){
						de.setType(DataElementType.CHECKBOX);
						if( ServletUtils.isCheckBoxEnabled(consordaz) || CostantiRegistroServizi.ABILITATO.equals(consordaz) ){
							de.setSelected(true);
						}
					}else{
						de.setType(DataElementType.TEXT);
						if( ServletUtils.isCheckBoxEnabled(consordaz) || CostantiRegistroServizi.ABILITATO.equals(consordaz) ){
							de.setValue(CostantiRegistroServizi.ABILITATO.toString());
						}else{
							de.setValue(CostantiRegistroServizi.DISABILITATO.toString());
						}
					}
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_CONSEGNA_ORDINE);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA);
			de.setValue(scadenzaaz);
			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)
					) {
				de.setType(DataElementType.HIDDEN);
				de.setValue(defscadenzaaz);
			} else {
				if((profProtocollo.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO) 
						&& !scadenzaSupportato)){
					de.setType(DataElementType.HIDDEN);
					de.setValue(defscadenzaaz);
				}else {
					de.setType(DataElementType.TEXT_EDIT);
					de.setValue(scadenzaaz);
					if( !modificheAbilitate && (scadenzaaz==null || "".equals(scadenzaaz)) )
						de.setValue(" ");
				}
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_SCADENZA);
			de.setSize(this.getSize());
			dati.add(de);
			
			
			
			
			if( (TipoOperazione.CHANGE.equals(tipoOperazione) && !this.isModalitaStandard()) || !hiddenMessageType) {
				de = new DataElement();
				de.setType(DataElementType.TITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_APC_RESOURCES_RICHIESTA);
				dati.add(de);
			}
			
			dati.add(this.getMessageTypeDataElement(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_MESSAGE_TYPE_REQUEST,
					protocolFactory, serviceBinding, messageTypeRichiesta, hiddenMessageType));
			
			if(tipoOperazione.equals(TipoOperazione.CHANGE)) {
				de = new DataElement();
				de.setValue(idRisorsa.intValue()+"");
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_ID);
				dati.add(de);
			}
			
			if(tipoOperazione.equals(TipoOperazione.CHANGE)  && !this.isModalitaStandard()) {
				if(contaListe) {
					AccordoServizioParteComuneSintetico as = this.apcCore.getAccordoServizioSintetico(Integer.parseInt(idAccordo));
					for (int i = 0; i < as.getResource().size(); i++) {
						ResourceSintetica res1 = as.getResource().get(i);
						if (idRisorsa.intValue() == res1.getId().intValue()) {
							break;
						}
					}
				}
				
				// link  rappresentazioni
				de = new DataElement();
				de.setType(DataElementType.LINK);
				de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_REPRESENTATIONS_LIST, 
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idAccordo),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, "true"),
						AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
						);
				if (contaListe) {
					// Prendo l'id del port-type

					// BugFix OP-674
					//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
					ConsoleSearch searchForCount = new ConsoleSearch(true,1);
					this.apcCore.accordiResourceRepresentationsList(idRisorsa, true, null, searchForCount);
					//int num = tmpLista.size();
					int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES_REPRESENTATION_REQUEST);
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION+" ("+num+")");
				} else
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION);
				dati.add(de);
				
				
				 // link parametri
				de = new DataElement();
				de.setType(DataElementType.LINK);
				de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_PARAMETERS_LIST, 
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idAccordo),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, "true"),
						AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
						);
				if (contaListe) {
					// Prendo l'id del port-type

					// BugFix OP-674
					//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
					ConsoleSearch searchForCount = new ConsoleSearch(true,1);
					this.apcCore.accordiResourceParametersList(idRisorsa, true, null, searchForCount);
					//int num = tmpLista.size();
					int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES_PARAMETERS_REQUEST);
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETERS+" ("+num+")");
				} else
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETERS);
				dati.add(de);
				
			}
			
			if( (TipoOperazione.CHANGE.equals(tipoOperazione) && !this.isModalitaStandard()) || !hiddenMessageType) {
				de = new DataElement();
				de.setType(DataElementType.TITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_APC_RESOURCES_RISPOSTA);
				dati.add(de);
			}
			
			dati.add(this.getMessageTypeDataElement(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_MESSAGE_TYPE_RESPONSE,
					protocolFactory, serviceBinding, messageTypeRisposta, hiddenMessageType));
			
			if(tipoOperazione.equals(TipoOperazione.CHANGE)  && !this.isModalitaStandard()) {
				// link risposta
				de = new DataElement();
				de.setType(DataElementType.LINK);
				de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_LIST, 
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idAccordo),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
						AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
						);
				if (contaListe) {
					// Prendo l'id del port-type

					// BugFix OP-674
					//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
					ConsoleSearch searchForCount = new ConsoleSearch(true,1);
					this.apcCore.accordiResourceResponseList(idRisorsa, searchForCount);
					//int num = tmpLista.size();
					int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES_RESPONSE);
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_RISPOSTE+" ("+num+")");
				} else
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_RISPOSTE);
				dati.add(de);
			}
			
			
			return dati;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}



	public boolean accordiResourceCheckData(TipoOperazione tipoOp, String id, String nomeRisorsa, String nomeRisorsaProposto, String path,
			String httpMethod, String descr, MessageType messageType, String oldNomeRisorsa, String oldNomeRisorsaProposto, String oldPath, String oldHttpMethod,
			String profProtocollo, String filtrodupaz, String confricaz, String idcollaz, String idRifRichiestaAz,
			String consordaz, String scadenzaaz) throws Exception {

		try{
			if ((filtrodupaz != null) && (filtrodupaz.equals("null") || filtrodupaz.equals(Costanti.CHECK_BOX_DISABLED))) {
				filtrodupaz = null;
			}
			if ((confricaz != null) && (confricaz.equals("null") || confricaz.equals(Costanti.CHECK_BOX_DISABLED))) {
				confricaz = null;
			}
			if ((idcollaz != null) && (idcollaz.equals("null") || idcollaz.equals(Costanti.CHECK_BOX_DISABLED))) {
				idcollaz = null;
			}
			if ((idRifRichiestaAz != null) && (idRifRichiestaAz.equals("null") || idRifRichiestaAz.equals(Costanti.CHECK_BOX_DISABLED))) {
				idRifRichiestaAz = null;
			}
			if ((consordaz != null) && (consordaz.equals("null") || consordaz.equals(Costanti.CHECK_BOX_DISABLED))) {
				consordaz = null;
			}
			
			// Campi obbligatori
			// path
			if ((path==null || path.equals("")) && httpMethod!=null) {
				boolean httpMethodAndPathQualsiasi = this.apcCore.isApiResourceHttpMethodAndPathQualsiasiEnabled();
				if(!httpMethodAndPathQualsiasi) {
					this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Path");
					return false;
				}
			}
			
			// validazione del campo path, controllo solo che non ci siano spazi bianchi
			if(path!=null && path.contains(" ")){
				this.pd.setMessage("Il campo "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH+" non pu&ograve; contenere spazi bianchi");
				return false;
			}
			
//			if (nomeRisorsa.equals("")) {
//				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Nome");
//				return false;
//			}

			// Check lunghezza
			if(nomeRisorsa!=null && !"".equals(nomeRisorsa)) {
				if(this.checkLength255(nomeRisorsa, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_NOME)==false) {
					return false;
				}
			}
			else if(nomeRisorsaProposto!=null && !"".equals(nomeRisorsaProposto)) {
				if(this.checkLength255(nomeRisorsaProposto, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_NOME)==false) {
					this.pd.setMessage(this.pd.getMessage()+"<br/>Il nome auto-generato rispetto al path ed al method supera la lunghezza massima consentita; ridefinire un nome manualmente"); 
					return false;
				}
			}
			else {
				HttpMethod http = HttpMethod.toEnumConstant(httpMethod);
				if(http==null) {
					this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un Nome");
					return false;
				}
			}
			
			if(descr!=null && !"".equals(descr)) {
				if(this.checkLength255(descr, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_DESCRIZIONE)==false) {
					return false;
				}
			}
			if(path!=null && !"".equals(path)) {
				if(this.checkLength255(path, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH)==false) {
					return false;
				}
				if(this.apcCore.isApiResourcePathValidatorEnabled()) {
					try {
						ApiUtilities.validatePath(path);
					}catch(ValidatorException e) {
						this.pd.setMessage(e.getMessage());
						return false;
					}
				}
			}
			
			// controllo il formato del nome solo se non e' vuoto
			if(!nomeRisorsa.equals("")) {
				// Il nome deve contenere solo lettere e numeri e '_' '-' '.'
				if(this.checkNCName(nomeRisorsa, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_NOME)==false){
					return false;
				}
			}
		
			// Controllo che i campi DataElementType.SELECT abbiano uno dei valori ammessi
			if (!profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT) && !profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO)) {
				this.pd.setMessage("Il profilo  dev'essere \""+AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO[0]
						+"\" o \""+AccordiServizioParteComuneCostanti.LABEL_INFORMAZIONI_PROTOCOLLO_ACCORDO[1]+"\"");
				return false;
			}

			if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO)) {
				// Controllo che i campi DataElementType.CHECKBOX abbiano uno dei valori
				// ammessi
				if ((filtrodupaz != null) && !filtrodupaz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_FILTRO_DUPLICATI+" dev'essere selezionato o deselezionato");
					return false;
				}
				if ((confricaz != null) && !confricaz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONFERMA_RICEZIONE+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((idcollaz != null) && !idcollaz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_COLLABORAZIONE+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((idRifRichiestaAz != null) && !idRifRichiestaAz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA+" dev'essere selezionata o deselezionata");
					return false;
				}
				if ((consordaz != null) && !consordaz.equals(Costanti.CHECK_BOX_ENABLED)) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CONSEGNA_ORDINE+" dev'essere selezionata o deselezionata");
					return false;
				}

				// scadenzaaz dev'essere numerico
				if (!scadenzaaz.equals("") && !this.checkNumber(scadenzaaz, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SCADENZA, false)) {
					return false;
				}
			}
			
			// Se tipoOp = add, controllo che la risorsa non sia gia' stato registrata per l'accordo
			if (tipoOp.equals(TipoOperazione.ADD)) {
				
				// check nome
				if(!nomeRisorsa.equals("")) {
					boolean giaRegistrato = this.apcCore.existsAccordoServizioResource(nomeRisorsaProposto, Integer.parseInt(id));
					if (giaRegistrato) {
						this.pd.setMessage("La Risorsa " + nomeRisorsaProposto + " &egrave; gi&agrave; stata associata alla API");
						return false;
					}
				}
				
				// check http method e path
				if(checkHttpMethodAndPath(httpMethod, path, id, null)==false) {
					return false;
				}
				
			} else {
				// change
				
				// check nome
				if(!nomeRisorsaProposto.equals(oldNomeRisorsa)) {
					if(!nomeRisorsaProposto.equals("") ) {
						boolean giaRegistrato = this.apcCore.existsAccordoServizioResource(nomeRisorsaProposto, Integer.parseInt(id));
						if (giaRegistrato) {
							this.pd.setMessage("La Risorsa " + nomeRisorsaProposto + " &egrave; gi&agrave; stata associata alla API");
							return false;
						}
					}
				}
				
				
				// se ho modificato path o method controllo se e' disponibile
				boolean modificatoPath = false;
				if(oldPath!=null) {
					modificatoPath = !oldPath.equals(path);
				}
				else {
					modificatoPath = (path!=null);
				}
				boolean modificatoHttpMethod = false;
				if(oldHttpMethod!=null) {
					modificatoHttpMethod = !oldHttpMethod.equals(httpMethod);
				}
				else {
					modificatoHttpMethod = (httpMethod!=null);
				}
								
				if(modificatoPath || modificatoHttpMethod) {
					if(checkHttpMethodAndPath(httpMethod, path, id, oldNomeRisorsa)==false) {
						return false;
					}
				}

			}
			return true;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
		
	}
	
	private boolean checkHttpMethodAndPath(String httpMethod, String path, String id, String nome) throws NumberFormatException, DriverRegistroServiziException {
		String m = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI;
		if(httpMethod!=null && !"".equals(httpMethod) && !AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI.equals(httpMethod)) {
			m = httpMethod;
		}
		String p = path;
		if(p==null || "".equals(p)) {
			p = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH_QUALSIASI;
		}
		String identificativoRisorsa = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD + ": " +m +" , "
				+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH + ": " +p;
		
		boolean giaRegistrato = this.apcCore.existsAccordoServizioResource(httpMethod, path, Integer.parseInt(id), nome);
		if (giaRegistrato) {
			
			this.pd.setMessage("La Risorsa (" + identificativoRisorsa + ") &egrave; gi&agrave; stata associata alla API");
			return false;
		}
		
		boolean httpMethodAndPathQualsiasi = this.apcCore.isApiResourceHttpMethodAndPathQualsiasiEnabled();
		if(httpMethodAndPathQualsiasi) {
			if(path==null || "".equals(path)) {
				if(httpMethod!=null && !"".equals(httpMethod) && !AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI.equals(httpMethod)) {
					// se il metodo e' definito e il path e' qualsiasi, devo controllare che non esista gia' una risorsa con sia path che metodo qualsiasi
					boolean registrataOperazioneQualsiasi = this.apcCore.existsAccordoServizioResource(null, path, Integer.parseInt(id), nome);
					if(registrataOperazioneQualsiasi) {
						this.pd.setMessage("La Risorsa (" + identificativoRisorsa + ")"+
								" è in conflitto con una esistente ("+
								AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD+": "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI+" , "+
								AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH+": "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH_QUALSIASI+")");
						return false;
					}
				}
				else {
					// se si tratta della risorsa speciale *, devo verificare che non esista una risorsa che cmq contenga il path '*' ed un metodo.
					HttpRequestMethod [] metodi = HttpRequestMethod.values();
					for (HttpRequestMethod httpRequestMethodCheck : metodi) {
						boolean registrataOperazioneMetodo = this.apcCore.existsAccordoServizioResource(httpRequestMethodCheck.toString(), path, Integer.parseInt(id), nome);
						if(registrataOperazioneMetodo) {
							this.pd.setMessage("Non &egrave; possibile creare la Risorsa (" + identificativoRisorsa + ")"+
									" è in conflitto con una esistente ("+
									AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD+": "+ httpRequestMethodCheck.toString()+" , "+
									AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH+": "+AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH_QUALSIASI+")");
							return false;
						}
					}
				}
			}
		}
		
		/*
		 * BUG: e' cosentito. GovWay prima cerca il path dato con un http method specifico.
		 * Poi cerca il path dato con un http method qualsiasi.
		if(path!=null && !"".equals(path)) {
			if(httpMethod==null || "".equals(httpMethod) || AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI.equals(httpMethod)) {
				// se sto cercando di registrare una risorsa con qualsiasi http method e un path preciso, verifico che non ne esista una che ha lo stesso path e anche un metodo http preciso.
				HttpRequestMethod [] metodi = HttpRequestMethod.values();
				for (HttpRequestMethod httpRequestMethodCheck : metodi) {
					boolean registrataOperazioneMetodo = this.apcCore.existsAccordoServizioResource(httpRequestMethodCheck.toString(), path, Integer.parseInt(id), nome);
					if(registrataOperazioneMetodo) {
						this.pd.setMessage("Non &egrave; possibile creare la Risorsa (" + identificativoRisorsa + ")"+
								" è in conflitto con una esistente ("+
								AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD+": "+ httpRequestMethodCheck.toString()+" , "+
								AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PATH+": "+path+")");
						return false;
					}
				}
			}
		}
		*/
		
		return true;
	}
	
	public DataElement getHttpMethodDataElement(TipoOperazione tipoOperazione, String httpMethod) {
		return this.getHttpMethodDataElement(tipoOperazione, httpMethod, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD, AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_HTTP_METHOD,
				true, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI, AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_HTTP_METHOD_QUALSIASI);
	}
	
	public void prepareAccordiResourcesResponseList(ISearch ricerca, List<org.openspcoop2.core.registry.ResourceResponse> lista, String idApc,AccordoServizioParteComune as, String tipoAccordo, Resource risorsa)
			throws Exception {
		try {
			String uri = null;
			uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as);
			
			Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
			Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, idApc);
			Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri);
			Parameter pIdRisorsa = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_ID, risorsa.getId()+"");
			Parameter pNomeRisorsa = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, risorsa.getNome());
			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_RESOURCES_RISPOSTE,
					pIdAccordo,pTipoAccordo,pNomeAccordo, pNomeRisorsa,pIdRisorsa);

			int idLista = Liste.ACCORDI_API_RESOURCES_RESPONSE;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));
			
			
			Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
			List<Parameter> listaParams = this.getTitoloApc(TipoOperazione.LIST, as, tipoAccordo, labelASTitle, null, false);
			
			String labelRisorse = isModalitaVistaApiCustom ? AccordiServizioParteComuneCostanti.LABEL_RISORSE : AccordiServizioParteComuneCostanti.LABEL_RISORSE + " di " + labelASTitle;
			
			listaParams.add(new Parameter(labelRisorse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));
			
			String labelRisorsa = NamingUtils.getLabelResource(risorsa);
			listaParams.add(new Parameter(labelRisorsa, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_CHANGE, pIdAccordo, pNomeAccordo, pTipoAccordo,pIdRisorsa));
			
			String labelResponse = AccordiServizioParteComuneCostanti.LABEL_RISPOSTE;
			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				listaParams.add(new Parameter(labelResponse, null));
			}else{
				listaParams.add(new Parameter(labelResponse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomeRisorsa));
				listaParams.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}
			ServletUtils.setPageDataTitle(this.pd, listaParams);

			// controllo eventuali risultati ricerca
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_RISPOSTE, search);
			}

			// setto le label delle colonne
			List<String> labelList = new ArrayList<>();
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS);
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_DESCRIZIONE);
			
			String[] labels = labelList.toArray(new String[labelList.size()]);
			this.pd.setLabels(labels);

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

			if (lista != null) {
				Iterator<org.openspcoop2.core.registry.ResourceResponse> it = lista.iterator();

				while (it.hasNext()) {
					org.openspcoop2.core.registry.ResourceResponse risposta = it.next();

					List<DataElement> e = new ArrayList<>();

					DataElement de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_CHANGE, 
							pIdAccordo, pTipoAccordo, pNomeAccordo, pNomeRisorsa,
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS, risposta.getStatus()+"")
							);
					if(ApiResponse.isDefaultHttpReturnCode(risposta.getStatus())) {
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS_DEFAULT);	
					}
					else {
						de.setValue(risposta.getStatus()+"");
					}
					de.setIdToRemove(risposta.getStatus()+"");
					de.setWidthPx(90);
					e.add(de);

					de = new DataElement();
					de.setValue(risposta.getDescrizione());
					e.add(de);

					dati.add(e);
				}

			}

			this.pd.setDati(dati);

			if(this.isModalitaStandard() || (this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage()))){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}
	
	public boolean accordiResourceResponseCheckData(TipoOperazione tipoOp, String id, int idRisorsa, String nomeRisorsa,
			String status, String descr) throws Exception{
	 
		try{
			// Campi obbligatori
			
			// validazione del campo path, controllo solo che non ci siano spazi bianchi
			if(status!=null && status.contains(" ")){
				this.pd.setMessage("Il campo "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS+" non pu&ograve; contenere spazi bianchi");
				return false;
			}
			
			int httpStatus = -1;
			if(status!=null && !"".equals(status)) {
				try {
					httpStatus = Integer.parseInt(status);
				}catch(Exception e) {
					this.pd.setMessage("Il formato del campo "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS+" non &egrave; valido, indicare un HTTP Status valido");
					return false;				
				}
				if((httpStatus<200 || httpStatus>599) && !ApiResponse.isDefaultHttpReturnCode(httpStatus)) {
					this.pd.setMessage("Il formato del campo "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS+" non &egrave; valido, indicare un HTTP Status compreso nell'intervallo [200-599]");
					return false;		
				}
			}
			else {
				httpStatus = ApiResponse.getDefaultHttpReturnCode();
			}
			
			// check lunghezza
			if(descr!=null && !"".equals(descr)) {
				if(this.checkLength255(descr, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_DESCRIZIONE)==false) {
					return false;
				}
			}
			
			// Se tipoOp = add, controllo che la risorsa non sia gia' stato registrata per l'accordo
			if (tipoOp.equals(TipoOperazione.ADD)) {
				boolean giaRegistrato = this.apcCore.existsAccordoServizioResourceResponse(idRisorsa, httpStatus);
				if (giaRegistrato) {
					String stato = httpStatus+"";
					if(ApiResponse.isDefaultHttpReturnCode(httpStatus)) {
						stato = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS_DEFAULT;
					}
					this.pd.setMessage("Una risposta con " + AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS + " '"+stato+"' &egrave; gi&agrave; stata associata alla Risorsa " + nomeRisorsa);
					return false;
				}
			}
			return true;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}



	public void prepareAccordiResourcesRepresentationsList(String id, AccordoServizioParteComune as,
			List<ResourceRepresentation> lista, ConsoleSearch ricerca, String tipoAccordo, boolean isRequest, Resource risorsa,
			ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws Exception {
		try {
			String uri = null;
			uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as);
			
			Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
			Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id);
			Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri);
			Parameter pNomeRisorsa = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, risorsa.getNome());
			Parameter pIsRequest = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, isRequest+"");
			Parameter pIdRisorsa = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_ID, risorsa.getId()+"");

			String statusS = resourceResponse != null ? resourceResponse.getStatus()+ "" : "";
			int status = resourceResponse != null ? resourceResponse.getStatus() : -1;
			Parameter pResponseStatus = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS, statusS);
			
			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_RESOURCES_REPRESENTATIONS,
					pIdAccordo, pTipoAccordo, pNomeAccordo, pNomeRisorsa, pIsRequest, pResponseStatus,pNomeRisorsa);

			int idLista = isRequest ? Liste.ACCORDI_API_RESOURCES_REPRESENTATION_REQUEST : Liste.ACCORDI_API_RESOURCES_REPRESENTATION_RESPONSE;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));
			
			Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
			List<Parameter> listaParams = this.getTitoloApc(TipoOperazione.LIST, as, tipoAccordo, labelASTitle, null, false);
			
			String labelRisorse = isModalitaVistaApiCustom ? AccordiServizioParteComuneCostanti.LABEL_RISORSE : AccordiServizioParteComuneCostanti.LABEL_RISORSE + " di " + labelASTitle;
			
			listaParams.add(new Parameter(labelRisorse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));
			
			String labelRisorsa = NamingUtils.getLabelResource(risorsa); 
			listaParams.add(new Parameter(labelRisorsa, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_CHANGE, pIdAccordo, pNomeAccordo, pTipoAccordo,pIdRisorsa));
			
			if(!isRequest) {
				String labelResponse = AccordiServizioParteComuneCostanti.LABEL_RISPOSTE;
				listaParams.add(new Parameter(labelResponse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomeRisorsa));
				
				String labelRisposta = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS +" "+
						(ApiResponse.isDefaultHttpReturnCode(status)? AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS_DEFAULT : statusS);
				
				listaParams.add(new Parameter(labelRisposta, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_CHANGE, pIdAccordo, pTipoAccordo, pNomeAccordo, pNomeRisorsa,pResponseStatus));
			}
			
			String labelRepresentation = AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION;
			
			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				listaParams.add(new Parameter(labelRepresentation, null));
			}else{
				listaParams.add(new Parameter(labelRepresentation, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_REPRESENTATIONS_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomeRisorsa,pIsRequest, pResponseStatus));
				listaParams.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}
			ServletUtils.setPageDataTitle(this.pd, listaParams);
			
			// setto la barra del titolo
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_MEDIA_TYPE);
			
			// controllo eventuali risultati ricerca
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION, search);
			}

			// setto le label delle colonne nome, descrizione, tipo
			List<String> labelList = new ArrayList<>();
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_MEDIA_TYPE);
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_NOME);
//			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_DESCRIZIONE);
			if(this.isModalitaAvanzata())
				labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO);
			
			String[] labels = labelList.toArray(new String[labelList.size()]);
			this.pd.setLabels(labels);
			
			// preparo i dati
			List<List<DataElement>> dati = new ArrayList<>();

			if (lista != null) {
				Iterator<org.openspcoop2.core.registry.ResourceRepresentation> it = lista.iterator();

				while (it.hasNext()) {
					org.openspcoop2.core.registry.ResourceRepresentation representation = it.next();

					List<DataElement> e = new ArrayList<>();
					
					DataElement de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_REPRESENTATIONS_CHANGE, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO, tipoAccordo),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri),
							pIsRequest,
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS, status+""),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, risorsa.getNome()),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_ID, representation.getId()+"")
							);
					de.setValue(representation.getMediaType());
					de.setIdToRemove(representation.getMediaType());
					de.setToolTip(representation.getDescrizione());
					e.add(de);
					
					de = new DataElement();
					de.setValue(representation.getNome());
					e.add(de);
					
//					de = new DataElement();
//					de.setValue(representation.getDescrizione());
//					e.add(de);
					
					if(this.isModalitaAvanzata()) {
						de = new DataElement();
						if(representation.getRepresentationType() != null) {
							switch (representation.getRepresentationType()) {
							case JSON:
								de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_JSON);
								break;
							case XML:
							default:
								de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_XML);
								break;
							}
						}else { 
							de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_NON_DEFINITO);
						}
						e.add(de);
					}

					dati.add(e);
				}
			}
			
			this.pd.setDati(dati);

			if( this.isModalitaStandard() || (this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage()))){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}
	
	public void prepareAccordiResourcesParametersList(String id, AccordoServizioParteComune as,
			List<ResourceParameter> lista, ConsoleSearch ricerca, String tipoAccordo, boolean isRequest, Resource risorsa,
			ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws Exception {
		try {
			String uri = null;
			uri = this.idAccordoFactory.getUriFromAccordo(as);
			String labelASTitle = this.getLabelIdAccordo(as);
			
			Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
			Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id);
			Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri);
			Parameter pIsRequest = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, isRequest+"");
			Parameter pIdRisorsa = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_ID, risorsa.getId()+"");

			String statusS = resourceResponse != null ? resourceResponse.getStatus()+ "" : "";
			int status = resourceResponse != null ? resourceResponse.getStatus() : -1;
			Parameter pResponseStatus = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS, statusS);

			Parameter pNomeRisorsa = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, risorsa.getNome());
			ServletUtils.addListElementIntoSession(this.request, this.session, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_RESOURCES_PARAMETERS,
					pIdAccordo, pTipoAccordo,pNomeAccordo, pIsRequest, pResponseStatus,	pNomeRisorsa);

			int idLista = isRequest ? Liste.ACCORDI_API_RESOURCES_PARAMETERS_REQUEST : Liste.ACCORDI_API_RESOURCES_PARAMETERS_RESPONSE;
			int limit = ricerca.getPageSize(idLista);
			int offset = ricerca.getIndexIniziale(idLista);
			String search = ServletUtils.getSearchFromSession(ricerca, idLista);

			this.pd.setIndex(offset);
			this.pd.setPageSize(limit);
			this.pd.setNumEntries(ricerca.getNumEntries(idLista));
			
			Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
			List<Parameter> listaParams = this.getTitoloApc(TipoOperazione.LIST, as, tipoAccordo, labelASTitle, null, false);
			
			String labelRisorse = isModalitaVistaApiCustom ? AccordiServizioParteComuneCostanti.LABEL_RISORSE : AccordiServizioParteComuneCostanti.LABEL_RISORSE + " di " + labelASTitle;
			
			listaParams.add(new Parameter(labelRisorse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));
			
			String labelRisorsa = NamingUtils.getLabelResource(risorsa);
			listaParams.add(new Parameter(labelRisorsa, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_CHANGE, pIdAccordo, pNomeAccordo, pTipoAccordo,pIdRisorsa));
			
			if(!isRequest) {
				String labelResponse = AccordiServizioParteComuneCostanti.LABEL_RISPOSTE;
				listaParams.add(new Parameter(labelResponse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomeRisorsa));

				String labelRisposta = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS +" "+
						(ApiResponse.isDefaultHttpReturnCode(status)? AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS_DEFAULT : statusS);
				
				listaParams.add(new Parameter(labelRisposta, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_CHANGE, pIdAccordo, pTipoAccordo, pNomeAccordo, pNomeRisorsa,pResponseStatus));
			}
			
			String labelParameters = AccordiServizioParteComuneCostanti.LABEL_PARAMETERS;
			
			// setto la barra del titolo
			if (search.equals("")) {
				this.pd.setSearchDescription("");
				listaParams.add(new Parameter(labelParameters, null));
			}else{
				listaParams.add(new Parameter(labelParameters, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_PARAMETERS_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomeRisorsa,pIsRequest, pResponseStatus));
				listaParams.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
			}
			ServletUtils.setPageDataTitle(this.pd, listaParams);
			
			// controllo eventuali risultati ricerca
			this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_NOME);
			if (!search.equals("")) {
				ServletUtils.enabledPageDataSearch(this.pd, AccordiServizioParteComuneCostanti.LABEL_PARAMETERS, search);
			}

			
			// setto le label delle colonne nome, descrizione, tipo
			List<String> labelList = new ArrayList<>();
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_NOME);
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO);
			//labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_DESCRIZIONE);
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_REQUIRED);
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO);
			labelList.add(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_RESTRIZIONI);
			
			String[] labels = labelList.toArray(new String[labelList.size()]);
			this.pd.setLabels(labels);
			
			// preparo i dati
			List<List<DataElement>> dati = new ArrayList<>();

			if (lista != null) {
				Iterator<org.openspcoop2.core.registry.ResourceParameter> it = lista.iterator();

				while (it.hasNext()) {
					org.openspcoop2.core.registry.ResourceParameter parameter = it.next();

					List<DataElement> e = new ArrayList<>();
					
					DataElement de = new DataElement();
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_PARAMETERS_CHANGE, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO, tipoAccordo),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uri),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, isRequest+""),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS, status+""),
							pNomeRisorsa,
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_ID, parameter.getId()+"")
							);
					de.setValue(parameter.getNome());
					de.setIdToRemove(parameter.getParameterType().toString() +"/"+parameter.getNome());
					de.setToolTip(parameter.getDescrizione());
					e.add(de);
					
					de = new DataElement();
					switch (parameter.getParameterType()) {
					case COOKIE:
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_COOKIE);
						break;
					case DYNAMIC_PATH:
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_DYNAMIC_PATH);
						break;
					case FORM:
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_FORM);
						break;
					case HEADER:
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_HEADER);
						break;
					case QUERY:
					default:
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_QUERY);
						break;
					}
					e.add(de);
					
//					de = new DataElement();
//					de.setValue(parameter.getDescrizione());
//					e.add(de);
					
					de = new DataElement();
					de.setValue(parameter.getRequired() ? AccordiServizioParteComuneCostanti.LABEL_SI : AccordiServizioParteComuneCostanti.LABEL_NO);
					e.add(de);
					
					de = new DataElement();
					de.setValue(parameter.getTipo());
					e.add(de);
					
					de = new DataElement();
					if(parameter.getRestrizioni()!=null) {
						if(parameter.getRestrizioni().length()<100) {
							de.setValue(parameter.getRestrizioni());
						}
						else {
							de.setValue(parameter.getRestrizioni().substring(0, 97)+" ...");
						}
					}
					e.add(de);

					dati.add(e);
				}
			}
			
			this.pd.setDati(dati);

			if( this.isModalitaStandard() || (this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage()))){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}



	public List<DataElement> addAccordiResourceResponseToDati(TipoOperazione tipoOperazione, List<DataElement> dati,
			String id, String nomeAccordo, String tipoAccordo, String stato, String nomeRisorsa, String descrizione, String status)  throws Exception{
		try {
			boolean modificheAbilitate = false;
			if( tipoOperazione.equals(TipoOperazione.ADD) ){
				modificheAbilitate = true;
			}else if(this.isShowGestioneWorkflowStatoDocumenti()==false){
				modificheAbilitate = true;
			}else if(StatiAccordo.finale.toString().equals(stato)==false){
				modificheAbilitate = true;
			}
			
			Boolean contaListe = ServletUtils.getContaListeFromSession(this.session);
			
			DataElement de = new DataElement();
			de.setValue(id);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			dati.add(de);

			de = new DataElement();
			de.setValue(tipoAccordo);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
			dati.add(de);
			
			de = new DataElement();
			de.setValue(nomeAccordo);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME);
			dati.add(de);
			
			de = new DataElement();
			de.setValue(nomeRisorsa);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME);
			dati.add(de);

			de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_RISPOSTA);
			dati.add(de);
			
			de = new DataElement();
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS);
			int statoInt = -1;
			try {
				statoInt = Integer.parseInt(status);
			}catch(Exception e) {
				// ignore
			}
			if(ApiResponse.isDefaultHttpReturnCode(statoInt)) {
				de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS_DEFAULT);	
			}
			else {
				de.setValue(status);
			}
			if (tipoOperazione.equals(TipoOperazione.ADD)) {
				de.setNote(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS_NOTE);
				de.setType(DataElementType.TEXT_EDIT);
			} else {
				de.setType(DataElementType.TEXT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS+CostantiControlStation.PARAMETRO_SUFFIX_LABEL);
				
				DataElement deValue = new DataElement();
				deValue.setType(DataElementType.HIDDEN);
				deValue.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS);
				deValue.setValue(status);
				dati.add(deValue);
			}
			de.setSize(this.getSize());
			dati.add(de);
			
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_DESCRIZIONE);
			de.setValue(descrizione);
			de.setType(DataElementType.TEXT_AREA);
			de.setRows(3);
			if( !modificheAbilitate && (descrizione==null || "".equals(descrizione)) )
				de.setValue(" ");
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_DESCRIZIONE);
			de.setSize(this.getSize());
			dati.add(de);

			Long idRisorsa = null;
			Long idResponse = null;
			if(tipoOperazione.equals(TipoOperazione.CHANGE)) {
				if(contaListe) {
					AccordoServizioParteComune as = this.apcCore.getAccordoServizioFull(Integer.parseInt(id));
					Resource res1 =  null;
					for (int i = 0; i < as.sizeResourceList(); i++) {
						res1 = as.getResource(i);
						if ((nomeRisorsa).equals(res1.getNome())) {
							idRisorsa = res1.getId();
							break;
						}
					}
					if(res1 != null) {
						for (int i = 0; i < res1.getResponseList().size(); i++) {
							ResourceResponse resourceResponse = res1.getResponse(i);
							if(resourceResponse.getStatus() == Integer.parseInt(status)) {
								idResponse = resourceResponse.getId();
								break;
							}
						}
					}
				}
				
				// link  rappresentazioni
				de = new DataElement();
				de.setType(DataElementType.LINK);
				de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_REPRESENTATIONS_LIST, 
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, "false"),
						new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS, status),
						AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
						);
				if (contaListe) {
					// Prendo l'id del port-type

					// BugFix OP-674
					//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
					ConsoleSearch searchForCount = new ConsoleSearch(true,1);
					this.apcCore.accordiResourceRepresentationsList(idRisorsa, false, idResponse, searchForCount);
					//int num = tmpLista.size();
					int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES_REPRESENTATION_RESPONSE);
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION+" ("+num+")");
				} else
					de.setValue(AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION);
				dati.add(de);
				
				
				if (this.isModalitaAvanzata()) {
					 // link parametri
					de = new DataElement();
					de.setType(DataElementType.LINK);
					de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_PARAMETERS_LIST, 
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, nomeRisorsa),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, "false"),
							new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS, status),
							AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo)
							);
					if (contaListe) {
						// Prendo l'id del port-type

						// BugFix OP-674
						//List<Operation> tmpLista = this.apcCore.accordiPorttypeOperationList(idPortType, new Search(true));
						ConsoleSearch searchForCount = new ConsoleSearch(true,1);
						this.apcCore.accordiResourceParametersList(idRisorsa, false, idResponse, searchForCount);
						//int num = tmpLista.size();
						int num = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES_PARAMETERS_RESPONSE);
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETERS+" ("+num+")");
					} else
						de.setValue(AccordiServizioParteComuneCostanti.LABEL_PARAMETERS);
					dati.add(de);
				}
			}
			
			return dati;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}



	public List<DataElement> addAccordiResourceRepresentationToDati(TipoOperazione tipoOperazione, List<DataElement> dati,
			String id,  String stato, String tipoAccordo, String protocollo, IProtocolFactory<?> protocolFactory,
			ServiceBinding serviceBinding, String nomeRisorsa, boolean isRequest, String statusS, Integer idRepInt, String mediaType, String nome,
			String descrizione, MessageType messageType, RepresentationType tipo, String tipoJson, String nomeXml, String namespaceXml,
			RepresentationXmlType xmlType)  throws Exception{
		try {

			boolean modificheAbilitate = false;
			if( tipoOperazione.equals(TipoOperazione.ADD) ){
				modificheAbilitate = true;
			}else if(this.isShowGestioneWorkflowStatoDocumenti()==false){
				modificheAbilitate = true;
			}else if(StatiAccordo.finale.toString().equals(stato)==false){
				modificheAbilitate = true;
			}
			
			DataElement de = new DataElement();
			de.setValue(id);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			dati.add(de);

			de = new DataElement();
			de.setValue(tipoAccordo);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
			dati.add(de);
			
			de = new DataElement();
			de.setValue(statusS);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS);
			dati.add(de);
			
			de = new DataElement();
			de.setValue(isRequest +"");
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST);
			dati.add(de);
			
			de = new DataElement();
			de.setValue(nomeRisorsa);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME);
			dati.add(de);
			
			if(tipoOperazione.equals(TipoOperazione.CHANGE)) {
				de = new DataElement();
				de.setValue(idRepInt+"");
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_ID);
				dati.add(de);
			}
			
			de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_MEDIA_TYPE);
			de.setValue(mediaType);
			de.setRequired(true); 
			if (tipoOperazione.equals(TipoOperazione.ADD)) {
				de.setType(DataElementType.TEXT_EDIT);
			} else {
				de.setType(DataElementType.TEXT);
			}
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_MEDIA_TYPE);
			de.setSize(this.getSize());
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_NOME);
			de.setValue(nome);
			de.setType(DataElementType.TEXT_EDIT);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_NOME);
			de.setSize(this.getSize());
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_DESCRIZIONE);
			de.setValue(descrizione);
			de.setType(DataElementType.TEXT_AREA);
			de.setRows(3);
			if( !modificheAbilitate && (descrizione==null || "".equals(descrizione)) )
				de.setValue(" ");
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_DESCRIZIONE);
			de.setSize(this.getSize());
			dati.add(de);

			de = this.getMessageTypeDataElement(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_MESSAGE_TYPE,protocolFactory, serviceBinding, messageType, 
					!this.core.isApiRestResourceRepresentationMessageTypeOverride());
			dati.add(de);
				
			
			if (TipoOperazione.CHANGE.equals(tipoOperazione) || this.isModalitaAvanzata()) {
				
				de = new DataElement();
				de.setType(DataElementType.SUBTITLE);
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_REPRESENTATION_DEFINIZIONE);
				dati.add(de);
			
				de = new DataElement();
				de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO);
				de.setSelected(tipo != null ? tipo.getValue() : AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_NON_DEFINITO);
				de.setType(DataElementType.SELECT);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO);
				de.setSize(this.getSize());
				de.setPostBack(true); 
				
				RepresentationType[] representationTypes = RepresentationType.values();
				String [] values = new String[representationTypes.length+1];
				String [] labels = new String[representationTypes.length+1];
				
				labels[0] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_NON_DEFINITO;
				values[0] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_NON_DEFINITO;
				
				for (int i = 0; i < representationTypes.length; i++) {
					RepresentationType type = representationTypes[i];
					switch (type) {
					case JSON:
						labels[i+1] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_JSON;
						values[i+1] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_JSON;
						break;
					case XML:
					default:
						labels[i+1] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_XML;
						values[i+1] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_REPRESENTATION_TIPO_XML;
						break;
					}
				}
				
				de.setLabels(labels);
				de.setValues(values);
				dati.add(de);
				
				if(tipo != null) {
					switch (tipo) {
					case JSON:
						de = new DataElement();
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_JSON_TYPE);
						de.setValue(tipoJson);
						de.setType(DataElementType.TEXT_EDIT);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_JSON_TYPE);
						de.setSize(this.getSize());
						dati.add(de);
						
						de = new DataElement();
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAME);
						de.setValue(nomeXml);
						de.setType(DataElementType.HIDDEN);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAME);
						de.setSize(this.getSize());
						dati.add(de);	
						
						de = new DataElement();
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAMESPACE);
						de.setValue(namespaceXml);
						de.setType(DataElementType.HIDDEN);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAMESPACE);
						de.setSize(this.getSize());
						dati.add(de);
						
						de = new DataElement();
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO);
						if(xmlType!=null) {
							de.setValue(xmlType.getValue());
						}
						de.setType(DataElementType.HIDDEN);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO);
						de.setSize(this.getSize());
						dati.add(de);
						break;
					case XML:
					default:
						de = new DataElement();
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_JSON_TYPE);
						de.setValue(tipoJson);
						de.setType(DataElementType.HIDDEN);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_JSON_TYPE);
						de.setSize(this.getSize());
						dati.add(de);
						
						de = new DataElement();
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO);
						if(xmlType!=null) {
							de.setSelected(xmlType.getValue());
						}
						de.setType(DataElementType.SELECT);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO);
						de.setSize(this.getSize());
						RepresentationXmlType[] representationXmlTypes = RepresentationXmlType.values();
						String [] values2 = new String[representationXmlTypes.length];
						String [] labels2 = new String[representationXmlTypes.length];
						
						for (int i = 0; i < representationXmlTypes.length; i++) {
							RepresentationXmlType type = representationXmlTypes[i];
							switch (type) {
							case ELEMENT:
								labels2[i] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO_ELEMENT;
								values2[i] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO_ELEMENT;
								break;
							case TYPE:
							default:
								labels2[i] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO_TYPE;
								values2[i] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO_TYPE;
								break;
							}
						}
						
						de.setLabels(labels2);
						de.setValues(values2);
						dati.add(de);
						
						de = new DataElement();
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAME);
						de.setValue(nomeXml);
						de.setType(DataElementType.TEXT_EDIT);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAME);
						de.setSize(this.getSize());
						dati.add(de);
						
						de = new DataElement();
						de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAMESPACE);
						de.setValue(namespaceXml);
						de.setType(DataElementType.TEXT_EDIT);
						de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAMESPACE);
						de.setSize(this.getSize());
						dati.add(de);
						
						break;
					}
				}else {
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_JSON_TYPE);
					de.setValue(tipoJson);
					de.setType(DataElementType.HIDDEN);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_JSON_TYPE);
					de.setSize(this.getSize());
					dati.add(de);
					
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAME);
					de.setValue(nomeXml);
					de.setType(DataElementType.HIDDEN);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAME);
					de.setSize(this.getSize());
					dati.add(de);	
					
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAMESPACE);
					de.setValue(namespaceXml);
					de.setType(DataElementType.HIDDEN);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_NAMESPACE);
					de.setSize(this.getSize());
					dati.add(de);
					
					de = new DataElement();
					de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO);
					de.setValue("");
					de.setType(DataElementType.HIDDEN);
					de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_REPRESENTATION_XML_TIPO);
					de.setSize(this.getSize());
					dati.add(de);
				}

			}
			
			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(stato)){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

			
		return dati;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public boolean accordiResourceRepresentationCheckData(TipoOperazione tipoOp, String id, String nomeRisorsa,
			 boolean isRequest, String statusS,  String mediaType,  String nome, String descr, MessageType messageType,
			RepresentationType tipo, String tipoJson, String nomeXml, String namespaceXml,
			RepresentationXmlType xmlType, Long idRisorsa,Long idResponse, String oldMediaType)  throws Exception{
		
		try{
			// Campi obbligatori
			// mediaType
			if (mediaType.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_MEDIA_TYPE);
				return false;
			}
			
			// check lunghezza
			if(this.checkLength255(mediaType, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_MEDIA_TYPE)==false) {
				return false;
			}
			if(nome!=null && !"".equals(nome)) {
				if(this.checkLength255(nome, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_NOME)==false) {
					return false;
				}
			}
			if(descr!=null && !"".equals(descr)) {
				if(this.checkLength255(descr, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_DESCRIZIONE)==false) {
					return false;
				}
			}
			
			// Se tipoOp = add, controllo che la risorsa non sia gia' stato registrata per l'accordo
			if (tipoOp.equals(TipoOperazione.ADD)) {
				boolean giaRegistrato = this.apcCore.existsAccordoServizioResourceRepresentation(idRisorsa, isRequest, idResponse, mediaType);
				if (giaRegistrato) {
					String owner = isRequest ? "Risorsa " + nomeRisorsa : "Risposta  "+statusS;
					this.pd.setMessage("La Response con " + AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_MEDIA_TYPE + ": "+mediaType+" &egrave; gi&agrave; stata associata alla " + owner);
					return false;
				}
			} else {
				// se ho cambiato la chiave 
				if(!oldMediaType.equals(mediaType)) {
					boolean giaRegistrato = this.apcCore.existsAccordoServizioResourceRepresentation(idRisorsa, isRequest, idResponse, mediaType);
					if (giaRegistrato) {
						String owner = isRequest ? "Risorsa " + nomeRisorsa : "Risposta  "+statusS;
						this.pd.setMessage("La Response con " + AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_REPRESENTATION_MEDIA_TYPE + ": "+mediaType+" &egrave; gi&agrave; stata associata alla " + owner);
						return false;
					}
				}
			}
			return true;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
		
		
	}



	public List<DataElement> addAccordiResourceParameterToDati(TipoOperazione tipoOperazione, List<DataElement> dati,
			String id, String statoPackage, String tipoAccordo,  String nomeRisorsa,
			boolean isRequest, String statusS, Integer idParInt, String nome, String descrizione, ParameterType tipoParametro, 
			String tipo, String restrizioni,
			boolean required)  throws Exception{
		try {
			boolean modificheAbilitate = false;
			if( tipoOperazione.equals(TipoOperazione.ADD) ){
				modificheAbilitate = true;
			}else if(this.isShowGestioneWorkflowStatoDocumenti()==false){
				modificheAbilitate = true;
			}else if(StatiAccordo.finale.toString().equals(statoPackage)==false){
				modificheAbilitate = true;
			}
			
			DataElement de = new DataElement();
			de.setValue(id);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
			dati.add(de);

			de = new DataElement();
			de.setValue(tipoAccordo);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
			dati.add(de);
			
			de = new DataElement();
			de.setValue(statusS);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS);
			dati.add(de);
			
			de = new DataElement();
			de.setValue(isRequest +"");
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST);
			dati.add(de);
			
			de = new DataElement();
			de.setValue(nomeRisorsa);
			de.setType(DataElementType.HIDDEN);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME);
			dati.add(de);
			
			if(tipoOperazione.equals(TipoOperazione.CHANGE)) {
				de = new DataElement();
				de.setValue(idParInt+"");
				de.setType(DataElementType.HIDDEN);
				de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_ID);
				dati.add(de);
			}
			
			de = new DataElement();
			de.setType(DataElementType.TITLE);
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETER);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO);
			de.setSize(this.getSize());
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO);
			de.setSelected(tipoParametro.getValue());
			de.setType(DataElementType.SELECT);
			ParameterType[] parameterTypes = ParameterType.values();
			String [] values2 = new String[parameterTypes.length];
			String [] labels2 = new String[parameterTypes.length];
			
			for (int i = 0; i < parameterTypes.length; i++) {
				ParameterType type = parameterTypes[i];
				switch (type) {
				case COOKIE:
					labels2[i] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_COOKIE;
					values2[i] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_COOKIE;
					break;
				case DYNAMIC_PATH:
					labels2[i] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_DYNAMIC_PATH;
					values2[i] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_DYNAMIC_PATH;
					break;
				case FORM:
					labels2[i] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_FORM;
					values2[i] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_FORM;
					break;
				case HEADER:
					labels2[i] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_HEADER;
					values2[i] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_HEADER;
					break;
				case QUERY:
				default:
					labels2[i] = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_QUERY;
					values2[i] = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO_QUERY;
					break;
				}
			}
			
			de.setLabels(labels2);
			de.setValues(values2);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_NOME);
			de.setValue(nome);
			de.setType(DataElementType.TEXT_EDIT);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_NOME);
			de.setSize(this.getSize());
			de.setRequired(true);
			dati.add(de);

			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_DESCRIZIONE);
			de.setValue(descrizione);
			de.setType(DataElementType.TEXT_AREA);
			de.setRows(3);
			if( !modificheAbilitate && (descrizione==null || "".equals(descrizione)) )
				de.setValue(" ");
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_DESCRIZIONE);
			de.setSize(this.getSize());
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO);
			de.setValue(tipo);
			de.setType(DataElementType.TEXT_EDIT);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_TIPO);
			de.setSize(this.getSize());
			de.setRequired(true);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_RESTRIZIONI);
			de.setValue(restrizioni);
			de.setType(DataElementType.TEXT_AREA);
			de.setRows(3);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_RESTRIZIONI);
			de.setSize(this.getSize());
			de.setRequired(false);
			dati.add(de);
			
			de = new DataElement();
			de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_REQUIRED);
			de.setType(DataElementType.CHECKBOX);
			de.setName(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_REQUIRED);
			de.setSize(this.getSize());
			de.setSelected(required);
			dati.add(de);
			
			this.pd.setDati(dati);

			if(this.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(statoPackage)){
				this.pd.setAddButton(false);
				this.pd.setRemoveButton(false);
				this.pd.setSelect(false);
			}else{
				this.pd.setAddButton(true);
				this.pd.setRemoveButton(true);
				this.pd.setSelect(true);
			}

			
		return dati;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}



	public boolean accordiResourceParameterCheckData(TipoOperazione tipoOp, String id, String nomeRisorsa,
			boolean isRequest, String statusS, String nome, String descr,
			ParameterType tipoParametro, String tipo, String restrizioni, boolean required, Long idResource, Long idResponse, ParameterType oldTipoParametro, String oldNome) throws Exception {
		try{
			// Campi obbligatori
			// tipoparametro
			if (tipoParametro == null) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO);
				return false;
			}
			// nome			
			if (nome == null || nome.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_NOME);
				return false;
			}
			
			// tipo			
			if (tipo == null || tipo.equals("")) {
				this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare un "+ AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO);
				return false;
			}
			
			if(restrizioni!=null && !"".equals(restrizioni)) {
				try {
					//org.openspcoop2.utils.rest.api.ApiSchemaTypeRestriction.toApiSchemaTypeRestriction(restrizioni);
					ApiParameterSchema.toApiParameterSchema(restrizioni);
				}catch(Exception e) {
					this.pd.setMessage(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_RESTRIZIONI+" - "+e.getMessage());
					return false;
				}
			}
			
			// check lunghezza
			if(this.checkLength255(nome, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_NOME)==false) {
				return false;
			}
			if(this.checkLength255(tipo, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO)==false) {
				return false;
			}
			if(descr!=null && !"".equals(descr)) {
				if(this.checkLength255(descr, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_DESCRIZIONE)==false) {
					return false;
				}
			}
			
			// Se tipoOp = add, controllo che la risorsa non sia gia' stato registrata per l'accordo
			if (tipoOp.equals(TipoOperazione.ADD)) {
				boolean giaRegistrato = this.apcCore.existsAccordoServizioResourceParameter(idResource, isRequest, idResponse, tipoParametro, nome);
				if (giaRegistrato) {
					String owner = isRequest ? "Risorsa " + nomeRisorsa : "Risposta "+statusS;
					this.pd.setMessage("Il Parametro con " + AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO + ": "+ tipoParametro+" e " + 
							AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_NOME +": "+nome+" &egrave; gi&agrave; stato associato alla " + owner);
					return false;
				}
			} else {
				// se ho modificato uno dei due campi chiave ricontrollo la disponibilita;
				if(!oldTipoParametro.equals(tipoParametro) || !oldNome.equals(nome)) {
					boolean giaRegistrato = this.apcCore.existsAccordoServizioResourceParameter(idResource, isRequest, idResponse, tipoParametro, nome);
					if (giaRegistrato) {
						String owner = isRequest ? "Risorsa " + nomeRisorsa : "Risposta "+statusS;
						this.pd.setMessage("Il Parametro con " + AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO + ": "+ tipoParametro+" e " + 
								AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_PARAMETER_NOME +": "+nome+" &egrave; gi&agrave; stato associato alla " + owner);
						return false;
					}
				}
			}
			return true;
		} catch (Exception e) {
			this.logError("Exception: " + e.getMessage(), e);
			throw new Exception(e);
		}
	}

	public List<Parameter> getTitoloApc(TipoOperazione tipoOperazione, AccordoServizioParteComune as, String tipoAccordo, String labelASTitle, String servletNameApcChange, boolean addApcChange) throws Exception {
		return getTitoloApc(tipoOperazione, as, tipoAccordo, labelASTitle, servletNameApcChange, this.getParameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE), addApcChange);
	}

	public List<Parameter> getTitoloApc(TipoOperazione tipoOperazione, AccordoServizioParteComune as, String tipoAccordo, String labelASTitle, String servletNameApcChange, String apiGestioneParziale, boolean addApcChange) throws Exception { 
		
		String labelAccordoServizio = AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo);
		Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, this.session, this.request, false).getValue();
		String servletNameApcList = isModalitaVistaApiCustom ? ApiCostanti.SERVLET_NAME_APC_API_LIST : AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST;
		Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, as.getId()+"");
		Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, as.getNome());
		Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
		
		List<Parameter> listaParams = new ArrayList<>();
		listaParams.add(new Parameter(labelAccordoServizio, servletNameApcList, pTipoAccordo));
		
		List<Parameter> listaParamsApcChange  = new ArrayList<>();
		listaParamsApcChange.add(pIdAccordo);
		listaParamsApcChange.add(pNomeAccordo);
		listaParamsApcChange.add(pTipoAccordo);
		
		String labelApcChange = labelASTitle;
		if(isModalitaVistaApiCustom) {
			Parameter parameterApcApiChange = new Parameter(labelASTitle, ApiCostanti.SERVLET_NAME_APC_API_CHANGE, pIdAccordo,pNomeAccordo,pTipoAccordo);
			listaParams.add(parameterApcApiChange);
			if(ApiCostanti.VALORE_PARAMETRO_APC_API_INFORMAZIONI_GENERALI.equals(apiGestioneParziale)) {
				labelApcChange = ApiCostanti.APC_API_LABEL_APS_INFO_GENERALI;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_PROFILO.equals(apiGestioneParziale)) {
				labelApcChange = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_SOGGETTO_REFERENTE.equals(apiGestioneParziale)) {
				labelApcChange = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_REFERENTE;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_DESCRIZIONE.equals(apiGestioneParziale)) {
				labelApcChange = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_GESTIONE_SPECIFICA_INTERFACCE.equals(apiGestioneParziale)) {
				labelApcChange = ApiCostanti.APC_API_LABEL_PARAMETRO_INTERFACCIA;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_OPZIONI_AVANZATE.equals(apiGestioneParziale)) {
				labelApcChange = ApiCostanti.APC_API_LABEL_GESTIONE_OPZIONI_AVANZATE;
			}
			else if(ApiCostanti.VALORE_PARAMETRO_APC_API_GRUPPI.equals(apiGestioneParziale)) {
				labelApcChange = ApiCostanti.APC_API_LABEL_GESTIONE_GRUPPI;
			}
			
			if(apiGestioneParziale == null)
				apiGestioneParziale = "";
			
			listaParamsApcChange.add(new Parameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE, apiGestioneParziale));
		}
		
		if(addApcChange) {
			Parameter parameterApcChange = servletNameApcChange != null ? new Parameter(labelApcChange, servletNameApcChange, listaParamsApcChange) : new Parameter(labelApcChange, servletNameApcChange);
			listaParams.add(parameterApcChange);
		}
		
		return listaParams;
	}

	public String normalizePathEmpty(String path) {
		if(path!=null) {
			String s = path.trim();
			List<String> l = this.apcCore.getGetApiResourcePathQualsiasiSpecialChar();
			if(l!=null && l.contains(s)) {
				return "";
			}
		}
		return path;
	}
}