AccordiServizioParteComuneWSDLChange.java

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


  20. package org.openspcoop2.web.ctrlstat.servlet.apc;

  21. import java.net.URLEncoder;
  22. import java.text.MessageFormat;
  23. import java.util.ArrayList;
  24. import java.util.HashMap;
  25. import java.util.Iterator;
  26. import java.util.List;
  27. import java.util.Properties;
  28. import java.util.stream.Collectors;
  29. import java.util.stream.Stream;

  30. import javax.servlet.http.HttpServletRequest;
  31. import javax.servlet.http.HttpServletResponse;
  32. import javax.servlet.http.HttpSession;

  33. import org.apache.commons.lang.StringUtils;
  34. import org.apache.struts.action.Action;
  35. import org.apache.struts.action.ActionForm;
  36. import org.apache.struts.action.ActionForward;
  37. import org.apache.struts.action.ActionMapping;
  38. import org.openspcoop2.core.commons.ErrorsHandlerCostant;
  39. import org.openspcoop2.core.config.CanaleConfigurazione;
  40. import org.openspcoop2.core.config.CanaliConfigurazione;
  41. import org.openspcoop2.core.config.Soggetto;
  42. import org.openspcoop2.core.id.IDAccordo;
  43. import org.openspcoop2.core.id.IDPortType;
  44. import org.openspcoop2.core.id.IDPortTypeAzione;
  45. import org.openspcoop2.core.id.IDResource;
  46. import org.openspcoop2.core.id.IDSoggetto;
  47. import org.openspcoop2.core.registry.AccordoCooperazione;
  48. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  49. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  50. import org.openspcoop2.core.registry.IdSoggetto;
  51. import org.openspcoop2.core.registry.ProtocolProperty;
  52. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  53. import org.openspcoop2.core.registry.beans.ResourceSintetica;
  54. import org.openspcoop2.core.registry.driver.BeanUtilities;
  55. import org.openspcoop2.core.registry.driver.FiltroRicercaGruppi;
  56. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  57. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  58. import org.openspcoop2.message.constants.MessageType;
  59. import org.openspcoop2.message.constants.ServiceBinding;
  60. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  61. import org.openspcoop2.protocol.engine.utils.DBOggettiInUsoUtils;
  62. import org.openspcoop2.protocol.engine.utils.NamingUtils;
  63. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  64. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  65. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  66. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  67. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  68. import org.openspcoop2.web.ctrlstat.servlet.ac.AccordiCooperazioneCore;
  69. import org.openspcoop2.web.ctrlstat.servlet.apc.api.ApiCostanti;
  70. import org.openspcoop2.web.ctrlstat.servlet.apc.api.ApiHelper;
  71. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  72. import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviCostanti;
  73. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  74. import org.openspcoop2.web.ctrlstat.servlet.gruppi.GruppiCore;
  75. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  76. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  77. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  78. import org.openspcoop2.web.lib.mvc.Costanti;
  79. import org.openspcoop2.web.lib.mvc.DataElement;
  80. import org.openspcoop2.web.lib.mvc.ForwardParams;
  81. import org.openspcoop2.web.lib.mvc.GeneralData;
  82. import org.openspcoop2.web.lib.mvc.PageData;
  83. import org.openspcoop2.web.lib.mvc.Parameter;
  84. import org.openspcoop2.web.lib.mvc.ServletUtils;
  85. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  86. /**
  87.  * accordiWSDLChange
  88.  *
  89.  * @author Andrea Poli (apoli@link.it)
  90.  * @author Stefano Corallo (corallo@link.it)
  91.  * @author Sandra Giangrandi (sandra@link.it)
  92.  * @author $Author$
  93.  * @version $Rev$, $Date$
  94.  *
  95.  */
  96. public final class AccordiServizioParteComuneWSDLChange extends Action {

  97.    
  98.    
  99.     @Override
  100.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

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

  102.         // Inizializzo PageData
  103.         PageData pd = new PageData();

  104.         GeneralHelper generalHelper = new GeneralHelper(session);

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

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

  108.         IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  109.         IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();

  110.         boolean isSupportoProfiloAsincrono = false;
  111.        
  112.         AccordiServizioParteComuneWSDLChangeStrutsBean strutsBean = new AccordiServizioParteComuneWSDLChangeStrutsBean();
  113.        
  114.         strutsBean.consoleOperationType = ConsoleOperationType.CHANGE;
  115.        
  116.         try {
  117.             ApiHelper apcHelper = new ApiHelper(request, pd, session);
  118.            
  119.             boolean isModalitaAvanzata = apcHelper.isModalitaAvanzata();
  120.            
  121.             String actionConfirm = apcHelper.getParameter(Costanti.PARAMETRO_ACTION_CONFIRM);

  122.             strutsBean.editMode = apcHelper.getParameter(Costanti.DATA_ELEMENT_EDIT_MODE_NAME);

  123.             strutsBean.id = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
  124.             strutsBean.tipo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL);
  125.             strutsBean.wsdl = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL);
  126.             strutsBean.tipoAccordo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
  127.             if("".equals(strutsBean.tipoAccordo))
  128.                 strutsBean.tipoAccordo = null;

  129.             if(apcHelper.isMultipart()){
  130.                 strutsBean.decodeRequestValidazioneDocumenti = true;
  131.                 String tmpValidazioneDocumenti = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VALIDAZIONE_DOCUMENTI);
  132.                 strutsBean.validazioneDocumenti = ServletUtils.isCheckBoxEnabled(tmpValidazioneDocumenti);
  133.                
  134.                 strutsBean.decodeRequestAggiornaEsistenti = true;
  135.                 String aggiornaEsistentiS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UPDATE_WSDL_AGGIORNA);
  136.                 strutsBean.aggiornaEsistenti = ServletUtils.isCheckBoxEnabled(aggiornaEsistentiS);
  137.                
  138.                 strutsBean.decodeRequestEliminaNonPresentiNuovaInterfaccia = true;
  139.                 String eliminaNonPresentiNuovaInterfacciaS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UPDATE_WSDL_ELIMINA);
  140.                 strutsBean.eliminaNonPresentiNuovaInterfaccia = ServletUtils.isCheckBoxEnabled(eliminaNonPresentiNuovaInterfacciaS);
  141.             }
  142.    
  143.             //rimuovo eventuali tracce della procedura
  144.             if(actionConfirm == null){
  145.                 ServletUtils.removeObjectFromSession(request, session, AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CHANGE_TMP);
  146.             }else {
  147.                 // se passo da qui sto tornando dalla maschera di conferma ripristino il wsdl dalla sessione
  148.                     strutsBean.wsdl = ServletUtils.getObjectFromSession(request, session, String.class,
  149.                             AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CHANGE_TMP);
  150.                     ServletUtils.removeObjectFromSession(request, session, AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CHANGE_TMP);
  151.             }
  152.            
  153.             if(ServletUtils.isEditModeInProgress(strutsBean.editMode)){
  154.                 // primo accesso alla servlet
  155.                 strutsBean.validazioneDocumenti = true;
  156.                 strutsBean.aggiornaEsistenti = true;
  157.                 strutsBean.eliminaNonPresentiNuovaInterfaccia = true;
  158.             }else{
  159.                 if(!strutsBean.decodeRequestValidazioneDocumenti){
  160.                     String tmpValidazioneDocumenti = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VALIDAZIONE_DOCUMENTI);
  161.                     strutsBean.validazioneDocumenti = ServletUtils.isCheckBoxEnabled(tmpValidazioneDocumenti);
  162.                 }
  163.                 if(!strutsBean.decodeRequestAggiornaEsistenti){
  164.                     String aggiornaEsistentiS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UPDATE_WSDL_AGGIORNA);
  165.                     strutsBean.aggiornaEsistenti = ServletUtils.isCheckBoxEnabled(aggiornaEsistentiS);
  166.                 }
  167.                 if(!strutsBean.decodeRequestEliminaNonPresentiNuovaInterfaccia){
  168.                     String eliminaNonPresentiNuovaInterfacciaS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UPDATE_WSDL_ELIMINA);
  169.                     strutsBean.eliminaNonPresentiNuovaInterfaccia = ServletUtils.isCheckBoxEnabled(eliminaNonPresentiNuovaInterfacciaS);
  170.                 }
  171.             }

  172.             long idAccordoLong = Long.parseLong(strutsBean.id);
  173.            
  174.             String apiGestioneParziale = apcHelper.getParameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE);
  175.             if(apiGestioneParziale == null) {
  176.                 apiGestioneParziale = "";
  177.             }
  178.             boolean isGestioneAllegati = apiGestioneParziale.equals(ApiCostanti.VALORE_PARAMETRO_APC_API_GESTIONE_SPECIFICA_INTERFACCE);

  179.             // Preparo il menu
  180.             apcHelper.makeMenu();

  181.             // Prendo il nome e il wsdl attuale dell'accordo
  182.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore();
  183.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(apcCore);
  184.             SoggettiCore soggettiCore = new SoggettiCore(apcCore);
  185.             AccordiCooperazioneCore acCore = new AccordiCooperazioneCore(apcCore);
  186.             GruppiCore gruppiCore = new GruppiCore(apcCore);
  187.             ConfigurazioneCore confCore = new ConfigurazioneCore(apcCore);
  188.            
  189.             // carico i canali
  190.             CanaliConfigurazione gestioneCanali = confCore.getCanaliConfigurazione(false);
  191.             List<CanaleConfigurazione> canaleList = gestioneCanali != null ? gestioneCanali.getCanaleList() : new ArrayList<>();
  192.             boolean gestioneCanaliEnabled = gestioneCanali != null && org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(gestioneCanali.getStato());

  193.             // Flag per controllare il mapping automatico di porttype e operation
  194.             boolean enableAutoMapping = apcCore.isEnableAutoMappingWsdlIntoAccordo();
  195.             boolean enableAutoMappingEstraiXsdSchemiFromWsdlTypes = apcCore.isEnableAutoMappingWsdlIntoAccordoEstrazioneSchemiInWsdlTypes();

  196.             AccordoServizioParteComune as = apcCore.getAccordoServizioFull(idAccordoLong);
  197.             boolean asWithAllegati = apcHelper.asWithAllegatiXsd(as);
  198.             String uriAS = idAccordoFactory.getUriFromAccordo(as);
  199.             String labelASTitle = apcHelper.getLabelIdAccordo(as);

  200.             IdSoggetto idSoggettoReferente = as.getSoggettoReferente();
  201.             String protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(idSoggettoReferente.getTipo());
  202.        
  203.            
  204.             ServiceBinding serviceBinding = apcCore.toMessageServiceBinding(as.getServiceBinding());
  205.             org.openspcoop2.protocol.manifest.constants.InterfaceType formatoSpecifica = apcCore.formatoSpecifica2InterfaceType(as.getFormatoSpecifica());
  206.            
  207.             isSupportoProfiloAsincrono = acCore.isProfiloDiCollaborazioneAsincronoSupportatoDalProtocollo(protocollo,serviceBinding);
  208.            
  209.             // fromato specifica default se e' null
  210.             if(formatoSpecifica == null &&
  211.                 serviceBinding != null) {
  212.                 switch(serviceBinding) {
  213.                 case REST:
  214.                     formatoSpecifica = org.openspcoop2.protocol.manifest.constants.InterfaceType.toEnumConstant(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_INTERFACE_TYPE_REST);
  215.                     break;
  216.                 case SOAP:
  217.                 default:
  218.                     formatoSpecifica = org.openspcoop2.protocol.manifest.constants.InterfaceType.toEnumConstant(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_INTERFACE_TYPE_SOAP);
  219.                     break;
  220.                 }
  221.             }
  222.            
  223.             FiltroRicercaGruppi filtroRicerca = new FiltroRicercaGruppi();
  224.             filtroRicerca.setServiceBinding(apcCore.fromMessageServiceBinding(serviceBinding));
  225.            
  226.             String oldwsdl = "";
  227.             byte[] wsdlbyte = null;
  228.             String label = null;
  229.             String tipologiaDocumentoScaricare = null;
  230.             boolean facilityUnicoWSDLInterfacciaStandard = false;
  231.             if (strutsBean.tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_DEFINITORIO)) {
  232.                 wsdlbyte = as.getByteWsdlDefinitorio();
  233.                 label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_DEFINITORIO;
  234.                 tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_DEFINITORIO;
  235.             }
  236.             if (strutsBean.tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE)) {
  237.                 wsdlbyte = as.getByteWsdlConcettuale();
  238.                 label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_CONCETTUALE;
  239.                 tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_CONCETTUALE;
  240.                
  241.                 switch (serviceBinding) {
  242.                 case REST:
  243.                     label = apcHelper.getLabelWSDLFromFormatoSpecifica(formatoSpecifica);
  244.                     break;
  245.                 case SOAP:
  246.                 default:
  247.                     // per ora non faccio nulla
  248.                     break;
  249.                 }
  250.                
  251.             }
  252.             if (strutsBean.tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE)) {
  253.                 wsdlbyte = as.getByteWsdlLogicoErogatore();
  254.                 if(isModalitaAvanzata){
  255.                     if(isSupportoProfiloAsincrono) {
  256.                         label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_EROGATORE;
  257.                     }else {
  258.                         label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_LOGICO;
  259.                         facilityUnicoWSDLInterfacciaStandard = true;
  260.                     }
  261.                 } else {
  262.                     label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL;
  263.                     facilityUnicoWSDLInterfacciaStandard = true;
  264.                 }
  265.                 tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_LOGICO_EROGATORE;
  266.             }
  267.             if (strutsBean.tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE)) {
  268.                 wsdlbyte = as.getByteWsdlLogicoFruitore();
  269.                 label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_WSDL_FRUITORE;
  270.                 tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_LOGICO_FRUITORE;
  271.             }
  272.             if (strutsBean.tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_CONCETTUALE)) {
  273.                 wsdlbyte = as.getByteSpecificaConversazioneConcettuale();
  274.                 label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_CONCETTUALE;
  275.                 tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_CONCETTUALE;
  276.             }
  277.             if (strutsBean.tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_EROGATORE)) {
  278.                 wsdlbyte = as.getByteSpecificaConversazioneErogatore();
  279.                 label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_EROGATORE;
  280.                 tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_LOGICO_EROGATORE;
  281.             }
  282.             if (strutsBean.tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_FRUITORE)) {
  283.                 wsdlbyte = as.getByteSpecificaConversazioneFruitore();
  284.                 label = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_FRUITORE;
  285.                 tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_LOGICO_FRUITORE;
  286.             }
  287.             if (wsdlbyte != null) {
  288.                 oldwsdl = new String(wsdlbyte);
  289.             }

  290.             boolean used = true;
  291.            
  292.             Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, session, request, false).getValue();
  293.             if(isModalitaVistaApiCustom==null || !isModalitaVistaApiCustom.booleanValue()) {
  294.                 label = MessageFormat.format("{0} di {1}", label, labelASTitle);
  295.             }

  296.             IDAccordo idAccordoOLD = idAccordoFactory.getIDAccordoFromValues(as.getNome(),BeanUtilities.getSoggettoReferenteID(as.getSoggettoReferente()),as.getVersione());
  297.             Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, strutsBean.id+"");
  298.             Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, as.getNome());
  299.             Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(strutsBean.tipoAccordo);

  300.             String tipoProtocollo = null;
  301.             // controllo se l'accordo e' utilizzato da qualche asps
  302.             List<AccordoServizioParteSpecifica> asps = apsCore.serviziByAccordoFilterList(idAccordoOLD);
  303.             used = asps != null && !asps.isEmpty();

  304.             // lista dei protocolli supportati
  305.             List<String> listaTipiProtocollo = apcCore.getProtocolli(request, session);

  306.             // se il protocollo e' null (primo accesso ) lo ricavo dall'accordo di servizio
  307.             if(tipoProtocollo == null){
  308.                 tipoProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(as.getSoggettoReferente().getTipo());
  309.             }

  310.             List<String> tipiSoggettiGestitiProtocollo = soggettiCore.getTipiSoggettiGestitiProtocollo(tipoProtocollo);
  311.             String servletNameApcChange = AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE;
  312.             Parameter parameterApcChange = new Parameter(labelASTitle, servletNameApcChange, pIdAccordo, pNomeAccordo, pTipoAccordo);

  313.             List<Parameter> listaParams = apcHelper.getTitoloApc(TipoOperazione.OTHER, as, strutsBean.tipoAccordo, labelASTitle, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, isGestioneAllegati);
  314.             listaParams.add(new Parameter(label,null));
  315.            
  316.             if(apcHelper.isEditModeInProgress() && ServletUtils.isEditModeInProgress(strutsBean.editMode)){

  317.                 // setto la barra del titolo                
  318.                 ServletUtils.setPageDataTitle(pd, listaParams);

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

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

  322.                 apcHelper.addAccordiWSDLChangeToDati(dati, strutsBean.id,strutsBean.tipoAccordo,strutsBean.tipo,label,
  323.                         oldwsdl,as.getStatoPackage(),strutsBean.validazioneDocumenti,tipologiaDocumentoScaricare,
  324.                         serviceBinding, strutsBean.aggiornaEsistenti, strutsBean.eliminaNonPresentiNuovaInterfaccia);

  325.                 pd.setDati(dati);

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

  327.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping,
  328.                         AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, AccordiServizioParteComuneCostanti.TIPO_OPERAZIONE_WSDL_CHANGE);
  329.             }

  330.             // Controlli sui campi immessi
  331.             boolean isOk = apcHelper.accordiWSDLCheckData(pd,strutsBean.tipo, strutsBean.wsdl,as,strutsBean.validazioneDocumenti, protocollo);
  332.             if (!isOk) {

  333.                 // setto la barra del titolo
  334.                 ServletUtils.setPageDataTitle(pd, listaParams);

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

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

  338.                 apcHelper.addAccordiWSDLChangeToDati(dati, strutsBean.id,strutsBean.tipoAccordo,strutsBean.tipo,label,
  339.                         oldwsdl,as.getStatoPackage(),strutsBean.validazioneDocumenti,tipologiaDocumentoScaricare,
  340.                         serviceBinding, strutsBean.aggiornaEsistenti, strutsBean.eliminaNonPresentiNuovaInterfaccia);

  341.                 pd.setDati(dati);

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

  343.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping,
  344.                         AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, AccordiServizioParteComuneCostanti.TIPO_OPERAZIONE_WSDL_CHANGE);
  345.             }

  346.             // creo parametri binari finti per i wsdl
  347.             strutsBean.wsdldef = new BinaryParameter();
  348.             strutsBean.wsdlconc = new BinaryParameter();
  349.             strutsBean.wsdlserv = new BinaryParameter();
  350.             strutsBean.wsdlservcorr = new BinaryParameter();
  351.             strutsBean.wsblconc = new BinaryParameter();
  352.             strutsBean.wsblserv = new BinaryParameter();
  353.             strutsBean.wsblservcorr = new BinaryParameter();

  354.             // il wsdl definitorio rimane fuori dal nuovo comportamento quindi il flusso della pagina continua come prima
  355.             if (!strutsBean.tipo.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_DEFINITORIO)) {
  356.                 // se sono state definiti dei port type ed e' la prima volta che ho passato i controlli
  357.                 //Informo l'utente che potrebbe sovrascrivere i servizi definiti tramite l'aggiornamento del wsdl
  358.                 // Questa Modalita' e' controllata tramite la proprieta' isenabledAutoMappingWsdlIntoAccordo
  359.                 // e se non e' un reset
  360.                 if(enableAutoMapping && apcCore.isInterfaceDefined(strutsBean.wsdl) ){
  361.                     if(actionConfirm == null){
  362.                         if(as.sizePortTypeList() > 0 || as.sizeResourceList()>0 ){
  363.                            
  364.                             // salvo il wsdl che ha inviato l'utente
  365.                             ServletUtils.setObjectIntoSession(request, session, strutsBean.wsdl, AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CHANGE_TMP);

  366.                             // setto la barra del titolo
  367.                             ServletUtils.setPageDataTitle(pd, listaParams);

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

  370.                             dati.add(ServletUtils.getDataElementForEditModeInProgress());

  371.                             // salvo lo stato dell'invio
  372.                             apcHelper.addAccordiWSDLChangeToDati(dati, strutsBean.id,strutsBean.tipoAccordo,strutsBean.tipo,label,
  373.                                     oldwsdl,as.getStatoPackage(),strutsBean.validazioneDocumenti,tipologiaDocumentoScaricare,
  374.                                     serviceBinding, strutsBean.aggiornaEsistenti, strutsBean.eliminaNonPresentiNuovaInterfaccia);

  375.                             pd.setDati(dati);

  376.                             String uriAccordo = idAccordoFactory.getUriFromIDAccordo(idAccordoOLD);
  377.                             String oggetto = null;
  378.                             String nuoviOggetti = null;
  379.                             String updateOggetti = null;
  380.                             String warnUpdateOggetti = null;
  381.                             if(as.sizePortTypeList() > 0) {
  382.                                 oggetto = as.sizePortTypeList()+" servizi";
  383.                                 nuoviOggetti = "nuovi servizi e/o azioni";
  384.                                 updateOggetti = "dei servizi e delle azioni";
  385.                                 warnUpdateOggetti = "I servizi e le azioni";
  386.                             }
  387.                             else {
  388.                                 oggetto = as.sizeResourceList()+" risorse";
  389.                                 nuoviOggetti = "nuove risorse";
  390.                                 updateOggetti = "delle risorse";
  391.                                 warnUpdateOggetti = "Le risorse";
  392.                             }
  393.                             String msg = "Attenzione, l'accordo ["+uriAccordo+"] contiene la definizione di "+oggetto+" e "+(as.sizeAllegatoList()+as.sizeSpecificaSemiformaleList())+" allegati. <BR/>"+
  394.                                     "Il caricamento della specifica comporter&agrave;:<BR/>"+
  395.                                     "- l'aggiornamento degli allegati esistenti e l'eventuale creazione di nuovi allegati;<BR/>"+
  396.                                     "- l'eventuale creazione di "+nuoviOggetti+""+
  397.                                     (strutsBean.aggiornaEsistenti? ";<BR/>- l'aggiornamento "+updateOggetti+" esistenti" : "")+
  398.                                     (strutsBean.eliminaNonPresentiNuovaInterfaccia? ";<BR/>- l'eliminazione "+updateOggetti+" non presenti nella nuova interfaccia" : "")+
  399.                                     ".<BR/><BR/>"+
  400.                                     (!strutsBean.aggiornaEsistenti ? warnUpdateOggetti+" esistenti non verranno aggiornati.<BR/>" : "")+
  401.                                     (!strutsBean.eliminaNonPresentiNuovaInterfaccia ? warnUpdateOggetti+" non presenti nella nuova interfaccia verranno mantenute.<BR/>" : "")+
  402.                                     "<BR/>Procedere con l'operazione richiesta?";
  403.                            
  404.                             String pre = Costanti.HTML_MODAL_SPAN_PREFIX;
  405.                             String post = Costanti.HTML_MODAL_SPAN_SUFFIX;
  406.                             pd.setMessage(pre + msg + post, Costanti.MESSAGE_TYPE_CONFIRM);

  407.                             // Bottoni
  408.                             String[][] bottoni = {
  409.                                     { Costanti.LABEL_MONITOR_BUTTON_ANNULLA,
  410.                                         Costanti.LABEL_MONITOR_BUTTON_ANNULLA_CONFERMA_PREFIX +
  411.                                         Costanti.LABEL_MONITOR_BUTTON_ANNULLA_CONFERMA_SUFFIX

  412.                                     },
  413.                                     { Costanti.LABEL_MONITOR_BUTTON_CONFERMA,
  414.                                         Costanti.LABEL_MONITOR_BUTTON_ESEGUI_OPERAZIONE_CONFERMA_PREFIX +
  415.                                         Costanti.LABEL_MONITOR_BUTTON_ESEGUI_OPERAZIONE_CONFERMA_SUFFIX }};

  416.                             pd.setBottoni(bottoni );

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

  418.                             return ServletUtils.getStrutsForwardEditModeInProgress(mapping,
  419.                                     AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, AccordiServizioParteComuneCostanti.TIPO_OPERAZIONE_WSDL_CHANGE);
  420.                         }
  421.                     }
  422.                 }
  423.             }
  424.            
  425.             // Arrivo qui quando l'utente ha schiacciato Ok nella maschera di conferma, oppure l'accordo non aveva servizi, o sono in un wsdl definitorio.
  426.             List<IDResource> risorseEliminate = new ArrayList<>();
  427.             List<IDPortType> portTypeEliminati = new ArrayList<>();
  428.             List<IDPortTypeAzione> operationEliminate = new ArrayList<>();
  429.             AccordiServizioParteComuneUtilities.updateInterfacciaAccordoServizioParteComune(strutsBean.tipo, strutsBean.wsdl, as,
  430.                     enableAutoMapping, strutsBean.validazioneDocumenti, enableAutoMappingEstraiXsdSchemiFromWsdlTypes, facilityUnicoWSDLInterfacciaStandard,
  431.                     tipoProtocollo,
  432.                     apcCore,
  433.                     strutsBean.aggiornaEsistenti, strutsBean.eliminaNonPresentiNuovaInterfaccia,
  434.                     risorseEliminate, portTypeEliminati, operationEliminate);
  435.            
  436.             String newLine = org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE;
  437.             StringBuilder inUsoMessage = new StringBuilder();
  438.                        
  439.             if(portTypeEliminati!=null && !portTypeEliminati.isEmpty()) {
  440.                 boolean normalizeObjectIds = !apcHelper.isModalitaCompleta();
  441.                 for (IDPortType idPortType : portTypeEliminati) {
  442.                     HashMap<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  443.                     boolean portTypeInUso = apcCore.isPortTypeInUso(idPortType,whereIsInUso,normalizeObjectIds);
  444.                     if (portTypeInUso) {
  445.                         inUsoMessage.append(DBOggettiInUsoUtils.toString(idPortType, whereIsInUso, true, newLine));
  446.                         inUsoMessage.append(newLine);
  447.                     }
  448.                 }
  449.                 if(operationEliminate!=null && !operationEliminate.isEmpty()) {
  450.                     for (IDPortTypeAzione idOperazione : operationEliminate) {
  451.                        
  452.                         // controllo che non esista già nella lista dei port type precedentemente segnalati
  453.                         boolean find = false;
  454.                         for (IDPortType idPortType : portTypeEliminati) {
  455.                             if(idPortType.equals(idOperazione.getIdPortType())) {
  456.                                 find = true;
  457.                                 break;
  458.                             }
  459.                         }
  460.                         if(find) {
  461.                             continue;
  462.                         }
  463.                        
  464.                         HashMap<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  465.                         boolean operazioneInUso = apcCore.isOperazioneInUso(idOperazione,whereIsInUso,normalizeObjectIds);
  466.                         if (operazioneInUso) {
  467.                             inUsoMessage.append(DBOggettiInUsoUtils.toString(idOperazione, whereIsInUso, true, newLine));
  468.                             inUsoMessage.append(newLine);
  469.                         }
  470.                     }
  471.                 }
  472.             }
  473.             if(inUsoMessage.length()==0 &&
  474.                 risorseEliminate!=null && !risorseEliminate.isEmpty()) {
  475.                    
  476.                 AccordoServizioParteComuneSintetico asSintetico = apcCore.getAccordoServizioSintetico(idAccordoLong);
  477.                
  478.                 boolean normalizeObjectIds = !apcHelper.isModalitaCompleta();
  479.                 for (IDResource idRisorsa : risorseEliminate) {
  480.                     HashMap<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  481.                     boolean operazioneInUso = apcCore.isRisorsaInUso(idRisorsa,whereIsInUso,normalizeObjectIds);
  482.                     if (operazioneInUso) {

  483.                         // traduco nomeRisorsa in path
  484.                         String methodPath = null;
  485.                         if(asSintetico.getResource()!=null) {
  486.                             for (int j = 0; j < asSintetico.getResource().size(); j++) {
  487.                                 ResourceSintetica risorsa = asSintetico.getResource().get(j);
  488.                                 if (idRisorsa.getNome().equals(risorsa.getNome())) {
  489.                                     methodPath = NamingUtils.getLabelResource(risorsa);
  490.                                     break;
  491.                                 }
  492.                             }
  493.                         }
  494.                         if(methodPath==null) {
  495.                             methodPath = idRisorsa.getNome();
  496.                         }
  497.                        
  498.                         inUsoMessage.append(DBOggettiInUsoUtils.toString(idRisorsa, methodPath, whereIsInUso, true, newLine));
  499.                         inUsoMessage.append(newLine);
  500.                     }
  501.                 }
  502.             }
  503.             if(inUsoMessage.length()>0) {
  504.                 // setto la barra del titolo
  505.                 ServletUtils.setPageDataTitle(pd, listaParams);

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

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

  509.                 apcHelper.addAccordiWSDLChangeToDati(dati, strutsBean.id,strutsBean.tipoAccordo,strutsBean.tipo,label,
  510.                         oldwsdl,as.getStatoPackage(),strutsBean.validazioneDocumenti,tipologiaDocumentoScaricare,
  511.                         serviceBinding, strutsBean.aggiornaEsistenti, strutsBean.eliminaNonPresentiNuovaInterfaccia);

  512.                 pd.setMessage("Non è possibile procedere con l'aggiornamento dell'interfaccia a causa di dipendenze verso oggetti che verrebbero eliminati.<BR/><BR/>"+inUsoMessage.toString());
  513.                
  514.                 pd.setDati(dati);

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

  516.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping,
  517.                         AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, AccordiServizioParteComuneCostanti.TIPO_OPERAZIONE_WSDL_CHANGE);
  518.             }

  519.            
  520.             // effettuo le operazioni
  521.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), as);
  522.            
  523.             //se sono in modalita' standard
  524.             if(apcHelper.isModalitaStandard()) {
  525.                 apcHelper.prepareApiChange(TipoOperazione.OTHER, as);
  526.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  527.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping, ApiCostanti.OBJECT_NAME_APC_API, ForwardParams.CHANGE());
  528.             }
  529.            

  530.             // visualizzo il form di modifica accordo come in accordiChange
  531.             // setto la barra del titolo
  532.             listaParams = apcHelper.getTitoloApc(TipoOperazione.OTHER, as, strutsBean.tipoAccordo, labelASTitle, null, isGestioneAllegati);
  533.             ServletUtils.setPageDataTitle(pd, listaParams);

  534.             String descr = as.getDescrizione();
  535.             // controllo profilo collaborazione
  536.             String profcoll = AccordiServizioParteComuneHelper.convertProfiloCollaborazioneDB2View(as.getProfiloCollaborazione());

  537.             String filtrodup = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getFiltroDuplicati());
  538.             String confric = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConfermaRicezione());
  539.             String idcoll = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdCollaborazione());
  540.             String idRifRichiesta = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdRiferimentoRichiesta());
  541.             String consord = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConsegnaInOrdine());
  542.             String scadenza = as.getScadenza();
  543.             boolean showUtilizzoSenzaAzione = as.sizeAzioneList() > 0;// se
  544.             // ci
  545.             // sono
  546.             // azioni
  547.             // allora
  548.             // visualizzo
  549.             // il
  550.             // checkbox
  551.             boolean utilizzoSenzaAzione = as.getUtilizzoSenzaAzione();


  552.             List<Soggetto> listaSoggetti=null;
  553.             if(apcCore.isVisioneOggettiGlobale(userLogin)){
  554.                 listaSoggetti = soggettiCore.soggettiList(null, new ConsoleSearch(true));
  555.             }else{
  556.                 listaSoggetti = soggettiCore.soggettiList(userLogin, new ConsoleSearch(true));
  557.             }
  558.             String[] providersList = null;
  559.             String[] providersListLabel = null;

  560.             List<String> soggettiListTmp = new ArrayList<>();
  561.             List<String> soggettiListLabelTmp = new ArrayList<>();
  562.             soggettiListTmp.add("-");
  563.             soggettiListLabelTmp.add("-");

  564.             if (!listaSoggetti.isEmpty()) {
  565.                 for (Soggetto soggetto : listaSoggetti) {
  566.                     if(tipiSoggettiGestitiProtocollo.contains(soggetto.getTipo())){
  567.                         soggettiListTmp.add(soggetto.getId().toString());
  568.                         soggettiListLabelTmp.add(soggetto.getTipo() + "/" + soggetto.getNome());
  569.                     }
  570.                 }
  571.             }
  572.             providersList = soggettiListTmp.toArray(new String[1]);
  573.             providersListLabel = soggettiListLabelTmp.toArray(new String[1]);

  574.             String[] accordiCooperazioneEsistenti=null;
  575.             String[] accordiCooperazioneEsistentiLabel=null;
  576.             List<AccordoCooperazione> lista = null;
  577.             if(apcCore.isVisioneOggettiGlobale(userLogin)){
  578.                 lista = acCore.accordiCooperazioneList(null, new ConsoleSearch(true));
  579.             }else{
  580.                 lista = acCore.accordiCooperazioneList(userLogin, new ConsoleSearch(true));
  581.             }
  582.             if (lista != null && !lista.isEmpty()) {
  583.                 accordiCooperazioneEsistenti = new String[lista.size()+1];
  584.                 accordiCooperazioneEsistentiLabel = new String[lista.size()+1];
  585.                 int i = 1;
  586.                 accordiCooperazioneEsistenti[0]="-";
  587.                 accordiCooperazioneEsistentiLabel[0]="-";
  588.                 Iterator<AccordoCooperazione> itL = lista.iterator();
  589.                 while (itL.hasNext()) {
  590.                     AccordoCooperazione singleAC = itL.next();
  591.                     accordiCooperazioneEsistenti[i] = "" + singleAC.getId();
  592.                     accordiCooperazioneEsistentiLabel[i] = idAccordoCooperazioneFactory.getUriFromAccordo(acCore.getAccordoCooperazione(singleAC.getId()));
  593.                     i++;
  594.                 }
  595.             } else {
  596.                 accordiCooperazioneEsistenti = new String[1];
  597.                 accordiCooperazioneEsistentiLabel = new String[1];
  598.                 accordiCooperazioneEsistenti[0]="-";
  599.                 accordiCooperazioneEsistentiLabel[0]="-";
  600.             }

  601.             String referente=null;
  602.             if(as.getSoggettoReferente()==null){
  603.                 referente= "-";
  604.             }else{
  605.                 referente = "" + soggettiCore.getSoggettoRegistro(new IDSoggetto(as.getSoggettoReferente().getTipo(),as.getSoggettoReferente().getNome())).getId();
  606.             }
  607.             String versione = null;
  608.             if(as.getVersione()!=null){
  609.                 versione = as.getVersione().intValue()+"";
  610.             }
  611.             boolean isServizioComposto = as.getServizioComposto()!=null;
  612.             String accordoCooperazioneId = "";
  613.             if(isServizioComposto){
  614.                 accordoCooperazioneId = ""+as.getServizioComposto().getIdAccordoCooperazione();
  615.             }else{
  616.                 accordoCooperazioneId="-";
  617.             }
  618.             String statoPackage = as.getStatoPackage();
  619.            
  620.             strutsBean.protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(tipoProtocollo);
  621.             strutsBean.consoleDynamicConfiguration =  strutsBean.protocolFactory.createDynamicConfigurationConsole();
  622.             strutsBean.registryReader = soggettiCore.getRegistryReader(strutsBean.protocolFactory);
  623.             strutsBean.configRegistryReader = soggettiCore.getConfigIntegrationReader(strutsBean.protocolFactory);
  624.             strutsBean.consoleConfiguration = strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE) ?
  625.                     strutsBean.consoleDynamicConfiguration.getDynamicConfigAccordoServizioParteComune(strutsBean.consoleOperationType, apcHelper,
  626.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD)
  627.                     : strutsBean.consoleDynamicConfiguration.getDynamicConfigAccordoServizioComposto(strutsBean.consoleOperationType, apcHelper,
  628.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  629.                    
  630.             List<ProtocolProperty> oldProtocolPropertyList = as.getProtocolPropertyList();
  631.             strutsBean.protocolProperties = apcHelper.estraiProtocolPropertiesDaRequest(strutsBean.consoleConfiguration, strutsBean.consoleOperationType);
  632.             ProtocolPropertiesUtils.mergeProtocolPropertiesRegistry(strutsBean.protocolProperties, oldProtocolPropertyList, strutsBean.consoleOperationType);
  633.            
  634.             Properties propertiesProprietario = new Properties();
  635.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_ID_PROPRIETARIO, strutsBean.id);
  636.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO, ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO_VALUE_ACCORDO_SERVIZIO_PARTE_COMUNE);
  637.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_NOME_PROPRIETARIO, uriAS);
  638.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_URL_ORIGINALE_CHANGE,
  639.                     URLEncoder.encode(parameterApcChange.getValue(), "UTF-8"));
  640.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_PROTOCOLLO, tipoProtocollo);
  641.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_ACCORDO, strutsBean.tipoAccordo);
  642.            
  643.            
  644.             serviceBinding = apcCore.toMessageServiceBinding(as.getServiceBinding());
  645.             MessageType messageType = apcCore.toMessageMessageType(as.getMessageType());
  646.             formatoSpecifica = apcCore.formatoSpecifica2InterfaceType(as.getFormatoSpecifica());
  647.            
  648.             filtroRicerca = new FiltroRicercaGruppi();
  649.             filtroRicerca.setServiceBinding(apcCore.fromMessageServiceBinding(serviceBinding));
  650.             List<String> elencoGruppi = gruppiCore.getAllGruppi(filtroRicerca);
  651.            
  652.             String gruppi = null;
  653.             if(as.getGruppi() != null) {
  654.                 List<String> nomiGruppi = as.getGruppi().getGruppoList().stream().flatMap(e-> Stream.of(e.getNome())).collect(Collectors.toList());
  655.                 gruppi = StringUtils.join(nomiGruppi, ",");
  656.             } else
  657.                 gruppi = "";
  658.            
  659.             String canale = as.getCanale();
  660.            
  661.             String canaleStato = null;
  662.             if(canale == null) {
  663.                 canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
  664.             } else {
  665.                 canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
  666.             }

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

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

  670.             dati = apcHelper.addAccordiToDati(dati, as.getNome(), descr, profcoll, strutsBean.wsdldef, strutsBean.wsdlconc, strutsBean.wsdlserv, strutsBean.wsdlservcorr,
  671.                     strutsBean.wsblconc,strutsBean.wsblserv,strutsBean.wsblservcorr,
  672.                     filtrodup, confric, idcoll, idRifRichiesta, consord, scadenza, strutsBean.id, TipoOperazione.CHANGE,
  673.                     showUtilizzoSenzaAzione, utilizzoSenzaAzione,referente,versione,providersList,providersListLabel,
  674.                     (as.getPrivato()!=null && as.getPrivato()),isServizioComposto,accordiCooperazioneEsistenti,accordiCooperazioneEsistentiLabel,
  675.                     accordoCooperazioneId,statoPackage,statoPackage,strutsBean.tipoAccordo,strutsBean.validazioneDocumenti,
  676.                     tipoProtocollo,listaTipiProtocollo,used,asWithAllegati,strutsBean.protocolFactory,serviceBinding,messageType,formatoSpecifica,gruppi, elencoGruppi,
  677.                     false, -1, false, -1,
  678.                     false, canaleStato, canale, canaleList, gestioneCanaliEnabled);

  679.             // aggiunta campi custom
  680.             dati = apcHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  681.             pd.setDati(dati);

  682.             // setto la baseurl per il redirect (alla servlet accordiChange)
  683.             // se viene premuto invio
  684.             gd = generalHelper.initGeneralData(request,AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE);

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

  686.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, AccordiServizioParteComuneCostanti.TIPO_OPERAZIONE_WSDL_CHANGE);  

  687.         } catch (Exception e) {
  688.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  689.                     AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, AccordiServizioParteComuneCostanti.TIPO_OPERAZIONE_WSDL_CHANGE);
  690.         }
  691.     }
  692. }