AccordiServizioParteComuneChange.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.Arrays;
  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.Liste;
  39. import org.openspcoop2.core.config.CanaleConfigurazione;
  40. import org.openspcoop2.core.config.CanaliConfigurazione;
  41. import org.openspcoop2.core.config.PortaApplicativa;
  42. import org.openspcoop2.core.config.PortaApplicativaAzione;
  43. import org.openspcoop2.core.config.Soggetto;
  44. import org.openspcoop2.core.id.IDAccordo;
  45. import org.openspcoop2.core.id.IDSoggetto;
  46. import org.openspcoop2.core.registry.AccordoCooperazione;
  47. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  48. import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioComposto;
  49. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  50. import org.openspcoop2.core.registry.Azione;
  51. import org.openspcoop2.core.registry.GruppiAccordo;
  52. import org.openspcoop2.core.registry.Gruppo;
  53. import org.openspcoop2.core.registry.GruppoAccordo;
  54. import org.openspcoop2.core.registry.IdSoggetto;
  55. import org.openspcoop2.core.registry.ProtocolProperty;
  56. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  57. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  58. import org.openspcoop2.core.registry.constants.ProfiloCollaborazione;
  59. import org.openspcoop2.core.registry.constants.StatiAccordo;
  60. import org.openspcoop2.core.registry.constants.StatoFunzionalita;
  61. import org.openspcoop2.core.registry.driver.BeanUtilities;
  62. import org.openspcoop2.core.registry.driver.FiltroRicercaGruppi;
  63. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  64. import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
  65. import org.openspcoop2.message.constants.MessageType;
  66. import org.openspcoop2.message.constants.ServiceBinding;
  67. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  68. import org.openspcoop2.protocol.manifest.constants.InterfaceType;
  69. import org.openspcoop2.protocol.sdk.ProtocolException;
  70. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  71. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  72. import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
  73. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  74. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  75. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  76. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
  77. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  78. import org.openspcoop2.web.ctrlstat.servlet.ac.AccordiCooperazioneCore;
  79. import org.openspcoop2.web.ctrlstat.servlet.apc.api.ApiCostanti;
  80. import org.openspcoop2.web.ctrlstat.servlet.apc.api.ApiHelper;
  81. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  82. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCostanti;
  83. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  84. import org.openspcoop2.web.ctrlstat.servlet.gruppi.GruppiCore;
  85. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  86. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  87. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  88. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  89. import org.openspcoop2.web.lib.mvc.Costanti;
  90. import org.openspcoop2.web.lib.mvc.DataElement;
  91. import org.openspcoop2.web.lib.mvc.DataElementType;
  92. import org.openspcoop2.web.lib.mvc.ForwardParams;
  93. import org.openspcoop2.web.lib.mvc.GeneralData;
  94. import org.openspcoop2.web.lib.mvc.PageData;
  95. import org.openspcoop2.web.lib.mvc.Parameter;
  96. import org.openspcoop2.web.lib.mvc.ServletUtils;
  97. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  98. /**
  99.  * accordiChange
  100.  *
  101.  * @author Andrea Poli (apoli@link.it)
  102.  * @author Stefano Corallo (corallo@link.it)
  103.  * @author Sandra Giangrandi (sandra@link.it)
  104.  * @author $Author$
  105.  * @version $Rev$, $Date$
  106.  *
  107.  */
  108. public final class AccordiServizioParteComuneChange extends Action {

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

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

  112.         // Inizializzo PageData
  113.         PageData pd = new PageData();

  114.         GeneralHelper generalHelper = new GeneralHelper(session);

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

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

  118.         IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();

  119.         AccordiServizioParteComuneChangeStrutsBean strutsBean = new AccordiServizioParteComuneChangeStrutsBean();
  120.        
  121.         // Parametri Protocol Properties relativi al tipo di operazione e al tipo di visualizzazione
  122.         strutsBean.consoleOperationType = ConsoleOperationType.CHANGE;
  123.        
  124.         // Parametri relativi al tipo operazione
  125.         TipoOperazione tipoOp = TipoOperazione.CHANGE;
  126.         List<ProtocolProperty> oldProtocolPropertyList = null;

  127.         ApiHelper apcHelper = new ApiHelper(request, pd, session);
  128.        
  129.         strutsBean.id = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
  130.        
  131.         strutsBean.editMode = apcHelper.getParameter(Costanti.DATA_ELEMENT_EDIT_MODE_NAME);
  132.         strutsBean.protocolPropertiesSet = apcHelper.getParameter(ProtocolPropertiesCostanti.PARAMETRO_PP_SET);
  133.         strutsBean.descr = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_DESCRIZIONE);
  134.         strutsBean.profcoll = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROFILO_COLLABORAZIONE);
  135.         strutsBean.filtrodup = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_FILTRO_DUPLICATI);
  136.         strutsBean.confric = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CONFERMA_RICEZIONE);
  137.         strutsBean.idcoll = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_COLLABORAZIONE);
  138.         strutsBean.idRifRichiesta = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID_RIFERIMENTO_RICHIESTA);
  139.         strutsBean.consord = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CONSEGNA_ORDINE);
  140.         strutsBean.scadenza = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SCADENZA);
  141.         strutsBean.utilizzo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_UTILIZZO_SENZA_AZIONE);
  142.         strutsBean.utilizzoSenzaAzione = ServletUtils.isCheckBoxEnabled(strutsBean.utilizzo);
  143.         strutsBean.showUtilizzoSenzaAzione = false;
  144.         String oldProfiloCollaborazione = "";
  145.         strutsBean.referente = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_REFERENTE);
  146.         strutsBean.versione = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VERSIONE);
  147.         // patch per version spinner fino a che non si trova un modo piu' elegante
  148.         /**if(ch.core.isBackwardCompatibilityAccordo11()){
  149.             if("0".equals(versione))
  150.                 versione = "";
  151.         }*/
  152.         String privatoS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PRIVATO);
  153.         strutsBean.privato = ServletUtils.isCheckBoxEnabled(privatoS);
  154.         String isServizioCompostoS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_IS_SERVIZIO_COMPOSTO);
  155.         strutsBean.isServizioComposto = ServletUtils.isCheckBoxEnabled(isServizioCompostoS);
  156.         strutsBean.accordoCooperazioneId = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ACCORDO_COOPERAZIONE);
  157.         strutsBean.statoPackage = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_STATO_PACKAGE);
  158.         strutsBean.tipoAccordo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
  159.         strutsBean.tipoProtocollo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
  160.         strutsBean.actionConfirm = apcHelper.getParameter(Costanti.PARAMETRO_ACTION_CONFIRM);
  161.         strutsBean.backToStato = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RIPRISTINA_STATO);
  162.         String serviceBindingS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SERVICE_BINDING);
  163.         strutsBean.serviceBinding = StringUtils.isNotEmpty(serviceBindingS) ? ServiceBinding.valueOf(serviceBindingS) : null;
  164.         String messageProcessorS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_MESSAGE_TYPE);
  165.         strutsBean.messageType = (StringUtils.isNotEmpty(messageProcessorS) && !messageProcessorS.equals(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_MESSAGE_TYPE_DEFAULT))
  166.                 ? MessageType.valueOf(messageProcessorS) : null;
  167.         String formatoSpecificaS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_INTERFACE_TYPE);
  168.         strutsBean.interfaceType = StringUtils.isNotEmpty(formatoSpecificaS) ? InterfaceType.toEnumConstant(formatoSpecificaS) : null;
  169.        
  170.         strutsBean.gruppi = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_GRUPPI);
  171.         strutsBean.canale = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CANALE);
  172.         strutsBean.canaleStato = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_CANALE_STATO);

  173.         if("".equals(strutsBean.tipoAccordo))
  174.             strutsBean.tipoAccordo = null;
  175.         if(strutsBean.tipoAccordo!=null){
  176.             if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(strutsBean.tipoAccordo)){
  177.                 strutsBean.isServizioComposto = false;
  178.             }else if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO.equals(strutsBean.tipoAccordo)){
  179.                 strutsBean.isServizioComposto = true;
  180.             }
  181.         }

  182.         String tmpValidazioneDocumenti = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_VALIDAZIONE_DOCUMENTI);

  183.         String apiGestioneParziale = apcHelper.getParameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE);
  184.         Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, session, request, false).getValue();
  185.        
  186.         boolean chiediConferma = true;
  187.        
  188.         boolean gestioneInformazioniGenerali = false;
  189.         boolean gestioneSoggettoReferente = false;
  190.         boolean gestioneDescrizione = false;
  191.         boolean gestioneSpecificaInterfacce = false;
  192.         boolean gestioneInformazioniProtocollo = false;
  193.         boolean gestioneGruppi = false;
  194.         boolean gestioneCanale = false;
  195.         if(isModalitaVistaApiCustom!=null && isModalitaVistaApiCustom) {
  196.             if(ApiCostanti.VALORE_PARAMETRO_APC_API_INFORMAZIONI_GENERALI.equals(apiGestioneParziale)) {
  197.                 gestioneInformazioniGenerali = true;
  198.             }
  199.             else if(ApiCostanti.VALORE_PARAMETRO_APC_API_SOGGETTO_REFERENTE.equals(apiGestioneParziale)) {
  200.                 gestioneSoggettoReferente = true;
  201.             }
  202.             else if(ApiCostanti.VALORE_PARAMETRO_APC_API_DESCRIZIONE.equals(apiGestioneParziale)) {
  203.                 gestioneDescrizione = true;
  204.                 chiediConferma = false;
  205.             }
  206.             else if(ApiCostanti.VALORE_PARAMETRO_APC_API_GESTIONE_SPECIFICA_INTERFACCE.equals(apiGestioneParziale)) {
  207.                 gestioneSpecificaInterfacce = true;
  208.             }
  209.             else if(ApiCostanti.VALORE_PARAMETRO_APC_API_OPZIONI_AVANZATE.equals(apiGestioneParziale)) {
  210.                 gestioneInformazioniProtocollo = true;
  211.             }
  212.             else if(ApiCostanti.VALORE_PARAMETRO_APC_API_GRUPPI.equals(apiGestioneParziale)) {
  213.                 gestioneGruppi = true;
  214.             }
  215.             else if(ApiCostanti.VALORE_PARAMETRO_APC_API_CANALE.equals(apiGestioneParziale)) {
  216.                 gestioneCanale = true;
  217.             }
  218.            
  219.         }
  220.        
  221.         boolean addPropertiesHidden = false;
  222.         if(gestioneInformazioniGenerali || gestioneSoggettoReferente || gestioneDescrizione || gestioneSpecificaInterfacce || gestioneInformazioniProtocollo || gestioneGruppi|| gestioneCanale) {
  223.             addPropertiesHidden = true;
  224.         }
  225.        
  226.         if(ServletUtils.isEditModeInProgress(strutsBean.editMode) ){

  227.             // primo accesso alla servlet

  228.             if(tmpValidazioneDocumenti!=null){
  229.                 strutsBean.validazioneDocumenti = ServletUtils.isCheckBoxEnabled(tmpValidazioneDocumenti);
  230.             }else{
  231.                 strutsBean.validazioneDocumenti = true;
  232.             }
  233.         }else{
  234.             strutsBean.validazioneDocumenti = ServletUtils.isCheckBoxEnabled(tmpValidazioneDocumenti);
  235.         }

  236.         // Preparo il menu
  237.         apcHelper.makeMenu();

  238.         // Prendo il nome dell'accordo
  239.         String nome = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME);

  240.         AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore();
  241.         AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(apcCore);
  242.         SoggettiCore soggettiCore = new SoggettiCore(apcCore);
  243.         PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore(apcCore);
  244.         AccordiCooperazioneCore acCore = new AccordiCooperazioneCore(apcCore);
  245.         GruppiCore gruppiCore = new GruppiCore(apcCore);
  246.         ConfigurazioneCore confCore = new ConfigurazioneCore(apcCore);
  247.         ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  248.         FiltroRicercaGruppi filtroRicerca = null;
  249.         List<String> elencoGruppi = null;

  250.         boolean asWithAllegati = false;
  251.        
  252.         // carico i canali
  253.         CanaliConfigurazione gestioneCanali = confCore.getCanaliConfigurazione(false);
  254.         List<CanaleConfigurazione> canaleList = gestioneCanali != null ? gestioneCanali.getCanaleList() : new ArrayList<>();
  255.         boolean gestioneCanaliEnabled = gestioneCanali != null && org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(gestioneCanali.getStato());

  256.         String[] providersList = null;
  257.         String[] providersListLabel = null;
  258.         String[] accordiCooperazioneEsistenti=null;
  259.         String[] accordiCooperazioneEsistentiLabel=null;
  260.         List<String> listaTipiProtocollo = null;

  261.         boolean used = false;

  262.         AccordoServizioParteComune as = null;
  263.         IDAccordo idAccordoOLD = null;

  264.         try {

  265.             long idAccordoLong = Long.parseLong(strutsBean.id);

  266.             as = apcCore.getAccordoServizioFull(idAccordoLong);
  267.            
  268.             if(as==null) {
  269.                 throw new DriverControlStationException("AccordoServizioParteComune con id '"+idAccordoLong+"' non trovato");
  270.             }
  271.            
  272.             idAccordoOLD = idAccordoFactory.getIDAccordoFromValues(as.getNome(),BeanUtilities.getSoggettoReferenteID(as.getSoggettoReferente()),as.getVersione());

  273.             asWithAllegati = apcHelper.asWithAllegatiXsd(as);
  274.            
  275.             // controllo se l'accordo e' utilizzato da qualche asps
  276.             List<AccordoServizioParteSpecifica> asps = apsCore.serviziByAccordoFilterList(idAccordoOLD);
  277.             used = asps != null && !asps.isEmpty();

  278.             // lista dei protocolli supportati
  279.             listaTipiProtocollo = apcCore.getProtocolliByFilter(request, session, true, false);

  280.             // primo accesso
  281.             if(strutsBean.tipoProtocollo == null){
  282.                 if(as!=null && as.getSoggettoReferente()!=null){
  283.                     strutsBean.tipoProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(as.getSoggettoReferente().getTipo());
  284.                 }
  285.                 else{
  286.                     strutsBean.tipoProtocollo = apsCore.getProtocolloDefault(request, session, listaTipiProtocollo);
  287.                 }
  288.             }
  289.             strutsBean.protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(strutsBean.tipoProtocollo);
  290.             strutsBean.consoleDynamicConfiguration =  strutsBean.protocolFactory.createDynamicConfigurationConsole();
  291.             strutsBean.registryReader = soggettiCore.getRegistryReader(strutsBean.protocolFactory);
  292.             strutsBean.configRegistryReader = soggettiCore.getConfigIntegrationReader(strutsBean.protocolFactory);
  293.             strutsBean.consoleConfiguration = (strutsBean.tipoAccordo==null || strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE)) ?
  294.                     strutsBean.consoleDynamicConfiguration.getDynamicConfigAccordoServizioParteComune(strutsBean.consoleOperationType, apcHelper,
  295.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD)
  296.                     : strutsBean.consoleDynamicConfiguration.getDynamicConfigAccordoServizioComposto(strutsBean.consoleOperationType, apcHelper,
  297.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);

  298.             strutsBean.protocolProperties = apcHelper.estraiProtocolPropertiesDaRequest(strutsBean.consoleConfiguration, strutsBean.consoleOperationType);

  299.             // se this.initProtocolPropertiesFromDb = true allora leggo le properties dal db...

  300.             try{
  301.                 AccordoServizioParteComune apcOLD = strutsBean.registryReader.getAccordoServizioParteComune(idAccordoOLD);
  302.                 oldProtocolPropertyList = apcOLD.getProtocolPropertyList();

  303.             }catch(RegistryNotFound r){
  304.                 // ignore
  305.             }

  306.             if(strutsBean.protocolPropertiesSet == null){
  307.                 ProtocolPropertiesUtils.mergeProtocolPropertiesRegistry(strutsBean.protocolProperties, oldProtocolPropertyList, strutsBean.consoleOperationType);
  308.             }

  309.             List<String> tipiSoggettiGestitiProtocollo = soggettiCore.getTipiSoggettiGestitiProtocollo(strutsBean.tipoProtocollo);
  310.             List<Soggetto> listaSoggetti=null;

  311.             if(apcCore.isVisioneOggettiGlobale(userLogin)){
  312.                 listaSoggetti = soggettiCore.soggettiList(null, new ConsoleSearch(true));
  313.             }else{
  314.                 listaSoggetti = soggettiCore.soggettiList(userLogin, new ConsoleSearch(true));
  315.             }

  316.             List<String> soggettiListTmp = new ArrayList<>();
  317.             List<String> soggettiListLabelTmp = new ArrayList<>();
  318.             soggettiListTmp.add("-");
  319.             soggettiListLabelTmp.add("-");

  320.             if (!listaSoggetti.isEmpty()) {
  321.                 for (Soggetto soggetto : listaSoggetti) {
  322.                     if(tipiSoggettiGestitiProtocollo.contains(soggetto.getTipo())){
  323.                         soggettiListTmp.add(soggetto.getId().toString());
  324.                         /** soggettiListLabelTmp.add(soggetto.getTipo() + "/" + soggetto.getNome()); */
  325.                         soggettiListLabelTmp.add(apcHelper.getLabelNomeSoggetto(strutsBean.tipoProtocollo, soggetto.getTipo() , soggetto.getNome() ));
  326.                     }
  327.                 }
  328.             }
  329.             providersList = soggettiListTmp.toArray(new String[1]);
  330.             providersListLabel = soggettiListLabelTmp.toArray(new String[1]);

  331.             if(strutsBean.isServizioComposto) {
  332.                 List<AccordoCooperazione> lista = null;
  333.                 if(apcCore.isVisioneOggettiGlobale(userLogin)){
  334.                     lista = acCore.accordiCooperazioneList(null, new ConsoleSearch(true));
  335.                 }else{
  336.                     lista = acCore.accordiCooperazioneList(userLogin, new ConsoleSearch(true));
  337.                 }
  338.                 if (lista != null && !lista.isEmpty()) {
  339.                     accordiCooperazioneEsistenti = new String[lista.size()+1];
  340.                     accordiCooperazioneEsistentiLabel = new String[lista.size()+1];
  341.                     int i = 1;
  342.                     accordiCooperazioneEsistenti[0]="-";
  343.                     accordiCooperazioneEsistentiLabel[0]="-";
  344.                     Iterator<AccordoCooperazione> itL = lista.iterator();
  345.                     while (itL.hasNext()) {
  346.                         AccordoCooperazione singleAC = itL.next();
  347.                         accordiCooperazioneEsistenti[i] = "" + singleAC.getId();
  348.                         accordiCooperazioneEsistentiLabel[i] = apcHelper.getLabelIdAccordoCooperazione(acCore.getAccordoCooperazione(singleAC.getId()));
  349.                         i++;
  350.                     }
  351.                 } else {
  352.                     accordiCooperazioneEsistenti = new String[1];
  353.                     accordiCooperazioneEsistentiLabel = new String[1];
  354.                     accordiCooperazioneEsistenti[0]="-";
  355.                     accordiCooperazioneEsistentiLabel[0]="-";
  356.                 }
  357.             }

  358.         } catch (Exception e) {
  359.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  360.                     AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());
  361.         }

  362.         //se passo dal link diretto di ripristino stato imposto il nuovo stato
  363.         if(strutsBean.backToStato != null && (strutsBean.actionConfirm == null || strutsBean.actionConfirm.equals(Costanti.PARAMETRO_ACTION_CONFIRM_VALUE_OK)))
  364.             strutsBean.statoPackage = strutsBean.backToStato;

  365.         String uriAS = idAccordoFactory.getUriFromIDAccordo(idAccordoOLD);
  366.         String labelASTitle = apcHelper.getLabelIdAccordo(strutsBean.tipoProtocollo, idAccordoOLD);
  367.         String oldStatoPackage = as.getStatoPackage();          

  368.         Properties propertiesProprietario = new Properties();
  369.         propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_ID_PROPRIETARIO, strutsBean.id);
  370.         propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO, ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO_VALUE_ACCORDO_SERVIZIO_PARTE_COMUNE);
  371.         propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_NOME_PROPRIETARIO, uriAS);
  372.         propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_URL_ORIGINALE_CHANGE, URLEncoder.encode( AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE + "?" + request.getQueryString(), "UTF-8"));
  373.         propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_PROTOCOLLO, strutsBean.tipoProtocollo);
  374.         if(strutsBean.tipoAccordo!=null) {
  375.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_ACCORDO, strutsBean.tipoAccordo);
  376.         }
  377.        
  378.         List<Parameter> listaParams = apcHelper.getTitoloApc(tipoOp, as, strutsBean.tipoAccordo, labelASTitle, null, true);

  379.         // Se idhid = null, devo visualizzare la pagina per la modifica dati
  380.         if(ServletUtils.isEditModeInProgress(strutsBean.editMode)){

  381.             try {

  382.                 // setto la barra del titolo
  383.                 ServletUtils.setPageDataTitle(pd, listaParams);

  384.                 if(strutsBean.descr==null){
  385.                     //inizializzazione default
  386.                     strutsBean.descr = as.getDescrizione();

  387.                     if(strutsBean.tipoAccordo!=null){
  388.                         if("apc".equals(strutsBean.tipoAccordo)){
  389.                             strutsBean.isServizioComposto = false;
  390.                         }else if("asc".equals(strutsBean.tipoAccordo)){
  391.                             strutsBean.isServizioComposto = true;
  392.                         }
  393.                     }else{
  394.                         strutsBean.isServizioComposto = as.getServizioComposto()!=null ? true : false;
  395.                     }
  396.                     if(strutsBean.isServizioComposto){
  397.                         strutsBean.accordoCooperazioneId = ""+as.getServizioComposto().getIdAccordoCooperazione();
  398.                     }else{
  399.                         strutsBean.accordoCooperazioneId="-";
  400.                     }
  401.                 }

  402.                 int idReferente = -1;
  403.                 try{
  404.                     idReferente = Integer.parseInt(strutsBean.referente);
  405.                 }catch(Exception e){
  406.                     // ignore
  407.                 }
  408.                 if(idReferente<=0 && !"-".equals(strutsBean.referente)){
  409.                     IdSoggetto assr = as.getSoggettoReferente();
  410.                     if (assr != null) {
  411.                         Soggetto s = soggettiCore.getSoggetto(new IDSoggetto(assr.getTipo(),assr.getNome()));
  412.                         strutsBean.referente = "" + s.getId();
  413.                     }else{
  414.                         strutsBean.referente = "-";
  415.                     }
  416.                 }

  417.                 if(strutsBean.versione == null &&
  418.                         as.getVersione()!=null) {
  419.                     strutsBean.versione = as.getVersione().intValue()+"";
  420.                 }

  421.                 // controllo profilo collaborazione
  422.                 if(strutsBean.profcoll == null)
  423.                     strutsBean.profcoll = AccordiServizioParteComuneHelper.convertProfiloCollaborazioneDB2View(as.getProfiloCollaborazione());

  424.                 if(strutsBean.filtrodup == null)
  425.                     strutsBean.filtrodup = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getFiltroDuplicati());
  426.                 if(strutsBean.confric == null)
  427.                     strutsBean.confric = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConfermaRicezione());
  428.                 if(strutsBean.idcoll == null)
  429.                     strutsBean.idcoll = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdCollaborazione());
  430.                 if(strutsBean.idRifRichiesta == null)
  431.                     strutsBean.idRifRichiesta = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdRiferimentoRichiesta());
  432.                 if(strutsBean.consord == null)
  433.                     strutsBean.consord = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConsegnaInOrdine());
  434.                 if(strutsBean.scadenza == null)
  435.                     strutsBean.scadenza = as.getScadenza() != null ? as.getScadenza() : "";
  436.                 if(privatoS==null){
  437.                     strutsBean.privato = as.getPrivato()!=null && as.getPrivato();
  438.                 }

  439.                 strutsBean.showUtilizzoSenzaAzione = as.sizeAzioneList() > 0;// se ci
  440.                 // sono
  441.                 // azioni
  442.                 // allora
  443.                 // visualizzo
  444.                 // il
  445.                 // checkbox
  446.                 if(strutsBean.utilizzo==null)
  447.                     strutsBean.utilizzoSenzaAzione = as.getUtilizzoSenzaAzione();  

  448.                 if(strutsBean.statoPackage==null)
  449.                     strutsBean.statoPackage = as.getStatoPackage();

  450.                 if(strutsBean.wsdlconc == null){
  451.                     strutsBean.wsdlconc = new BinaryParameter();
  452.                     strutsBean.wsdlconc.setValue(as.getByteWsdlConcettuale());
  453.                 }

  454.                 if(strutsBean.wsdldef == null){
  455.                     strutsBean.wsdldef = new BinaryParameter();
  456.                     strutsBean.wsdldef.setValue(as.getByteWsdlDefinitorio());
  457.                 }

  458.                 if(strutsBean.wsdlserv == null){
  459.                     strutsBean.wsdlserv = new BinaryParameter();
  460.                     strutsBean.wsdlserv.setValue(as.getByteWsdlLogicoErogatore());
  461.                 }

  462.                 if(strutsBean.wsdlservcorr == null){
  463.                     strutsBean.wsdlservcorr = new BinaryParameter();
  464.                     strutsBean.wsdlservcorr.setValue(as.getByteWsdlLogicoFruitore());
  465.                 }

  466.                 if(strutsBean.wsblconc == null){
  467.                     strutsBean.wsblconc = new BinaryParameter();
  468.                     strutsBean.wsblconc.setValue(as.getByteSpecificaConversazioneConcettuale());
  469.                 }

  470.                 if(strutsBean.wsblserv == null){
  471.                     strutsBean.wsblserv = new BinaryParameter();
  472.                     strutsBean.wsblserv.setValue(as.getByteSpecificaConversazioneErogatore());
  473.                 }

  474.                 if(strutsBean.wsblservcorr == null){
  475.                     strutsBean.wsblservcorr = new BinaryParameter();
  476.                     strutsBean.wsblservcorr.setValue(as.getByteSpecificaConversazioneFruitore());
  477.                 }

  478.                 if(strutsBean.serviceBinding == null){
  479.                     strutsBean.serviceBinding = apcCore.toMessageServiceBinding(as.getServiceBinding());
  480.                
  481.                     if(strutsBean.messageType == null){
  482.                         strutsBean.messageType = apcCore.toMessageMessageType(as.getMessageType());
  483.                     }
  484.                    
  485.                     filtroRicerca = new FiltroRicercaGruppi();
  486.                     filtroRicerca.setServiceBinding(apcCore.fromMessageServiceBinding(strutsBean.serviceBinding));
  487.                     elencoGruppi = gruppiCore.getAllGruppi(filtroRicerca);
  488.                 }
  489.                
  490.                 if(strutsBean.interfaceType == null)
  491.                     strutsBean.interfaceType = apcCore.formatoSpecifica2InterfaceType(as.getFormatoSpecifica());
  492.                
  493.                 if(strutsBean.gruppi == null) {
  494.                     // leggo i gruppi dall'accordo
  495.                     if(as.getGruppi() != null) {
  496.                         List<String> nomiGruppi = as.getGruppi().getGruppoList().stream().flatMap(e-> Stream.of(e.getNome())).collect(Collectors.toList());
  497.                         strutsBean.gruppi = StringUtils.join(nomiGruppi, ",");
  498.                     } else {
  499.                         strutsBean.gruppi = "";
  500.                     }
  501.                 }
  502.                
  503.                 if(strutsBean.canale == null) {
  504.                     strutsBean.canale = as.getCanale();
  505.                 }
  506.                 if(strutsBean.canaleStato==null) {
  507.                     if(strutsBean.canale == null) {
  508.                         strutsBean.canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
  509.                     } else {
  510.                         strutsBean.canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
  511.                     }
  512.                 }

  513.             } catch (Exception ex) {
  514.                 return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), ex, pd, request, session, gd, mapping,
  515.                         AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());
  516.             }

  517.             String postBackElementName = apcHelper.getParameter(Costanti.POSTBACK_ELEMENT_NAME);

  518.             // Controllo se ho modificato il protocollo, resetto il referente e il service binding
  519.             if(postBackElementName != null &&
  520.                 postBackElementName.equalsIgnoreCase(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SERVICE_BINDING)){
  521.                 strutsBean.interfaceType = null;
  522.                 strutsBean.messageType = null;
  523.                    
  524.                 filtroRicerca = new FiltroRicercaGruppi();
  525.                 filtroRicerca.setServiceBinding(apcCore.fromMessageServiceBinding(strutsBean.serviceBinding));
  526.                 elencoGruppi = gruppiCore.getAllGruppi(filtroRicerca);
  527.             }

  528.             // fromato specifica
  529.             if(strutsBean.interfaceType == null &&
  530.                     strutsBean.serviceBinding != null) {
  531.                 switch(strutsBean.serviceBinding) {
  532.                 case REST:
  533.                     strutsBean.interfaceType = InterfaceType.toEnumConstant(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_INTERFACE_TYPE_REST);
  534.                     break;
  535.                 case SOAP:
  536.                 default:
  537.                     strutsBean.interfaceType = InterfaceType.toEnumConstant(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_INTERFACE_TYPE_SOAP);
  538.                     break;
  539.                 }
  540.             }


  541.             if( strutsBean.backToStato == null){
  542.                 // preparo i campi
  543.                 List<DataElement> dati = new ArrayList<>();
  544.  
  545.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  546.                 // update della configurazione
  547.                 if(strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE))
  548.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteComune(strutsBean.consoleConfiguration,
  549.                             strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  550.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  551.                 else  
  552.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioComposto(strutsBean.consoleConfiguration,
  553.                             strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  554.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);

  555.                 dati = apcHelper.addAccordiToDati(dati, nome, strutsBean.descr, strutsBean.profcoll, strutsBean.wsdldef, strutsBean.wsdlconc, strutsBean.wsdlserv, strutsBean.wsdlservcorr,
  556.                         strutsBean.wsblconc,strutsBean.wsblserv,strutsBean.wsblservcorr,
  557.                         strutsBean.filtrodup, strutsBean.confric, strutsBean.idcoll, strutsBean.idRifRichiesta, strutsBean.consord, strutsBean.scadenza, strutsBean.id, tipoOp,
  558.                         strutsBean.showUtilizzoSenzaAzione, strutsBean.utilizzoSenzaAzione,strutsBean.referente,strutsBean.versione,providersList,providersListLabel,
  559.                         strutsBean.privato,strutsBean.isServizioComposto,accordiCooperazioneEsistenti,accordiCooperazioneEsistentiLabel,
  560.                         strutsBean.accordoCooperazioneId,strutsBean.statoPackage,oldStatoPackage, strutsBean.tipoAccordo, strutsBean.validazioneDocumenti,
  561.                         strutsBean.tipoProtocollo, listaTipiProtocollo,used,asWithAllegati,strutsBean.protocolFactory,strutsBean.serviceBinding,strutsBean.messageType,strutsBean.interfaceType, strutsBean.gruppi, elencoGruppi,
  562.                         false, -1, false, -1,
  563.                         false, strutsBean.canaleStato, strutsBean.canale, canaleList, gestioneCanaliEnabled);

  564.                 // aggiunta campi custom
  565.                 if(addPropertiesHidden) {
  566.                     dati = apcHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  567.                 }else {
  568.                     dati = apcHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  569.                 }
  570.                    
  571.                 pd.setDati(dati);
  572.                
  573.                 if(apcHelper.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
  574.                     pd.disableEditMode();
  575.                 }

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


  577.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());
  578.             }
  579.         }

  580.         boolean visibilitaAccordoCooperazione=false;
  581.         if(!"-".equals(strutsBean.accordoCooperazioneId) && "".equals(strutsBean.accordoCooperazioneId)==false  && strutsBean.accordoCooperazioneId!=null){
  582.             AccordoCooperazione ac = acCore.getAccordoCooperazione(Long.parseLong(strutsBean.accordoCooperazioneId));
  583.             visibilitaAccordoCooperazione=ac.getPrivato()!=null && ac.getPrivato();
  584.         }

  585.         // Controlli sui campi immessi
  586.         boolean isOk = apcHelper.accordiCheckData(tipoOp, nome, strutsBean.descr, strutsBean.profcoll,
  587.                 strutsBean.wsdldef, strutsBean.wsdlconc, strutsBean.wsdlserv, strutsBean.wsdlservcorr,  
  588.                 strutsBean.filtrodup, strutsBean.confric, strutsBean.idcoll, strutsBean.idRifRichiesta, strutsBean.consord,
  589.                 strutsBean.scadenza, strutsBean.id,strutsBean.referente,strutsBean.versione,strutsBean.accordoCooperazioneId,strutsBean.privato,visibilitaAccordoCooperazione,idAccordoOLD,
  590.                 strutsBean.wsblconc,strutsBean.wsblserv,strutsBean.wsblservcorr, strutsBean.validazioneDocumenti,strutsBean.tipoProtocollo,strutsBean.backToStato,strutsBean.serviceBinding,strutsBean.messageType,strutsBean.interfaceType,
  591.                 true, strutsBean.gruppi, strutsBean.canaleStato, strutsBean.canale, gestioneCanaliEnabled);

  592.         // updateDynamic
  593.         if(isOk) {
  594.             if(strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE))
  595.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteComune(strutsBean.consoleConfiguration,
  596.                         strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  597.                         strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  598.             else
  599.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioComposto(strutsBean.consoleConfiguration,
  600.                         strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  601.                         strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  602.         }
  603.        
  604.         // Validazione base dei parametri custom
  605.         if(isOk){
  606.             try{
  607.                 apcHelper.validaProtocolProperties(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, strutsBean.protocolProperties);
  608.             }catch(ProtocolException e){
  609.                 ControlStationCore.getLog().error(e.getMessage(),e);
  610.                 pd.setMessage(e.getMessage());
  611.                 isOk = false;
  612.             }
  613.         }

  614.         // Valido i parametri custom se ho gia' passato tutta la validazione prevista
  615.         if(isOk){
  616.             try{
  617.                 //validazione campi dinamici
  618.                 if(strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE))
  619.                     strutsBean.consoleDynamicConfiguration.validateDynamicConfigAccordoServizioParteComune(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  620.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  621.                 else
  622.                     strutsBean.consoleDynamicConfiguration.validateDynamicConfigAccordoServizioComposto(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  623.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  624.             }catch(ProtocolException e){
  625.                 ControlStationCore.getLog().error(e.getMessage(),e);
  626.                 pd.setMessage(e.getMessage());
  627.                 isOk = false;
  628.             }
  629.         }

  630.         if (!isOk) {

  631.             // setto la barra del titolo
  632.             ServletUtils.setPageDataTitle(pd, listaParams);

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

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

  636.             // update della configurazione
  637.             if(strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE))
  638.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteComune(strutsBean.consoleConfiguration,
  639.                         strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  640.                         strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  641.             else
  642.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioComposto(strutsBean.consoleConfiguration,
  643.                         strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  644.                         strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);

  645.             dati = apcHelper.addAccordiToDati(dati, nome, strutsBean.descr, strutsBean.profcoll, strutsBean.wsdldef, strutsBean.wsdlconc, strutsBean.wsdlserv, strutsBean.wsdlservcorr,strutsBean.wsblconc,strutsBean.wsblserv,strutsBean.wsblservcorr,
  646.                     strutsBean.filtrodup, strutsBean.confric, strutsBean.idcoll, strutsBean.idRifRichiesta, strutsBean.consord, strutsBean.scadenza, strutsBean.id, tipoOp,
  647.                     strutsBean.showUtilizzoSenzaAzione, strutsBean.utilizzoSenzaAzione,strutsBean.referente,strutsBean.versione,providersList,providersListLabel,
  648.                     strutsBean.privato,strutsBean.isServizioComposto,accordiCooperazioneEsistenti,accordiCooperazioneEsistentiLabel,
  649.                     strutsBean.accordoCooperazioneId,strutsBean.statoPackage,oldStatoPackage, strutsBean.tipoAccordo, strutsBean.validazioneDocumenti,
  650.                     strutsBean.tipoProtocollo, listaTipiProtocollo,used,asWithAllegati,strutsBean.protocolFactory,strutsBean.serviceBinding,strutsBean.messageType,strutsBean.interfaceType, strutsBean.gruppi, elencoGruppi,
  651.                     false, -1, false, -1,
  652.                     false, strutsBean.canaleStato, strutsBean.canale, canaleList, gestioneCanaliEnabled);

  653.             // aggiunta campi custom
  654.             if(addPropertiesHidden) {
  655.                 dati = apcHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  656.             }else {
  657.                 dati = apcHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  658.             }
  659.            
  660.             pd.setDati(dati);

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

  662.             return ServletUtils.getStrutsForwardEditModeCheckError(mapping,
  663.                     AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());
  664.         }

  665.         // I dati dell'utente sono validi, lo informo che l'accordo e' utilizzato da asps a meno che non sto modificando solamente la descrizione
  666.         if(chiediConferma && strutsBean.actionConfirm == null){
  667.             if(used || strutsBean.backToStato != null){
  668.                 // setto la barra del titolo
  669.                 ServletUtils.setPageDataTitle(pd, listaParams);

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

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

  673.                 // update della configurazione
  674.                 if(strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE))
  675.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteComune(strutsBean.consoleConfiguration,
  676.                             strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  677.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  678.                 else
  679.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioComposto(strutsBean.consoleConfiguration,
  680.                             strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  681.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);

  682.                 dati = apcHelper.addAccordiToDati(dati, nome, strutsBean.descr, strutsBean.profcoll, strutsBean.wsdldef, strutsBean.wsdlconc, strutsBean.wsdlserv, strutsBean.wsdlservcorr,strutsBean.wsblconc,strutsBean.wsblserv,strutsBean.wsblservcorr,
  683.                         strutsBean.filtrodup, strutsBean.confric, strutsBean.idcoll, strutsBean.idRifRichiesta, strutsBean.consord, strutsBean.scadenza, strutsBean.id, tipoOp,
  684.                         strutsBean.showUtilizzoSenzaAzione, strutsBean.utilizzoSenzaAzione,strutsBean.referente,strutsBean.versione,providersList,providersListLabel,
  685.                         strutsBean.privato,strutsBean.isServizioComposto,accordiCooperazioneEsistenti,accordiCooperazioneEsistentiLabel,
  686.                         strutsBean.accordoCooperazioneId,strutsBean.statoPackage,oldStatoPackage, strutsBean.tipoAccordo, strutsBean.validazioneDocumenti,
  687.                         strutsBean.tipoProtocollo, listaTipiProtocollo,used,asWithAllegati,strutsBean.protocolFactory,strutsBean.serviceBinding,strutsBean.messageType,strutsBean.interfaceType, strutsBean.gruppi, elencoGruppi,
  688.                         false, -1, false, -1,
  689.                         true, strutsBean.canaleStato, strutsBean.canale, canaleList, gestioneCanaliEnabled);

  690.                 dati = apcHelper.addAccordiToDatiAsHidden(dati, nome, strutsBean.descr, strutsBean.profcoll, null, null, null, null,
  691.                         strutsBean.filtrodup, strutsBean.confric, strutsBean.idcoll, strutsBean.idRifRichiesta, strutsBean.consord, strutsBean.scadenza, strutsBean.id,                    
  692.                         tipoOp, strutsBean.showUtilizzoSenzaAzione, strutsBean.utilizzoSenzaAzione, strutsBean.referente,strutsBean.versione, providersList, providersListLabel,
  693.                         strutsBean.privato,strutsBean.isServizioComposto, accordiCooperazioneEsistenti, accordiCooperazioneEsistentiLabel,
  694.                         strutsBean.accordoCooperazioneId, strutsBean.statoPackage,oldStatoPackage, strutsBean.tipoAccordo, strutsBean.validazioneDocumenti, strutsBean.tipoProtocollo,
  695.                         listaTipiProtocollo, used, strutsBean.serviceBinding,strutsBean.messageType,strutsBean.interfaceType, strutsBean.gruppi, strutsBean.canaleStato, strutsBean.canale);
  696.                
  697.                 if(strutsBean.backToStato!= null) {
  698.                     // backtostato per chiudere la modifica dopo la conferma
  699.                     DataElement de = new DataElement();
  700.                     de.setLabel(CostantiControlStation.LABEL_PARAMETRO_NOME);
  701.                     de.setValue(strutsBean.backToStato);
  702.                     de.setType(DataElementType.HIDDEN);
  703.                     de.setName(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_RIPRISTINA_STATO);
  704.                     dati.add(de);
  705.                 }
  706.                
  707.                
  708.                 // aggiunta campi custom
  709.                 if(addPropertiesHidden) {
  710.                     dati = apcHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  711.                 }else {
  712.                     dati = apcHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  713.                
  714.                     // aggiunta campi custom come hidden, quelli sopra vengono bruciati dal no-edit
  715.                     dati = apcHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  716.                 }
  717.                    
  718.                 pd.setDati(dati);

  719.                 String uriAccordo = idAccordoFactory.getUriFromIDAccordo(idAccordoOLD);
  720.                 String msg = "";
  721.                 if(used)
  722.                     msg = "Attenzione, esistono delle erogazioni che riferiscono l''accordo [{0}] che si sta modificando, continuare?";

  723.                 if(strutsBean.backToStato != null){
  724.                     msg = "&Egrave; stato richiesto di ripristinare lo stato dell''accordo [{0}] in operativo. Tale operazione permetter&agrave; successive modifiche all''accordo. Vuoi procedere?";
  725.                 }
  726.                 String pre = Costanti.HTML_MODAL_SPAN_PREFIX;
  727.                 String post = Costanti.HTML_MODAL_SPAN_SUFFIX;

  728.                 pd.setMessage(pre + MessageFormat.format(msg, uriAccordo) + post, Costanti.MESSAGE_TYPE_CONFIRM);

  729.                 String[][] bottoni = {
  730.                         { Costanti.LABEL_MONITOR_BUTTON_ANNULLA,
  731.                             Costanti.LABEL_MONITOR_BUTTON_ANNULLA_CONFERMA_PREFIX +
  732.                             Costanti.LABEL_MONITOR_BUTTON_ANNULLA_CONFERMA_SUFFIX

  733.                         },
  734.                         { Costanti.LABEL_MONITOR_BUTTON_CONFERMA,
  735.                             Costanti.LABEL_MONITOR_BUTTON_ESEGUI_OPERAZIONE_CONFERMA_PREFIX +
  736.                             Costanti.LABEL_MONITOR_BUTTON_ESEGUI_OPERAZIONE_CONFERMA_SUFFIX }};

  737.                 pd.setBottoni(bottoni );
  738.                
  739.                 // disabilito la form
  740.                 pd.disableEditMode();

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

  742.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping,
  743.                         AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());    
  744.             }
  745.         }

  746.         oldProfiloCollaborazione = AccordiServizioParteComuneHelper.convertProfiloCollaborazioneDB2View(as.getProfiloCollaborazione());

  747.         as.setNome(nome);
  748.         as.setDescrizione(strutsBean.descr);
  749.         as.setConfermaRicezione(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(strutsBean.confric)));
  750.         as.setConsegnaInOrdine(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(strutsBean.consord)));
  751.         as.setFiltroDuplicati(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(strutsBean.filtrodup)));
  752.         as.setIdCollaborazione(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(strutsBean.idcoll)));
  753.         as.setIdRiferimentoRichiesta(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(strutsBean.idRifRichiesta)));
  754.         as.setProfiloCollaborazione(ProfiloCollaborazione.toEnumConstant(AccordiServizioParteComuneHelper.convertProfiloCollaborazioneView2DB(strutsBean.profcoll)));
  755.         as.setScadenza(strutsBean.scadenza);
  756.         as.setUtilizzoSenzaAzione(as.sizeAzioneList() > 0 ? strutsBean.utilizzoSenzaAzione : true);
  757.         if(strutsBean.referente!=null && !"".equals(strutsBean.referente) && !"-".equals(strutsBean.referente)){
  758.             int idRef = 0;
  759.             try {
  760.                 idRef = Integer.parseInt(strutsBean.referente);
  761.             } catch (Exception e) {
  762.             }
  763.             if (idRef != 0) {
  764.                 int idReferente = Integer.parseInt(strutsBean.referente);
  765.                 Soggetto s = soggettiCore.getSoggetto(idReferente);        
  766.                 IdSoggetto assr = new IdSoggetto();
  767.                 assr.setTipo(s.getTipo());
  768.                 assr.setNome(s.getNome());
  769.                 as.setSoggettoReferente(assr);
  770.             }
  771.         }else{
  772.             as.setSoggettoReferente(null);
  773.         }
  774.         if(strutsBean.versione!=null)
  775.             as.setVersione(Integer.parseInt(strutsBean.versione));
  776.         as.setPrivato(strutsBean.privato ? Boolean.TRUE : Boolean.FALSE);

  777.         if(strutsBean.accordoCooperazioneId!=null && !"".equals(strutsBean.accordoCooperazioneId) && !"-".equals(strutsBean.accordoCooperazioneId)){
  778.             AccordoServizioParteComuneServizioComposto assc = as.getServizioComposto();
  779.             if(assc==null) assc = new AccordoServizioParteComuneServizioComposto();
  780.             assc.setIdAccordoCooperazione(Long.parseLong(strutsBean.accordoCooperazioneId));
  781.             as.setServizioComposto(assc);
  782.         }else{
  783.             as.setServizioComposto(null);
  784.         }

  785.         as.setOldIDAccordoForUpdate(idAccordoOLD);

  786.         // servicebinding / messagetype / formatospecifica
  787.         as.setServiceBinding(apcCore.fromMessageServiceBinding(strutsBean.serviceBinding));
  788.         as.setMessageType(apcCore.fromMessageMessageType(strutsBean.messageType));
  789.         as.setFormatoSpecifica(apcCore.interfaceType2FormatoSpecifica(strutsBean.interfaceType));

  790.         // stato
  791.         as.setStatoPackage(strutsBean.statoPackage);

  792.         // Check stato
  793.         if(apcHelper.isShowGestioneWorkflowStatoDocumenti()){

  794.             try{
  795.                 boolean utilizzoAzioniDiretteInAccordoAbilitato = apcCore.isShowAccordiColonnaAzioni();
  796.                 apcCore.validaStatoAccordoServizio(as, utilizzoAzioniDiretteInAccordoAbilitato, true);
  797.             }catch(ValidazioneStatoPackageException validazioneException){

  798.                 // Setto messaggio di errore
  799.                 pd.setMessage(validazioneException.toString());

  800.                 // setto la barra del titolo
  801.                 ServletUtils.setPageDataTitle(pd, listaParams);

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

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

  805.                 // update della configurazione
  806.                 if(strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE))
  807.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteComune(strutsBean.consoleConfiguration,
  808.                             strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  809.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  810.                 else
  811.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioComposto(strutsBean.consoleConfiguration,
  812.                             strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  813.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);

  814.                 dati = apcHelper.addAccordiToDati(dati, nome, strutsBean.descr, strutsBean.profcoll, strutsBean.wsdldef, strutsBean.wsdlconc, strutsBean.wsdlserv, strutsBean.wsdlservcorr,strutsBean.wsblconc,strutsBean.wsblserv,strutsBean.wsblservcorr,
  815.                         strutsBean.filtrodup, strutsBean.confric, strutsBean.idcoll, strutsBean.idRifRichiesta, strutsBean.consord, strutsBean.scadenza, strutsBean.id, tipoOp,
  816.                         strutsBean.showUtilizzoSenzaAzione, strutsBean.utilizzoSenzaAzione,strutsBean.referente,strutsBean.versione,providersList,providersListLabel,
  817.                         strutsBean.privato,strutsBean.isServizioComposto,accordiCooperazioneEsistenti,accordiCooperazioneEsistentiLabel,
  818.                         strutsBean.accordoCooperazioneId,strutsBean.statoPackage,oldStatoPackage, strutsBean.tipoAccordo, strutsBean.validazioneDocumenti,
  819.                         strutsBean.tipoProtocollo, listaTipiProtocollo,used,asWithAllegati,strutsBean.protocolFactory,strutsBean.serviceBinding,strutsBean.messageType,strutsBean.interfaceType, strutsBean.gruppi, elencoGruppi,
  820.                         false, -1, false, -1,
  821.                         false, strutsBean.canaleStato, strutsBean.canale, canaleList, gestioneCanaliEnabled);

  822.                 // aggiunta campi custom
  823.                 if(addPropertiesHidden) {
  824.                     dati = apcHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  825.                 }else {
  826.                     dati = apcHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  827.                 }
  828.                
  829.                 pd.setDati(dati);

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

  831.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());
  832.             }
  833.         }


  834.         //imposto properties custom
  835.         as.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(strutsBean.protocolProperties, strutsBean.consoleOperationType, oldProtocolPropertyList));

  836.         List<Object> objectToCreate = new ArrayList<>();
  837.        
  838.         if(as.getGruppi() == null)
  839.             as.setGruppi(new GruppiAccordo());
  840.        
  841.         // svuto la lista e riporto solo quelli che sono selezionati dall'utente.
  842.         as.getGruppi().getGruppoList().clear();
  843.        
  844.         // gruppi
  845.         if(StringUtils.isNotEmpty(strutsBean.gruppi)) {
  846.            
  847.        
  848.             List<String> nomiGruppi = Arrays.asList(strutsBean.gruppi.split(","));
  849.            
  850.             for (String nomeGruppo : nomiGruppi) {
  851.                 if(!gruppiCore.existsGruppo(nomeGruppo)) {
  852.                     Gruppo nuovoGruppo = new Gruppo();
  853.                     nuovoGruppo.setNome(nomeGruppo);
  854.                     nuovoGruppo.setSuperUser(userLogin);
  855.                     objectToCreate.add(nuovoGruppo);
  856.                 }
  857.                
  858.                 GruppoAccordo gruppoAccordo = new GruppoAccordo();
  859.                 gruppoAccordo.setNome(nomeGruppo);
  860.                 as.getGruppi().addGruppo(gruppoAccordo );
  861.             }
  862.         }
  863.        
  864.         // canale
  865.         if(gestioneCanaliEnabled) {
  866.             if(AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO.equals(strutsBean.canaleStato)) {
  867.                 as.setCanale(strutsBean.canale);
  868.             } else {
  869.                 as.setCanale(null);
  870.             }
  871.         } else {
  872.             as.setCanale(null);
  873.         }

  874.         // Modifico i dati dell'accordo nel db
  875.         try {

  876.             // Controllo su cambio del profilo di collaborazione.
  877.             /*
  878.              * Nel caso in cui si voglia cambiare il profilo di collaborazione
  879.              * dell'accordo in uno diverso da oneway bisogna controllare che non
  880.              * esistano Porte Applicative, associate ai Servizi che implementano
  881.              * l'Accordo, con piu di un Servizio Applicativo associato in questo
  882.              * caso e' possibile cambiare il profilo da oneway in un altro
  883.              *
  884.              * Nota: Se un Accordo contiene azioni allora bisogna tener conto
  885.              * che l'azione puo aver ridefinito il profilo e quindi vanno prese
  886.              * le Porte Applicative associate ai Servizi che implementano
  887.              * l'Accordo il quale sia senza azioni oppure con azioni con profilo
  888.              * di default
  889.              */
  890.             String newProfiloCollaborazione = AccordiServizioParteComuneHelper.convertProfiloCollaborazioneDB2View(as.getProfiloCollaborazione());
  891.             // controllo se profilo e' cambiato e se e' cambiato da oneway ad
  892.             // altro devo effettuare i controlli
  893.             if (!oldProfiloCollaborazione.equals(newProfiloCollaborazione) && oldProfiloCollaborazione.equals(CostantiRegistroServizi.ONEWAY.getValue())) {

  894.                 ArrayList<String> nomiAzioniDaEscludere = new ArrayList<>();
  895.                 // imposto le azioni per il filtro
  896.                 for (int i = 0; i < as.sizeAzioneList(); i++) {
  897.                     Azione azione = as.getAzione(i);
  898.                     String profiloAzione = azione.getProfAzione();
  899.                     // se il profilo dell'azione e' ridefinito allora dovro
  900.                     // escludere le porte delegate che hanno questa azione
  901.                     if (profiloAzione != null && profiloAzione.equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO)) {
  902.                         nomiAzioniDaEscludere.add(azione.getNome());
  903.                     }

  904.                 }

  905.                 // recupero i servizi che implementano questo accordo
  906.                 List<AccordoServizioParteSpecifica> listaServizi = apsCore.serviziWithIdAccordoList(as.getId());
  907.                 // per ogni servizio trovato prendo le porte applicative
  908.                 for (AccordoServizioParteSpecifica servizio : listaServizi) {
  909.                     List<PortaApplicativa> listPA = porteApplicativeCore.porteAppWithIdServizio(servizio.getId());
  910.                     // per ogni porta applicativa controllo se ha piu di un
  911.                     // servizio applicativo associato
  912.                     for (PortaApplicativa portaApplicativa : listPA) {

  913.                         // controllo se escludere o no il controllo di questa
  914.                         // porta applicativa in base
  915.                         // al nome dell'azione
  916.                         PortaApplicativaAzione azione = portaApplicativa.getAzione();
  917.                         String nomeAzione = azione != null ? azione.getNome() : null;
  918.                         // se il nome e' presente tra quelli da escludere
  919.                         // allora salto il controllo di questa porta
  920.                         if (nomiAzioniDaEscludere.contains(nomeAzione))
  921.                             continue;

  922.                         // nessuna esclusione allora controllo se ha piu di un
  923.                         // servizio applicativo
  924.                         if (portaApplicativa.sizeServizioApplicativoList() > 1) {
  925.                             // trovata porta applicativa con piu di un servizio
  926.                             // applicativo associato
  927.                             String msg = "Impossibile cambiare il profilo di collaborazione da {0} a {1} " + "in quanto esiste almeno una Porta Applicativa [" + portaApplicativa.getNome() + "] con piu' di un Servizio Applicativo associato.";
  928.                             pd.setMessage(MessageFormat.format(msg, oldProfiloCollaborazione, newProfiloCollaborazione));

  929.                             // setto la barra del titolo
  930.                             ServletUtils.setPageDataTitle(pd, listaParams);
  931.                            
  932.                             // preparo i campi
  933.                             List<DataElement> dati = new ArrayList<>();

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

  935.                             // update della configurazione
  936.                             if(strutsBean.tipoAccordo.equals(ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_PARTE_COMUNE))
  937.                                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteComune(strutsBean.consoleConfiguration,
  938.                                         strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  939.                                         strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);
  940.                             else
  941.                                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioComposto(strutsBean.consoleConfiguration,
  942.                                         strutsBean.consoleOperationType, apcHelper, strutsBean.protocolProperties,
  943.                                         strutsBean.registryReader, strutsBean.configRegistryReader, idAccordoOLD);

  944.                             dati = apcHelper.addAccordiToDati(dati, nome, strutsBean.descr, strutsBean.profcoll, strutsBean.wsdldef, strutsBean.wsdlconc, strutsBean.wsdlserv, strutsBean.wsdlservcorr, strutsBean.wsblconc,strutsBean.wsblserv,strutsBean.wsblservcorr,
  945.                                     strutsBean.filtrodup, strutsBean.confric, strutsBean.idcoll, strutsBean.idRifRichiesta, strutsBean.consord, strutsBean.scadenza, strutsBean.id, tipoOp,
  946.                                     strutsBean.showUtilizzoSenzaAzione, strutsBean.utilizzoSenzaAzione,strutsBean.referente,strutsBean.versione,providersList,providersListLabel,
  947.                                     strutsBean.privato,strutsBean.isServizioComposto,accordiCooperazioneEsistenti,accordiCooperazioneEsistentiLabel,
  948.                                     strutsBean.accordoCooperazioneId,strutsBean.statoPackage,oldStatoPackage, strutsBean.tipoAccordo, strutsBean.validazioneDocumenti,
  949.                                     strutsBean.tipoProtocollo, listaTipiProtocollo,used,asWithAllegati,strutsBean.protocolFactory,
  950.                                     strutsBean.serviceBinding,strutsBean.messageType,strutsBean.interfaceType, strutsBean.gruppi, elencoGruppi,
  951.                                     false, -1, false, -1,
  952.                                     false, strutsBean.canaleStato, strutsBean.canale, canaleList, gestioneCanaliEnabled);

  953.                             // aggiunta campi custom
  954.                             if(addPropertiesHidden) {
  955.                                 dati = apcHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  956.                             }else {
  957.                                 dati = apcHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  958.                             }
  959.                                
  960.                             pd.setDati(dati);

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

  962.                             return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());
  963.                         }
  964.                     }

  965.                 }

  966.             }

  967.             Object[] operazioniDaEffettuare = new Object[1]; // almeno 1, l'accordo esiste!
  968.             List<Object> operazioniList = new ArrayList<>();
  969.             operazioniList.add(as);


  970.             IDAccordo idNEW = idAccordoFactory.getIDAccordoFromAccordo(as);
  971.             if(!idNEW.equals(idAccordoOLD)){

  972.                 AccordiServizioParteComuneUtilities.findOggettiDaAggiornare(idAccordoOLD, as, apcCore, operazioniList);

  973.             }

  974.             if(!objectToCreate.isEmpty()) { // salvo eventuali nuovi gruppi
  975.                 // effettuo le operazioni
  976.                 apcCore.performCreateOperation(userLogin, apcHelper.smista(), objectToCreate.toArray(new Object[objectToCreate.size()]));
  977.             }

  978.             operazioniDaEffettuare = operazioniList.toArray(operazioniDaEffettuare);
  979.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), operazioniDaEffettuare);

  980.             if(gestioneInformazioniGenerali) {
  981.                 if(!idNEW.equals(idAccordoOLD)){
  982.                     ServletUtils.removeRisultatiRicercaFromSession(request, session, Liste.ACCORDI);
  983.                 }
  984.             }
  985.             else if(gestioneGruppi || gestioneCanale) {
  986.                 ServletUtils.removeRisultatiRicercaFromSession(request, session, Liste.ACCORDI);
  987.             }
  988.            
  989.             // preparo lista
  990.             List<AccordoServizioParteComuneSintetico> lista = AccordiServizioParteComuneUtilities.accordiList(apcCore, userLogin, ricerca, strutsBean.tipoAccordo);
  991.            
  992.             if(isModalitaVistaApiCustom) {
  993.                 apcHelper.prepareApiChange(tipoOp, as);
  994.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  995.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping, ApiCostanti.OBJECT_NAME_APC_API, ForwardParams.CHANGE());
  996.             }
  997.            
  998.             apcHelper.prepareAccordiList(lista, ricerca, strutsBean.tipoAccordo);

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

  1000.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());  

  1001.         } catch (Exception e) {
  1002.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  1003.                     AccordiServizioParteComuneCostanti.OBJECT_NAME_APC, ForwardParams.CHANGE());
  1004.         }

  1005.     }
  1006. }