AccordiServizioParteSpecificaChange.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.aps;

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

  28. import javax.net.ssl.KeyManagerFactory;
  29. import javax.net.ssl.TrustManagerFactory;
  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.CoreException;
  39. import org.openspcoop2.core.commons.Filtri;
  40. import org.openspcoop2.core.commons.Liste;
  41. import org.openspcoop2.core.config.CanaleConfigurazione;
  42. import org.openspcoop2.core.config.CanaliConfigurazione;
  43. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  44. import org.openspcoop2.core.config.driver.db.IDServizioApplicativoDB;
  45. import org.openspcoop2.core.constants.CostantiConnettori;
  46. import org.openspcoop2.core.constants.CostantiDB;
  47. import org.openspcoop2.core.constants.TipiConnettore;
  48. import org.openspcoop2.core.constants.TransferLengthModes;
  49. import org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale;
  50. import org.openspcoop2.core.id.IDAccordo;
  51. import org.openspcoop2.core.id.IDPortaApplicativa;
  52. import org.openspcoop2.core.id.IDPortaDelegata;
  53. import org.openspcoop2.core.id.IDServizio;
  54. import org.openspcoop2.core.id.IDSoggetto;
  55. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  56. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  57. import org.openspcoop2.core.registry.Connettore;
  58. import org.openspcoop2.core.registry.Fruitore;
  59. import org.openspcoop2.core.registry.PortType;
  60. import org.openspcoop2.core.registry.ProtocolProperty;
  61. import org.openspcoop2.core.registry.Soggetto;
  62. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  63. import org.openspcoop2.core.registry.beans.OperationSintetica;
  64. import org.openspcoop2.core.registry.beans.PortTypeSintetico;
  65. import org.openspcoop2.core.registry.constants.StatiAccordo;
  66. import org.openspcoop2.core.registry.constants.TipologiaServizio;
  67. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  68. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  69. import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
  70. import org.openspcoop2.core.registry.driver.db.IDAccordoDB;
  71. import org.openspcoop2.message.constants.ServiceBinding;
  72. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  73. import org.openspcoop2.protocol.sdk.ProtocolException;
  74. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  75. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  76. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  77. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  78. import org.openspcoop2.web.ctrlstat.costanti.ConnettoreServletType;
  79. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  80. import org.openspcoop2.web.ctrlstat.plugins.ExtendedConnettore;
  81. import org.openspcoop2.web.ctrlstat.plugins.servlet.ServletExtendedConnettoreUtils;
  82. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  83. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  84. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCostanti;
  85. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneUtilities;
  86. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniCostanti;
  87. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniHelper;
  88. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  89. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoreStatusParams;
  90. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  91. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriHelper;
  92. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  93. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  94. import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
  95. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  96. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  97. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCostanti;
  98. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiHelper;
  99. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  100. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;
  101. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  102. import org.openspcoop2.web.lib.mvc.Costanti;
  103. import org.openspcoop2.web.lib.mvc.DataElement;
  104. import org.openspcoop2.web.lib.mvc.DataElementType;
  105. import org.openspcoop2.web.lib.mvc.ForwardParams;
  106. import org.openspcoop2.web.lib.mvc.GeneralData;
  107. import org.openspcoop2.web.lib.mvc.PageData;
  108. import org.openspcoop2.web.lib.mvc.Parameter;
  109. import org.openspcoop2.web.lib.mvc.ServletUtils;
  110. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  111. import org.openspcoop2.web.lib.users.dao.PermessiUtente;

  112. /**
  113.  * serviziChange
  114.  *
  115.  * @author Andrea Poli (apoli@link.it)
  116.  * @author Stefano Corallo (corallo@link.it)
  117.  * @author Sandra Giangrandi (sandra@link.it)
  118.  * @author $Author$
  119.  * @version $Rev$, $Date$
  120.  *
  121.  */
  122. public final class AccordiServizioParteSpecificaChange extends Action {
  123.    
  124.     @Override
  125.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

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

  127.         // Inizializzo PageData
  128.         PageData pd = new PageData();

  129.         GeneralHelper generalHelper = new GeneralHelper(session);

  130.         // Inizializzo GeneralData
  131.         GeneralData gd = generalHelper.initGeneralData(request);

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

  133.         IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  134.        
  135.         AccordiServizioParteSpecificaChangeStrutsBean strutsBean = new AccordiServizioParteSpecificaChangeStrutsBean();
  136.        
  137.         // Parametri Protocol Properties relativi al tipo di operazione e al tipo di visualizzazione
  138.         strutsBean.consoleOperationType = ConsoleOperationType.CHANGE;
  139.        
  140.         // Parametri relativi al tipo operazione
  141.         TipoOperazione tipoOp = TipoOperazione.CHANGE;
  142.         List<ProtocolProperty> oldProtocolPropertyList = null;

  143.         try {
  144.            
  145.             AccordiServizioParteSpecificaHelper apsHelper = new AccordiServizioParteSpecificaHelper(request, pd, session);
  146.            
  147.             String tipoProtocollo = apsHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_PROTOCOLLO);
  148.            
  149.             strutsBean.editMode = apsHelper.getParameter(Costanti.DATA_ELEMENT_EDIT_MODE_NAME);
  150.             strutsBean.protocolPropertiesSet = apsHelper.getParameter(ProtocolPropertiesCostanti.PARAMETRO_PP_SET);
  151.             String id = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID);
  152.             String nomeservizio = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SERVIZIO);
  153.             String tiposervizio = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SERVIZIO);
  154.             String accordo = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ACCORDO);
  155.             String servcorr = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_SERVIZIO_CORRELATO);
  156.            
  157.             String endpointtype = apsHelper.readEndPointType();
  158.             String tipoconn = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_TIPO_PERSONALIZZATO );
  159.             String autenticazioneHttp = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_ENDPOINT_TYPE_ENABLE_HTTP);
  160.             String user = null;
  161.             String password = null;
  162.            
  163.             String connettoreDebug = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_DEBUG);    
  164.            
  165.             String tipoSoggettoFruitore = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SOGGETTO_FRUITORE);
  166.             String nomeSoggettoFruitore = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SOGGETTO_FRUITORE);
  167.             IDSoggetto idSoggettoFruitore = null;
  168.             if(tipoSoggettoFruitore!=null && !"".equals(tipoSoggettoFruitore) &&
  169.                     nomeSoggettoFruitore!=null && !"".equals(nomeSoggettoFruitore)) {
  170.                 idSoggettoFruitore = new IDSoggetto(tipoSoggettoFruitore, nomeSoggettoFruitore);
  171.             }
  172.            
  173.             // token policy
  174.             String autenticazioneTokenS = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_TOKEN_POLICY_STATO);
  175.             boolean autenticazioneToken = ServletUtils.isCheckBoxEnabled(autenticazioneTokenS);
  176.             String tokenPolicy = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_TOKEN_POLICY);
  177.             boolean forcePDND = false;
  178.             boolean forceOAuth = false;
  179.            
  180.             // proxy
  181.             String proxyEnabled = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_PROXY_ENABLED);
  182.             String proxyHostname = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_PROXY_HOSTNAME);
  183.             String proxyPort = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_PROXY_PORT);
  184.             String proxyUsername = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_PROXY_USERNAME);
  185.             String proxyPassword = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_PROXY_PASSWORD);
  186.            
  187.             // tempi risposta
  188.             String tempiRispostaEnabled = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_TEMPI_RISPOSTA_REDEFINE);
  189.             String tempiRispostaConnectionTimeout = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_TEMPI_RISPOSTA_CONNECTION_TIMEOUT);
  190.             String tempiRispostaReadTimeout = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_TEMPI_RISPOSTA_READ_TIMEOUT);
  191.             String tempiRispostaTempoMedioRisposta = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_TEMPI_RISPOSTA_TEMPO_MEDIO_RISPOSTA);
  192.            
  193.             // opzioni avanzate
  194.             String transferMode = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_OPZIONI_AVANZATE_TRANSFER_MODE);
  195.             String transferModeChunkSize = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_OPZIONI_AVANZATE_TRANSFER_CHUNK_SIZE);
  196.             String redirectMode = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_OPZIONI_AVANZATE_REDIRECT_MODE);
  197.             String redirectMaxHop = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_OPZIONI_AVANZATE_REDIRECT_MAX_HOP);
  198.             String opzioniAvanzate = ConnettoriHelper.getOpzioniAvanzate(apsHelper, transferMode, redirectMode);
  199.            
  200.             // http
  201.             String url = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_URL  );
  202.             if(TipiConnettore.HTTP.toString().equals(endpointtype)){
  203.                 user = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_INVOCAZIONE_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  204.                 password = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_INVOCAZIONE_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  205.             }
  206.            
  207.             // api key
  208.             String autenticazioneApiKey = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_ENDPOINT_TYPE_ENABLE_API_KEY);
  209.             String apiKeyHeader = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_API_KEY_HEADER);
  210.             if(apiKeyHeader==null || StringUtils.isEmpty(apiKeyHeader)) {
  211.                 apiKeyHeader = CostantiConnettori.DEFAULT_HEADER_API_KEY;
  212.             }
  213.             String apiKeyValue = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_API_KEY_VALUE);
  214.             String appIdHeader = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_API_KEY_APP_ID_HEADER);
  215.             if(appIdHeader==null || StringUtils.isEmpty(appIdHeader)) {
  216.                 appIdHeader = CostantiConnettori.DEFAULT_HEADER_APP_ID;
  217.             }
  218.             String appIdValue = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_API_KEY_APP_ID_VALUE);
  219.             String useOAS3NamesTmp = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_API_KEY_NOMI_OAS);
  220.             boolean useOAS3Names=true;
  221.             if(useOAS3NamesTmp!=null && StringUtils.isNotEmpty(useOAS3NamesTmp)) {
  222.                 useOAS3Names = ServletUtils.isCheckBoxEnabled(useOAS3NamesTmp);
  223.             }
  224.             else {
  225.                 useOAS3Names = apsHelper.isAutenticazioneApiKeyUseOAS3Names(apiKeyHeader, appIdHeader);
  226.             }
  227.             String useAppIdTmp = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_API_KEY_USE_APP_ID);
  228.             boolean useAppId=false;
  229.             if(useAppIdTmp!=null && StringUtils.isNotEmpty(useAppIdTmp)) {
  230.                 useAppId = ServletUtils.isCheckBoxEnabled(useAppIdTmp);
  231.             }
  232.             else {
  233.                 useAppId = apsHelper.isAutenticazioneApiKeyUseAppId(appIdValue);
  234.             }
  235.            
  236.             // jms
  237.             String nome = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_NOME_CODA);
  238.             String tipo = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_TIPO_CODA);
  239.             String initcont = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_INIT_CTX);
  240.             String urlpgk = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_URL_PKG);
  241.             String provurl = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_PROVIDER_URL);
  242.             String connfact = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_CONNECTION_FACTORY);
  243.             String sendas = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_TIPO_OGGETTO_JMS);
  244.             if(TipiConnettore.JMS.toString().equals(endpointtype)){
  245.                 user = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_USERNAME);
  246.                 password = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_JMS_PASSWORD);
  247.             }
  248.            
  249.             // https
  250.             String httpsurl = url;
  251.             String httpstipologia = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_SSL_TYPE );
  252.             String httpshostverifyS = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_HOST_VERIFY);
  253.             boolean httpshostverify = false;
  254.             if (httpshostverifyS != null && httpshostverifyS.equals(Costanti.CHECK_BOX_ENABLED))
  255.                 httpshostverify = true;
  256.             String httpsTrustVerifyCertS = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_TRUST_VERIFY_CERTS );
  257.             boolean httpsTrustVerifyCert = ServletUtils.isCheckBoxEnabled(httpsTrustVerifyCertS);
  258.             String httpspath = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_TRUST_STORE_LOCATION );
  259.             String httpstipo = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_TRUST_STORE_TYPE);
  260.             String httpspwd = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_TRUST_STORE_PASSWORD);
  261.             String httpsalgoritmo = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_TRUST_MANAGEMENT_ALGORITM);
  262.             String httpsstatoS = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_STATO);
  263.             boolean httpsstato = false;
  264.             if (httpsstatoS != null && httpsstatoS.equals(Costanti.CHECK_BOX_ENABLED))
  265.                 httpsstato = true;
  266.             String httpskeystore = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE);
  267.             String httpspwdprivatekeytrust = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_PASSWORD_PRIVATE_KEY_STORE);
  268.             String httpspathkey = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_KEY_STORE_LOCATION);
  269.             String httpstipokey = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_KEY_STORE_TYPE);
  270.             String httpspwdkey = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_KEY_STORE_PASSWORD);
  271.             String httpspwdprivatekey = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_PASSWORD_PRIVATE_KEY_KEYSTORE);
  272.             String httpsalgoritmokey = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_KEY_MANAGEMENT_ALGORITM);
  273.             String httpsKeyAlias = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_ALIAS_PRIVATE_KEY_KEYSTORE);
  274.             String httpsTrustStoreCRLs = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_TRUST_STORE_CRL);
  275.             String httpsTrustStoreOCSPPolicy = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_TRUST_STORE_OCSP_POLICY);
  276.             String httpsKeyStoreBYOKPolicy = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_KEY_STORE_BYOK_POLICY);
  277.             if(TipiConnettore.HTTPS.toString().equals(endpointtype)){
  278.                 user = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_INVOCAZIONE_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  279.                 password = apsHelper.getLockedParameter(ConnettoriCostanti.PARAMETRO_INVOCAZIONE_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  280.             }
  281.            
  282.             // file
  283.             String requestOutputFileName = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_REQUEST_OUTPUT_FILE_NAME);
  284.             String requestOutputFileNamePermissions = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_REQUEST_OUTPUT_FILE_NAME_PERMISSIONS);
  285.             String requestOutputFileNameHeaders = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_REQUEST_OUTPUT_FILE_NAME_HEADERS);
  286.             String requestOutputFileNameHeadersPermissions = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_REQUEST_OUTPUT_FILE_NAME_HEADERS_PERMISSIONS);
  287.             String requestOutputParentDirCreateIfNotExists = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_REQUEST_OUTPUT_AUTO_CREATE_DIR);
  288.             String requestOutputOverwriteIfExists = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_REQUEST_OUTPUT_OVERWRITE_FILE_NAME);
  289.             String responseInputMode = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_RESPONSE_INPUT_MODE);
  290.             String responseInputFileName = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_RESPONSE_INPUT_FILE_NAME);
  291.             String responseInputFileNameHeaders = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_RESPONSE_INPUT_FILE_NAME_HEADERS);
  292.             String responseInputDeleteAfterRead = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_RESPONSE_INPUT_FILE_NAME_DELETE_AFTER_READ);
  293.             String responseInputWaitTime = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_RESPONSE_INPUT_WAIT_TIME);
  294.            
  295.             //status
  296.             ConnettoreStatusParams connettoreStatusParams = ConnettoreStatusParams.fillFrom(apsHelper);
  297.            
  298.             String profilo = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_PROFILO);

  299.            
  300.             String priv = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_PRIVATO);
  301.             Boolean privato = ServletUtils.isCheckBoxEnabled(priv);
  302.            
  303.             String portType = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_PORT_TYPE);
  304.             String descrizione = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_DESCRIZIONE);
  305.             String statoPackage = apsHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_HTTPS_STATO_PACKAGE);
  306.            
  307.             String versione = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_VERSIONE);
  308.            
  309.             String backToStato = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_RIPRISTINA_STATO);
  310.             String backToConfermaModificaDatiServizio = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_CONFERMA_MODIFICA_DATI_SERVIZIO);
  311.             String actionConfirm = apsHelper.getParameter(Costanti.PARAMETRO_ACTION_CONFIRM);

  312.             String tmpModificaAPI = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_MODIFICA_API);
  313.             /**boolean modificaAPI = false;
  314.             if(tmpModificaAPI!=null) {
  315.                 modificaAPI = "true".equals(tmpModificaAPI);
  316.             }*/
  317.            
  318.             String tmpModificaProfilo = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_MODIFICA_PROFILO);
  319.             boolean modificaProfilo = false;
  320.             if(tmpModificaProfilo!=null) {
  321.                 modificaProfilo = "true".equals(tmpModificaProfilo);
  322.             }
  323.            
  324.             String tmpCambiaAPI = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_CAMBIA_API);
  325.             boolean cambiaAPI = false;
  326.             if(tmpCambiaAPI!=null) {
  327.                 cambiaAPI = "true".equals(tmpCambiaAPI);
  328.             }
  329.            
  330.             String tmpModificaDescrizione = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_MODIFICA_DESCRIZIONE);
  331.             boolean modificaDescrizione = false;
  332.             if(tmpModificaDescrizione!=null) {
  333.                 modificaDescrizione = "true".equals(tmpModificaDescrizione);
  334.             }
  335.             String descrizioneModificata = null;
  336.             if(modificaDescrizione) {
  337.                 descrizioneModificata = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_DESCRIZIONE_MODIFICA);
  338.             }
  339.            
  340.             String tmpCambiaSoggettoErogatore = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_CAMBIA_SOGGETTO_EROGATORE);
  341.             boolean cambiaErogatore = false;
  342.             if(tmpCambiaSoggettoErogatore!=null) {
  343.                 cambiaErogatore = "true".equals(tmpCambiaSoggettoErogatore);
  344.             }
  345.            
  346.             boolean addPropertiesHidden = false;
  347.             if(!apsHelper.isModalitaCompleta() && !modificaProfilo) {
  348.                 addPropertiesHidden = true;
  349.             }
  350.            
  351.             boolean validazioneDocumenti = true;
  352.             String tmpValidazioneDocumenti = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_VALIDAZIONE_DOCUMENTI);
  353.             if(ServletUtils.isEditModeInProgress(strutsBean.editMode)){
  354.                 // primo accesso alla servlet
  355.                 if(tmpValidazioneDocumenti!=null){
  356.                     if(Costanti.CHECK_BOX_ENABLED_TRUE.equalsIgnoreCase(tmpValidazioneDocumenti) || Costanti.CHECK_BOX_ENABLED.equalsIgnoreCase(tmpValidazioneDocumenti)){
  357.                         validazioneDocumenti = true;
  358.                     }
  359.                     else if("false".equalsIgnoreCase(tmpValidazioneDocumenti) || Costanti.CHECK_BOX_DISABLED.equalsIgnoreCase(tmpValidazioneDocumenti)){
  360.                         validazioneDocumenti = false;
  361.                     }
  362.                 }else{
  363.                     validazioneDocumenti = true;
  364.                 }
  365.             }else{
  366.                 if(Costanti.CHECK_BOX_ENABLED_TRUE.equalsIgnoreCase(tmpValidazioneDocumenti) || Costanti.CHECK_BOX_ENABLED.equalsIgnoreCase(tmpValidazioneDocumenti)){
  367.                     validazioneDocumenti = true;
  368.                 }
  369.                 else{
  370.                     validazioneDocumenti = false;
  371.                 }
  372.             }
  373.            
  374.             String erogazioneServizioApplicativoServerEnabledS = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ABILITA_USO_APPLICATIVO_SERVER);
  375.             boolean erogazioneServizioApplicativoServerEnabled = ServletUtils.isCheckBoxEnabled(erogazioneServizioApplicativoServerEnabledS);
  376.             String erogazioneServizioApplicativoServer = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID_APPLICATIVO_SERVER);
  377.            
  378.             String canale = apsHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CANALI_CANALE);
  379.             String canaleStato = apsHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_CANALI_CANALE_STATO);
  380.            
  381.             boolean postBackViaPost = true;
  382.            
  383.             // Preparo il menu
  384.             apsHelper.makeMenu();

  385.             String[] ptList = null;
  386.             // Prendo nome, tipo e provider dal db
  387.             // Prendo la lista di soggetti e la metto in un array
  388.             // Prendo la lista di accordi e la metto in un array

  389.             String provider = "";
  390.             String[] soggettiList = null;
  391.             String[] soggettiListLabel = null;
  392.             String[] accordiList = null;
  393.             String[] accordiListLabel = null;
  394.             AccordiServizioParteSpecificaCore apsCore = null;
  395.             SoggettiCore soggettiCore = null;
  396.             AccordiServizioParteComuneCore apcCore = null;
  397.             PorteApplicativeCore porteApplicativeCore = null;
  398.             PorteDelegateCore porteDelegateCore = null;
  399.             String nomeSoggettoErogatore = "";
  400.             String tipoSoggettoErogatore = "";
  401.             AccordoServizioParteSpecifica asps = null;

  402.             String oldversioneaccordo = null;
  403.             String oldtiposervizio = null;
  404.             String oldnomeservizio = null;
  405.             String oldtiposoggetto = null;
  406.             String oldnomesoggetto = null;
  407.             String oldStatoPackage = null;

  408.             boolean accordoPrivato = false;
  409.             String uriAccordo = null;

  410.             Soggetto soggettoErogatoreID = null;
  411.             List<String> versioniProtocollo = null;
  412.             List<String> tipiSoggettiCompatibiliAccordo = null;
  413.             List<String> tipiServizioCompatibiliAccordo = null;

  414.             apsCore = new AccordiServizioParteSpecificaCore();
  415.             soggettiCore = new SoggettiCore(apsCore);
  416.             apcCore = new AccordiServizioParteComuneCore(apsCore);
  417.             porteApplicativeCore = new PorteApplicativeCore(apsCore);
  418.             porteDelegateCore = new PorteDelegateCore(apsCore);
  419.             PddCore pddCore = new PddCore(apsCore);
  420.             ServiziApplicativiCore saCore = new ServiziApplicativiCore(apsCore);
  421.             ConfigurazioneCore confCore = new ConfigurazioneCore(apsCore);
  422.            
  423.             // carico i canali
  424.             CanaliConfigurazione gestioneCanali = confCore.getCanaliConfigurazione(false);
  425.             List<CanaleConfigurazione> canaleList = gestioneCanali != null ? gestioneCanali.getCanaleList() : new ArrayList<>();
  426.             boolean gestioneCanaliEnabled = gestioneCanali != null && org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(gestioneCanali.getStato());
  427.            
  428.             String tipologia = ServletUtils.getObjectFromSession(request, session, String.class, AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE);
  429.             boolean gestioneFruitori = false;
  430.             boolean gestioneErogatori = false;
  431.             if(tipologia!=null) {
  432.                 if(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_FRUIZIONE.equals(tipologia)) {
  433.                     gestioneFruitori = true;
  434.                 }
  435.                 else if(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_EROGAZIONE.equals(tipologia)) {
  436.                     gestioneErogatori = true;
  437.                 }
  438.             }
  439.            
  440.             boolean isApplicativiServerEnabled = apsCore.isApplicativiServerEnabled(apsHelper);
  441.            
  442.             // La lista degli SA viene filtrata per tipo se sono abilitati gli applicativiServer.
  443.             String tipoSA = (isApplicativiServerEnabled && gestioneErogatori) ? ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER : null;
  444.            
  445.             PermessiUtente pu = ServletUtils.getUserFromSession(request, session).getPermessi();

  446.             boolean soggettoOperativo = true;
  447.             boolean generaPACheckSoggetto = true;
  448.             boolean [] permessi = new boolean[2];
  449.             permessi[0] = pu.isServizi();
  450.             permessi[1] = pu.isAccordiCooperazione();
  451.            
  452.             // Servizio
  453.             asps = apsCore.getAccordoServizioParteSpecifica(Long.parseLong(id));
  454.             if(tipoProtocollo==null) {
  455.                 tipoProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(asps.getTipoSoggettoErogatore());
  456.             }
  457.            
  458.             if(cambiaAPI) {
  459.                
  460.                 List<IDAccordoDB> listaIdAPI = AccordiServizioParteSpecificaUtilities.getListaIdAPI(tipoProtocollo, userLogin, apsCore, apsHelper);
  461.            
  462.                 IDAccordo oldIDAccodo = idAccordoFactory.getIDAccordoFromUri(asps.getAccordoServizioParteComune());
  463.                 IDAccordoDB attuale = null;
  464.                 if (!listaIdAPI.isEmpty()) {
  465.                     int i = 0;
  466.                     int remove = -1;
  467.                     for (IDAccordo oldIDAccodoCheck : listaIdAPI) {
  468.                         if(oldIDAccodoCheck.equals(oldIDAccodo)) {
  469.                             remove = i;
  470.                             break;
  471.                         }
  472.                         i++;
  473.                     }
  474.                     if(remove>=0) {
  475.                         attuale = listaIdAPI.remove(remove);
  476.                     }
  477.                 }
  478.                
  479.                 if(attuale!=null) {
  480.                     accordiList = new String[listaIdAPI.size()+1];
  481.                     accordiListLabel = new String[listaIdAPI.size()+1];
  482.                     accordiList[0] = attuale.getId().toString();
  483.                     accordiListLabel[0] = apsHelper.getLabelIdAccordo(tipoProtocollo, attuale); // Attuale alla posizione 0
  484.                    
  485.                     if (!listaIdAPI.isEmpty()) {
  486.                         int i = 1;
  487.                         for (IDAccordoDB as : listaIdAPI) {
  488.                             accordiList[i] = as.getId().toString();
  489.                             accordiListLabel[i] = apsHelper.getLabelIdAccordo(tipoProtocollo, as);
  490.                             i++;
  491.                         }
  492.                     }
  493.                 }
  494.                
  495.             }
  496.             else {
  497.                                
  498.                 boolean soloAccordiConsistentiRest = false;
  499.                 boolean soloAccordiConsistentiSoap = false;
  500.                 if(!apsHelper.isModalitaCompleta()) {
  501.                     // filtro accordi senza risorse o senza pt/operation
  502.                     soloAccordiConsistentiRest = true;
  503.                     soloAccordiConsistentiSoap = true;
  504.                 }
  505.                
  506.                 List<IDAccordoDB> lista =  
  507.                         AccordiServizioParteComuneUtilities.idAccordiListFromPermessiUtente(apcCore, userLogin, new ConsoleSearch(true), permessi,
  508.                                 soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  509.                
  510.                 if (!lista.isEmpty()) {
  511.                     accordiList = new String[lista.size()];
  512.                     accordiListLabel = new String[lista.size()];
  513.                     int i = 0;
  514.                     for (IDAccordoDB as : lista) {
  515.                         accordiList[i] = as.getId().toString();
  516.                         IDSoggetto soggettoReferente = null;
  517.                         long idReferente = -1;
  518.                         if(as.getSoggettoReferenteDB()!=null && as.getSoggettoReferenteDB().getId()!=null)
  519.                             idReferente = as.getSoggettoReferenteDB().getId();
  520.    
  521.                         if(idReferente>0){
  522.                             soggettoReferente = new IDSoggetto();
  523.                             soggettoReferente.setTipo(as.getSoggettoReferente().getTipo());
  524.                             soggettoReferente.setNome(as.getSoggettoReferente().getNome());
  525.                         }
  526.                         accordiListLabel[i] = idAccordoFactory.getUriFromValues(as.getNome(),soggettoReferente,as.getVersione());
  527.                         i++;
  528.                     }
  529.                 }
  530.                
  531.             }
  532.            
  533.             String providerSoggettoFruitore = null;
  534.             Fruitore fruitore = null;
  535.             if(gestioneFruitori) {
  536.                 // In questa modalità ci deve essere solo un fruitore
  537.                 // In questa modalità ci deve essere un fruitore indirizzato
  538.                 for (Fruitore check : asps.getFruitoreList()) {
  539.                     if(check.getTipo().equals(idSoggettoFruitore.getTipo()) && check.getNome().equals(idSoggettoFruitore.getNome())) {
  540.                         fruitore = check;
  541.                         break;
  542.                     }
  543.                 }
  544.                 if(fruitore==null) {
  545.                     throw new CoreException("Fruitore '"+idSoggettoFruitore.getTipo()+"/"+idSoggettoFruitore.getNome()+"' non trovato");
  546.                 }
  547.                 providerSoggettoFruitore = fruitore.getId()+"";
  548.             }
  549.            
  550.             String tmpTitle = apsHelper.getLabelIdServizio(asps);
  551.             if(gestioneFruitori) {
  552.                 tmpTitle = apsHelper.getLabelServizioFruizione(tipoProtocollo, idSoggettoFruitore, asps);
  553.             }
  554.             else if(gestioneErogatori) {
  555.                 tmpTitle = apsHelper.getLabelServizioErogazione(tipoProtocollo, asps);
  556.             }
  557.            
  558.             Boolean isConnettoreCustomUltimaImmagineSalvata = asps.getConfigurazioneServizio()!=null &&
  559.                     asps.getConfigurazioneServizio().getConnettore()!=null &&
  560.                     asps.getConfigurazioneServizio().getConnettore().getCustom();
  561.            
  562.             List<ExtendedConnettore> listExtendedConnettore =
  563.                     ServletExtendedConnettoreUtils.getExtendedConnettore(asps.getConfigurazioneServizio().getConnettore(), ConnettoreServletType.ACCORDO_SERVIZIO_PARTE_SPECIFICA_CHANGE, apsHelper,
  564.                             (endpointtype==null), endpointtype); // uso endpointtype per capire se è la prima volta che entro
  565.            
  566.             // Lista port-type associati all'accordo di servizio
  567.             // se l'accordo e' selezionato allora prendo quello selezionato
  568.             // altrimenti il primo
  569.             // della lista
  570.             AccordoServizioParteComuneSintetico as = null;
  571.             if (accordo != null && !"".equals(accordo)) {
  572.                 as = apcCore.getAccordoServizioSintetico(Long.parseLong(accordo));
  573.                 if(as==null) {
  574.                     throw new CoreException("AccordoServizioParteComune con id '"+accordo+"' non trovato");
  575.                 }
  576.             } else {
  577.                 as = apcCore.getAccordoServizioSintetico(idAccordoFactory.getIDAccordoFromUri(asps.getAccordoServizioParteComune()));
  578.                 if(as==null) {
  579.                     throw new CoreException("AccordoServizioParteComune con id '"+asps.getAccordoServizioParteComune()+"' non trovato");
  580.                 }
  581.                 portType = asps.getPortType();
  582.             }
  583.            
  584.             String canaleAPI = as != null ? as.getCanale() : null;  
  585.        
  586.             ServiceBinding serviceBinding = apcCore.toMessageServiceBinding(as.getServiceBinding());
  587.             org.openspcoop2.protocol.manifest.constants.InterfaceType formatoSpecifica = apcCore.formatoSpecifica2InterfaceType(as.getFormatoSpecifica());

  588.             // Lista di Accordi Compatibili
  589.             List<AccordoServizioParteComune> asParteComuneCompatibili = null;
  590.             try{
  591.                 asParteComuneCompatibili = apsCore.findAccordiParteComuneBySoggettoAndNome(as.getNome(),
  592.                         new IDSoggetto(as.getSoggettoReferente().getTipo(), as.getSoggettoReferente().getNome()));
  593.             }catch(Exception e){
  594.                 ControlStationCore.logError("Errore durante la ricerca degli accordi parte comune compatibili", e);
  595.             }
  596.            
  597.             // Versione
  598.             versioniProtocollo = apsCore.getVersioniProtocollo(tipoProtocollo);
  599.             tipiSoggettiCompatibiliAccordo = soggettiCore.getTipiSoggettiGestitiProtocollo(tipoProtocollo);
  600.             tipiServizioCompatibiliAccordo = apsCore.getTipiServiziGestitiProtocollo(tipoProtocollo,serviceBinding);

  601.             // verifico implementazioni del servizio utilizzate nelle fruizioni e/o nelle erogazioni
  602.             boolean moreThenOneImplementation = false;
  603.             List<IDPortaDelegata> listMappingPD = new ArrayList<>();
  604.             List<IDPortaApplicativa> listMappingPA = new ArrayList<>();
  605.             if(
  606.                     (gestioneFruitori || gestioneErogatori)
  607.                     &&
  608.                     (
  609.                             (tmpModificaAPI!=null && !"".equals(tmpModificaAPI))
  610.                             ||
  611.                             cambiaAPI
  612.                             ||
  613.                             cambiaErogatore
  614.                     )
  615.                 ) {
  616.            
  617.                 IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(asps);
  618.                
  619.                 // Fruizioni
  620.                 for (Fruitore fruitoreCheck : asps.getFruitoreList()) {
  621.                     IDSoggetto idSoggettoFr = new IDSoggetto(fruitoreCheck.getTipo(), fruitoreCheck.getNome());
  622.                     Soggetto soggetto = soggettiCore.getSoggettoRegistro(idSoggettoFr);
  623.                     if(!pddCore.isPddEsterna(soggetto.getPortaDominio())){
  624.                         IDPortaDelegata idPD = porteDelegateCore.getIDPortaDelegataAssociataDefault(idServizio, idSoggettoFr);
  625.                         if(idPD!=null) {
  626.                             listMappingPD.add(idPD);
  627.                         }
  628.                     }  
  629.                 }
  630.                
  631.                 // Erogazioni
  632.                 IDPortaApplicativa idPA = porteApplicativeCore.getIDPortaApplicativaAssociataDefault(idServizio);
  633.                 if(idPA!=null) {
  634.                     listMappingPA.add(idPA);
  635.                 }
  636.                
  637.                 moreThenOneImplementation = (listMappingPD.size()+listMappingPA.size()) > 1;
  638.             }
  639.            
  640.             // calcolo soggetti compatibili con accordi
  641.             List<Soggetto> list = null;
  642.             String nuovoTipoSoggettoErogatore = null;
  643.             String nuovoNomeSoggettoErogatore = null;
  644.             if(cambiaErogatore) {
  645.                
  646.                 provider = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_PROVIDER_CAMBIO_EROGATORE);
  647.                
  648.                 ConsoleSearch searchSoggetti = new ConsoleSearch(true);
  649.                 searchSoggetti.addFilter(Liste.SOGGETTI, Filtri.FILTRO_PROTOCOLLO, tipoProtocollo);
  650.                 boolean gestioneFruitoriSoggettiErogatoriEscludiSoggettoFruitore = false;
  651.                 if(gestioneFruitori) {
  652.                     boolean filtraSoloEsterni = true;
  653.                     if(apsCore.isMultitenant() && apsCore.getMultitenantSoggettiFruizioni()!=null) {
  654.                         switch (apsCore.getMultitenantSoggettiFruizioni()) {
  655.                         case SOLO_SOGGETTI_ESTERNI:
  656.                             filtraSoloEsterni = true;
  657.                             break;
  658.                         case ESCLUDI_SOGGETTO_FRUITORE:
  659.                             filtraSoloEsterni = false;
  660.                             gestioneFruitoriSoggettiErogatoriEscludiSoggettoFruitore = true;
  661.                             break;
  662.                         case TUTTI:
  663.                             filtraSoloEsterni = false;
  664.                             break;
  665.                         }
  666.                     }
  667.                     if(filtraSoloEsterni) {
  668.                         searchSoggetti.addFilter(Liste.SOGGETTI, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE);
  669.                     }
  670.                 }
  671.                 if(gestioneErogatori) {
  672.                     searchSoggetti.addFilter(Liste.SOGGETTI, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE);
  673.                 }
  674.                
  675.                 if(apsCore.isVisioneOggettiGlobale(userLogin)){
  676.                     list = soggettiCore.soggettiRegistroList(null, searchSoggetti);
  677.                 }else{
  678.                     list = soggettiCore.soggettiRegistroList(userLogin, searchSoggetti);
  679.                 }
  680.                
  681.                 if(gestioneFruitoriSoggettiErogatoriEscludiSoggettoFruitore && list!=null && !list.isEmpty()) {
  682.                     for (int i = 0; i < list.size(); i++) {
  683.                         Soggetto soggettoCheck = list.get(i);
  684.                         if(soggettoCheck.getTipo().equals(tipoSoggettoFruitore) && soggettoCheck.getNome().equals(nomeSoggettoFruitore)) {
  685.                             list.remove(i);
  686.                             break;
  687.                         }
  688.                     }
  689.                 }
  690.                 if(list!=null && !list.isEmpty()) {
  691.                     long idErogatore = asps.getIdSoggetto();
  692.                     for (int i = 0; i < list.size(); i++) {
  693.                         Soggetto soggettoCheck = list.get(i);
  694.                         if(idErogatore == soggettoCheck.getId().longValue()) {
  695.                             list.remove(i);
  696.                             break;
  697.                         }
  698.                     }
  699.                 }
  700.                 if(list == null || list.isEmpty()) {
  701.                     if(gestioneFruitori) {
  702.                         pd.setMessage("Non risultano registrati altri soggetti che possano erogare API", Costanti.MESSAGE_TYPE_INFO);
  703.                     }
  704.                     else {
  705.                         pd.setMessage("Non risultano registrati altri soggetti", Costanti.MESSAGE_TYPE_INFO);
  706.                     }
  707.                    
  708.                     pd.disableEditMode();

  709.                     List<DataElement> dati = new ArrayList<>();

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

  711.                     pd.setDati(dati);

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

  713.                     return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,
  714.                             ForwardParams.CHANGE());
  715.                 }
  716.             }
  717.             else {
  718.                 if(apsCore.isVisioneOggettiGlobale(userLogin)){
  719.                     list = soggettiCore.soggettiRegistroList(null, new ConsoleSearch(true));
  720.                 }else{
  721.                     list = soggettiCore.soggettiRegistroList(userLogin, new ConsoleSearch(true));
  722.                 }
  723.             }
  724.            
  725.             if (list!=null && !list.isEmpty()) {
  726.                 List<String> soggettiListTmp = new ArrayList<>();
  727.                 List<String> soggettiListLabelTmp = new ArrayList<>();
  728.                 if(cambiaErogatore) {
  729.                     soggettiListTmp.add("");
  730.                     soggettiListLabelTmp.add("-");
  731.                 }
  732.                 for (Soggetto soggetto : list) {
  733.                     if(tipiSoggettiCompatibiliAccordo.contains(soggetto.getTipo())){
  734.                         String idS = soggetto.getId().toString();
  735.                         soggettiListTmp.add(idS);
  736.                         soggettiListLabelTmp.add(apsHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome()));
  737.                         if(cambiaErogatore && provider!=null && !"".equals(provider) && idS.equals(provider)) {
  738.                             nuovoTipoSoggettoErogatore = soggetto.getTipo();
  739.                             nuovoNomeSoggettoErogatore = soggetto.getNome();
  740.                         }
  741.                     }
  742.                 }
  743.                 soggettiList = soggettiListTmp.toArray(new String[1]);
  744.                 soggettiListLabel = soggettiListLabelTmp.toArray(new String[1]);
  745.             }

  746.             nomeSoggettoErogatore = asps.getNomeSoggettoErogatore();
  747.             tipoSoggettoErogatore = asps.getTipoSoggettoErogatore();
  748.             if(cambiaErogatore && nuovoNomeSoggettoErogatore!=null && nuovoTipoSoggettoErogatore!=null) {
  749.                 nomeSoggettoErogatore = nuovoNomeSoggettoErogatore;
  750.                 tipoSoggettoErogatore = nuovoTipoSoggettoErogatore;
  751.             }

  752.             if(asps.getVersione()!=null)
  753.                 oldversioneaccordo = asps.getVersione()+"";
  754.             oldtiposervizio = asps.getTipo();
  755.             oldnomeservizio = asps.getNome();
  756.             oldtiposoggetto = asps.getTipoSoggettoErogatore();
  757.             oldnomesoggetto = asps.getNomeSoggettoErogatore();
  758.             oldStatoPackage = asps.getStatoPackage();      

  759.             // aggiorno tmpTitle
  760.             @SuppressWarnings("unused")
  761.             String tmpVersione = IDServizioFactory.getInstance().getUriFromAccordo(asps);

  762.             soggettoErogatoreID = soggettiCore.getSoggettoRegistro(new IDSoggetto(tipoSoggettoErogatore,nomeSoggettoErogatore));

  763.             if(versione == null)
  764.                 versione = oldversioneaccordo;

  765.             if(as!=null){
  766.                 accordoPrivato = as.getPrivato()!=null && as.getPrivato();
  767.                 uriAccordo = idAccordoFactory.getUriFromAccordo(as);

  768.                 if( apsCore.isShowCorrelazioneAsincronaInAccordi() &&
  769.                     portType != null && !"".equals(portType) && !"-".equals(portType)){
  770.                     PortTypeSintetico pt = null;
  771.                     for(int i=0; i<as.getPortType().size(); i++){
  772.                         if(portType.equals(as.getPortType().get(i).getNome())){
  773.                             pt = as.getPortType().get(i);
  774.                             break;
  775.                         }
  776.                     }
  777.                     boolean servizioCorrelato = false;
  778.                     if(pt!=null){
  779.                         for(int i=0; i<pt.getAzione().size(); i++){
  780.                             OperationSintetica op = pt.getAzione().get(i);
  781.                             if(op.getCorrelataServizio()!=null && !pt.getNome().equals(op.getCorrelataServizio()) && op.getCorrelata()!=null){
  782.                                 servizioCorrelato = true;
  783.                                 break;
  784.                             }
  785.                         }
  786.                     }
  787.                     if(servizioCorrelato){
  788.                         servcorr=Costanti.CHECK_BOX_ENABLED;
  789.                     }
  790.                     else{
  791.                         servcorr=Costanti.CHECK_BOX_DISABLED;
  792.                     }                          
  793.                 }
  794.             }

  795.             List<PortType> portTypesTmp = apcCore.accordiPorttypeList(as.getId().intValue(), new ConsoleSearch(true));
  796.             List<PortType> portTypes = null;
  797.            
  798.             if(apsHelper.isModalitaCompleta()) {
  799.                 portTypes = portTypesTmp;
  800.             }
  801.             else {
  802.                 // filtro pt senza op
  803.                 portTypes = new ArrayList<>();
  804.                 for (PortType portTypeCheck : portTypesTmp) {
  805.                     if(portTypeCheck.sizeAzioneList()>0) {
  806.                         portTypes.add(portTypeCheck);
  807.                     }
  808.                 }
  809.             }
  810.            
  811.            
  812.             if (!portTypes.isEmpty()) {
  813.                 ptList = new String[portTypes.size() + 1];
  814.                 ptList[0] = "-";
  815.                 int i = 1;
  816.                 for (Iterator<PortType> iterator = portTypes.iterator(); iterator.hasNext();) {
  817.                     PortType portType2 = iterator.next();
  818.                     ptList[i] = portType2.getNome();
  819.                     i++;
  820.                 }
  821.             }
  822.            
  823.             // Lista dei servizi applicativi per la creazione automatica
  824.             List<IDServizioApplicativoDB> listaIdSA = null;
  825.             if (gestioneErogatori && (provider != null) && !provider.equals("") && !cambiaErogatore) {
  826.                 long idErogatore = Long.parseLong(provider);
  827.                
  828.                 // I servizi applicativi da visualizzare sono quelli che hanno
  829.                 // -Integration Manager (getMessage abilitato)
  830.                 // -connettore != disabilitato
  831.                 listaIdSA = saCore.getIdServiziApplicativiWithIdErogatore(idErogatore, tipoSA, true, true);

  832.                 List<IDServizioApplicativoDB> newListaIdSA = new ArrayList<>();
  833.                 IDServizioApplicativoDB idSA = new IDServizioApplicativoDB();
  834.                 idSA.setNome("-"); // elemento nullo di default
  835.                 idSA.setIdSoggettoProprietario(new IDSoggetto("-", "-"));
  836.                 newListaIdSA.add(idSA);
  837.                 if(listaIdSA!=null && !listaIdSA.isEmpty()) {
  838.                     newListaIdSA.addAll(listaIdSA);
  839.                 }
  840.                 listaIdSA = newListaIdSA;
  841.             }
  842.             String [] saSoggetti = ServiziApplicativiHelper.toArray(listaIdSA);
  843.            

  844.             //se passo dal link diretto di ripristino stato (e poi con conferma == ok) imposto il nuovo stato
  845.             if(backToStato != null && (actionConfirm == null || actionConfirm.equals(Costanti.PARAMETRO_ACTION_CONFIRM_VALUE_OK)))
  846.                 statoPackage = backToStato;
  847.            
  848.            
  849.             strutsBean.protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(tipoProtocollo);
  850.             strutsBean.consoleDynamicConfiguration =  strutsBean.protocolFactory.createDynamicConfigurationConsole();
  851.             strutsBean.registryReader = soggettiCore.getRegistryReader(strutsBean.protocolFactory);
  852.             strutsBean.configRegistryReader = soggettiCore.getConfigIntegrationReader(strutsBean.protocolFactory);
  853.             IDServizio oldIdAps = apsHelper.getIDServizioFromValues(oldtiposervizio, oldnomeservizio, oldtiposoggetto,oldnomesoggetto, oldversioneaccordo);
  854.             oldIdAps.setUriAccordoServizioParteComune(idAccordoFactory.getUriFromAccordo(as));
  855.             oldIdAps.setPortType((portType != null && !"".equals(portType) ? portType : asps.getPortType()));
  856.             strutsBean.consoleConfiguration = strutsBean.consoleDynamicConfiguration.getDynamicConfigAccordoServizioParteSpecifica(strutsBean.consoleOperationType, apsHelper,
  857.                     strutsBean.registryReader, strutsBean.configRegistryReader, oldIdAps );
  858.             strutsBean.protocolProperties = apsHelper.estraiProtocolPropertiesDaRequest(strutsBean.consoleConfiguration, strutsBean.consoleOperationType);

  859.             oldProtocolPropertyList = asps.getProtocolPropertyList();

  860.             if(strutsBean.protocolPropertiesSet == null){
  861.                 ProtocolPropertiesUtils.mergeProtocolPropertiesRegistry(strutsBean.protocolProperties, oldProtocolPropertyList, strutsBean.consoleOperationType);
  862.             }

  863.            
  864.             Properties propertiesProprietario = new Properties();
  865.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_ID_PROPRIETARIO, id);
  866.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO, ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO_VALUE_ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  867.             if(uriAccordo!=null) {
  868.                 propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_NOME_PROPRIETARIO, uriAccordo);
  869.             }
  870.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_URL_ORIGINALE_CHANGE, URLEncoder.encode( AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE + "?" + request.getQueryString(), "UTF-8"));
  871.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_PROTOCOLLO, tipoProtocollo);
  872.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_ACCORDO, "");
  873.            
  874.            
  875.            
  876.             // verifico versione change
  877.             String postBackElementName = apsHelper.getPostBackElementName();
  878.             boolean portTypeErased = false;
  879.             if(postBackElementName != null ){
  880.            
  881.                 if(postBackElementName.equalsIgnoreCase(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ACCORDO)){
  882.                    
  883.                     if(cambiaAPI) {
  884.                         portType = null;
  885.                         portTypeErased = true;
  886.                     }
  887.                    
  888.                     if(!cambiaAPI) {
  889.                         // ho modificato l'accordo (la versione)
  890.                         // verifico se la versione precedente della API era uguale alla versione attuale del servizio, modifico anche la versione del servizio se sono in standard.
  891.                         // se non esiste gia' una nuova versione del servizio
  892.                         IDAccordo oldIDAccodo = IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
  893.                         if(oldIDAccodo.getVersione().intValue() == asps.getVersione().intValue()) {
  894.                             String tmpNewVersion = as.getVersione().intValue()+"";
  895.                             IDServizio idApsCheck = apsHelper.getIDServizioFromValues(oldtiposervizio, oldnomeservizio, oldtiposoggetto,oldnomesoggetto, tmpNewVersion);
  896.                             if(!apsCore.existsAccordoServizioParteSpecifica(idApsCheck)) {
  897.                                 versione = tmpNewVersion;
  898.                             }
  899.                         }
  900.                     }
  901.                    
  902.                 }
  903.                
  904.                 backToConfermaModificaDatiServizio = null; // non ho ancora cliccato su salva configurazione
  905.             }
  906.                        
  907.             // setto la barra del titolo
  908.             List<Parameter> lstParm = apsHelper.getTitoloAps(TipoOperazione.CHANGE, asps, gestioneFruitori, tmpTitle, null, true, tipoSoggettoFruitore, nomeSoggettoFruitore);
  909.             Boolean vistaErogazioni = ServletUtils.getBooleanAttributeFromSession(ErogazioniCostanti.ASPS_EROGAZIONI_ATTRIBUTO_VISTA_EROGAZIONI, session, request).getValue();
  910.            
  911.             // Se idhid = null, devo visualizzare la pagina per la
  912.             // modifica dati
  913.             if (ServletUtils.isEditModeInProgress(strutsBean.editMode)) {
  914.                 // setto la barra del titolo
  915.                 ServletUtils.setPageDataTitle(pd, lstParm );

  916.                 if(nomeSoggettoErogatore==null) {
  917.                     nomeSoggettoErogatore = asps.getNomeSoggettoErogatore();
  918.                 }
  919.                 if(tipoSoggettoErogatore==null) {
  920.                     tipoSoggettoErogatore = asps.getTipoSoggettoErogatore();
  921.                 }
  922.                 if (servcorr == null) {
  923.                     if(TipologiaServizio.CORRELATO.equals(asps.getTipologiaServizio()))
  924.                         servcorr = Costanti.CHECK_BOX_ENABLED;
  925.                     else
  926.                         servcorr = Costanti.CHECK_BOX_DISABLED;
  927.                 }
  928.                 if (accordo == null)
  929.                     accordo = asps.getIdAccordo().toString();
  930.                 if (profilo == null)
  931.                     profilo = asps.getVersioneProtocollo();
  932.                 if (descrizione == null)
  933.                     descrizione = asps.getDescrizione();
  934.                 if(statoPackage==null)
  935.                     statoPackage = asps.getStatoPackage();

  936.                 if(modificaDescrizione &&
  937.                     (descrizioneModificata==null)
  938.                     ){
  939.                     descrizioneModificata = gestioneFruitori ? fruitore.getDescrizione() : asps.getDescrizione();
  940.                 }
  941.                
  942.                 if(versione==null &&
  943.                     asps.getVersione()!=null) {
  944.                     versione=asps.getVersione().intValue()+"";
  945.                 }

  946.                 if(tiposervizio==null){
  947.                     tiposervizio = asps.getTipo();
  948.                 }
  949.                 if(nomeservizio==null){
  950.                     nomeservizio = asps.getNome();
  951.                 }
  952.                
  953.                 // Controllo se il soggetto erogare appartiene ad una pdd di tipo operativo.
  954.                 IDSoggetto idSoggettoEr = new IDSoggetto( tipoSoggettoErogatore,  nomeSoggettoErogatore);
  955.                 Soggetto soggetto = soggettiCore.getSoggettoRegistro(idSoggettoEr );
  956.                 if(pddCore.isPddEsterna(soggetto.getPortaDominio())){
  957.                     soggettoOperativo = false;
  958.                     generaPACheckSoggetto = soggettoOperativo;
  959.                 }


  960.                 Connettore connettore = asps.getConfigurazioneServizio().getConnettore();

  961.                 if ((endpointtype == null) || (url == null) || (nome == null)) {
  962.                     Map<String, String> props = connettore.getProperties();

  963.                     if (endpointtype == null) {
  964.                         if ((connettore.getCustom()!=null && connettore.getCustom()) &&
  965.                                 !connettore.getTipo().equals(CostantiDB.CONNETTORE_TIPO_HTTPS) &&
  966.                                 !connettore.getTipo().equals(CostantiDB.CONNETTORE_TIPO_FILE) &&
  967.                                 !connettore.getTipo().equals(CostantiDB.CONNETTORE_TIPO_STATUS)) {
  968.                             endpointtype = ConnettoriCostanti.DEFAULT_CONNETTORE_TYPE_CUSTOM;
  969.                             tipoconn = connettore.getTipo();
  970.                         } else
  971.                             endpointtype = connettore.getTipo();
  972.                     }
  973.                    
  974.                     if(connettoreDebug==null && props!=null){
  975.                         String v = props.get(CostantiDB.CONNETTORE_DEBUG);
  976.                         if(v!=null){
  977.                             if("true".equals(v)){
  978.                                 connettoreDebug = Costanti.CHECK_BOX_ENABLED;
  979.                             }
  980.                             else{
  981.                                 connettoreDebug = Costanti.CHECK_BOX_DISABLED;
  982.                             }
  983.                         }
  984.                     }
  985.                    
  986.                     if(proxyEnabled==null && props!=null){
  987.                         String v = props.get(CostantiDB.CONNETTORE_PROXY_TYPE);
  988.                         if(v!=null && !"".equals(v)){
  989.                             proxyEnabled = Costanti.CHECK_BOX_ENABLED_TRUE;
  990.                            
  991.                             // raccolgo anche altre proprietà
  992.                             v = props.get(CostantiDB.CONNETTORE_PROXY_HOSTNAME);
  993.                             if(v!=null && !"".equals(v)){
  994.                                 proxyHostname = v.trim();
  995.                             }
  996.                             v = props.get(CostantiDB.CONNETTORE_PROXY_PORT);
  997.                             if(v!=null && !"".equals(v)){
  998.                                 proxyPort = v.trim();
  999.                             }
  1000.                             v = props.get(CostantiDB.CONNETTORE_PROXY_USERNAME);
  1001.                             if(v!=null && !"".equals(v)){
  1002.                                 proxyUsername = v.trim();
  1003.                             }
  1004.                             v = props.get(CostantiDB.CONNETTORE_PROXY_PASSWORD);
  1005.                             if(v!=null && !"".equals(v)){
  1006.                                 proxyPassword = v.trim();
  1007.                             }
  1008.                         }
  1009.                     }
  1010.                    
  1011.                     if(tempiRispostaEnabled == null ||
  1012.                             tempiRispostaConnectionTimeout==null || "".equals(tempiRispostaConnectionTimeout)
  1013.                             ||
  1014.                             tempiRispostaReadTimeout==null || "".equals(tempiRispostaReadTimeout)
  1015.                             ||
  1016.                             tempiRispostaTempoMedioRisposta==null || "".equals(tempiRispostaTempoMedioRisposta) ){
  1017.                        
  1018.                         ConfigurazioneCore configCore = new ConfigurazioneCore(soggettiCore);
  1019.                         ConfigurazioneGenerale configGenerale = configCore.getConfigurazioneControlloTraffico();
  1020.                        
  1021.                         if( props!=null ) {
  1022.                             if(tempiRispostaConnectionTimeout==null || "".equals(tempiRispostaConnectionTimeout) ) {
  1023.                                 String v = props.get(CostantiDB.CONNETTORE_CONNECTION_TIMEOUT);
  1024.                                 if(v!=null && !"".equals(v)){
  1025.                                     tempiRispostaConnectionTimeout = v.trim();
  1026.                                     tempiRispostaEnabled =  Costanti.CHECK_BOX_ENABLED_TRUE;
  1027.                                 }
  1028.                                 else {
  1029.                                     tempiRispostaConnectionTimeout = configGenerale.getTempiRispostaFruizione().getConnectionTimeout().intValue()+"";
  1030.                                 }
  1031.                             }
  1032.                                
  1033.                             if(tempiRispostaReadTimeout==null || "".equals(tempiRispostaReadTimeout) ) {
  1034.                                 String v = props.get(CostantiDB.CONNETTORE_READ_CONNECTION_TIMEOUT);
  1035.                                 if(v!=null && !"".equals(v)){
  1036.                                     tempiRispostaReadTimeout = v.trim();
  1037.                                     tempiRispostaEnabled =  Costanti.CHECK_BOX_ENABLED_TRUE;
  1038.                                 }
  1039.                                 else {
  1040.                                     tempiRispostaReadTimeout = configGenerale.getTempiRispostaFruizione().getReadTimeout().intValue()+"";
  1041.                                 }
  1042.                             }
  1043.                            
  1044.                             if(tempiRispostaTempoMedioRisposta==null || "".equals(tempiRispostaTempoMedioRisposta) ) {
  1045.                                 String v = props.get(CostantiDB.CONNETTORE_TEMPO_MEDIO_RISPOSTA);
  1046.                                 if(v!=null && !"".equals(v)){
  1047.                                     tempiRispostaTempoMedioRisposta = v.trim();
  1048.                                     tempiRispostaEnabled =  Costanti.CHECK_BOX_ENABLED_TRUE;
  1049.                                 }
  1050.                                 else {
  1051.                                     tempiRispostaTempoMedioRisposta = configGenerale.getTempiRispostaFruizione().getTempoMedioRisposta().intValue()+"";
  1052.                                 }
  1053.                             }
  1054.                         }
  1055.                         else {
  1056.                             if(tempiRispostaConnectionTimeout==null || "".equals(tempiRispostaConnectionTimeout) ) {
  1057.                                 tempiRispostaConnectionTimeout = configGenerale.getTempiRispostaFruizione().getConnectionTimeout().intValue()+"";
  1058.                             }
  1059.                             if(tempiRispostaReadTimeout==null || "".equals(tempiRispostaReadTimeout) ) {
  1060.                                 tempiRispostaReadTimeout = configGenerale.getTempiRispostaFruizione().getReadTimeout().intValue()+"";
  1061.                             }
  1062.                             if(tempiRispostaTempoMedioRisposta==null || "".equals(tempiRispostaTempoMedioRisposta) ) {
  1063.                                 tempiRispostaTempoMedioRisposta = configGenerale.getTempiRispostaFruizione().getTempoMedioRisposta().intValue()+"";
  1064.                             }
  1065.                         }
  1066.                     }
  1067.                    
  1068.                     if(transferMode==null && props!=null){
  1069.                         String v = props.get(CostantiDB.CONNETTORE_HTTP_DATA_TRANSFER_MODE);
  1070.                         if(v!=null && !"".equals(v)){
  1071.                            
  1072.                             transferMode = v.trim();
  1073.                            
  1074.                             if(TransferLengthModes.TRANSFER_ENCODING_CHUNKED.getNome().equals(transferMode)){
  1075.                                 // raccolgo anche altra proprietà correlata
  1076.                                 v = props.get(CostantiDB.CONNETTORE_HTTP_DATA_TRANSFER_MODE_CHUNK_SIZE);
  1077.                                 if(v!=null && !"".equals(v)){
  1078.                                     transferModeChunkSize = v.trim();
  1079.                                 }
  1080.                             }
  1081.                            
  1082.                         }
  1083.                     }
  1084.                    
  1085.                     if(redirectMode==null && props!=null){
  1086.                         String v = props.get(CostantiDB.CONNETTORE_HTTP_REDIRECT_FOLLOW);
  1087.                         if(v!=null && !"".equals(v)){
  1088.                            
  1089.                             if("true".equalsIgnoreCase(v.trim()) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v.trim())){
  1090.                                 redirectMode = CostantiConfigurazione.ABILITATO.getValue();
  1091.                             }
  1092.                             else{
  1093.                                 redirectMode = CostantiConfigurazione.DISABILITATO.getValue();
  1094.                             }                  
  1095.                            
  1096.                             if(CostantiConfigurazione.ABILITATO.getValue().equals(redirectMode)){
  1097.                                 // raccolgo anche altra proprietà correlata
  1098.                                 v = props.get(CostantiDB.CONNETTORE_HTTP_REDIRECT_MAX_HOP);
  1099.                                 if(v!=null && !"".equals(v)){
  1100.                                     redirectMaxHop = v.trim();
  1101.                                 }
  1102.                             }
  1103.                            
  1104.                         }
  1105.                     }
  1106.                    
  1107.                     if(tokenPolicy==null && props!=null){
  1108.                         String v = props.get(CostantiDB.CONNETTORE_TOKEN_POLICY);
  1109.                         if(v!=null && !"".equals(v)){
  1110.                             tokenPolicy = v;
  1111.                             autenticazioneToken = true;
  1112.                         }
  1113.                     }
  1114.                    
  1115.                     opzioniAvanzate = ConnettoriHelper.getOpzioniAvanzate(apsHelper, transferMode, redirectMode);
  1116.                    
  1117.                     if (url == null) {
  1118.                         url = props.get(CostantiDB.CONNETTORE_HTTP_LOCATION);
  1119.                     }
  1120.                     if (nome == null) {
  1121.                         nome = props.get(CostantiDB.CONNETTORE_JMS_NOME);
  1122.                         String userTmp = props.get(CostantiDB.CONNETTORE_USER);
  1123.                         if(userTmp!=null && !"".equals(userTmp)){
  1124.                             user = userTmp;
  1125.                         }
  1126.                         String passwordTmp = props.get(CostantiDB.CONNETTORE_PWD);
  1127.                         if(passwordTmp!=null && !"".equals(passwordTmp)){
  1128.                             password = passwordTmp;
  1129.                         }
  1130.                         tipo = props.get(CostantiDB.CONNETTORE_JMS_TIPO);
  1131.                         initcont = props.get(CostantiDB.CONNETTORE_JMS_CONTEXT_JAVA_NAMING_FACTORY_INITIAL);
  1132.                         urlpgk = props.get(CostantiDB.CONNETTORE_JMS_CONTEXT_JAVA_NAMING_FACTORY_URL_PKG);
  1133.                         provurl = props.get(CostantiDB.CONNETTORE_JMS_CONTEXT_JAVA_NAMING_PROVIDER_URL);
  1134.                         connfact = props.get(CostantiDB.CONNETTORE_JMS_CONNECTION_FACTORY);
  1135.                         sendas = props.get(CostantiDB.CONNETTORE_JMS_SEND_AS);
  1136.                     }
  1137.                    
  1138.                     autenticazioneHttp = apsHelper.getAutenticazioneHttp(autenticazioneHttp, endpointtype, user);
  1139.                    
  1140.                     if(autenticazioneApiKey==null || StringUtils.isEmpty(autenticazioneApiKey)) {
  1141.                         apiKeyHeader = props.get(CostantiDB.CONNETTORE_APIKEY_HEADER);
  1142.                         apiKeyValue = props.get(CostantiDB.CONNETTORE_APIKEY);
  1143.                         appIdHeader = props.get(CostantiDB.CONNETTORE_APIKEY_APPID_HEADER);
  1144.                         appIdValue = props.get(CostantiDB.CONNETTORE_APIKEY_APPID);
  1145.                        
  1146.                         autenticazioneApiKey = apsHelper.getAutenticazioneApiKey(autenticazioneApiKey, endpointtype, apiKeyValue);
  1147.                         if(ServletUtils.isCheckBoxEnabled(autenticazioneApiKey)) {
  1148.                             useOAS3Names = apsHelper.isAutenticazioneApiKeyUseOAS3Names(apiKeyHeader, appIdHeader);
  1149.                             useAppId = apsHelper.isAutenticazioneApiKeyUseAppId(appIdValue);
  1150.                         }
  1151.                         else {
  1152.                             apiKeyValue=null;
  1153.                             apiKeyHeader=null;
  1154.                             appIdHeader=null;
  1155.                             appIdValue=null;
  1156.                         }
  1157.                     }
  1158.                    
  1159.                     if (httpstipologia == null) {
  1160.                         httpsurl = props.get(CostantiDB.CONNETTORE_HTTPS_LOCATION);
  1161.                         httpstipologia = props.get(CostantiDB.CONNETTORE_HTTPS_SSL_TYPE);
  1162.                         httpshostverifyS = props.get(CostantiDB.CONNETTORE_HTTPS_HOSTNAME_VERIFIER);
  1163.                         if(httpshostverifyS!=null){
  1164.                             httpshostverify = Boolean.valueOf(httpshostverifyS);
  1165.                         }
  1166.                         httpsTrustVerifyCertS = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_ALL_CERTS);
  1167.                         if(httpsTrustVerifyCertS!=null){
  1168.                             httpsTrustVerifyCert = !Boolean.valueOf(httpsTrustVerifyCertS);
  1169.                         }
  1170.                         else {
  1171.                             httpsTrustVerifyCert = true; // backward compatibility
  1172.                         }
  1173.                         httpspath = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_LOCATION);
  1174.                         httpstipo = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_TYPE);
  1175.                         httpspwd = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_PASSWORD);
  1176.                         httpsalgoritmo = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_MANAGEMENT_ALGORITM);
  1177.                         httpspwdprivatekeytrust = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_PASSWORD);
  1178.                         httpspathkey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_LOCATION);
  1179.                         httpstipokey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_TYPE);
  1180.                         httpspwdkey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_PASSWORD);
  1181.                         httpspwdprivatekey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_PASSWORD);
  1182.                         httpsalgoritmokey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_MANAGEMENT_ALGORITM);
  1183.                         httpsKeyAlias = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_ALIAS);
  1184.                         httpsTrustStoreCRLs = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_CRLS);
  1185.                         httpsTrustStoreOCSPPolicy = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_OCSP_POLICY);
  1186.                         httpsKeyStoreBYOKPolicy = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_BYOK_POLICY);
  1187.                         if (httpspathkey == null) {
  1188.                             httpsstato = false;
  1189.                             httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_DEFAULT;
  1190.                         } else {
  1191.                             httpsstato = true;
  1192.                             if (httpspathkey.equals(httpspath) &&
  1193.                                     httpstipokey.equals(httpstipo) &&
  1194.                                     (
  1195.                                         (httpspwdkey!=null && httpspwdkey.equals(httpspwd))
  1196.                                         ||
  1197.                                         (httpspwdkey==null && httpspwd==null)
  1198.                                     )
  1199.                                 )
  1200.                                 httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_DEFAULT;
  1201.                             else
  1202.                                 httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_RIDEFINISCI;
  1203.                         }
  1204.                     }
  1205.                    
  1206.                     // file
  1207.                     if(responseInputMode==null && props!=null){
  1208.                        
  1209.                         requestOutputFileName = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_FILE);  
  1210.                         requestOutputFileNamePermissions = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_FILE_PERMISSIONS);  
  1211.                         requestOutputFileNameHeaders = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_FILE_HEADERS);  
  1212.                         requestOutputFileNameHeadersPermissions = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_FILE_HEADERS_PERMISSIONS);
  1213.                         String v = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_AUTO_CREATE_DIR);
  1214.                         if(v!=null && !"".equals(v) &&
  1215.                             ("true".equalsIgnoreCase(v) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v) )
  1216.                             ){
  1217.                             requestOutputParentDirCreateIfNotExists = Costanti.CHECK_BOX_ENABLED_TRUE;
  1218.                         }                  
  1219.                         v = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_OVERWRITE_FILE);
  1220.                         if(v!=null && !"".equals(v) &&
  1221.                             ("true".equalsIgnoreCase(v) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v) )
  1222.                             ){
  1223.                             requestOutputOverwriteIfExists = Costanti.CHECK_BOX_ENABLED_TRUE;
  1224.                         }  
  1225.                        
  1226.                         v = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_MODE);
  1227.                         if(v!=null && !"".equals(v) &&
  1228.                             ("true".equalsIgnoreCase(v) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v) )
  1229.                             ){
  1230.                             responseInputMode = CostantiConfigurazione.ABILITATO.getValue();
  1231.                         }
  1232.                         if(CostantiConfigurazione.ABILITATO.getValue().equals(responseInputMode)){                      
  1233.                             responseInputFileName = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_FILE);
  1234.                             responseInputFileNameHeaders = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_FILE_HEADERS);
  1235.                             v = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_FILE_DELETE_AFTER_READ);
  1236.                             if(v!=null && !"".equals(v) &&
  1237.                                 ("true".equalsIgnoreCase(v) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v) )
  1238.                                 ){
  1239.                                 responseInputDeleteAfterRead = Costanti.CHECK_BOX_ENABLED_TRUE;
  1240.                             }                      
  1241.                             responseInputWaitTime = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_WAIT_TIME);                    
  1242.                         }
  1243.                        
  1244.                     }
  1245.                 }

  1246.                 // default
  1247.                 if(httpsalgoritmo==null || "".equals(httpsalgoritmo)){
  1248.                     httpsalgoritmo = TrustManagerFactory.getDefaultAlgorithm();
  1249.                 }
  1250.                 if(httpsalgoritmokey==null || "".equals(httpsalgoritmokey)){
  1251.                     httpsalgoritmokey = KeyManagerFactory.getDefaultAlgorithm();
  1252.                 }
  1253.                 if(httpstipologia==null || "".equals(httpstipologia)){
  1254.                     httpstipologia = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TYPE;
  1255.                 }
  1256.                 if(postBackElementName == null || "".equals(postBackElementName) ){
  1257.                     // altrimenti sono checkbox
  1258.                     if(httpshostverifyS==null || "".equals(httpshostverifyS)){
  1259.                         httpshostverifyS = Costanti.CHECK_BOX_ENABLED_TRUE;
  1260.                         httpshostverify = ServletUtils.isCheckBoxEnabled(httpshostverifyS);
  1261.                     }
  1262.                     if(httpsTrustVerifyCertS==null || "".equals(httpsTrustVerifyCertS)){
  1263.                         httpsTrustVerifyCertS = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TRUST_VERIFY_CERTS ? Costanti.CHECK_BOX_ENABLED_TRUE : Costanti.CHECK_BOX_DISABLED;
  1264.                         httpsTrustVerifyCert = ServletUtils.isCheckBoxEnabled(httpsTrustVerifyCertS);
  1265.                     }
  1266.                 }

  1267.                 portType = (portType != null && !"".equals(portType) ? portType : asps.getPortType());
  1268.                 if(portTypeErased) {
  1269.                     portType = null;
  1270.                 }
  1271.                
  1272.                 privato = asps.getPrivato()!=null && asps.getPrivato();
  1273.                
  1274.                 if(strutsBean.wsdlimpler == null){
  1275.                     strutsBean.wsdlimpler = new BinaryParameter();
  1276.                     strutsBean.wsdlimpler.setValue(asps.getByteWsdlImplementativoErogatore());
  1277.                 }
  1278.                
  1279.                 if(strutsBean.wsdlimplfru == null){
  1280.                     strutsBean.wsdlimplfru = new BinaryParameter();
  1281.                     strutsBean.wsdlimplfru.setValue(asps.getByteWsdlImplementativoFruitore());
  1282.                 }
  1283.                
  1284.                 if(backToStato == null && backToConfermaModificaDatiServizio==null){
  1285.                     // preparo i campi
  1286.                     List<DataElement> dati = new ArrayList<>();
  1287.                     dati.add(ServletUtils.getDataElementForEditModeFinished());
  1288.                    
  1289.                     // update della configurazione
  1290.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteSpecifica(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, apsHelper, strutsBean.protocolProperties,
  1291.                             strutsBean.registryReader, strutsBean.configRegistryReader, oldIdAps);
  1292.                    
  1293.                     dati = apsHelper.addHiddenFieldsToDati(tipoOp, id, null, null, dati);

  1294.                     dati = apsHelper.addServiziToDati(dati, nomeservizio, tiposervizio, oldnomeservizio, oldtiposervizio,
  1295.                             provider, tipoSoggettoErogatore, nomeSoggettoErogatore,
  1296.                             soggettiList, soggettiListLabel, accordo,serviceBinding, formatoSpecifica, accordiList, accordiListLabel, servcorr, strutsBean.wsdlimpler, strutsBean.wsdlimplfru, tipoOp,
  1297.                             id, tipiServizioCompatibiliAccordo, profilo, portType, ptList,  privato,uriAccordo,
  1298.                             descrizione, descrizioneModificata,
  1299.                             soggettoErogatoreID.getId(),statoPackage,oldStatoPackage
  1300.                             ,versione,versioniProtocollo,validazioneDocumenti,
  1301.                             null,null,generaPACheckSoggetto,asParteComuneCompatibili,
  1302.                             null,
  1303.                             null,null,null,null,null,null,false,
  1304.                             null,null,null,null,null,null,null,
  1305.                             tipoProtocollo,null,
  1306.                             null, null, providerSoggettoFruitore, tipoSoggettoFruitore, nomeSoggettoFruitore,
  1307.                             null, null, null, null, null, null, null,
  1308.                             null, null, null, null,
  1309.                             null,null,null,null,null,null,null,null,null,null,
  1310.                             null,null,null,null,null,
  1311.                             null,null,
  1312.                             null,null,null,null,moreThenOneImplementation, canaleStato, canaleAPI, canale, canaleList, gestioneCanaliEnabled,
  1313.                             null, null, null, null, null,
  1314.                             null,
  1315.                             null,null,null);

  1316.                     if(apsHelper.isModalitaCompleta() || (!soggettoOperativo && !gestioneFruitori)) {
  1317.                    
  1318.                         boolean forceEnableConnettore = false;
  1319.                         /**if( apsHelper.isModalitaStandard() && !TipiConnettore.DISABILITATO.getNome().equals(endpointtype) ) {
  1320.                             forceEnableConnettore = true;
  1321.                         }*/
  1322.                        
  1323.                         dati = apsHelper.addEndPointToDati(dati, serviceBinding, connettoreDebug, endpointtype, autenticazioneHttp,  
  1324.                                 null, //(apsHelper.isModalitaCompleta() || !multitenant)?null:AccordiServizioParteSpecificaCostanti.LABEL_APS_APPLICATIVO_ESTERNO_PREFIX,
  1325.                                 url,nome, tipo, user, password, initcont, urlpgk,
  1326.                                 provurl, connfact, sendas, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,tipoOp,
  1327.                                 httpsurl, httpstipologia, httpshostverify,
  1328.                                 httpsTrustVerifyCert, httpspath, httpstipo, httpspwd, httpsalgoritmo,
  1329.                                 httpsstato, httpskeystore,
  1330.                                 httpspwdprivatekeytrust, httpspathkey,
  1331.                                 httpstipokey, httpspwdkey,
  1332.                                 httpspwdprivatekey, httpsalgoritmokey,
  1333.                                 httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1334.                                 tipoconn, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE, id,
  1335.                                 nomeservizio, tiposervizio, null, null, null,
  1336.                                 null, oldStatoPackage, true,
  1337.                                 isConnettoreCustomUltimaImmagineSalvata,
  1338.                                 proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1339.                                 tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1340.                                 opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1341.                                 requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1342.                                 requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1343.                                 responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1344.                                 autenticazioneToken, tokenPolicy, forcePDND, forceOAuth,
  1345.                                 listExtendedConnettore, forceEnableConnettore,
  1346.                                 tipoProtocollo, false, false, isApplicativiServerEnabled, erogazioneServizioApplicativoServerEnabled,
  1347.                                 erogazioneServizioApplicativoServer, saSoggetti,
  1348.                                 autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1349.                                 connettoreStatusParams,
  1350.                                 postBackViaPost);
  1351.                        
  1352.                     }
  1353.                     else {
  1354.                         dati = apsHelper.addEndPointSAServerToDatiAsHidden(dati, erogazioneServizioApplicativoServerEnabled, erogazioneServizioApplicativoServer);
  1355.                        
  1356.                         dati = apsHelper.addEndPointToDatiAsHidden(dati, serviceBinding, connettoreDebug,
  1357.                                 endpointtype, autenticazioneHttp,
  1358.                                 url, nome, tipo,
  1359.                                 user, password, initcont, urlpgk,
  1360.                                 provurl, connfact, sendas, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,tipoOp,
  1361.                                 httpsurl, httpstipologia, httpshostverify,
  1362.                                 httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  1363.                                 httpsalgoritmo, httpsstato, httpskeystore,
  1364.                                 httpspwdprivatekeytrust, httpspathkey,
  1365.                                 httpstipokey, httpspwdkey,
  1366.                                 httpspwdprivatekey, httpsalgoritmokey,
  1367.                                 httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1368.                                 tipoconn, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE, id,
  1369.                                 nomeservizio, tiposervizio, null, null, null,
  1370.                                 null, oldStatoPackage,
  1371.                                 proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1372.                                 tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1373.                                 opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1374.                                 requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1375.                                 requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1376.                                 responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1377.                                 autenticazioneToken, tokenPolicy,
  1378.                                 autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1379.                                 connettoreStatusParams);
  1380.                        
  1381.                     }
  1382.                    
  1383.                     // aggiunta campi custom
  1384.                     if(addPropertiesHidden) {
  1385.                         dati = apsHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  1386.                     }
  1387.                     else {
  1388.                         dati = apsHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  1389.                     }

  1390.                     pd.setDati(dati);

  1391.                     if(apsHelper.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(asps.getStatoPackage())){
  1392.                         pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);
  1393.                     }

  1394.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  1395.                    
  1396.                     return ServletUtils.getStrutsForwardEditModeInProgress(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,
  1397.                             ForwardParams.CHANGE());
  1398.                 }
  1399.             }

  1400.             if (apsHelper.isModalitaStandard() && (nomeservizio==null || "".equals(nomeservizio))) {
  1401.                 switch (serviceBinding) {
  1402.                 case REST:
  1403.                     // il nome del servizio e' quello dell'accordo
  1404.                     nomeservizio = as.getNome();
  1405.                     break;
  1406.                 case SOAP:
  1407.                 default:
  1408.                     // il nome del servizio e' quello del porttype selezionato
  1409.                     nomeservizio = portType;
  1410.                     break;
  1411.                 }
  1412.             }
  1413.            
  1414.             String descrizioneVerificata = descrizione;
  1415.             if(modificaDescrizione) {
  1416.                 descrizioneVerificata = descrizioneModificata;
  1417.             }
  1418.            
  1419.             // Controlli sui campi immessi
  1420.             boolean isOk = apsHelper.serviziCheckData(tipoOp, soggettiList,
  1421.                     accordiList, asps.getNome(), asps.getTipo(), asps.getVersione(),
  1422.                     nomeservizio, tiposervizio, provider,
  1423.                     nomeSoggettoErogatore, tipoSoggettoErogatore, accordo, serviceBinding,
  1424.                     servcorr, endpointtype, url, nome, tipo, user, password,
  1425.                     initcont, urlpgk, provurl, connfact, sendas, strutsBean.wsdlimpler, strutsBean.wsdlimplfru, id,
  1426.                     profilo, portType,ptList,accordoPrivato,privato,
  1427.                     httpsurl, httpstipologia, httpshostverify,
  1428.                     httpsTrustVerifyCert, httpspath, httpstipo, httpspwd, httpsalgoritmo,
  1429.                     httpsstato, httpskeystore,
  1430.                     httpspwdprivatekeytrust, httpspathkey,
  1431.                     httpstipokey, httpspwdkey,
  1432.                     httpspwdprivatekey, httpsalgoritmokey,
  1433.                     httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1434.                     tipoconn,versione,validazioneDocumenti,backToStato,autenticazioneHttp,
  1435.                     proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1436.                     tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1437.                     opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1438.                     requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1439.                     requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1440.                     responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1441.                     null,null,null,null,null,
  1442.                     null, null, null, null,null,null,false,
  1443.                     generaPACheckSoggetto, listExtendedConnettore,
  1444.                     null,null,null,null,null,null,null,
  1445.                     null, null, null, null,
  1446.                     tipoProtocollo,null,
  1447.                     descrizioneVerificata, tipoSoggettoFruitore, nomeSoggettoFruitore,
  1448.                     autenticazioneToken, tokenPolicy,
  1449.                     autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1450.                     erogazioneServizioApplicativoServerEnabled, erogazioneServizioApplicativoServer,
  1451.                     canaleStato, canale, gestioneCanaliEnabled);
  1452.            
  1453.             // updateDynamic
  1454.             if(isOk) {
  1455.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteSpecifica(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, apsHelper, strutsBean.protocolProperties,
  1456.                         strutsBean.registryReader, strutsBean.configRegistryReader, oldIdAps);
  1457.             }
  1458.            
  1459.             // Validazione base dei parametri custom
  1460.             if(isOk){
  1461.                 try{
  1462.                     apsHelper.validaProtocolProperties(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, strutsBean.protocolProperties);
  1463.                 }catch(ProtocolException e){
  1464.                     ControlStationCore.getLog().error(e.getMessage(),e);
  1465.                     pd.setMessage(e.getMessage());
  1466.                     isOk = false;
  1467.                 }
  1468.             }

  1469.             // Valido i parametri custom se ho gia' passato tutta la validazione prevista
  1470.             if(isOk){
  1471.                 try{
  1472.                     //validazione campi dinamici
  1473.                     strutsBean.consoleDynamicConfiguration.validateDynamicConfigAccordoServizioParteSpecifica(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, apsHelper, strutsBean.protocolProperties,
  1474.                             strutsBean.registryReader, strutsBean.configRegistryReader, oldIdAps);
  1475.                 }catch(ProtocolException e){
  1476.                     ControlStationCore.getLog().error(e.getMessage(),e);
  1477.                     pd.setMessage(e.getMessage());
  1478.                     isOk = false;
  1479.                 }
  1480.             }
  1481.            
  1482.             if (!isOk) {
  1483.                 // setto la barra del titolo
  1484.                 ServletUtils.setPageDataTitle(pd, lstParm );

  1485.                 portType = (portType != null && !"".equals(portType) ? portType : asps.getPortType());
  1486.                 if(portTypeErased) {
  1487.                     portType = null;
  1488.                 }

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

  1491.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  1492.                
  1493.                 // update della configurazione
  1494.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteSpecifica(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, apsHelper, strutsBean.protocolProperties,
  1495.                         strutsBean.registryReader, strutsBean.configRegistryReader, oldIdAps);

  1496.                 dati = apsHelper.addHiddenFieldsToDati(tipoOp, id, null, null, dati);

  1497.                 dati = apsHelper.addServiziToDati(dati, nomeservizio, tiposervizio, oldnomeservizio, oldtiposervizio,
  1498.                         provider, tipoSoggettoErogatore, nomeSoggettoErogatore, soggettiList,
  1499.                         soggettiListLabel, accordo, serviceBinding,formatoSpecifica,
  1500.                         accordiList, accordiListLabel, servcorr, strutsBean.wsdlimpler, strutsBean.wsdlimplfru, tipoOp,
  1501.                         id, tipiServizioCompatibiliAccordo, profilo, portType, ptList, privato,uriAccordo,
  1502.                         descrizione, descrizioneModificata,  
  1503.                         soggettoErogatoreID.getId(),
  1504.                         statoPackage,oldStatoPackage,versione,versioniProtocollo,validazioneDocumenti,
  1505.                         null,null,generaPACheckSoggetto,asParteComuneCompatibili,
  1506.                         null,
  1507.                         null,null,null,null,null,null,false,
  1508.                         null,null,null,null,null,null,null,
  1509.                         tipoProtocollo,null,
  1510.                         null, null, providerSoggettoFruitore, tipoSoggettoFruitore, nomeSoggettoFruitore,
  1511.                         null, null, null, null, null,null,null,
  1512.                         null, null, null, null,
  1513.                         null,null,null,null,null,null,null,null,null,null,
  1514.                         null,null,null,null,null,
  1515.                         null,null,
  1516.                         null,null,null,null,moreThenOneImplementation, canaleStato, canaleAPI, canale, canaleList, gestioneCanaliEnabled,
  1517.                         null,null,null,null,null,
  1518.                         null,
  1519.                         null,null,null);

  1520.                 if(apsHelper.isModalitaCompleta() || (!soggettoOperativo && !gestioneFruitori)) {
  1521.                
  1522.                     boolean forceEnableConnettore = false;
  1523.                     /**if( apsHelper.isModalitaStandard() && !TipiConnettore.DISABILITATO.getNome().equals(endpointtype) ) {
  1524.                         forceEnableConnettore = true;
  1525.                     }*/
  1526.                    
  1527.                     dati = apsHelper.addEndPointToDati(dati, serviceBinding, connettoreDebug,  endpointtype, autenticazioneHttp,
  1528.                             null, //(apsHelper.isModalitaCompleta() || !multitenant)?null:AccordiServizioParteSpecificaCostanti.LABEL_APS_APPLICATIVO_ESTERNO_PREFIX,
  1529.                             url, nome,
  1530.                             tipo, user, password, initcont, urlpgk, provurl,
  1531.                             connfact, sendas, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,tipoOp,
  1532.                             httpsurl, httpstipologia, httpshostverify,
  1533.                             httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  1534.                             httpsalgoritmo, httpsstato, httpskeystore,
  1535.                             httpspwdprivatekeytrust, httpspathkey,
  1536.                             httpstipokey, httpspwdkey,
  1537.                             httpspwdprivatekey, httpsalgoritmokey,
  1538.                             httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1539.                             tipoconn,AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE, id,
  1540.                             nomeservizio, tiposervizio, null, null, null,
  1541.                             null, oldStatoPackage, true,
  1542.                             isConnettoreCustomUltimaImmagineSalvata,
  1543.                             proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1544.                             tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1545.                             opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1546.                             requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1547.                             requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1548.                             responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1549.                             autenticazioneToken, tokenPolicy, forcePDND, forceOAuth,
  1550.                             listExtendedConnettore, forceEnableConnettore,
  1551.                             tipoProtocollo, false, false, isApplicativiServerEnabled, erogazioneServizioApplicativoServerEnabled,
  1552.                             erogazioneServizioApplicativoServer, saSoggetti,
  1553.                             autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1554.                             connettoreStatusParams,
  1555.                             postBackViaPost);
  1556.                    
  1557.                 }
  1558.                 else {
  1559.                    
  1560.                     dati = apsHelper.addEndPointSAServerToDatiAsHidden(dati, erogazioneServizioApplicativoServerEnabled, erogazioneServizioApplicativoServer);
  1561.                    
  1562.                     dati = apsHelper.addEndPointToDatiAsHidden(dati, serviceBinding, connettoreDebug,
  1563.                             endpointtype, autenticazioneHttp,
  1564.                             url, nome, tipo,
  1565.                             user, password, initcont, urlpgk,
  1566.                             provurl, connfact, sendas, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,tipoOp,
  1567.                             httpsurl, httpstipologia, httpshostverify,
  1568.                             httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  1569.                             httpsalgoritmo, httpsstato, httpskeystore,
  1570.                             httpspwdprivatekeytrust, httpspathkey,
  1571.                             httpstipokey, httpspwdkey,
  1572.                             httpspwdprivatekey, httpsalgoritmokey,
  1573.                             httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1574.                             tipoconn, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE, id,
  1575.                             nomeservizio, tiposervizio, null, null, null,
  1576.                             null, oldStatoPackage,
  1577.                             proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1578.                             tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1579.                             opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1580.                             requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1581.                             requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1582.                             responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1583.                             autenticazioneToken, tokenPolicy,
  1584.                             autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1585.                             connettoreStatusParams);
  1586.                    
  1587.                 }
  1588.                
  1589.                 // aggiunta campi custom
  1590.                 if(addPropertiesHidden) {
  1591.                     dati = apsHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  1592.                 }
  1593.                 else {
  1594.                     dati = apsHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  1595.                 }

  1596.                 pd.setDati(dati);

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

  1598.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,
  1599.                         ForwardParams.CHANGE());

  1600.             }

  1601.             // I dati dell'utente sono validi, se ha scelto di modificare lo stato da finale ad operativo visualizzo la schermata di conferma
  1602.             if( actionConfirm == null &&
  1603.                 (  backToStato != null || backToConfermaModificaDatiServizio!=null)
  1604.                 ){
  1605.                 // setto la barra del titolo
  1606.                 ServletUtils.setPageDataTitle(pd, lstParm );

  1607.                 portType = (portType != null && !"".equals(portType) ? portType : asps.getPortType());
  1608.                 if(portTypeErased) {
  1609.                     portType = null;
  1610.                 }

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

  1613.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  1614.                
  1615.                 // update della configurazione
  1616.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteSpecifica(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, apsHelper, strutsBean.protocolProperties,
  1617.                         strutsBean.registryReader, strutsBean.configRegistryReader, oldIdAps);
  1618.                
  1619.                 dati = apsHelper.addHiddenFieldsToDati(tipoOp, id, null, null, dati);

  1620.                 dati = apsHelper.addServiziToDati(dati, nomeservizio, tiposervizio, oldnomeservizio, oldtiposervizio,
  1621.                         provider, tipoSoggettoErogatore, nomeSoggettoErogatore, soggettiList,
  1622.                         soggettiListLabel, accordo, serviceBinding,formatoSpecifica,
  1623.                         accordiList, accordiListLabel, servcorr, strutsBean.wsdlimpler, strutsBean.wsdlimplfru, tipoOp,
  1624.                         id, tipiServizioCompatibiliAccordo, profilo, portType, ptList, privato,uriAccordo,
  1625.                         descrizione, descrizioneModificata,  
  1626.                         soggettoErogatoreID.getId(),
  1627.                         statoPackage,oldStatoPackage,versione,versioniProtocollo,validazioneDocumenti,
  1628.                         null,null,generaPACheckSoggetto,asParteComuneCompatibili,
  1629.                         null,
  1630.                         null,null,null,null,null,null,false,
  1631.                         null,null,null,null,null,null,null,
  1632.                         tipoProtocollo,null,
  1633.                         null, null, providerSoggettoFruitore, tipoSoggettoFruitore, nomeSoggettoFruitore,
  1634.                         null, null, null, null, null,null,null,
  1635.                         null, null, null, null,
  1636.                         null,null,null,null,null,null,null,null,null,null,
  1637.                         null,null,null,null,null,
  1638.                         null,null,
  1639.                         null,null,null,null,moreThenOneImplementation, canaleStato, canaleAPI, canale, canaleList, gestioneCanaliEnabled,
  1640.                         null,null,null,null,null,
  1641.                         null,
  1642.                         null,null,null);

  1643.                 if(apsHelper.isModalitaCompleta() || (!soggettoOperativo && !gestioneFruitori)) {
  1644.                     boolean forceEnableConnettore = false;
  1645.                     if( apsHelper.isModalitaStandard() && !TipiConnettore.DISABILITATO.getNome().equals(endpointtype) ) {
  1646.                         forceEnableConnettore = true;
  1647.                     }
  1648.                    
  1649.                     dati = apsHelper.addEndPointToDati(dati, serviceBinding, connettoreDebug,  endpointtype, autenticazioneHttp,
  1650.                             null, //(apsHelper.isModalitaCompleta() || !multitenant)?null:AccordiServizioParteSpecificaCostanti.LABEL_APS_APPLICATIVO_ESTERNO_PREFIX,
  1651.                             url, nome,
  1652.                             tipo, user, password, initcont, urlpgk, provurl,
  1653.                             connfact, sendas, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,tipoOp,
  1654.                             httpsurl, httpstipologia,httpshostverify,
  1655.                             httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  1656.                             httpsalgoritmo, httpsstato, httpskeystore,
  1657.                             httpspwdprivatekeytrust, httpspathkey,
  1658.                             httpstipokey, httpspwdkey,
  1659.                             httpspwdprivatekey, httpsalgoritmokey,
  1660.                             httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1661.                             tipoconn,AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE, id,
  1662.                             nomeservizio, tiposervizio, null, null, null,
  1663.                             null, oldStatoPackage, true,
  1664.                             isConnettoreCustomUltimaImmagineSalvata,
  1665.                             proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1666.                             tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1667.                             opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1668.                             requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1669.                             requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1670.                             responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1671.                             autenticazioneToken, tokenPolicy, forcePDND, forceOAuth,
  1672.                             listExtendedConnettore, forceEnableConnettore,
  1673.                             tipoProtocollo, false, false, isApplicativiServerEnabled, erogazioneServizioApplicativoServerEnabled,
  1674.                             erogazioneServizioApplicativoServer, saSoggetti,
  1675.                             autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1676.                             connettoreStatusParams,
  1677.                             postBackViaPost);
  1678.                    
  1679.                 }
  1680.                
  1681.                 dati = apsHelper.addServiziToDatiAsHidden(dati, nomeservizio, tiposervizio, provider, tipoSoggettoErogatore, nomeSoggettoErogatore, soggettiList,
  1682.                         soggettiListLabel, accordo, serviceBinding,accordiList, accordiListLabel, servcorr, "", "", tipoOp,
  1683.                         id, tipiServizioCompatibiliAccordo, profilo, portType, ptList, privato,uriAccordo,
  1684.                         descrizione, soggettoErogatoreID.getId(),
  1685.                         statoPackage,oldStatoPackage,versione,versioniProtocollo,validazioneDocumenti,
  1686.                         null,null,tipoProtocollo,generaPACheckSoggetto);

  1687.                 dati = apsHelper.addEndPointSAServerToDatiAsHidden(dati, erogazioneServizioApplicativoServerEnabled, erogazioneServizioApplicativoServer);
  1688.                
  1689.                 dati = apsHelper.addEndPointToDatiAsHidden(dati, serviceBinding, connettoreDebug,
  1690.                         endpointtype, autenticazioneHttp,
  1691.                         url, nome,
  1692.                         tipo, user, password, initcont, urlpgk, provurl,
  1693.                         connfact, sendas, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,tipoOp,
  1694.                         httpsurl, httpstipologia, httpshostverify,
  1695.                         httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  1696.                         httpsalgoritmo, httpsstato, httpskeystore,
  1697.                         httpspwdprivatekeytrust, httpspathkey,
  1698.                         httpstipokey, httpspwdkey,
  1699.                         httpspwdprivatekey, httpsalgoritmokey,
  1700.                         httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1701.                         tipoconn,AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE, id,
  1702.                         nomeservizio, tiposervizio, null, null, null,
  1703.                         null, oldStatoPackage,
  1704.                         proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1705.                         tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1706.                         opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1707.                         requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1708.                         requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1709.                         responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1710.                         autenticazioneToken, tokenPolicy,
  1711.                         autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1712.                         connettoreStatusParams);
  1713.                
  1714.                 if(backToStato != null) {
  1715.                     // backtostato per chiudere la modifica dopo la conferma
  1716.                     DataElement de = new DataElement();
  1717.                     de.setLabel(CostantiControlStation.LABEL_PARAMETRO_NOME);
  1718.                     de.setValue(backToStato);
  1719.                     de.setType(DataElementType.HIDDEN);
  1720.                     de.setName(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_RIPRISTINA_STATO);
  1721.                     dati.add(de);
  1722.                 }
  1723.                 if(backToConfermaModificaDatiServizio != null) {
  1724.                     // backtostato per chiudere la modifica dopo la conferma
  1725.                     DataElement de = new DataElement();
  1726.                     de.setLabel(CostantiControlStation.LABEL_PARAMETRO_NOME);
  1727.                     de.setValue(backToConfermaModificaDatiServizio);
  1728.                     de.setType(DataElementType.HIDDEN);
  1729.                     de.setName(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_CONFERMA_MODIFICA_DATI_SERVIZIO);
  1730.                     dati.add(de);
  1731.                 }
  1732.                
  1733.                 // aggiunta campi custom
  1734.                 if(addPropertiesHidden) {
  1735.                     dati = apsHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  1736.                 }
  1737.                 else {
  1738.                     dati = apsHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  1739.                    
  1740.                     // aggiunta campi custom come hidden, quelli sopra vengono bruciati dal no-edit
  1741.                     dati = apsHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  1742.                 }
  1743.                    
  1744.                 StringBuilder msgSB = new StringBuilder();
  1745.                 if(backToStato != null) {
  1746.                     msgSB.append("&Egrave; stato richiesto di ripristinare lo stato dell''accordo [{0}] in operativo. Tale operazione permetter&agrave; successive modifiche all''accordo. Vuoi procedere?");
  1747.                 }
  1748.                 else if(backToConfermaModificaDatiServizio != null) {
  1749.                     msgSB.append(AccordiServizioParteSpecificaCostanti.MESSAGGIO_ERRORE_MULTI_API_INFLUENZATE_MODIFICA);
  1750.                     msgSB.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE+"Di seguito vengono elencate tutte le configurazioni coinvolte dalla modifica. Vuoi procedere?");
  1751.                     msgSB.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1752.                     if(!listMappingPD.isEmpty()) {
  1753.                         msgSB.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1754.                         if(listMappingPD.size()==1) {
  1755.                             msgSB.append("La fruizione:");
  1756.                         }
  1757.                         else if(listMappingPD.size()>1) {
  1758.                             msgSB.append("Le "+listMappingPD.size()+" fruizioni:");
  1759.                         }
  1760.                         msgSB.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1761.                         for (IDPortaDelegata idPortaDelegata : listMappingPD) {
  1762.                             msgSB.append("- ");
  1763.                             msgSB.append(apsHelper.getLabelServizioFruizione(tipoProtocollo, idPortaDelegata.getIdentificativiFruizione().getSoggettoFruitore(), idPortaDelegata.getIdentificativiFruizione().getIdServizio()));
  1764.                             msgSB.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1765.                         }
  1766.                     }
  1767.                     if(!listMappingPA.isEmpty()) {
  1768.                         msgSB.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1769.                         if(listMappingPA.size()==1) {
  1770.                             msgSB.append("L&#39;erogazione:");
  1771.                         }
  1772.                         else if(listMappingPA.size()>1) {
  1773.                             msgSB.append(listMappingPA.size()+" erogazioni:");
  1774.                         }
  1775.                         msgSB.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1776.                         for (IDPortaApplicativa idPortaApplicativa : listMappingPA) {
  1777.                             msgSB.append("- ");
  1778.                             msgSB.append(apsHelper.getLabelServizioErogazione(tipoProtocollo, idPortaApplicativa.getIdentificativiErogazione().getIdServizio()));
  1779.                             msgSB.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1780.                         }
  1781.                     }
  1782.                 }
  1783.                 String msg = msgSB.length()>0 ? msgSB.toString() : null;
  1784.                
  1785.                 String pre = Costanti.HTML_MODAL_SPAN_PREFIX;
  1786.                 String post = Costanti.HTML_MODAL_SPAN_SUFFIX;
  1787.                 if(uriAccordo!=null) {
  1788.                     pd.setMessage(pre + MessageFormat.format(msg, uriAccordo) + post, Costanti.MESSAGE_TYPE_CONFIRM);
  1789.                 }
  1790.                 else {
  1791.                     pd.setMessage(pre + msg + post, Costanti.MESSAGE_TYPE_CONFIRM);
  1792.                 }
  1793.                
  1794.                 pd.setDati(dati);
  1795.                
  1796.                 String[][] bottoni = {
  1797.                         { Costanti.LABEL_MONITOR_BUTTON_ANNULLA,
  1798.                             Costanti.LABEL_MONITOR_BUTTON_ANNULLA_CONFERMA_PREFIX +
  1799.                             Costanti.LABEL_MONITOR_BUTTON_ANNULLA_CONFERMA_SUFFIX

  1800.                         },
  1801.                         { Costanti.LABEL_MONITOR_BUTTON_CONFERMA,
  1802.                             Costanti.LABEL_MONITOR_BUTTON_ESEGUI_OPERAZIONE_CONFERMA_PREFIX +
  1803.                             Costanti.LABEL_MONITOR_BUTTON_ESEGUI_OPERAZIONE_CONFERMA_SUFFIX }};

  1804.                 pd.setBottoni(bottoni);
  1805.                
  1806.                 // disabilito la form
  1807.                 pd.disableEditMode();

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

  1809.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,
  1810.                         ForwardParams.CHANGE());
  1811.             }
  1812.            
  1813.             // Esco immediatamente nel caso di modifica API non confermata
  1814.             // Il caso invece del ripristina viene gestito differentemente
  1815.             if(moreThenOneImplementation && actionConfirm != null && actionConfirm.equals(Costanti.PARAMETRO_ACTION_CONFIRM_VALUE_NO)){
  1816.                
  1817.                 String superUser = ServletUtils.getUserLoginFromSession(session);
  1818.                
  1819.                 ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);

  1820.                 List<AccordoServizioParteSpecifica> listaServizi = null;
  1821.                 if(apsCore.isVisioneOggettiGlobale(superUser)){
  1822.                     listaServizi = apsCore.soggettiServizioList(null, ricerca,permessi, gestioneFruitori, gestioneErogatori);
  1823.                 }else{
  1824.                     listaServizi = apsCore.soggettiServizioList(superUser, ricerca,permessi, gestioneFruitori, gestioneErogatori);
  1825.                 }

  1826.                 apsHelper.prepareServiziList(ricerca, listaServizi);

  1827.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  1828.                
  1829.                 if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  1830.                     ErogazioniHelper erogazioniHelper = new ErogazioniHelper(request, pd, session);
  1831.                     erogazioniHelper.prepareErogazioneChange(TipoOperazione.CHANGE, asps, idSoggettoFruitore);
  1832.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, ErogazioniCostanti.OBJECT_NAME_ASPS_EROGAZIONI, ForwardParams.CHANGE());
  1833.                 }
  1834.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,
  1835.                         ForwardParams.CHANGE());
  1836.             }
  1837.            

  1838.             // Modifico i dati del servizio nel db
  1839.            
  1840.             boolean cambioAccordoAlreadyExists = false;
  1841.             if(
  1842.                     (gestioneFruitori || gestioneErogatori)
  1843.                     &&
  1844.                     // Per adesso non gestito, vedi spiegazione nel metodo
  1845.                     (AccordiServizioParteSpecificaCostanti.isModificaDatiIdentificativiVersoApsEsistente())
  1846.                 ){
  1847.                 IDServizio nuovoIdAps = apsHelper.getIDServizioFromValues(tiposervizio, nomeservizio, tipoSoggettoErogatore, nomeSoggettoErogatore, versione);
  1848.                 String nuovoURI = IDServizioFactory.getInstance().getUriFromIDServizio(nuovoIdAps);
  1849.                 String oldURI = IDServizioFactory.getInstance().getUriFromIDServizio(oldIdAps);
  1850.                 if(!nuovoURI.equals(oldURI)) {
  1851.                     cambioAccordoAlreadyExists = apsCore.existsAccordoServizioParteSpecifica(nuovoIdAps);
  1852.                 }
  1853.             }          
  1854.            
  1855.             asps = apsCore.getAccordoServizioParteSpecifica(Long.parseLong(id));
  1856.             fruitore = null;
  1857.             if(gestioneFruitori && idSoggettoFruitore!=null) {
  1858.                 // In questa modalità ci deve essere solo un fruitore
  1859.                 for (Fruitore check : asps.getFruitoreList()) {
  1860.                     if(check.getTipo().equals(idSoggettoFruitore.getTipo()) && check.getNome().equals(idSoggettoFruitore.getNome())) {
  1861.                         fruitore = check;
  1862.                         break;
  1863.                     }
  1864.                 }
  1865.             }
  1866.            
  1867.            
  1868.             // nuovi valori
  1869.            
  1870.             asps.setTipoSoggettoErogatore(tipoSoggettoErogatore);
  1871.             asps.setNomeSoggettoErogatore(nomeSoggettoErogatore);
  1872.            
  1873.             asps.setNome(nomeservizio);
  1874.             asps.setTipo(tiposervizio);
  1875.             asps.setDescrizione(descrizione);
  1876.             if (!"-".equals(profilo))
  1877.                 asps.setVersioneProtocollo(profilo);
  1878.             else
  1879.                 asps.setVersioneProtocollo(null);

  1880.             asps.setPrivato(privato);

  1881.             if (portType != null && !"".equals(portType) && !"-".equals(portType))
  1882.                 asps.setPortType(portType);
  1883.             else
  1884.                 asps.setPortType(null);

  1885.             // Connettore
  1886.             Connettore newConnettore = new Connettore();
  1887.             newConnettore.setId(asps.getConfigurazioneServizio().getConnettore().getId());
  1888.             newConnettore.setNome(asps.getConfigurazioneServizio().getConnettore().getNome());
  1889.             if (endpointtype.equals(ConnettoriCostanti.DEFAULT_CONNETTORE_TYPE_CUSTOM))
  1890.                 newConnettore.setTipo(tipoconn);
  1891.             else
  1892.                 newConnettore.setTipo(endpointtype);


  1893.             String oldConnT = asps.getConfigurazioneServizio().getConnettore().getTipo();
  1894.             if ((asps.getConfigurazioneServizio().getConnettore().getCustom()!=null && asps.getConfigurazioneServizio().getConnettore().getCustom()) &&
  1895.                     !asps.getConfigurazioneServizio().getConnettore().getTipo().equals(CostantiDB.CONNETTORE_TIPO_HTTPS) &&
  1896.                     !asps.getConfigurazioneServizio().getConnettore().getTipo().equals(CostantiDB.CONNETTORE_TIPO_FILE) &&
  1897.                     !asps.getConfigurazioneServizio().getConnettore().getTipo().equals(CostantiDB.CONNETTORE_TIPO_STATUS)){

  1898.                 oldConnT = ConnettoriCostanti.DEFAULT_CONNETTORE_TYPE_CUSTOM;
  1899.                 // mantengo vecchie proprieta connettore custom
  1900.                 for(int i=0; i<asps.getConfigurazioneServizio().getConnettore().sizePropertyList(); i++){
  1901.                     newConnettore.addProperty(asps.getConfigurazioneServizio().getConnettore().getProperty(i));
  1902.                 }
  1903.             }
  1904.             apsHelper.fillConnettore(newConnettore, connettoreDebug, endpointtype, oldConnT,
  1905.                     tipoconn, url, nome,
  1906.                     tipo, user, password, initcont, urlpgk, provurl,
  1907.                     connfact, sendas,
  1908.                     httpsurl, httpstipologia, httpshostverify,
  1909.                     httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  1910.                     httpsalgoritmo, httpsstato, httpskeystore,
  1911.                     httpspwdprivatekeytrust, httpspathkey,
  1912.                     httpstipokey, httpspwdkey,
  1913.                     httpspwdprivatekey, httpsalgoritmokey,
  1914.                     httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1915.                     proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1916.                     tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1917.                     opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1918.                     requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1919.                     requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1920.                     responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1921.                     tokenPolicy,
  1922.                     apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1923.                     connettoreStatusParams,
  1924.                     listExtendedConnettore);

  1925.             asps.getConfigurazioneServizio().setConnettore(newConnettore);

  1926.             // Accordo
  1927.             as = apcCore.getAccordoServizioSintetico(Long.parseLong(accordo));
  1928.             asps.setAccordoServizioParteComune(idAccordoFactory.getUriFromAccordo(as));
  1929.             asps.setIdAccordo(as.getId());

  1930.             asps.setTipologiaServizio(((servcorr != null) && servcorr.equals(Costanti.CHECK_BOX_ENABLED)) ? TipologiaServizio.CORRELATO : TipologiaServizio.NORMALE);

  1931.             IDServizio oldIDServizioForUpdate =
  1932.                     IDServizioFactory.getInstance().getIDServizioFromValues(oldtiposervizio, oldnomeservizio,
  1933.                             oldtiposoggetto, oldnomesoggetto,
  1934.                             (oldversioneaccordo!=null && !"".equals(oldversioneaccordo)) ? Integer.parseInt(oldversioneaccordo) : 1);
  1935.             asps.setOldIDServizioForUpdate(oldIDServizioForUpdate);
  1936.            
  1937.             // Versione
  1938.             if(apsCore.isSupportatoVersionamentoAccordiServizioParteSpecifica(tipoProtocollo)){
  1939.                 if(versione!=null && !"".equals(versione)){
  1940.                     asps.setVersione(Integer.parseInt(versione));
  1941.                 }
  1942.                 else{
  1943.                     asps.setVersione(1);
  1944.                 }
  1945.             }else{
  1946.                 asps.setVersione(1);
  1947.             }

  1948.             // stato
  1949.             asps.setStatoPackage(statoPackage);

  1950.             // descrizioneModificata
  1951.             if(modificaDescrizione) {
  1952.                 if(gestioneFruitori) {
  1953.                     if(fruitore!=null) {
  1954.                         fruitore.setDescrizione(descrizioneModificata);
  1955.                     }
  1956.                 }
  1957.                 else {
  1958.                     asps.setDescrizione(descrizioneModificata);
  1959.                 }
  1960.             }

  1961.             // Check stato
  1962.             if(apsHelper.isShowGestioneWorkflowStatoDocumenti() && !cambioAccordoAlreadyExists){

  1963.                 try{
  1964.                     boolean gestioneWsdlImplementativo = apcCore.showPortiAccesso(tipoProtocollo, serviceBinding, formatoSpecifica);
  1965.                     boolean checkConnettore = !gestioneFruitori && !gestioneErogatori;
  1966.                     apsCore.validaStatoAccordoServizioParteSpecifica(asps, gestioneWsdlImplementativo, checkConnettore);
  1967.                 }catch(ValidazioneStatoPackageException validazioneException){

  1968.                     // Setto messaggio di errore
  1969.                     pd.setMessage(validazioneException.toString());

  1970.                     // setto la barra del titolo
  1971.                     ServletUtils.setPageDataTitle(pd, lstParm );

  1972.                     portType = (portType != null && !"".equals(portType) ? portType : asps.getPortType());

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

  1975.                     dati.add(ServletUtils.getDataElementForEditModeFinished());
  1976.                    
  1977.                     // update della configurazione
  1978.                     strutsBean.consoleDynamicConfiguration.updateDynamicConfigAccordoServizioParteSpecifica(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, apsHelper, strutsBean.protocolProperties,
  1979.                             strutsBean.registryReader, strutsBean.configRegistryReader, oldIdAps);

  1980.                     dati = apsHelper.addHiddenFieldsToDati(tipoOp, id, null, null, dati);

  1981.                     dati = apsHelper.addServiziToDati(dati, nomeservizio, tiposervizio, oldnomeservizio, oldtiposervizio,
  1982.                             provider, tipoSoggettoErogatore, nomeSoggettoErogatore, soggettiList,
  1983.                             soggettiListLabel, accordo, serviceBinding,formatoSpecifica,
  1984.                             accordiList, accordiListLabel, servcorr, strutsBean.wsdlimpler, strutsBean.wsdlimplfru, tipoOp,
  1985.                             id, tipiServizioCompatibiliAccordo, profilo, portType, ptList, privato,uriAccordo,
  1986.                             descrizione,  descrizioneModificata,  
  1987.                             soggettoErogatoreID.getId(),statoPackage,oldStatoPackage,versione,versioniProtocollo,validazioneDocumenti,
  1988.                             null,null,generaPACheckSoggetto,asParteComuneCompatibili,
  1989.                             null,
  1990.                             null,null,null,null,null,null,false,
  1991.                             null,null,null,null,null,null,null,
  1992.                             tipoProtocollo,null,
  1993.                             null, null, providerSoggettoFruitore, tipoSoggettoFruitore, nomeSoggettoFruitore,
  1994.                             null, null, null, null, null,null,null,
  1995.                             null, null, null, null,
  1996.                             null,null,null,null,null,null,null,null,null,null,
  1997.                             null,null,null,null,null,
  1998.                             null,null,
  1999.                             null,null,null,null,moreThenOneImplementation, canaleStato, canaleAPI, canale, canaleList, gestioneCanaliEnabled,
  2000.                             null,null,null,null,null,
  2001.                             null,
  2002.                             null,null,null);

  2003.                     if(apsHelper.isModalitaCompleta() || (!soggettoOperativo && !gestioneFruitori)) {
  2004.                    
  2005.                         boolean forceEnableConnettore = false;
  2006.                         /**if( apsHelper.isModalitaStandard() && !TipiConnettore.DISABILITATO.getNome().equals(endpointtype) ) {
  2007.                             forceEnableConnettore = true;
  2008.                         }*/
  2009.                        
  2010.                         dati = apsHelper.addEndPointToDati(dati, serviceBinding, connettoreDebug, endpointtype, autenticazioneHttp,
  2011.                                 null, //(apsHelper.isModalitaCompleta() || !multitenant)?null:AccordiServizioParteSpecificaCostanti.LABEL_APS_APPLICATIVO_ESTERNO_PREFIX,
  2012.                                 url,
  2013.                                 nome, tipo, user, password, initcont, urlpgk,
  2014.                                 provurl, connfact, sendas, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,tipoOp,
  2015.                                 httpsurl, httpstipologia, httpshostverify,
  2016.                                 httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  2017.                                 httpsalgoritmo, httpsstato,
  2018.                                 httpskeystore, httpspwdprivatekeytrust,
  2019.                                 httpspathkey, httpstipokey, httpspwdkey,
  2020.                                 httpspwdprivatekey, httpsalgoritmokey,
  2021.                                 httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  2022.                                 tipoconn, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE, id,
  2023.                                 nomeservizio, tiposervizio, null, null, null,
  2024.                                 null,
  2025.                                 oldStatoPackage, true,
  2026.                                 isConnettoreCustomUltimaImmagineSalvata,
  2027.                                 proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  2028.                                 tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  2029.                                 opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  2030.                                 requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  2031.                                 requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  2032.                                 responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  2033.                                 autenticazioneToken, tokenPolicy, forcePDND, forceOAuth,
  2034.                                 listExtendedConnettore, forceEnableConnettore,
  2035.                                 tipoProtocollo, false, false, isApplicativiServerEnabled, erogazioneServizioApplicativoServerEnabled,
  2036.                                 erogazioneServizioApplicativoServer, saSoggetti,
  2037.                                 autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  2038.                                 connettoreStatusParams,
  2039.                                 postBackViaPost);
  2040.                        
  2041.                     }
  2042.                     else {
  2043.                         dati = apsHelper.addEndPointSAServerToDatiAsHidden(dati, erogazioneServizioApplicativoServerEnabled, erogazioneServizioApplicativoServer);
  2044.                        
  2045.                         dati = apsHelper.addEndPointToDatiAsHidden(dati, serviceBinding, connettoreDebug,
  2046.                                 endpointtype, autenticazioneHttp,
  2047.                                 url, nome, tipo,
  2048.                                 user, password, initcont, urlpgk,
  2049.                                 provurl, connfact, sendas, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,tipoOp,
  2050.                                 httpsurl, httpstipologia, httpshostverify,
  2051.                                 httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  2052.                                 httpsalgoritmo, httpsstato, httpskeystore,
  2053.                                 httpspwdprivatekeytrust, httpspathkey,
  2054.                                 httpstipokey, httpspwdkey,
  2055.                                 httpspwdprivatekey, httpsalgoritmokey,
  2056.                                 httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  2057.                                 tipoconn, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE, id,
  2058.                                 nomeservizio, tiposervizio, null, null, null,
  2059.                                 null, oldStatoPackage,
  2060.                                 proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  2061.                                 tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  2062.                                 opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  2063.                                 requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  2064.                                 requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  2065.                                 responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  2066.                                 autenticazioneToken, tokenPolicy,
  2067.                                 autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  2068.                                 connettoreStatusParams);
  2069.                        
  2070.                     }
  2071.                    
  2072.                     // aggiunta campi custom
  2073.                     if(addPropertiesHidden) {
  2074.                         dati = apsHelper.addProtocolPropertiesToDatiAsHidden(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  2075.                     }
  2076.                     else {
  2077.                         dati = apsHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  2078.                     }

  2079.                     pd.setDati(dati);

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

  2081.                     return ServletUtils.getStrutsForwardGeneralError(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,
  2082.                             ForwardParams.CHANGE());
  2083.                 }
  2084.             }


  2085.             String superUser = ServletUtils.getUserLoginFromSession(session);

  2086.             //imposto properties custom
  2087.             asps.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(strutsBean.protocolProperties, strutsBean.consoleOperationType, oldProtocolPropertyList));

  2088.             if(gestioneFruitori && fruitore!=null) {
  2089.                 if(modificaDescrizione || modificaProfilo) {
  2090.                     apsCore.setDataAggiornamentoFruitore(fruitore);
  2091.                 }
  2092.             }
  2093.             else if(gestioneErogatori &&
  2094.                 (modificaDescrizione || modificaProfilo)
  2095.                 ){
  2096.                 apsCore.setDataAggiornamentoServizio(asps); // per evitare l'aggiornamento dei fruitori
  2097.             }
  2098.            
  2099.             List<Object> oggettiDaAggiornare = AccordiServizioParteSpecificaUtilities.getOggettiDaAggiornare(asps, apsCore);
  2100.            
  2101.             // eseguo l'aggiornamento
  2102.             apsCore.performUpdateOperation(superUser, apsHelper.smista(), oggettiDaAggiornare.toArray());

  2103.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);

  2104.             String newUri = IDServizioFactory.getInstance().getUriFromAccordo(asps);
  2105.             String oldUri = IDServizioFactory.getInstance().getUriFromIDServizio(asps.getOldIDServizioForUpdate());
  2106.             if (!newUri.equals(oldUri) || cambiaAPI) {
  2107.                 ServletUtils.removeRisultatiRicercaFromSession(request, session, Liste.SERVIZI);
  2108.             }
  2109.            
  2110.             List<AccordoServizioParteSpecifica> listaServizi = null;
  2111.             if(apsCore.isVisioneOggettiGlobale(superUser)){
  2112.                 listaServizi = apsCore.soggettiServizioList(null, ricerca,permessi, gestioneFruitori, gestioneErogatori);
  2113.             }else{
  2114.                 listaServizi = apsCore.soggettiServizioList(superUser, ricerca,permessi, gestioneFruitori, gestioneErogatori);
  2115.             }

  2116.             apsHelper.prepareServiziList(ricerca, listaServizi);

  2117.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  2118.            
  2119.             if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  2120.                 ErogazioniHelper erogazioniHelper = new ErogazioniHelper(request, pd, session);
  2121.                 erogazioniHelper.prepareErogazioneChange(TipoOperazione.CHANGE, asps, idSoggettoFruitore);
  2122.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping, ErogazioniCostanti.OBJECT_NAME_ASPS_EROGAZIONI, ForwardParams.CHANGE());
  2123.             }
  2124.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,
  2125.                     ForwardParams.CHANGE());
  2126.         } catch (Exception e) {
  2127.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  2128.                     AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS,
  2129.                     ForwardParams.CHANGE());
  2130.         }  

  2131.     }
  2132. }