AccordiCooperazioneChange.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.ac;

  21. import java.net.URLEncoder;
  22. import java.text.MessageFormat;
  23. import java.util.ArrayList;
  24. import java.util.Calendar;
  25. import java.util.List;
  26. import java.util.Properties;

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

  30. import org.apache.struts.action.Action;
  31. import org.apache.struts.action.ActionForm;
  32. import org.apache.struts.action.ActionForward;
  33. import org.apache.struts.action.ActionMapping;
  34. import org.openspcoop2.core.id.IDAccordo;
  35. import org.openspcoop2.core.id.IDAccordoCooperazione;
  36. import org.openspcoop2.core.id.IDSoggetto;
  37. import org.openspcoop2.core.registry.AccordoCooperazione;
  38. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  39. import org.openspcoop2.core.registry.IdSoggetto;
  40. import org.openspcoop2.core.registry.ProtocolProperty;
  41. import org.openspcoop2.core.registry.Soggetto;
  42. import org.openspcoop2.core.registry.constants.StatiAccordo;
  43. import org.openspcoop2.core.registry.driver.BeanUtilities;
  44. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  45. import org.openspcoop2.core.registry.driver.FiltroRicercaAccordi;
  46. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  47. import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
  48. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  49. import org.openspcoop2.protocol.sdk.ProtocolException;
  50. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  51. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  52. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  53. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  54. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  55. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  56. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCostanti;
  57. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  58. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  59. import org.openspcoop2.web.lib.mvc.Costanti;
  60. import org.openspcoop2.web.lib.mvc.DataElement;
  61. import org.openspcoop2.web.lib.mvc.ForwardParams;
  62. import org.openspcoop2.web.lib.mvc.GeneralData;
  63. import org.openspcoop2.web.lib.mvc.PageData;
  64. import org.openspcoop2.web.lib.mvc.Parameter;
  65. import org.openspcoop2.web.lib.mvc.ServletUtils;
  66. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  67. /**
  68.  * accordiCooperazioneChange
  69.  *
  70.  * @author Andrea Poli (apoli@link.it)
  71.  * @author Stefano Corallo (corallo@link.it)
  72.  * @author Sandra Giangrandi (sandra@link.it)
  73.  * @author $Author$
  74.  * @version $Rev$, $Date$
  75.  *
  76.  */
  77. public final class AccordiCooperazioneChange extends Action {

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

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

  82.         // Inizializzo PageData
  83.         PageData pd = new PageData();

  84.         GeneralHelper generalHelper = new GeneralHelper(session);

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

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

  88.         IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();

  89.         List<String> listaTipiProtocollo = null;

  90.         boolean used = false;
  91.        
  92.         AccordiCooperazioneChangeStrutsBean strutsBean = new AccordiCooperazioneChangeStrutsBean();
  93.        
  94.         // Parametri Protocol Properties relativi al tipo di operazione e al tipo di visualizzazione
  95.         strutsBean.consoleOperationType = ConsoleOperationType.CHANGE;
  96.        
  97.         // Parametri relativi al tipo operazione
  98.         TipoOperazione tipoOp = TipoOperazione.CHANGE;
  99.         List<ProtocolProperty> oldProtocolPropertyList = null;


  100.         try {
  101.             AccordiCooperazioneHelper acHelper = new AccordiCooperazioneHelper(request, pd, session);
  102.            
  103.             strutsBean.editMode = acHelper.getParameter(Costanti.DATA_ELEMENT_EDIT_MODE_NAME);
  104.             strutsBean.protocolPropertiesSet = acHelper.getParameter(ProtocolPropertiesCostanti.PARAMETRO_PP_SET);

  105.             String id = acHelper.getParameter(AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_ID);
  106.             int idAcc = Integer.parseInt(id);
  107.             String descr = acHelper.getParameter(AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_DESCRIZIONE);
  108.             String referente = acHelper.getParameter(AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_REFERENTE);
  109.             String versione = acHelper.getParameter(AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_VERSIONE);
  110.             String tipoProtocollo = acHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
  111.             String actionConfirm = acHelper.getParameter(Costanti.PARAMETRO_ACTION_CONFIRM);
  112.             // patch per version spinner fino a che non si trova un modo piu' elegante
  113.             /**if(ch.core.isBackwardCompatibilityAccordo11()){
  114.                 if("0".equals(versione))
  115.                     versione = "";
  116.             }*/
  117.             String privatoS = acHelper.getParameter(AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_PRIVATO);
  118.             boolean privato = ServletUtils.isCheckBoxEnabled(privatoS);
  119.             String statoPackage = acHelper.getParameter(AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_STATO);

  120.             /**String tipoSICA = acHelper.getParameter(AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_TIPO_SICA);
  121.             if("".equals(tipoSICA))
  122.                 tipoSICA = null;*/

  123.             AccordiCooperazioneCore acCore = new AccordiCooperazioneCore();
  124.             SoggettiCore soggettiCore = new SoggettiCore(acCore);

  125.             // Preparo il menu
  126.             acHelper.makeMenu();

  127.             // prelevo l'accordo
  128.             AccordoCooperazione ac = acCore.getAccordoCooperazione(idAcc);
  129.             if(ac==null) {
  130.                 throw new Exception("Accordo Cooperazione '"+idAcc+"' non trovato");
  131.             }
  132.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore(acCore);
  133.             IDAccordoCooperazione idAccordoOLD = idAccordoCooperazioneFactory.getIDAccordoFromValues(ac.getNome(),
  134.                     BeanUtilities.getSoggettoReferenteID(ac.getSoggettoReferente()),ac.getVersione());
  135.             String uriAS = idAccordoCooperazioneFactory.getUriFromIDAccordo(idAccordoOLD);
  136.             String titleAS = acHelper.getLabelIdAccordoCooperazione(ac);
  137.             String oldStatoPackage = ac.getStatoPackage();  

  138.             // Prendo il nome dell'accordo
  139.             String nome = acHelper.getParameter(AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_NOME);
  140.             if ((nome == null) || nome.equals("")) {
  141.                 pd.setMessage(AccordiCooperazioneCostanti.LABEL_ACCORDI_COOPERAZIONE_NOME_ACCORDO_NECESSARIO);

  142.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  143.                 return ServletUtils.getStrutsForwardGeneralError(mapping, AccordiCooperazioneCostanti.OBJECT_NAME_ACCORDI_COOPERAZIONE,
  144.                         ForwardParams.CHANGE());
  145.             }

  146.             try{
  147.                 FiltroRicercaAccordi filtroRicerca = new FiltroRicercaAccordi();
  148.                 filtroRicerca.setServizioComposto(true);
  149.                 filtroRicerca.setIdAccordoCooperazione(idAccordoOLD);

  150.                 List<IDAccordo> allIdAccordiServizio = apcCore.getAllIdAccordiServizio(filtroRicerca);

  151.                 if(allIdAccordiServizio != null && !allIdAccordiServizio.isEmpty())
  152.                     used = true;
  153.                
  154.             }catch(DriverRegistroServiziNotFound de){
  155.                 used = false;
  156.             }catch(Exception e){
  157.                 // in caso di eccezione per sicurezza non faccio modificare l'accordo
  158.                 used = true;
  159.             }

  160.             // lista dei protocolli supportati
  161.             listaTipiProtocollo = acCore.getProtocolliByFilter(request, session, true, false);

  162.             // se il protocollo e' null (primo accesso ) lo ricavo dall'accordo di servizio
  163.             if(tipoProtocollo == null){
  164.                 if(ac!=null && ac.getSoggettoReferente()!=null){
  165.                     tipoProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(ac.getSoggettoReferente().getTipo());
  166.                 }
  167.                 else{
  168.                     tipoProtocollo = acCore.getProtocolloDefault(request, session, listaTipiProtocollo);
  169.                 }
  170.             }

  171.             List<String> tipiSoggettiGestitiProtocollo = soggettiCore.getTipiSoggettiGestitiProtocollo(tipoProtocollo);

  172.             // Prendo la lista di provider e la metto in un array
  173.             String[] providersList = null;
  174.             String[] providersListLabel = null;

  175.             // Provider
  176.             /**
  177.                 int totProv = ch.getCounterFromDB("soggetti", "superuser", userLogin);
  178.                 if (totProv != 0) {
  179.                     providersList = new String[totProv+1];
  180.                     providersListLabel = new String[totProv+1];
  181.                     int i = 1;
  182.                     providersList[0]="-";
  183.                     providersListLabel[0]="-";

  184.                     String[] selectFields = new String[3];
  185.                     selectFields[0] = "id";
  186.                     selectFields[1] = "tipo_soggetto";
  187.                     selectFields[2] = "nome_soggetto";
  188.                     String queryString = ch.getQueryStringForList(selectFields, "soggetti", "superuser", userLogin, "", 0, 0);
  189.                     PreparedStatement stmt = con.prepareStatement(queryString);
  190.                     ResultSet risultato = stmt.executeQuery();
  191.                     while (risultato.next()) {
  192.                         providersList[i] = "" + risultato.getInt("id");
  193.                         providersListLabel[i] = risultato.getString("tipo_soggetto") + "/" + risultato.getString("nome_soggetto");
  194.                         i++;
  195.                     }
  196.                     risultato.close();
  197.                     stmt.close();
  198.                 }else{
  199.                     providersList = new String[1];
  200.                     providersListLabel = new String[1];
  201.                     providersList[0]="-";
  202.                     providersListLabel[0]="-";
  203.                 }
  204.              */
  205.             List<Soggetto> lista = null;
  206.             if(acCore.isVisioneOggettiGlobale(userLogin)){
  207.                 lista = soggettiCore.soggettiRegistroList(null, new ConsoleSearch(true));
  208.             }else{
  209.                 lista = soggettiCore.soggettiRegistroList(userLogin, new ConsoleSearch(true));
  210.             }
  211.            
  212.             List<String> soggettiListTmp = new ArrayList<>();
  213.             List<String> soggettiListLabelTmp = new ArrayList<>();
  214.             soggettiListTmp.add("-");
  215.             soggettiListLabelTmp.add("-");
  216.            
  217.             if (!lista.isEmpty()) {
  218.                 for (Soggetto soggetto : lista) {
  219.                     if(tipiSoggettiGestitiProtocollo.contains(soggetto.getTipo())){
  220.                         soggettiListTmp.add(soggetto.getId().toString());
  221.                         soggettiListLabelTmp.add(acHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome()));
  222.                     }
  223.                 }
  224.             }
  225.             providersList = soggettiListTmp.toArray(new String[1]);
  226.             providersListLabel = soggettiListLabelTmp.toArray(new String[1]);
  227.            
  228.             IdSoggetto acsr = ac.getSoggettoReferente();
  229.             if (acsr != null) {
  230.                 Soggetto s = soggettiCore.getSoggettoRegistro(new IDSoggetto(acsr.getTipo(),acsr.getNome()));
  231.                 referente = "" + s.getId();
  232.             }else{
  233.                 referente = "-";
  234.             }
  235.            
  236.             if(versione == null && ac.getVersione()!=null)
  237.                 versione = ac.getVersione().intValue()+"";
  238.            
  239.             IDAccordo idAcOLD = acHelper.getIDAccordoFromValues(nome, referente, versione);
  240.            
  241.             strutsBean.protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(tipoProtocollo);
  242.             strutsBean.consoleDynamicConfiguration =  strutsBean.protocolFactory.createDynamicConfigurationConsole();
  243.             strutsBean.registryReader = soggettiCore.getRegistryReader(strutsBean.protocolFactory);
  244.             strutsBean.configRegistryReader = soggettiCore.getConfigIntegrationReader(strutsBean.protocolFactory);
  245.             strutsBean.consoleConfiguration = strutsBean.consoleDynamicConfiguration.getDynamicConfigAccordoCooperazione(strutsBean.consoleOperationType, acHelper,
  246.                     strutsBean.registryReader, strutsBean.configRegistryReader, idAcOLD);
  247.                    
  248.             strutsBean.protocolProperties = acHelper.estraiProtocolPropertiesDaRequest(strutsBean.consoleConfiguration, strutsBean.consoleOperationType);
  249.            
  250.             oldProtocolPropertyList = ac.getProtocolPropertyList();
  251.            
  252.             if(strutsBean.protocolPropertiesSet == null){
  253.                 ProtocolPropertiesUtils.mergeProtocolPropertiesRegistry(strutsBean.protocolProperties, oldProtocolPropertyList, strutsBean.consoleOperationType);
  254.             }
  255.            
  256.             Properties propertiesProprietario = new Properties();
  257.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_ID_PROPRIETARIO, id);
  258.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO, ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO_VALUE_ACCORDO_COOPERAZIONE);
  259.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_NOME_PROPRIETARIO, uriAS);
  260.            
  261.             Parameter urlOrig = new Parameter(uriAS,
  262.                     AccordiCooperazioneCostanti.SERVLET_NAME_ACCORDI_COOPERAZIONE_CHANGE+"?"+
  263.                             AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_ID+"="+id+"&"+
  264.                             AccordiCooperazioneCostanti.PARAMETRO_ACCORDI_COOPERAZIONE_NOME+"="+nome);
  265.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_URL_ORIGINALE_CHANGE, URLEncoder.encode( urlOrig.getValue(), "UTF-8"));
  266.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_PROTOCOLLO, tipoProtocollo);
  267.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_ACCORDO, "");

  268.             // Se idhid = null, devo visualizzare la pagina per la
  269.             // modifica dati
  270.             if (ServletUtils.isEditModeInProgress(strutsBean.editMode)) {
  271.                 // setto la barra del titolo
  272.                 List<Parameter> lstParam = new ArrayList<>();
  273.                 lstParam.add(new Parameter(AccordiCooperazioneCostanti.LABEL_ACCORDI_COOPERAZIONE, AccordiCooperazioneCostanti.SERVLET_NAME_ACCORDI_COOPERAZIONE_LIST));
  274.                 lstParam.add(new Parameter(titleAS, null));

  275.                 ServletUtils.setPageDataTitle(pd, lstParam);

  276.                 if(descr==null)
  277.                     descr = ac.getDescrizione();

  278.                 privato = ac.getPrivato()!=null && ac.getPrivato();
  279.                 if(statoPackage==null)
  280.                     statoPackage = ac.getStatoPackage();

  281.                 // preparo i campi
  282.                 List<DataElement> dati = new ArrayList<>();
  283.                
  284.                 // update della configurazione
  285.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoCooperazione(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, acHelper, strutsBean.protocolProperties,
  286.                         strutsBean.registryReader, strutsBean.configRegistryReader, idAcOLD);

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

  288.                 dati = acHelper.addHiddenFieldsToDati(tipoOp, id, null, null, dati);

  289.                 dati = acHelper.
  290.                         addAccordiCooperazioneToDati(dati, nome, descr, id, tipoOp, referente,
  291.                                 versione, providersList, providersListLabel, privato,statoPackage,oldStatoPackage
  292.                                 ,tipoProtocollo, listaTipiProtocollo,used);
  293.                
  294.                 // aggiunta campi custom
  295.                 dati = acHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);


  296.                 pd.setDati(dati);

  297.                 if(acHelper.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(ac.getStatoPackage())){
  298.                     pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);
  299.                 }

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

  301.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, AccordiCooperazioneCostanti.OBJECT_NAME_ACCORDI_COOPERAZIONE,
  302.                         ForwardParams.CHANGE());
  303.             }

  304.             // Controlli sui campi immessi
  305.             boolean isOk = acHelper.accordiCooperazioneCheckData(tipoOp, nome, descr, id, referente, versione,privato,idAccordoOLD);
  306.            
  307.             // updateDynamic
  308.             if(isOk) {
  309.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoCooperazione(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, acHelper, strutsBean.protocolProperties,
  310.                         strutsBean.registryReader, strutsBean.configRegistryReader, idAcOLD);
  311.             }
  312.            
  313.             // Validazione base dei parametri custom
  314.             if(isOk){
  315.                 try{
  316.                     acHelper.validaProtocolProperties(strutsBean.consoleConfiguration, strutsBean.consoleOperationType,  strutsBean.protocolProperties);
  317.                 }catch(ProtocolException e){
  318.                     ControlStationCore.getLog().error(e.getMessage(),e);
  319.                     pd.setMessage(e.getMessage());
  320.                     isOk = false;
  321.                 }
  322.             }

  323.             // Valido i parametri custom se ho gia' passato tutta la validazione prevista
  324.             if(isOk){
  325.                 try{
  326.                     //validazione campi dinamici
  327.                     strutsBean.consoleDynamicConfiguration.validateDynamicConfigCooperazione(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, acHelper, strutsBean.protocolProperties,
  328.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAcOLD);
  329.                 }catch(ProtocolException e){
  330.                     ControlStationCore.getLog().error(e.getMessage(),e);
  331.                     pd.setMessage(e.getMessage());
  332.                     isOk = false;
  333.                 }
  334.             }
  335.            
  336.             if (!isOk) {
  337.                 // setto la barra del titolo
  338.                 List<Parameter> lstParam = new ArrayList<>();
  339.                 lstParam.add(new Parameter(AccordiCooperazioneCostanti.LABEL_ACCORDI_COOPERAZIONE, AccordiCooperazioneCostanti.SERVLET_NAME_ACCORDI_COOPERAZIONE_LIST));
  340.                 lstParam.add(new Parameter(titleAS, null));

  341.                 ServletUtils.setPageDataTitle(pd, lstParam);
  342.                 // preparo i campi
  343.                 List<DataElement> dati = new ArrayList<>();
  344.                
  345.                 // update della configurazione
  346.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoCooperazione(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, acHelper, strutsBean.protocolProperties,
  347.                         strutsBean.registryReader, strutsBean.configRegistryReader, idAcOLD);

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

  349.                 dati = acHelper.addHiddenFieldsToDati(tipoOp, id, null, null, dati);

  350.                 dati = acHelper.addAccordiCooperazioneToDati(dati, nome, descr, id,
  351.                         tipoOp, referente, versione, providersList, providersListLabel,
  352.                         privato,statoPackage,oldStatoPackage,tipoProtocollo, listaTipiProtocollo,used);
  353.                
  354.                 // aggiunta campi custom
  355.                 dati = acHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);

  356.                 pd.setDati(dati);

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

  358.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiCooperazioneCostanti.OBJECT_NAME_ACCORDI_COOPERAZIONE,
  359.                         ForwardParams.CHANGE());
  360.             }


  361.             // I dati dell'utente sono validi, lo informo che l'accordo e' utilizzato da accordi di servizio composti
  362.             if(used && actionConfirm == null){

  363.                 // setto la barra del titolo
  364.                 List<Parameter> lstParam = new ArrayList<>();
  365.                 lstParam.add(new Parameter(AccordiCooperazioneCostanti.LABEL_ACCORDI_COOPERAZIONE, AccordiCooperazioneCostanti.SERVLET_NAME_ACCORDI_COOPERAZIONE_LIST));
  366.                 lstParam.add(new Parameter(titleAS, null));

  367.                 ServletUtils.setPageDataTitle(pd, lstParam);
  368.                 // preparo i campi
  369.                 List<DataElement> dati = new ArrayList<>();
  370.                
  371.                 // update della configurazione
  372.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoCooperazione(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, acHelper, strutsBean.protocolProperties,
  373.                         strutsBean.registryReader, strutsBean.configRegistryReader, idAcOLD);

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

  375.                 dati = acHelper.addHiddenFieldsToDati(tipoOp, id, null, null, dati);
  376.                
  377.                 dati = acHelper.addAccordiCooperazioneToDati(dati, nome, descr, id,
  378.                         tipoOp, referente, versione, providersList, providersListLabel,
  379.                         privato,statoPackage,oldStatoPackage,tipoProtocollo, listaTipiProtocollo,used);

  380.                 dati = acHelper.addAccordiCooperazioneToDatiAsHidden(dati, nome, descr, id,
  381.                         tipoOp, referente, versione, providersList, providersListLabel,
  382.                         privato,statoPackage,oldStatoPackage,tipoProtocollo, listaTipiProtocollo,used);
  383.            
  384.                 // aggiunta campi custom
  385.                 dati = acHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  386.                
  387.                 // aggiunta campi custom come hidden, quelli sopra vengono bruciati dal no-edit
  388.                 dati = acHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  389.                
  390.                 String msg = "Attenzione, esistono Accordi di Servizio Composto che riferiscono l''Accordo di Cooperazione [{0}] che si sta modificando, continuare?";
  391.                 String uriAccordo = idAccordoCooperazioneFactory.getUriFromIDAccordo(idAccordoOLD);

  392.                 String pre = Costanti.HTML_MODAL_SPAN_PREFIX;
  393.                 String post = Costanti.HTML_MODAL_SPAN_SUFFIX;
  394.                 pd.setMessage(pre + MessageFormat.format(msg, uriAccordo) + post, Costanti.MESSAGE_TYPE_CONFIRM);

  395.                 String[][] bottoni = {
  396.                         { Costanti.LABEL_MONITOR_BUTTON_ANNULLA,
  397.                             Costanti.LABEL_MONITOR_BUTTON_ANNULLA_CONFERMA_PREFIX +
  398.                             Costanti.LABEL_MONITOR_BUTTON_ANNULLA_CONFERMA_SUFFIX
  399.                            
  400.                         },
  401.                         { Costanti.LABEL_MONITOR_BUTTON_CONFERMA,
  402.                             Costanti.LABEL_MONITOR_BUTTON_ESEGUI_OPERAZIONE_CONFERMA_PREFIX +
  403.                             Costanti.LABEL_MONITOR_BUTTON_ESEGUI_OPERAZIONE_CONFERMA_SUFFIX }};

  404.                 pd.setBottoni(bottoni );

  405.                 pd.setDati(dati);

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

  407.                 return  ServletUtils.getStrutsForwardEditModeInProgress(mapping,
  408.                         AccordiCooperazioneCostanti.OBJECT_NAME_ACCORDI_COOPERAZIONE,
  409.                         ForwardParams.CHANGE());
  410.             }

  411.             // Modifico i dati dell'accordo nel db
  412.             ac.setNome(nome);
  413.             ac.setDescrizione(descr);
  414.             if(
  415.                     //referente!=null &&
  416.                     !"".equals(referente) && !"-".equals(referente)){
  417.                 int idRef = 0;
  418.                 try {
  419.                     idRef = Integer.parseInt(referente);
  420.                 } catch (Exception e) {
  421.                 }
  422.                 if (idRef != 0) {
  423.                     int idReferente = Integer.parseInt(referente);
  424.                     Soggetto s = soggettiCore.getSoggettoRegistro(idReferente);        
  425.                     acsr = new IdSoggetto();
  426.                     acsr.setTipo(s.getTipo());
  427.                     acsr.setNome(s.getNome());
  428.                     ac.setSoggettoReferente(acsr);
  429.                 }
  430.             }else{
  431.                 ac.setSoggettoReferente(null);
  432.             }
  433.             if(versione!=null){
  434.                 ac.setVersione(Integer.parseInt(versione));
  435.             }
  436.             ac.setOraRegistrazione(Calendar.getInstance().getTime());
  437.             ac.setPrivato(privato ? Boolean.TRUE : Boolean.FALSE);
  438.             ac.setSuperUser(userLogin);

  439.             ac.setOldIDAccordoForUpdate(idAccordoOLD);


  440.             // stato
  441.             ac.setStatoPackage(statoPackage);


  442.             //  Check stato
  443.             if(acHelper.isShowGestioneWorkflowStatoDocumenti()){

  444.                 try{
  445.                     acCore.validaStatoAccordoCooperazione(ac);
  446.                 }catch(ValidazioneStatoPackageException validazioneException){

  447.                     // Setto messaggio di errore
  448.                     pd.setMessage(validazioneException.toString());

  449.                     // setto la barra del titolo
  450.                     List<Parameter> lstParam = new ArrayList<>();
  451.                     lstParam.add(new Parameter(AccordiCooperazioneCostanti.LABEL_ACCORDI_COOPERAZIONE, AccordiCooperazioneCostanti.SERVLET_NAME_ACCORDI_COOPERAZIONE_LIST));
  452.                     lstParam.add(new Parameter(titleAS, null));

  453.                     ServletUtils.setPageDataTitle(pd, lstParam);

  454.                     // preparo i campi
  455.                     List<DataElement> dati = new ArrayList<>();
  456.                    
  457.                     // update della configurazione
  458.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoCooperazione(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, acHelper, strutsBean.protocolProperties,
  459.                             strutsBean.registryReader, strutsBean.configRegistryReader, idAcOLD);

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

  461.                     dati = acHelper.addHiddenFieldsToDati(tipoOp, id, null, null, dati);

  462.                     dati = acHelper.addAccordiCooperazioneToDati(dati, nome, descr, id,
  463.                             tipoOp, referente, versione, providersList, providersListLabel,
  464.                             privato,statoPackage,oldStatoPackage,tipoProtocollo, listaTipiProtocollo,used);
  465.                    
  466.                     // aggiunta campi custom
  467.                     dati = acHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);

  468.                     pd.setDati(dati);

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

  470.                     return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiCooperazioneCostanti.OBJECT_NAME_ACCORDI_COOPERAZIONE,
  471.                             ForwardParams.CHANGE());                    
  472.                 }
  473.             }




  474.             //  Oggetti da modificare
  475.             List<Object> oggettiDaAggiornare = new ArrayList<>();


  476.             // Update accordo
  477.             oggettiDaAggiornare.add(ac);



  478.             // Aggiornamento accordi di servizio che possiedono tale accordo di cooperazione come riferimento
  479.             // Essendo servizi composti
  480.             if(!idAccordoCooperazioneFactory.getUriFromAccordo(ac).equals(idAccordoCooperazioneFactory.getUriFromIDAccordo(ac.getOldIDAccordoForUpdate()))){

  481.                 List<AccordoServizioParteComune> ass = apcCore.accordiServizioWithAccordoCooperazione(ac.getOldIDAccordoForUpdate());
  482.                 for(int i=0; i<ass.size(); i++){
  483.                     AccordoServizioParteComune as = ass.get(i);
  484.                     if(as.getServizioComposto()!=null){
  485.                         as.getServizioComposto().setAccordoCooperazione(idAccordoCooperazioneFactory.getUriFromAccordo(ac));
  486.                         oggettiDaAggiornare.add(as);
  487.                         /** System.out.println("As SERVIZIO COMPONENTE ["+IDAccordo.getUriFromAccordo(as)+"]"); */
  488.                     }
  489.                 }

  490.             }

  491.             //imposto properties custom
  492.             ac.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(strutsBean.protocolProperties, strutsBean.consoleOperationType, oldProtocolPropertyList));

  493.             acCore.performUpdateOperation(userLogin, acHelper.smista(), oggettiDaAggiornare.toArray());

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

  496.             List<AccordoCooperazione> lista2 = null;
  497.             if(acCore.isVisioneOggettiGlobale(userLogin)){
  498.                 lista2 = acCore.accordiCooperazioneList(null, ricerca);
  499.             }else{
  500.                 lista2 = acCore.accordiCooperazioneList(userLogin, ricerca);
  501.             }

  502.             acHelper.prepareAccordiCooperazioneList(lista2, ricerca);

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

  504.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, AccordiCooperazioneCostanti.OBJECT_NAME_ACCORDI_COOPERAZIONE,
  505.                     ForwardParams.CHANGE());
  506.         } catch (Exception e) {
  507.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  508.                     AccordiCooperazioneCostanti.OBJECT_NAME_ACCORDI_COOPERAZIONE,
  509.                     ForwardParams.CHANGE());
  510.         }  
  511.     }
  512. }