AccordiServizioParteComuneAzioniChange.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.util.ArrayList;
  23. import java.util.Iterator;
  24. import java.util.List;
  25. import java.util.Properties;

  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.servlet.http.HttpServletResponse;
  28. import javax.servlet.http.HttpSession;

  29. import org.apache.struts.action.Action;
  30. import org.apache.struts.action.ActionForm;
  31. import org.apache.struts.action.ActionForward;
  32. import org.apache.struts.action.ActionMapping;
  33. import org.openspcoop2.core.commons.Liste;
  34. import org.openspcoop2.core.id.IDAccordo;
  35. import org.openspcoop2.core.id.IDAccordoAzione;
  36. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  37. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  38. import org.openspcoop2.core.registry.Azione;
  39. import org.openspcoop2.core.registry.IdSoggetto;
  40. import org.openspcoop2.core.registry.ProtocolProperty;
  41. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  42. import org.openspcoop2.core.registry.constants.ProfiloCollaborazione;
  43. import org.openspcoop2.core.registry.constants.StatiAccordo;
  44. import org.openspcoop2.core.registry.constants.StatoFunzionalita;
  45. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  46. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  47. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  48. import org.openspcoop2.protocol.sdk.ProtocolException;
  49. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  50. import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
  51. import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
  52. import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
  53. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  54. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  55. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  56. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  57. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  58. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  59. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  60. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  61. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  62. import org.openspcoop2.web.lib.mvc.Costanti;
  63. import org.openspcoop2.web.lib.mvc.DataElement;
  64. import org.openspcoop2.web.lib.mvc.ForwardParams;
  65. import org.openspcoop2.web.lib.mvc.GeneralData;
  66. import org.openspcoop2.web.lib.mvc.PageData;
  67. import org.openspcoop2.web.lib.mvc.Parameter;
  68. import org.openspcoop2.web.lib.mvc.ServletUtils;
  69. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  70. /**
  71.  * accordiAzioniChange
  72.  *
  73.  * @author Andrea Poli (apoli@link.it)
  74.  * @author Stefano Corallo (corallo@link.it)
  75.  * @author Sandra Giangrandi (sandra@link.it)
  76.  * @author $Author$
  77.  * @version $Rev$, $Date$
  78.  *
  79.  */
  80. public final class AccordiServizioParteComuneAzioniChange extends Action {

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

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

  84.         // Inizializzo PageData
  85.         PageData pd = new PageData();

  86.         GeneralHelper generalHelper = new GeneralHelper(session);

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

  89.         IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();

  90.         // Protocol Properties
  91.         IConsoleDynamicConfiguration consoleDynamicConfiguration = null;
  92.         ConsoleConfiguration consoleConfiguration =null;
  93.         ProtocolProperties protocolProperties = null;
  94.         IProtocolFactory<?> protocolFactory= null;
  95.         IRegistryReader registryReader = null;
  96.         IConfigIntegrationReader configRegistryReader = null;
  97.         ConsoleOperationType consoleOperationType = null;
  98.        
  99.         // Parametri Protocol Properties relativi al tipo di operazione e al tipo di visualizzazione
  100.         consoleOperationType = ConsoleOperationType.CHANGE;
  101.        
  102.         // Parametri relativi al tipo operazione
  103.         TipoOperazione tipoOp = TipoOperazione.CHANGE;
  104.         List<ProtocolProperty> oldProtocolPropertyList = null;

  105.         try {
  106.             AccordiServizioParteComuneHelper apcHelper = new AccordiServizioParteComuneHelper(request, pd, session);
  107.            
  108.             String editMode = apcHelper.getParameter(Costanti.DATA_ELEMENT_EDIT_MODE_NAME);
  109.             String protocolPropertiesSet = apcHelper.getParameter(ProtocolPropertiesCostanti.PARAMETRO_PP_SET);

  110.             String id = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
  111.             long idAccordoLong = Long.parseLong(id);
  112.             String nomeaz = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_NOME);
  113.             if (nomeaz == null) {
  114.                 nomeaz = "";
  115.             }
  116.             String azicorr = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_CORRELATA);
  117.             String profProtocollo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_BUSTA);
  118.             String profcoll = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_PROFILO_COLLABORAZIONE);
  119.             String filtrodupaz = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_FILTRO_DUPLICATI);
  120.             if ((filtrodupaz != null) && filtrodupaz.equals("null")) {
  121.                 filtrodupaz = null;
  122.             }
  123.             String confricaz = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_CONFERMA_RICEZIONE);
  124.             if ((confricaz != null) && confricaz.equals("null")) {
  125.                 confricaz = null;
  126.             }
  127.             String idcollaz = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_COLLABORAZIONE);
  128.             if ((idcollaz != null) && idcollaz.equals("null")) {
  129.                 idcollaz = null;
  130.             }
  131.             String idRifRichiestaAz = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_ID_RIFERIMENTO_RICHIESTA);
  132.             if ((idRifRichiestaAz != null) && idRifRichiestaAz.equals("null")) {
  133.                 idRifRichiestaAz = null;
  134.             }
  135.             String consordaz = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_CONSEGNA_ORDINE);
  136.             if ((consordaz != null) && consordaz.equals("null")) {
  137.                 consordaz = null;
  138.             }
  139.             String scadenzaaz = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_AZIONI_SCADENZA);
  140.             if (scadenzaaz == null) {
  141.                 scadenzaaz = "";
  142.             }

  143.             String tipoAccordo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
  144.             if("".equals(tipoAccordo))
  145.                 tipoAccordo = null;

  146.             // Preparo il menu
  147.             apcHelper.makeMenu();

  148.             // Prendo il nome dal db
  149.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore();
  150.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(apcCore);
  151.             SoggettiCore soggettiCore = new SoggettiCore(apsCore);

  152.             AccordoServizioParteComune as = apcCore.getAccordoServizioFull(idAccordoLong);
  153.             String uriAS = idAccordoFactory.getUriFromAccordo(as);
  154.             String labelASTitle = apcHelper.getLabelIdAccordo(as);
  155.             IDAccordo idAs = idAccordoFactory.getIDAccordoFromAccordo(as);

  156.             String protocollo = null;
  157.             //calcolo del protocollo implementato dall'accordo
  158.             IdSoggetto soggettoReferente = as.getSoggettoReferente();
  159.             String tipoSoggettoReferente = soggettoReferente.getTipo();
  160.             protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(tipoSoggettoReferente);

  161.             // Prendo la lista di azioni dell'accordo
  162.             // (tranne quella che sto modificando)
  163.             // e ne metto i nomi in un array di stringhe
  164.             // prendo la lista delle azioni correlate con profilo
  165.             // asincronoAsimmetrico
  166.             List<Azione> azioniCorrelate = apcCore.accordiAzioniList(idAccordoLong, CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.toString(), new ConsoleSearch(true));
  167.             List<String> azioniCorrelateUniche = null;
  168.             String[] azioniList = null;
  169.             if (!azioniCorrelate.isEmpty()) {
  170.                 azioniCorrelateUniche = new ArrayList<>();
  171.                 azioniCorrelateUniche.add("-");
  172.                 for (Iterator<Azione> iterator = azioniCorrelate.iterator(); iterator.hasNext();) {
  173.                     Azione azione = iterator.next();
  174.                     if (!nomeaz.equals(azione.getNome()) &&
  175.                             (azione.getCorrelata()==null||"".equals(azione.getCorrelata())) &&
  176.                             (!apcCore.isAzioneCorrelata(idAccordoLong, azione.getNome(), nomeaz))
  177.                             ) {
  178.                         azioniCorrelateUniche.add(azione.getNome());
  179.                     }
  180.                 }
  181.             }

  182.             if (azioniCorrelateUniche != null)
  183.                 azioniList = azioniCorrelateUniche.toArray(new String[azioniCorrelateUniche.size()]);

  184.             protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
  185.             consoleDynamicConfiguration =  protocolFactory.createDynamicConfigurationConsole();
  186.             registryReader = soggettiCore.getRegistryReader(protocolFactory);
  187.             configRegistryReader = soggettiCore.getConfigIntegrationReader(protocolFactory);
  188.             IDAccordoAzione idAzioneOld = new IDAccordoAzione();
  189.             idAzioneOld.setIdAccordo(idAs);
  190.             idAzioneOld.setNome(nomeaz);
  191.             consoleConfiguration = consoleDynamicConfiguration.getDynamicConfigAzione(consoleOperationType, apcHelper,
  192.                     registryReader, configRegistryReader, idAzioneOld );
  193.             protocolProperties = apcHelper.estraiProtocolPropertiesDaRequest(consoleConfiguration, consoleOperationType);


  194.             // cerco l'azione e leggo le protocol properties
  195.             Azione azioneOLD = null;
  196.             for (int i = 0; i < as.sizeAzioneList(); i++) {
  197.                 Azione az = as.getAzione(i);
  198.                 if (nomeaz.equals(az.getNome())) {
  199.                     azioneOLD = az;
  200.                     break;
  201.                 }
  202.             }

  203.             if(azioneOLD != null)
  204.                 oldProtocolPropertyList = azioneOLD.getProtocolPropertyList();

  205.             if(protocolPropertiesSet == null){
  206.                 ProtocolPropertiesUtils.mergeProtocolPropertiesRegistry(protocolProperties, oldProtocolPropertyList, consoleOperationType);
  207.             }

  208.             Properties propertiesProprietario = new Properties();
  209.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_ID_PROPRIETARIO, id);
  210.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO, ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO_VALUE_AZIONE_ACCORDO);
  211.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_NOME_PROPRIETARIO, nomeaz);
  212.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_URL_ORIGINALE_CHANGE,
  213.                     URLEncoder.encode( AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_AZIONI_CHANGE + "?" + request.getQueryString(), "UTF-8"));
  214.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_PROTOCOLLO, protocollo);
  215.             if(tipoAccordo!=null) {
  216.                 propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_ACCORDO, tipoAccordo);
  217.             }
  218.            
  219.             // Se idhid = null, devo visualizzare la pagina per la
  220.             // modifica dati
  221.             if(ServletUtils.isEditModeInProgress(editMode)){

  222.                 // setto la barra del titolo
  223.                 ServletUtils.setPageDataTitle(pd,
  224.                         new Parameter(AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo),
  225.                                 AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST+"?"+
  226.                                         AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
  227.                                         AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
  228.                         new Parameter(AccordiServizioParteComuneCostanti.LABEL_AZIONI + " di " + labelASTitle,
  229.                                 AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_AZIONI_LIST+"?"+
  230.                                         AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID+"="+id+"&"+
  231.                                         AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME+"="+uriAS+"&"+
  232.                                         AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
  233.                                         AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
  234.                         new Parameter(nomeaz, null)
  235.                         );


  236.                 // Prendo i dati dell'accordo
  237.                 String defprofcoll = AccordiServizioParteComuneHelper.convertProfiloCollaborazioneDB2View(as.getProfiloCollaborazione());
  238.                 String deffiltrodupaz = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getFiltroDuplicati());
  239.                 String defconfricaz = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConfermaRicezione());
  240.                 String defidcollaz = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdCollaborazione());
  241.                 String defIdRifRichiestaAz = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdRiferimentoRichiesta());
  242.                 String defconsordaz = AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConsegnaInOrdine());
  243.                 String defscadenzaaz = as.getScadenza();

  244.                 if(azioneOLD != null) {
  245.                     filtrodupaz = filtrodupaz != null && !"".equals(filtrodupaz) ? filtrodupaz : AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(azioneOLD.getFiltroDuplicati());
  246.                     confricaz = confricaz != null && !"".equals(confricaz) ? confricaz : AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(azioneOLD.getConfermaRicezione());
  247.                     idcollaz = idcollaz != null && !"".equals(idcollaz) ? idcollaz : AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(azioneOLD.getIdCollaborazione());
  248.                     idRifRichiestaAz = idRifRichiestaAz != null && !"".equals(idRifRichiestaAz) ? idRifRichiestaAz : AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(azioneOLD.getIdRiferimentoRichiesta());
  249.                     consordaz = consordaz != null && !"".equals(consordaz) ? consordaz : AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(azioneOLD.getConsegnaInOrdine());
  250.                     scadenzaaz = scadenzaaz != null && !"".equals(scadenzaaz) ? scadenzaaz : azioneOLD.getScadenza();
  251.                     profcoll = profcoll != null && !"".equals(profcoll) ? profcoll : AccordiServizioParteComuneHelper.convertProfiloCollaborazioneDB2View(azioneOLD.getProfiloCollaborazione());
  252.                     azicorr = azicorr != null && !"".equals(azicorr) ? azicorr : azioneOLD.getCorrelata();
  253.                     if (azicorr == null)
  254.                         azicorr = "-";
  255.                     if (profProtocollo == null) {
  256.                         profProtocollo = azioneOLD.getProfAzione();
  257.                     }
  258.                 }

  259.                 if ((profProtocollo == null) || profProtocollo.equals("")) {
  260.                     profProtocollo = AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT;
  261.                 }

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

  264.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  265.                
  266.                 // update della configurazione
  267.                 consoleDynamicConfiguration.updateDynamicConfigAzione(consoleConfiguration, consoleOperationType, apcHelper, protocolProperties,
  268.                         registryReader, configRegistryReader, idAzioneOld);

  269.                 dati = apcHelper.addAccordiAzioniToDati(dati, id, nomeaz, profProtocollo,
  270.                         filtrodupaz, deffiltrodupaz, confricaz, defconfricaz, idcollaz, defidcollaz, idRifRichiestaAz, defIdRifRichiestaAz, consordaz, defconsordaz, scadenzaaz,
  271.                         defscadenzaaz, defprofcoll, profcoll, tipoOp,
  272.                         azicorr, azioniList, as.getStatoPackage(),tipoAccordo,protocollo,apcCore.toMessageServiceBinding(as.getServiceBinding()));
  273.                
  274.                 // aggiunta campi custom
  275.                 dati = apcHelper.addProtocolPropertiesToDatiRegistry(dati, consoleConfiguration,consoleOperationType, protocolProperties,oldProtocolPropertyList,propertiesProprietario);

  276.                 pd.setDati(dati);

  277.                 if(apcHelper.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())){
  278.                     pd.disableEditMode();
  279.                 }

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

  281.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_AZIONI, ForwardParams.CHANGE());
  282.             }

  283.             // Controlli sui campi immessi
  284.             boolean isOk = apcHelper.accordiAzioniCheckData(tipoOp, id, nomeaz, profProtocollo, filtrodupaz, confricaz, idcollaz, idRifRichiestaAz, consordaz, scadenzaaz);
  285.            
  286.             // updateDynamic
  287.             if(isOk) {
  288.                 consoleDynamicConfiguration.updateDynamicConfigAzione(consoleConfiguration, consoleOperationType, apcHelper, protocolProperties,
  289.                         registryReader, configRegistryReader, idAzioneOld);
  290.             }
  291.            
  292.             // Validazione base dei parametri custom
  293.             if(isOk){
  294.                 try{
  295.                     apcHelper.validaProtocolProperties(consoleConfiguration, consoleOperationType, protocolProperties);
  296.                 }catch(ProtocolException e){
  297.                     ControlStationCore.getLog().error(e.getMessage(),e);
  298.                     pd.setMessage(e.getMessage());
  299.                     isOk = false;
  300.                 }
  301.             }
  302.            
  303.             // Valido i parametri custom se ho gia' passato tutta la validazione prevista
  304.             if(isOk){
  305.                 try{
  306.                     //validazione campi dinamici
  307.                         consoleDynamicConfiguration.validateDynamicConfigAzione(consoleConfiguration, consoleOperationType, apcHelper, protocolProperties,
  308.                                 registryReader, configRegistryReader, idAzioneOld);
  309.                 }catch(ProtocolException e){
  310.                     ControlStationCore.getLog().error(e.getMessage(),e);
  311.                     pd.setMessage(e.getMessage());
  312.                     isOk = false;
  313.                 }
  314.             }
  315.            
  316.             if (!isOk) {

  317.                 // setto la barra del titolo
  318.                 ServletUtils.setPageDataTitle(pd,
  319.                         new Parameter(AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo),
  320.                                 AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST+"?"+
  321.                                         AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
  322.                                         AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
  323.                         new Parameter(AccordiServizioParteComuneCostanti.LABEL_AZIONI + " di " + labelASTitle,
  324.                                 AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_AZIONI_LIST+"?"+
  325.                                         AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID+"="+id+"&"+
  326.                                         AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME+"="+uriAS+"&"+
  327.                                         AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getName()+"="+
  328.                                         AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo).getValue()),
  329.                         new Parameter(nomeaz, null)
  330.                         );

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

  333.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  334.                
  335.                 // update della configurazione
  336.                 consoleDynamicConfiguration.updateDynamicConfigAzione(consoleConfiguration, consoleOperationType, apcHelper, protocolProperties,
  337.                         registryReader, configRegistryReader, idAzioneOld);

  338.                 dati = apcHelper.addAccordiAzioniToDati(dati, id, nomeaz, profProtocollo,
  339.                         filtrodupaz, filtrodupaz, confricaz, confricaz, idcollaz, idcollaz,idRifRichiestaAz,idRifRichiestaAz, consordaz, consordaz, scadenzaaz, scadenzaaz,
  340.                         profcoll, profcoll, tipoOp,
  341.                         azicorr, azioniList, as.getStatoPackage(),tipoAccordo,protocollo,apcCore.toMessageServiceBinding(as.getServiceBinding()));
  342.                
  343.                 // aggiunta campi custom
  344.                 dati = apcHelper.addProtocolPropertiesToDatiRegistry(dati, consoleConfiguration,consoleOperationType, protocolProperties,oldProtocolPropertyList,propertiesProprietario);

  345.                 pd.setDati(dati);

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

  347.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_AZIONI, ForwardParams.CHANGE());
  348.             }

  349.             // Modifico i dati dell'azione nel db
  350.             String userLogin = ServletUtils.getUserLoginFromSession(session);

  351.             if (profProtocollo.equals(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT)) {
  352.                 filtrodupaz = null;
  353.                 confricaz = null;
  354.                 idcollaz = null;
  355.                 idRifRichiestaAz = null;
  356.                 consordaz = null;
  357.                 scadenzaaz = null;
  358.             }

  359.             for (int i = 0; i < as.sizeAzioneList(); i++) {
  360.                 Azione az = as.getAzione(i);
  361.                 if (nomeaz.equals(az.getNome())) {
  362.                     as.removeAzione(i);
  363.                     break;
  364.                 }
  365.             }

  366.             Azione newAz = new Azione();
  367.             newAz.setNome(nomeaz);
  368.             if (!azicorr.equals("-"))
  369.                 newAz.setCorrelata(azicorr);
  370.             newAz.setFiltroDuplicati(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(filtrodupaz)));
  371.             newAz.setConfermaRicezione(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(confricaz)));
  372.             newAz.setIdCollaborazione(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(idcollaz)));
  373.             newAz.setIdRiferimentoRichiesta(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(idRifRichiestaAz)));
  374.             newAz.setConsegnaInOrdine(StatoFunzionalita.toEnumConstant(AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoView2DB(consordaz)));
  375.             newAz.setScadenza(scadenzaaz);
  376.             newAz.setProfiloCollaborazione(ProfiloCollaborazione.toEnumConstant(AccordiServizioParteComuneHelper.convertProfiloCollaborazioneView2DB(profcoll)));
  377.             newAz.setProfAzione(profProtocollo);
  378.             as.addAzione(newAz);
  379.            
  380.             //imposto properties custom
  381.             newAz.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(protocolProperties, consoleOperationType, oldProtocolPropertyList));

  382.             // effettuo le operazioni
  383.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), as);

  384.             // devo aggiornare la lista dei servizi(serviziCorrelati) che
  385.             // implementano l'accordo a cui e' stata aggiunta l'azione
  386.             // basta fare un update del servizio per attivare le operazioni
  387.             // necessarie all'aggiornamento
  388.             List<AccordoServizioParteSpecifica> listaServizi = apsCore.serviziWithIdAccordoList(idAccordoLong);
  389.             for (AccordoServizioParteSpecifica servizio : listaServizi) {
  390.                 apcCore.performUpdateOperation(userLogin, apcHelper.smista(), servizio);
  391.             }

  392.             // Preparo la lista
  393.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);

  394.             int idLista = Liste.ACCORDI_AZIONI;

  395.             ricerca = apcHelper.checkSearchParameters(idLista, ricerca);
  396.             List<Azione> lista = apcCore.accordiAzioniList(idAccordoLong, ricerca);
  397.             apcHelper.prepareAccordiAzioniList(as, lista, ricerca,id,tipoAccordo);

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

  399.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_AZIONI, ForwardParams.CHANGE());

  400.         } catch (Exception e) {
  401.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  402.                     AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_AZIONI, ForwardParams.CHANGE());
  403.         }
  404.     }
  405. }