PorteApplicativeChange.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.pa;

  21. import java.util.ArrayList;
  22. import java.util.Arrays;
  23. import java.util.Collections;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;

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

  30. import org.apache.commons.lang.StringUtils;
  31. import org.apache.struts.action.Action;
  32. import org.apache.struts.action.ActionForm;
  33. import org.apache.struts.action.ActionForward;
  34. import org.apache.struts.action.ActionMapping;
  35. import org.openspcoop2.core.commons.Filtri;
  36. import org.openspcoop2.core.commons.Liste;
  37. import org.openspcoop2.core.config.CorrelazioneApplicativa;
  38. import org.openspcoop2.core.config.PortaApplicativa;
  39. import org.openspcoop2.core.config.PortaApplicativaAzione;
  40. import org.openspcoop2.core.config.PortaApplicativaBehaviour;
  41. import org.openspcoop2.core.config.PortaApplicativaServizio;
  42. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  43. import org.openspcoop2.core.config.PortaApplicativaSoggettoVirtuale;
  44. import org.openspcoop2.core.config.Proprieta;
  45. import org.openspcoop2.core.config.ValidazioneContenutiApplicativi;
  46. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  47. import org.openspcoop2.core.config.constants.MTOMProcessorType;
  48. import org.openspcoop2.core.config.constants.PortaApplicativaAzioneIdentificazione;
  49. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  50. import org.openspcoop2.core.config.constants.StatoFunzionalitaConWarning;
  51. import org.openspcoop2.core.config.constants.TipoAutenticazione;
  52. import org.openspcoop2.core.config.constants.TipoAutenticazionePrincipal;
  53. import org.openspcoop2.core.config.constants.TipoAutorizzazione;
  54. import org.openspcoop2.core.id.IDAccordo;
  55. import org.openspcoop2.core.id.IDPortaApplicativa;
  56. import org.openspcoop2.core.id.IDServizio;
  57. import org.openspcoop2.core.id.IDSoggetto;
  58. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  59. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  60. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  61. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  62. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  63. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  64. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  65. import org.openspcoop2.core.transazioni.utils.PropertiesSerializator;
  66. import org.openspcoop2.message.constants.ServiceBinding;
  67. import org.openspcoop2.pdd.core.CostantiPdD;
  68. import org.openspcoop2.pdd.core.autorizzazione.CostantiAutorizzazione;
  69. import org.openspcoop2.pdd.core.controllo_traffico.policy.config.PolicyConfiguration;
  70. import org.openspcoop2.pdd.core.integrazione.GruppoIntegrazione;
  71. import org.openspcoop2.pdd.core.integrazione.TipoIntegrazione;
  72. import org.openspcoop2.protocol.basic.config.ImplementationConfiguration;
  73. import org.openspcoop2.utils.date.DateManager;
  74. import org.openspcoop2.utils.transport.TransportUtils;
  75. import org.openspcoop2.web.ctrlstat.core.AutorizzazioneUtilities;
  76. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  77. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  78. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  79. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  80. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  81. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  82. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCostanti;
  83. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaHelper;
  84. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniCostanti;
  85. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniHelper;
  86. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCostanti;
  87. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  88. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  89. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;
  90. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  91. import org.openspcoop2.web.lib.mvc.Costanti;
  92. import org.openspcoop2.web.lib.mvc.DataElement;
  93. import org.openspcoop2.web.lib.mvc.ForwardParams;
  94. import org.openspcoop2.web.lib.mvc.GeneralData;
  95. import org.openspcoop2.web.lib.mvc.PageData;
  96. import org.openspcoop2.web.lib.mvc.Parameter;
  97. import org.openspcoop2.web.lib.mvc.ServletUtils;
  98. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  99. import org.openspcoop2.web.lib.users.dao.PermessiUtente;

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

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

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

  114.         // Inizializzo PageData
  115.         PageData pd = new PageData();

  116.         GeneralHelper generalHelper = new GeneralHelper(session);

  117.         // Inizializzo GeneralData
  118.         GeneralData gd = generalHelper.initGeneralData(request);

  119.         try {
  120.             PorteApplicativeHelper porteApplicativeHelper = new PorteApplicativeHelper(request, pd, session);
  121.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione delle porte applicative
  122.             Integer parentPA = ServletUtils.getIntegerAttributeFromSession(PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT, session, request);
  123.             if(parentPA == null) parentPA = PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_NONE;
  124.            
  125.             String nomePorta = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_NOME_PORTA);
  126.             String idPorta = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID);
  127.             String idsogg = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_SOGGETTO);
  128.             int soggInt = Integer.parseInt(idsogg);
  129.             String descr = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_DESCRIZIONE);
  130.             String statoPorta = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_STATO_PORTA);
  131.             String soggvirt = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SOGGETTO_VIRTUALE);
  132.             IDSoggetto idSoggettoVirtuale = null;
  133.             if ((soggvirt != null) && !soggvirt.equals("") && !soggvirt.equals("-")) {
  134.                 idSoggettoVirtuale = new IDSoggetto(soggvirt.split("/")[0],soggvirt.split("/")[1]);
  135.             }
  136.             String servizio = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SERVIZIO);
  137.             String azione = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_AZIONE);
  138.             String stateless = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_STATELESS);
  139.             String behaviour = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_BEHAVIOUR);
  140.             String gestBody = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_GESTIONE_BODY);
  141.             String gestManifest = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_GESTIONE_MANIFEST);
  142.             String ricsim = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_RICEVUTA_ASINCRONA_SIMMETRICA);
  143.             String ricasim = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_RICEVUTA_ASINCRONA_ASIMMETRICA);
  144.             String scadcorr = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SCADENZA_CORRELAZIONE_APPLICATIVA);
  145.             String servizioApplicativo = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_SERVIZIO_APPLICATIVO);

  146.             String azid = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_AZIONE_ID);
  147.             String modeaz = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_AZIONE);
  148.             String forceWsdlBased = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_FORCE_INTERFACE_BASED);
  149.            
  150.             String messageEngine = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_GESTIONE_MESSAGE_ENGINE);
  151.            
  152.             BinaryParameter allegatoXacmlPolicy = porteApplicativeHelper.getBinaryParameter(CostantiControlStation.PARAMETRO_DOCUMENTO_SICUREZZA_XACML_POLICY);
  153.            
  154.             String idAsps = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_ASPS);
  155.             if(idAsps == null)
  156.                 idAsps = "";
  157.            
  158.             String idTab = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_ID_TAB);
  159.             if(!porteApplicativeHelper.isModalitaCompleta() && StringUtils.isNotEmpty(idTab)) {
  160.                 ServletUtils.setObjectIntoSession(request, session, idTab, CostantiControlStation.PARAMETRO_ID_TAB);
  161.             }
  162.            
  163.             String serviceBindingS = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SERVICE_BINDING);
  164.             ServiceBinding serviceBinding = null;
  165.             if(StringUtils.isNotEmpty(serviceBindingS))
  166.                 serviceBinding = ServiceBinding.valueOf(serviceBindingS);
  167.            
  168.             String integrazioneStato = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_INTEGRAZIONE_STATO);
  169.             String integrazione = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_INTEGRAZIONE);
  170.             String[] integrazioneGruppi = porteApplicativeHelper.getParameterValues(CostantiControlStation.PARAMETRO_PORTE_METADATI_GRUPPO);
  171.                    
  172.             List<GruppoIntegrazione> integrazioneGruppiDaVisualizzare = new ArrayList<>();  
  173.             Map<String, List<String>> integrazioneGruppiValoriDeiGruppi = new HashMap<>();
  174.             boolean isConfigurazione =false;
  175.             if(parentPA!=null) {
  176.                 isConfigurazione = (parentPA.intValue() == PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE);
  177.             }
  178.             boolean modificaDescrizione=false;
  179.             if(isConfigurazione) {
  180.                 modificaDescrizione = ServletUtils.isCheckBoxEnabled(porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONFIGURAZIONE_DESCRIZIONE));
  181.             }
  182.             boolean datiAltroPorta =false;
  183.             if(isConfigurazione) {
  184.                 datiAltroPorta = ServletUtils.isCheckBoxEnabled(porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONFIGURAZIONE_ALTRO_PORTA));
  185.             }
  186.             boolean visualizzaSezioneOpzioniAvanzate = !(porteApplicativeHelper.isModalitaStandard() || (isConfigurazione && !datiAltroPorta));

  187.             // dal secondo accesso in poi il calcolo dei gruppi da visualizzare avviene leggendo i parametri dalla richiesta
  188.             if(integrazioneStato != null && visualizzaSezioneOpzioniAvanzate) {
  189.                 if(integrazioneStato.equals(CostantiControlStation.VALUE_PARAMETRO_PORTE_INTEGRAZIONE_STATO_RIDEFINITO)) {
  190.                     if(integrazioneGruppi != null) {
  191.                         for (String gruppoSelezionato : integrazioneGruppi) {
  192.                             integrazioneGruppiDaVisualizzare.add(GruppoIntegrazione.toEnumConstant(gruppoSelezionato));
  193.                         }
  194.                        
  195.                         // leggere i valori selezionati per ogni gruppo selezionato
  196.                         for (GruppoIntegrazione group : integrazioneGruppiDaVisualizzare) {
  197.                             List<String> valoriGruppoList = new ArrayList<>();
  198.                             if(group.isMulti()) {
  199.                                 String[] valoriGruppo = porteApplicativeHelper.getParameterValues(CostantiControlStation.PARAMETRO_PORTE_METADATI_GRUPPO_SINGOLO+group.getValue());
  200.                                 if(valoriGruppo != null) {
  201.                                     valoriGruppoList.addAll(Arrays.asList(valoriGruppo));
  202.                                 }
  203.                             } else {
  204.                                 String valoreGruppo = porteApplicativeHelper.getParameter(CostantiControlStation.PARAMETRO_PORTE_METADATI_GRUPPO_SINGOLO+group.getValue());
  205.                                 if(valoreGruppo != null) {
  206.                                     valoriGruppoList.add(valoreGruppo);
  207.                                 }
  208.                             }
  209.                            
  210.                             integrazioneGruppiValoriDeiGruppi.put(group.getValue(), valoriGruppoList);                          
  211.                         }
  212.                     }
  213.                 }
  214.             }
  215.            
  216.             // RateLimiting
  217.             String ctModalitaSincronizzazione = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_SINCRONIZZAZIONE);
  218.             String ctImplementazione = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_IMPLEMENTAZIONE);
  219.             String ctContatori = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_CONTATORI);
  220.             String ctTipologia = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_TIPOLOGIA);
  221.             String ctHeaderHttp = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_GENERAZIONE_HEADER_HTTP);
  222.             String ctHeaderHttpLimit = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT);
  223.             String ctHeaderHttpRemaining = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING);
  224.             String ctHeaderHttpReset = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_GENERAZIONE_HEADER_HTTP_RESET);
  225.             String ctHeaderHttpRetryAfter = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER);
  226.             String ctHeaderHttpRetryAfterBackoff = porteApplicativeHelper.getParameter(org.openspcoop2.core.controllo_traffico.constants.Costanti.MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER_BACKOFF_SECONDS);
  227.            
  228.             // check su oldNomePD
  229.             PageData pdOld =  ServletUtils.getPageDataFromSession(request, session);
  230.             String oldNomePA = pdOld.getHidden(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_OLD_NOME_PA);
  231.             oldNomePA = (((oldNomePA != null) && !oldNomePA.equals("")) ? oldNomePA : nomePorta);
  232.            
  233.             // Preparo il menu
  234.             porteApplicativeHelper.makeMenu();

  235.             String postBackElementName = porteApplicativeHelper.getPostBackElementName();
  236.             if(postBackElementName!=null && PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_AZIONE.equals(postBackElementName)) {
  237.                 // ho cambiato modalita', elimino il valore
  238.                 azione = null;
  239.             }
  240.            
  241.             PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore();
  242.             SoggettiCore soggettiCore = new SoggettiCore(porteApplicativeCore);
  243.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore(porteApplicativeCore);
  244.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(porteApplicativeCore);
  245.             ServiziApplicativiCore saCore = new ServiziApplicativiCore(porteApplicativeCore);
  246.            
  247.             boolean usataInConfigurazioni = false;
  248.             boolean usataInConfigurazioneDefault = false;
  249.             boolean addTrattinoSelezioneNonEffettuata = false;

  250.             // Prendo la porta applicativa
  251.             PortaApplicativa pa = porteApplicativeCore.getPortaApplicativa(Integer.parseInt(idPorta));

  252.             // Prendo nome, tipo e pdd del soggetto
  253.             String tipoNomeSoggettoProprietario = null;
  254.             String tipoSoggettoProprietario = null;
  255.             String nomeSoggettoProprietario = null;
  256.             if(porteApplicativeCore.isRegistroServiziLocale()){
  257.                 org.openspcoop2.core.registry.Soggetto soggetto = soggettiCore.getSoggettoRegistro(soggInt);
  258.                 tipoNomeSoggettoProprietario = soggetto.getTipo() + "/" + soggetto.getNome();
  259.                 tipoSoggettoProprietario = soggetto.getTipo();
  260.                 nomeSoggettoProprietario = soggetto.getNome();
  261.             }else{
  262.                 org.openspcoop2.core.config.Soggetto soggetto = soggettiCore.getSoggetto(soggInt);
  263.                 tipoNomeSoggettoProprietario = soggetto.getTipo() + "/" + soggetto.getNome();
  264.                 tipoSoggettoProprietario = soggetto.getTipo();
  265.                 nomeSoggettoProprietario = soggetto.getNome();
  266.             }

  267.             String protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(tipoSoggettoProprietario);

  268.             boolean isSupportatoAutenticazioneSoggetti = soggettiCore.isSupportatoAutenticazioneSoggetti(protocollo);
  269.            
  270.             Long idAspsLong;
  271.             if(idAsps.equals("")) {
  272.                 PortaApplicativaServizio servizio2 = pa.getServizio();
  273.                 idAspsLong = servizio2.getId();
  274.             } else {
  275.                 idAspsLong = Long.parseLong(idAsps);
  276.             }
  277.            
  278.             // controllo se la porta e' usata in qualche configurazione e se e' usata nella configurazione di default
  279.             MappingErogazionePortaApplicativa mappingErogazione = new MappingErogazionePortaApplicativa();
  280.             AccordoServizioParteSpecifica asps = apsCore.getAccordoServizioParteSpecifica(idAspsLong);
  281.             IDServizio idServizioCheck = IDServizioFactory.getInstance().getIDServizioFromAccordo(asps);
  282.             mappingErogazione.setIdServizio(idServizioCheck);
  283.             IDPortaApplicativa idPa = new IDPortaApplicativa();
  284.             idPa.setNome(oldNomePA);
  285.             mappingErogazione.setIdPortaApplicativa(idPa);
  286.             usataInConfigurazioni = porteApplicativeCore.existsMappingErogazionePortaApplicativa(mappingErogazione);
  287.             IDPortaApplicativa idPortaApplicativaAssociataDefault = porteApplicativeCore.getIDPortaApplicativaAssociataDefault(idServizioCheck);
  288.             usataInConfigurazioneDefault = (idPortaApplicativaAssociataDefault != null && idPortaApplicativaAssociataDefault.getNome().equals(idPa.getNome()));
  289.            
  290.             // Informazioni sul numero di ServiziApplicativi, Correlazione Applicativa e stato Message-Security
  291.             int numSA =pa.sizeServizioApplicativoList();
  292.             int numRuoli = 0;
  293.             if(pa.getRuoli()!=null){
  294.                 numRuoli = pa.getRuoli().sizeRuoloList();
  295.             }
  296.             int numScope = 0;
  297.             if(pa.getScope()!=null){
  298.                 numScope = pa.getScope().sizeScopeList();
  299.             }
  300.            
  301.             int numAutenticatiToken = 0;
  302.             if(pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getServiziApplicativi()!=null){
  303.                 numAutenticatiToken = pa.getAutorizzazioneToken().getServiziApplicativi().sizeServizioApplicativoList();
  304.             }
  305.            
  306.             int numRuoliToken = 0;
  307.             if(pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getRuoli()!=null){
  308.                 numRuoliToken = pa.getAutorizzazioneToken().getRuoli().sizeRuoloList();
  309.             }
  310.            
  311.             String[] servizioApplicativoList = null;
  312.             Long idSa = null;
  313.             if(numSA<=1){
  314.                 if(servizioApplicativo==null || "".equals(servizioApplicativo)){
  315.                     if(numSA==1){
  316.                         servizioApplicativo = pa.getServizioApplicativo(0).getNome();
  317.                         idSa = pa.getServizioApplicativo(0).getIdServizioApplicativo();
  318.                     }
  319.                     else{
  320.                         servizioApplicativo = "-";
  321.                     }
  322.                 }
  323.                 String[]  servizioApplicativoListTmp = PorteApplicativeServizioApplicativoAdd.loadSAErogatori(pa, saCore, soggInt, false);
  324.                 servizioApplicativoList = new String[servizioApplicativoListTmp.length+1];
  325.                 servizioApplicativoList[0] = "-";
  326.                 for (int i = 0; i < servizioApplicativoListTmp.length; i++) {
  327.                     servizioApplicativoList[(i+1)] = servizioApplicativoListTmp[i];
  328.                 }
  329.             }
  330.             else{
  331.                 servizioApplicativo = null;
  332.             }
  333.            
  334.             String statoMessageSecurity  = pa.getStatoMessageSecurity() ;
  335.             int numCorrelazioneReq =0;
  336.             if(pa.getCorrelazioneApplicativa() != null)
  337.                 numCorrelazioneReq  = pa.getCorrelazioneApplicativa().sizeElementoList();

  338.             int numCorrelazioneRes =0;
  339.             if(pa.getCorrelazioneApplicativaRisposta() != null)
  340.                 numCorrelazioneRes = pa.getCorrelazioneApplicativaRisposta().sizeElementoList();

  341.             int numProprProt = pa.sizeProprietaList();

  342.             // Stato MTOM
  343.             boolean isMTOMAbilitatoReq = false;
  344.             boolean isMTOMAbilitatoRes= false;
  345.             if(pa.getMtomProcessor()!= null){
  346.                 if(pa.getMtomProcessor().getRequestFlow() != null &&
  347.                     pa.getMtomProcessor().getRequestFlow().getMode() != null){
  348.                     MTOMProcessorType mode = pa.getMtomProcessor().getRequestFlow().getMode();
  349.                     if(!mode.equals(MTOMProcessorType.DISABLE))
  350.                         isMTOMAbilitatoReq = true;
  351.                 }

  352.                 if(pa.getMtomProcessor().getResponseFlow() != null &&
  353.                     pa.getMtomProcessor().getResponseFlow().getMode() != null){
  354.                     MTOMProcessorType mode = pa.getMtomProcessor().getResponseFlow().getMode();
  355.                     if(!mode.equals(MTOMProcessorType.DISABLE))
  356.                         isMTOMAbilitatoRes = true;
  357.                 }
  358.             }

  359.             String statoMTOM  = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_MTOM_DISABILITATO;

  360.             if(isMTOMAbilitatoReq || isMTOMAbilitatoRes)
  361.                 statoMTOM  = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_MTOM_ABILITATO;


  362.             // Prendo il numero di correlazioni applicative
  363.             CorrelazioneApplicativa ca = pa.getCorrelazioneApplicativa();
  364.             int numCorrApp = 0;
  365.             if (ca != null) {
  366.                 numCorrApp = ca.sizeElementoList();
  367.             }
  368.            
  369.             String statoValidazione = null;
  370.             String tipoValidazione = null;
  371.             String applicaMTOM = "";
  372.             ValidazioneContenutiApplicativi vx = pa.getValidazioneContenutiApplicativi();
  373.             if (vx == null) {
  374.                 statoValidazione = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_VALIDAZIONE_DISABILITATO;
  375.                 tipoValidazione = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_TIPO_VALIDAZIONE_INTERFACE;
  376.             } else {
  377.                 if(vx.getStato()!=null)
  378.                     statoValidazione = vx.getStato().toString();
  379.                 if ((statoValidazione == null) || "".equals(statoValidazione)) {
  380.                     statoValidazione = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_VALIDAZIONE_DISABILITATO;
  381.                 }
  382.                
  383.                 if(vx.getTipo()!=null)
  384.                     tipoValidazione = vx.getTipo().toString();
  385.                 if (tipoValidazione == null || "".equals(tipoValidazione)) {
  386.                     tipoValidazione = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_TIPO_VALIDAZIONE_INTERFACE ;
  387.                 }
  388.                
  389.                 if(vx.getAcceptMtomMessage()!=null &&
  390.                     vx.getAcceptMtomMessage().equals(StatoFunzionalita.ABILITATO)) {
  391.                     applicaMTOM = Costanti.CHECK_BOX_ENABLED;
  392.                 }
  393.             }

  394.             String autenticazione = pa.getAutenticazione();
  395.             String autenticazioneCustom = null;
  396.             if (autenticazione != null &&
  397.                     !TipoAutenticazione.getValues().contains(autenticazione)) {
  398.                 autenticazioneCustom = autenticazione;
  399.                 autenticazione = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PORTE_AUTENTICAZIONE_CUSTOM;
  400.             }

  401.             String autenticazioneOpzionale = "";
  402.             if(pa.getAutenticazioneOpzionale()!=null &&
  403.                 pa.getAutenticazioneOpzionale().equals(StatoFunzionalita.ABILITATO)) {
  404.                 autenticazioneOpzionale = Costanti.CHECK_BOX_ENABLED;
  405.             }
  406.            
  407.             TipoAutenticazionePrincipal autenticazionePrincipal = porteApplicativeCore.getTipoAutenticazionePrincipal(pa.getProprietaAutenticazioneList());
  408.             List<String> autenticazioneParametroList = porteApplicativeCore.getParametroAutenticazione(autenticazione, pa.getProprietaAutenticazioneList());

  409.             String autorizzazione = null;
  410.             String autorizzazioneCustom = null;
  411.             String autorizzazioneAutenticati = null;
  412.             String autorizzazioneRuoli = null;
  413.             String autorizzazioneRuoliTipologia = null;
  414.             String ruoloMatch = null;
  415.             String autorizzazioneContenuti = pa.getAutorizzazioneContenuto();
  416.             String autorizzazioneContenutiProperties = null;
  417.             String autorizzazioneContenutiStato = null;
  418.            
  419.             if(autorizzazioneContenuti == null) {
  420.                 autorizzazioneContenutiStato = StatoFunzionalita.DISABILITATO.getValue();
  421.             } else if(autorizzazioneContenuti.equals(CostantiAutorizzazione.AUTORIZZAZIONE_CONTENUTO_BUILT_IN)) {
  422.                 autorizzazioneContenutiStato = StatoFunzionalita.ABILITATO.getValue();
  423.                 List<Proprieta> proprietaAutorizzazioneContenutoList = pa.getProprietaAutorizzazioneContenutoList();
  424.                 StringBuilder sb = new StringBuilder();
  425.                 for (Proprieta proprieta : proprietaAutorizzazioneContenutoList) {
  426.                     if(sb.length() >0)
  427.                         sb.append("\n");
  428.                    
  429.                     sb.append(proprieta.getNome()).append("=").append(proprieta.getValore());
  430.                 }                      
  431.                
  432.                 autorizzazioneContenutiProperties = sb.toString();
  433.             } else { // custom
  434.                 autorizzazioneContenutiStato = CostantiControlStation.VALUE_PARAMETRO_PORTE_CONTROLLO_ACCESSI_AUTORIZZAZIONE_CONTENUTI_STATO_CUSTOM;
  435.             }
  436.            
  437.             if (pa.getAutorizzazione() != null &&
  438.                     !TipoAutorizzazione.getAllValues().contains(pa.getAutorizzazione())) {
  439.                 autorizzazioneCustom = pa.getAutorizzazione();
  440.                 autorizzazione = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PORTE_AUTORIZZAZIONE_CUSTOM;
  441.             }
  442.             else{
  443.                 autorizzazione = AutorizzazioneUtilities.convertToStato(pa.getAutorizzazione());
  444.                 if(TipoAutorizzazione.isAuthenticationRequired(pa.getAutorizzazione()))
  445.                     autorizzazioneAutenticati = Costanti.CHECK_BOX_ENABLED;
  446.                 if(TipoAutorizzazione.isRolesRequired(pa.getAutorizzazione()))
  447.                     autorizzazioneRuoli = Costanti.CHECK_BOX_ENABLED;
  448.                 autorizzazioneRuoliTipologia = AutorizzazioneUtilities.convertToRuoloTipologia(pa.getAutorizzazione()).getValue();
  449.             }
  450.            
  451.            
  452.             if (ruoloMatch == null &&
  453.                 pa.getRuoli()!=null && pa.getRuoli().getMatch()!=null){
  454.                 ruoloMatch = pa.getRuoli().getMatch().getValue();
  455.             }
  456.            
  457.             String gestioneToken = null;
  458.             String gestioneTokenPolicy = null;
  459.             String gestioneTokenOpzionale = null;
  460.             String gestioneTokenValidazioneInput = null;
  461.             String gestioneTokenIntrospection = null;
  462.             String gestioneTokenUserInfo = null;
  463.             String gestioneTokenTokenForward = null;
  464.            
  465.             String autenticazioneTokenIssuer = null;
  466.             String autenticazioneTokenClientId = null;
  467.             String autenticazioneTokenSubject = null;
  468.             String autenticazioneTokenUsername = null;
  469.             String autenticazioneTokenEMail = null;
  470.            
  471.             String autorizzazioneAutenticatiToken = null;
  472.             String autorizzazioneRuoliToken = null;
  473.             String autorizzazioneRuoliTipologiaToken = null;
  474.             String autorizzazioneRuoliMatchToken = null;
  475.            
  476.             String autorizzazioneTokenOptions = null;
  477.             String autorizzazioneToken = null;
  478.            
  479.             String identificazioneAttributiStato = null;
  480.             String [] attributeAuthoritySelezionate = null;
  481.             String attributeAuthorityAttributi = null;
  482.            
  483.             if(pa.getGestioneToken() != null) {
  484.                 gestioneTokenPolicy = pa.getGestioneToken().getPolicy();
  485.                 if(gestioneTokenPolicy == null) {
  486.                     gestioneToken = StatoFunzionalita.DISABILITATO.getValue();
  487.                     gestioneTokenPolicy = CostantiControlStation.DEFAULT_VALUE_NON_SELEZIONATO;
  488.                 } else {
  489.                     gestioneToken = StatoFunzionalita.ABILITATO.getValue();
  490.                 }
  491.                
  492.                 StatoFunzionalita tokenOpzionale = pa.getGestioneToken().getTokenOpzionale();
  493.                 if(tokenOpzionale == null) {
  494.                     gestioneTokenOpzionale = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_OPZIONALE;
  495.                 }else {
  496.                     gestioneTokenOpzionale = tokenOpzionale.getValue();
  497.                 }
  498.                
  499.                 StatoFunzionalitaConWarning validazione = pa.getGestioneToken().getValidazione();
  500.                 if(validazione == null) {
  501.                     gestioneTokenValidazioneInput = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_VALIDAZIONE_INPUT;
  502.                 }else {
  503.                     gestioneTokenValidazioneInput = validazione.getValue();
  504.                 }
  505.                
  506.                 StatoFunzionalitaConWarning introspection = pa.getGestioneToken().getIntrospection();
  507.                 if(introspection == null) {
  508.                     gestioneTokenIntrospection = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_INTROSPECTION;
  509.                 }else {
  510.                     gestioneTokenIntrospection = introspection.getValue();
  511.                 }
  512.                
  513.                 StatoFunzionalitaConWarning userinfo = pa.getGestioneToken().getUserInfo();
  514.                 if(userinfo == null) {
  515.                     gestioneTokenUserInfo = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_USER_INFO;
  516.                 }else {
  517.                     gestioneTokenUserInfo = userinfo.getValue();
  518.                 }
  519.                
  520.                 StatoFunzionalita tokenForward = pa.getGestioneToken().getForward();
  521.                 if(tokenForward == null) {
  522.                     gestioneTokenTokenForward = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TOKEN_FORWARD;
  523.                 }else {
  524.                     gestioneTokenTokenForward = tokenForward.getValue();
  525.                 }
  526.                
  527.                 autorizzazioneTokenOptions = pa.getGestioneToken().getOptions();
  528.                 if((autorizzazioneTokenOptions!=null && !"".equals(autorizzazioneTokenOptions))) {
  529.                     autorizzazioneToken = Costanti.CHECK_BOX_ENABLED;
  530.                 }
  531.                 else {
  532.                     autorizzazioneToken = Costanti.CHECK_BOX_DISABLED;
  533.                 }
  534.                
  535.                 if(pa.getGestioneToken().getAutenticazione() != null) {
  536.                    
  537.                     StatoFunzionalita issuer = pa.getGestioneToken().getAutenticazione().getIssuer();
  538.                     if(issuer == null) {
  539.                         autenticazioneTokenIssuer = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_ISSUER;
  540.                     }else {
  541.                         autenticazioneTokenIssuer = issuer.getValue();
  542.                     }
  543.                    
  544.                     StatoFunzionalita clientId = pa.getGestioneToken().getAutenticazione().getClientId();
  545.                     if(clientId == null) {
  546.                         autenticazioneTokenClientId = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_CLIENT_ID;
  547.                     }else {
  548.                         autenticazioneTokenClientId = clientId.getValue();
  549.                     }
  550.                    
  551.                     StatoFunzionalita subject = pa.getGestioneToken().getAutenticazione().getSubject();
  552.                     if(subject == null) {
  553.                         autenticazioneTokenSubject = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_SUBJECT;
  554.                     }else {
  555.                         autenticazioneTokenSubject = subject.getValue();
  556.                     }
  557.                    
  558.                     StatoFunzionalita username = pa.getGestioneToken().getAutenticazione().getUsername();
  559.                     if(username == null) {
  560.                         autenticazioneTokenUsername = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_USERNAME;
  561.                     }else {
  562.                         autenticazioneTokenUsername = username.getValue();
  563.                     }
  564.                    
  565.                     StatoFunzionalita mailTmp = pa.getGestioneToken().getAutenticazione().getEmail();
  566.                     if(mailTmp == null) {
  567.                         autenticazioneTokenEMail = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_EMAIL;
  568.                     }else {
  569.                         autenticazioneTokenEMail = mailTmp.getValue();
  570.                     }
  571.                    
  572.                 }
  573.                 else {
  574.                     autenticazioneTokenIssuer = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_ISSUER;
  575.                     autenticazioneTokenClientId = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_CLIENT_ID;
  576.                     autenticazioneTokenSubject = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_SUBJECT;
  577.                     autenticazioneTokenUsername = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_USERNAME;
  578.                     autenticazioneTokenEMail = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_EMAIL;
  579.                 }
  580.             }
  581.             else {
  582.                 gestioneToken = StatoFunzionalita.DISABILITATO.getValue();
  583.                 gestioneTokenPolicy = CostantiControlStation.DEFAULT_VALUE_NON_SELEZIONATO;
  584.                 gestioneTokenOpzionale = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_OPZIONALE;
  585.                
  586.                 gestioneTokenValidazioneInput = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_VALIDAZIONE_INPUT;
  587.                 gestioneTokenIntrospection = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_INTROSPECTION;
  588.                 gestioneTokenUserInfo = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_USER_INFO;
  589.                 gestioneTokenTokenForward = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TOKEN_FORWARD;
  590.                
  591.                 autenticazioneTokenIssuer = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_ISSUER;
  592.                 autenticazioneTokenClientId = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_CLIENT_ID;
  593.                 autenticazioneTokenSubject = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_SUBJECT;
  594.                 autenticazioneTokenUsername = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_USERNAME;
  595.                 autenticazioneTokenEMail = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_AUTENTICAZIONE_EMAIL;
  596.             }
  597.            
  598.             if(pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getAutorizzazioneApplicativi()!=null) {
  599.                 autorizzazioneAutenticatiToken = StatoFunzionalita.ABILITATO.equals(pa.getAutorizzazioneToken().getAutorizzazioneApplicativi()) ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  600.             }
  601.            
  602.             if(pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getAutorizzazioneRuoli()!=null) {
  603.                 autorizzazioneRuoliToken = StatoFunzionalita.ABILITATO.equals(pa.getAutorizzazioneToken().getAutorizzazioneRuoli()) ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  604.             }
  605.            
  606.             if(pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getTipologiaRuoli()!=null) {
  607.                 autorizzazioneRuoliTipologiaToken = pa.getAutorizzazioneToken().getTipologiaRuoli().getValue();
  608.             }
  609.            
  610.             if(pa.getAutorizzazioneToken()!=null && pa.getAutorizzazioneToken().getRuoli()!=null && pa.getAutorizzazioneToken().getRuoli().getMatch()!=null){
  611.                 autorizzazioneRuoliMatchToken = pa.getAutorizzazioneToken().getRuoli().getMatch().getValue();
  612.             }
  613.                        
  614.             String autorizzazioneScope = null;
  615.             String autorizzazioneScopeMatch = null;
  616.            
  617.             if(pa.getScope() != null) {
  618.                 autorizzazioneScope =  pa.getScope().getStato().equals(StatoFunzionalita.ABILITATO) ? Costanti.CHECK_BOX_ENABLED : "";
  619.                                
  620.                 if(pa.getScope()!=null && pa.getScope().getMatch()!=null){
  621.                     autorizzazioneScopeMatch = pa.getScope().getMatch().getValue();
  622.                 }
  623.             } else {
  624.                 autorizzazioneScope = "";
  625.             }
  626.            
  627.             if(identificazioneAttributiStato==null) {
  628.                 identificazioneAttributiStato = pa.sizeAttributeAuthorityList()>0 ? StatoFunzionalita.ABILITATO.getValue() : StatoFunzionalita.DISABILITATO.getValue();
  629.                 if(pa.sizeAttributeAuthorityList()>0) {
  630.                     attributeAuthoritySelezionate = porteApplicativeCore.buildAuthorityArrayString(pa.getAttributeAuthorityList());
  631.                     attributeAuthorityAttributi = porteApplicativeCore.buildAttributesStringFromAuthority(pa.getAttributeAuthorityList());
  632.                 }
  633.             }
  634.            
  635.             // se ho modificato il soggetto ricalcolo il servizio e il service binding
  636.             if (postBackElementName != null) {
  637.                 if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SOGGETTO_VIRTUALE)) {
  638.                     servizio = null;
  639.                     serviceBinding = null;
  640.                 } else if(postBackElementName.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SERVIZIO)) {
  641.                     serviceBinding = null;
  642.                 }  
  643.             }
  644.            
  645.             List<String> tipiServizioCompatibiliAccordo = new ArrayList<>();
  646.             if(serviceBinding == null) {
  647.                 List<ServiceBinding> serviceBindingListProtocollo = apsCore.getServiceBindingListProtocollo(protocollo);
  648.                
  649.                 if(serviceBindingListProtocollo != null && !serviceBindingListProtocollo.isEmpty()) {
  650.                     for (ServiceBinding serviceBinding2 : serviceBindingListProtocollo) {
  651.                         List<String> tipiServizioCompatibiliAccordoTmp = apsCore.getTipiServiziGestitiProtocollo(protocollo,serviceBinding2);
  652.                        
  653.                         for (String tipoTmp : tipiServizioCompatibiliAccordoTmp) {
  654.                             if(!tipiServizioCompatibiliAccordo.contains(tipoTmp))
  655.                                 tipiServizioCompatibiliAccordo.add(tipoTmp);
  656.                         }
  657.                     }
  658.                 }
  659.             } else {
  660.                 tipiServizioCompatibiliAccordo = apsCore.getTipiServiziGestitiProtocollo(protocollo,serviceBinding);
  661.             }
  662.            
  663.             List<Parameter> lstParm = porteApplicativeHelper.getTitoloPA(parentPA, idsogg, idAsps);
  664.            
  665.             Boolean vistaErogazioni = ServletUtils.getBooleanAttributeFromSession(ErogazioniCostanti.ASPS_EROGAZIONI_ATTRIBUTO_VISTA_EROGAZIONI, session, request).getValue();
  666.             boolean datiAltroApi = ServletUtils.isCheckBoxEnabled(porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONFIGURAZIONE_ALTRO_API));
  667.             boolean datiInvocazione = ServletUtils.isCheckBoxEnabled(porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONFIGURAZIONE_DATI_INVOCAZIONE));
  668.                        
  669.             String nomeBreadCrumb = oldNomePA;
  670.             if( parentPA!=null && (parentPA.intValue() == PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE) ) {
  671. /**             List<MappingErogazionePortaApplicativa> mappingServiziPorteAppList = apsCore.mappingServiziPorteAppList(idServizioCheck, idAspsLong, null);
  672. //              MappingErogazionePortaApplicativa mappingErogazionePortaApplicativa = null;
  673. //              for (MappingErogazionePortaApplicativa mappingErogazionePortaApplicativaTmp : mappingServiziPorteAppList) {
  674. //                  if(mappingErogazionePortaApplicativaTmp.getIdPortaApplicativa().getNome().equals(oldNomePA)) {
  675. //                      mappingErogazionePortaApplicativa = mappingErogazionePortaApplicativaTmp;
  676. //                      break;
  677. //                  }
  678. //              }
  679. //              
  680. //              if(mappingErogazionePortaApplicativa.isDefault()) {
  681. //                  nomeBreadCrumb = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_MAPPING_EROGAZIONE_PA_NOME_DEFAULT;
  682. //              } else {
  683. //                  nomeBreadCrumb = mappingErogazionePortaApplicativa.getNome();
  684. //              }*/
  685.                
  686.                 if(datiInvocazione) {
  687.                     lstParm.remove(lstParm.size()-1);
  688.                     if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  689.                         lstParm.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_PORTE_APPLICATIVE_MODIFICA_DATI_INVOCAZIONE,null));
  690.                     } else {
  691.                         lstParm.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS_DATI_INVOCAZIONE_DI + porteApplicativeHelper.getLabelIdServizio(asps),null));
  692.                     }
  693.                     nomeBreadCrumb=null;
  694.                 }
  695.                 else if(modificaDescrizione) {
  696.                     String labelPerPorta = null;
  697.                     if(parentPA!=null && (parentPA.intValue() == PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE)) {
  698.                         labelPerPorta = porteApplicativeCore.getLabelRegolaMappingErogazionePortaApplicativa(
  699.                                 PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_DESCRIZIONE_DI,
  700.                                 PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_DESCRIZIONE,
  701.                                 pa);
  702.                     }
  703.                     else {
  704.                         lstParm.remove(lstParm.size()-1);
  705.                         labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_DESCRIZIONE_DI+pa.getNome();
  706.                     }
  707.                    
  708.                     lstParm.add(new Parameter(labelPerPorta,  null));
  709.                     nomeBreadCrumb=null;
  710.                 }
  711.                 else if(datiAltroPorta) {
  712.                     String labelPerPorta = null;
  713.                     if(parentPA!=null && (parentPA.intValue() == PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE)) {
  714.                         labelPerPorta = porteApplicativeCore.getLabelRegolaMappingErogazionePortaApplicativa(
  715.                                 PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_OPZIONI_AVANZATE_DI,
  716.                                 PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_OPZIONI_AVANZATE,
  717.                                 pa);
  718.                     }
  719.                     else {
  720.                         lstParm.remove(lstParm.size()-1);
  721.                         labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_OPZIONI_AVANZATE_DI+pa.getNome();
  722.                     }
  723.                    
  724.                     lstParm.add(new Parameter(labelPerPorta,  null));
  725.                     nomeBreadCrumb=null;
  726.                 }
  727.                 else if(datiAltroApi) {
  728.                     lstParm.remove(lstParm.size()-1);
  729.                     if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  730.                         lstParm.add(new Parameter(PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_OPZIONI_AVANZATE,null));
  731.                     } else {
  732.                         lstParm.add(new Parameter(PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_OPZIONI_AVANZATE_DI + porteApplicativeHelper.getLabelIdServizio(asps),null));
  733.                     }
  734.                     nomeBreadCrumb=null;
  735.                 }
  736.                 else {
  737.                     nomeBreadCrumb = porteApplicativeCore.getLabelRegolaMappingErogazionePortaApplicativa(null,null,pa);
  738.                 }
  739.             }
  740.            
  741.             if(nomeBreadCrumb!=null) {
  742.                 lstParm.add(new Parameter(nomeBreadCrumb , null));
  743.             }

  744.             // Se idhid = null, devo visualizzare la pagina per la
  745.             // modifica dati
  746.             if (porteApplicativeHelper.isEditModeInProgress()) {

  747.                 // setto la barra del titolo
  748.                 ServletUtils.setPageDataTitle(pd, lstParm);
  749.                
  750.                 String patternAzione = azione;

  751.                 if (descr == null) {
  752.                     descr = pa.getDescrizione();
  753.                 }
  754.                 if (statoPorta == null) {
  755.                     statoPorta = pa.getStato()!=null ? pa.getStato().getValue() : CostantiConfigurazione.ABILITATO.getValue();
  756.                 }
  757.                 if (stateless == null &&
  758.                     pa.getStateless()!=null) {
  759.                     stateless = pa.getStateless().toString();
  760.                 }
  761.                 if (behaviour == null) {
  762.                     behaviour = (pa.getBehaviour()!=null ? pa.getBehaviour().getNome() : null);
  763.                 }
  764.                 if (gestBody == null) {
  765.                     String allegaBody = null;
  766.                     if(pa.getAllegaBody()!=null)
  767.                         allegaBody = pa.getAllegaBody().toString();
  768.                     String scartaBody = null;
  769.                     if(pa.getScartaBody()!=null)
  770.                         scartaBody = pa.getScartaBody().toString();
  771.                     if (PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_ABILITATO.equals(allegaBody) &&
  772.                             PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_DISABILITATO.equals(scartaBody))
  773.                         gestBody = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_GEST_BODY_ALLEGA;
  774.                     else if (PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_DISABILITATO.equals(allegaBody) &&
  775.                             PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_ABILITATO.equals(scartaBody))
  776.                         gestBody = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_GEST_BODY_SCARTA;
  777.                     else if (PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_DISABILITATO.equals(allegaBody) &&
  778.                             PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_DISABILITATO.equals(scartaBody))
  779.                         gestBody = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_GEST_BODY_NONE;
  780.                 }
  781.                 if (gestManifest == null &&
  782.                     pa.getGestioneManifest()!=null) {
  783.                     gestManifest = pa.getGestioneManifest().toString();
  784.                 }
  785.                 if (ricsim == null) {
  786.                     if(pa.getRicevutaAsincronaSimmetrica()!=null)
  787.                         ricsim = pa.getRicevutaAsincronaSimmetrica().toString();
  788.                     if ((ricsim == null) || "".equals(ricsim)) {
  789.                         ricsim = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_ABILITATO;
  790.                     }
  791.                 }
  792.                 if (ricasim == null) {
  793.                     if(pa.getRicevutaAsincronaAsimmetrica()!=null)
  794.                         ricasim = pa.getRicevutaAsincronaAsimmetrica().toString();
  795.                     if ((ricasim == null) || "".equals(ricasim)) {
  796.                         ricasim = PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_ABILITATO;
  797.                     }
  798.                 }
  799.                 if ((scadcorr == null) && (ca != null)) {
  800.                     scadcorr = ca.getScadenza();
  801.                 }
  802.                
  803.                 if (integrazioneStato == null) {
  804.                     if(pa.getIntegrazione() == null) {
  805.                         integrazioneStato = CostantiControlStation.VALUE_PARAMETRO_PORTE_INTEGRAZIONE_STATO_DEFAULT;
  806.                     } else if(TipoIntegrazione.DISABILITATO.getValue().equals(pa.getIntegrazione())) {
  807.                         integrazioneStato = CostantiControlStation.VALUE_PARAMETRO_PORTE_INTEGRAZIONE_STATO_DISABILITATO;
  808.                     } else {
  809.                         integrazioneStato = CostantiControlStation.VALUE_PARAMETRO_PORTE_INTEGRAZIONE_STATO_RIDEFINITO;
  810.                     }
  811.                 }

  812.                 if (integrazione == null) {
  813.                     integrazione = pa.getIntegrazione();
  814.                    
  815.                     List<String> integrazioneGruppiList = new ArrayList<>();
  816.                    
  817.                     if(integrazioneStato.equals(CostantiControlStation.VALUE_PARAMETRO_PORTE_INTEGRAZIONE_STATO_RIDEFINITO)) {
  818.                         // decodificare il contenuto di integrazione per generare gli elementi grafici necessari.
  819.                         List<String> valoriIntegrazione = integrazione != null ? Arrays.asList(integrazione.split(",")) : new ArrayList<>();
  820.                         for (String valoreIntegrazione : valoriIntegrazione) {
  821.                             TipoIntegrazione tipoIntegrazione = TipoIntegrazione.toEnumConstant(valoreIntegrazione);
  822.                             GruppoIntegrazione group = tipoIntegrazione != null ? tipoIntegrazione.getGroup() : GruppoIntegrazione.PLUGIN;
  823.                             String gruppoValore = group.getValue();
  824.                            
  825.                             List<String> valoriIntegrazionePerGruppo = null;
  826.                             if(integrazioneGruppiValoriDeiGruppi.containsKey(gruppoValore)) {
  827.                                 valoriIntegrazionePerGruppo = integrazioneGruppiValoriDeiGruppi.remove(gruppoValore);
  828.                             } else {
  829.                                 valoriIntegrazionePerGruppo = new ArrayList<>();
  830.                             }
  831.                            
  832.                             valoriIntegrazionePerGruppo.add(valoreIntegrazione);
  833.                             integrazioneGruppiValoriDeiGruppi.put(gruppoValore, valoriIntegrazionePerGruppo);
  834.                              
  835.                             if(!integrazioneGruppiDaVisualizzare.contains(group)) {
  836.                                 integrazioneGruppiDaVisualizzare.add(group);
  837.                                 integrazioneGruppiList.add(gruppoValore);
  838.                             }
  839.                         }
  840.                        
  841.                         integrazioneGruppi = !integrazioneGruppiList.isEmpty() ? integrazioneGruppiList.toArray(new String[integrazioneGruppiList.size()]) : null;
  842.                     }
  843.                 }
  844.                
  845.                 if(ctModalitaSincronizzazione==null) {
  846.                     PolicyConfiguration policyConfig = new PolicyConfiguration(pa.getProprietaRateLimitingList(), porteApplicativeCore.getControlloTrafficoPolicyRateLimitingTipiGestori(), false);
  847.                     ctModalitaSincronizzazione = policyConfig.getSyncMode();
  848.                     ctImplementazione = policyConfig.getImpl();
  849.                     ctContatori = policyConfig.getCount();
  850.                     ctTipologia = policyConfig.getEngineType();
  851.                     ctHeaderHttp = policyConfig.getHttpMode();
  852.                     ctHeaderHttpLimit = policyConfig.getHttpMode_limit();
  853.                     ctHeaderHttpRemaining = policyConfig.getHttpMode_remaining();
  854.                     ctHeaderHttpReset = policyConfig.getHttpMode_reset();
  855.                     ctHeaderHttpRetryAfter = policyConfig.getHttpMode_retry_after();
  856.                     ctHeaderHttpRetryAfterBackoff = policyConfig.getHttpMode_retry_after_backoff();
  857.                 }
  858.                
  859.                 if (messageEngine == null &&
  860.                     pa.getOptions()!=null) {
  861.                     Map<String, List<String>> props = PropertiesSerializator.convertoFromDBColumnValue(pa.getOptions());
  862.                     if(props!=null && props.size()>0) {
  863.                         String msgFactory = TransportUtils.getFirstValue(props,CostantiPdD.OPTIONS_MESSAGE_FACTORY);
  864.                         if(msgFactory!=null) {
  865.                             messageEngine = msgFactory;
  866.                         }
  867.                     }
  868.                 }
  869.                
  870.                 if (soggvirt == null) {
  871.                     PortaApplicativaSoggettoVirtuale pasv = pa.getSoggettoVirtuale();
  872.                     if (pasv == null) {
  873.                         soggvirt="-";                  
  874.                     } else {
  875.                         soggvirt = pasv.getTipo()+"/"+pasv.getNome();
  876.                         servizio = soggvirt + " " +pa.getServizio().getTipo()+"/"+pa.getServizio().getNome();
  877.                     }
  878.                 }

  879.                 // recupero informazioni su servizio se non specificato l'id
  880.                 // del servizio
  881.                 if (
  882.                         (servizio==null || "".equals(servizio))
  883.                         &&
  884.                         ( !(soggvirt!=null && idSoggettoVirtuale!=null) )
  885.                     ){
  886.                     servizio = tipoSoggettoProprietario+"/"+nomeSoggettoProprietario+" "+pa.getServizio().getTipo()+"/"+pa.getServizio().getNome() + "/" + pa.getServizio().getVersione().intValue();
  887.                 }
  888.                
  889.                 if (modeaz == null) {
  890.                     PortaApplicativaAzione paa = pa.getAzione();
  891.                     if (paa == null) {
  892.                         modeaz = "";
  893.                         azione = "";
  894.                         patternAzione = "";
  895.                     } else {
  896.                         if(paa.getIdentificazione()!=null)
  897.                             modeaz = paa.getIdentificazione().toString();
  898.                         azione = paa.getNome();
  899.                         patternAzione = paa.getPattern();
  900.                         azid = "" + paa.getId();
  901.                     }
  902.                     if ((modeaz == null) || "".equals(modeaz)) {
  903.                         modeaz = PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_MODE_REGISTER_INPUT;
  904.                     }
  905.                     boolean useForceWSDLBased = true;
  906.                     // assegno costante
  907.                     if (modeaz != null) {
  908.                         switch (PortaApplicativaAzioneIdentificazione.toEnumConstant(modeaz)) {
  909.                         case STATIC:
  910.                             useForceWSDLBased = false;
  911.                             int azidInt = 0;
  912.                             if (azid != null)
  913.                                 azidInt = Integer.parseInt(azid);
  914.                             if ( (azidInt == -2) || (azidInt>0) ) {
  915.                                 azid = azione;
  916.                             }
  917.                             break;
  918.                         case INTERFACE_BASED:
  919.                             useForceWSDLBased = false;
  920.                             break;
  921.                         case CONTENT_BASED:
  922.                         case INPUT_BASED:
  923.                         case HEADER_BASED:
  924.                         case URL_BASED:
  925.                         case SOAP_ACTION_BASED:
  926.                         default:
  927.                             break;
  928.                         }

  929.                         if(useForceWSDLBased){
  930.                             StatoFunzionalita forceWsdlBased2 = paa.getForceInterfaceBased();

  931.                             if(forceWsdlBased2 != null && forceWsdlBased2.equals(StatoFunzionalita.ABILITATO)){
  932.                                 forceWsdlBased = "yes";
  933.                             } else {
  934.                                 forceWsdlBased = "";
  935.                             }
  936.                         }
  937.                     }
  938.                 }

  939.                 if ((modeaz != null) && !modeaz.equals(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_MODE_REGISTER_INPUT) &&
  940.                         (azione == null)) {
  941.                     azione = "";
  942.                 }

  943.                 if(!usataInConfigurazioneDefault) {
  944.                     PortaApplicativaAzione paa = pa.getAzione();
  945.                     if(paa != null) {
  946.                         List<String> azioneDelegataList = paa.getAzioneDelegataList();
  947.                         StringBuilder sb = new StringBuilder();
  948.                        
  949.                         for (String aD : azioneDelegataList) {
  950.                             if(sb.length() > 0) sb.append(", ");
  951.                             sb.append(aD);
  952.                         }
  953.                         azione = sb.toString();
  954.                     }
  955.                 }

  956.                 // Prendo la lista di soggetti (tranne il mio) e li metto in un
  957.                 // array per la funzione SoggettoVirtuale
  958.                 String[] soggettiList = null;
  959.                 String[] soggettiListLabel = null;
  960.                 Boolean soggVirt = ServletUtils.getObjectFromSession(request, session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_GESTIONE_SOGGETTI_VIRTUALI);
  961.                 if (soggVirt!=null && soggVirt.booleanValue()) {
  962.                     List<IDServizio> list = null;
  963.                     List<IDSoggetto> listSoggetti = new ArrayList<>();
  964.                     List<String> identitaSoggetti = new ArrayList<>();
  965.                     try{
  966.                         list = apsCore.getAllIdServizi(new FiltroRicercaServizi());
  967.                     }catch(DriverRegistroServiziNotFound dNotFound){
  968.                         // ignore
  969.                     }
  970.                     if(list!=null){
  971.                         for (int i = 0; i < list.size(); i++) {
  972.                             String idSoggetto = list.get(i).getSoggettoErogatore().toString();
  973.                             if (!idSoggetto.equals(tipoNomeSoggettoProprietario) && // non aggiungo il soggetto proprietario della porta applicativa
  974.                                 (!identitaSoggetti.contains(idSoggetto))
  975.                                 ){
  976.                                 identitaSoggetti.add(idSoggetto);
  977.                                 IDSoggetto soggettoErogatore = list.get(i).getSoggettoErogatore();
  978.                                 String protocolloSoggettoErogatore = soggettiCore.getProtocolloAssociatoTipoSoggetto(soggettoErogatore.getTipo());
  979.                                 if(protocolloSoggettoErogatore.equals(protocollo)){
  980.                                     listSoggetti.add(soggettoErogatore);
  981.                                 }
  982.                             }
  983.                         }
  984.                     }
  985.                     int totEl = listSoggetti.size() + 1;
  986.                     soggettiList = new String[totEl];
  987.                     soggettiListLabel = new String[totEl];
  988.                     soggettiList[0] = "-";
  989.                     soggettiListLabel[0] = "-";
  990.                     Map<String, String> soggettiMapTmp = new HashMap<>();
  991.                     List<String> listSoggettiOrdered = new ArrayList<>();
  992.                     for (IDSoggetto idSoggetto : listSoggetti) {
  993.                         listSoggettiOrdered.add(idSoggetto.getTipo() + "/" + idSoggetto.getNome());
  994.                         soggettiMapTmp.put(idSoggetto.getTipo() + "/" + idSoggetto.getNome(), porteApplicativeHelper.getLabelNomeSoggetto(protocollo,
  995.                                 idSoggetto.getTipo(), idSoggetto.getNome()));
  996.                     }
  997.                     Collections.sort(listSoggettiOrdered);
  998.                     int i = 1;
  999.                     for (String idSOrdered : listSoggettiOrdered) {
  1000.                         soggettiList[i] = idSOrdered;
  1001.                         soggettiListLabel[i] = soggettiMapTmp.get(idSOrdered);
  1002.                         i++;
  1003.                     }
  1004.                    
  1005.                 }

  1006.                 // Prendo la lista di servizi e li metto in un array
  1007.                 String[] serviziList = null;
  1008.                 String[] serviziListLabel = null;
  1009.                 FiltroRicercaServizi filtroServizi = new FiltroRicercaServizi();
  1010.                 if ( (!"".equals(soggvirt)) && (!"-".equals(soggvirt)) ){
  1011.                     filtroServizi.setTipoSoggettoErogatore(soggvirt.split("/")[0]);
  1012.                     filtroServizi.setNomeSoggettoErogatore(soggvirt.split("/")[1]);
  1013.                 }
  1014.                 else{
  1015.                     filtroServizi.setTipoSoggettoErogatore(tipoSoggettoProprietario);
  1016.                     filtroServizi.setNomeSoggettoErogatore(nomeSoggettoProprietario);
  1017.                 }
  1018.                 List<IDServizio> listIdServ = null;
  1019.                 try{
  1020.                     listIdServ = apsCore.getAllIdServizi(filtroServizi);
  1021.                 }catch(DriverRegistroServiziNotFound dNotFound){
  1022.                     // ignore
  1023.                 }
  1024.                
  1025.                 if(listIdServ!=null && !listIdServ.isEmpty()){
  1026.                     List<String> serviziListTmp = new ArrayList<>();

  1027.                     Map<String, IDServizio> serviziMapTmp = new HashMap<>();
  1028.                     for (IDServizio idServizio : listIdServ) {
  1029.                         if(tipiServizioCompatibiliAccordo.contains(idServizio.getTipo())){
  1030.                             String keyServizio = idServizio.getSoggettoErogatore().getTipo() + "/" + idServizio.getSoggettoErogatore().getNome() + " " + idServizio.getTipo() + "/" + idServizio.getNome() + "/" + idServizio.getVersione().intValue();
  1031.                             serviziListTmp.add(keyServizio);
  1032.                             serviziMapTmp.put(keyServizio, idServizio);
  1033.                         }
  1034.                     }

  1035.                     Collections.sort(serviziListTmp);
  1036.                     serviziList = serviziListTmp.toArray(new String[1]);
  1037.                     serviziListLabel = new String[serviziList.length];
  1038.                     for (int i = 0; i < serviziList.length; i++) {
  1039.                         String idServTmp = serviziList[i];
  1040.                         serviziListLabel[i] = porteApplicativeHelper.getLabelIdServizio(protocollo, serviziMapTmp.get(idServTmp));
  1041.                     }
  1042.                 }
  1043.                
  1044.                 IDServizio idServizio = null;
  1045.                 AccordoServizioParteSpecifica servS = null;
  1046.                 if (servizio != null) {
  1047.                     boolean servizioPresenteInLista  = false;
  1048.                     if(serviziList!=null && serviziList.length>0){
  1049.                         for (int i = 0; i < serviziList.length; i++) {
  1050.                             if(serviziList[i].equals(servizio)){
  1051.                                 servizioPresenteInLista = true;
  1052.                                 break;
  1053.                             }
  1054.                         }
  1055.                     }
  1056.                     if(servizioPresenteInLista){
  1057.                         String [] tmp = servizio.split(" ");
  1058.                         idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tmp[1].split("/")[0],tmp[1].split("/")[1],
  1059.                                 tmp[0].split("/")[0],tmp[0].split("/")[1],
  1060.                                 Integer.parseInt(tmp[1].split("/")[2]));
  1061.                         try{
  1062.                             servS = apsCore.getServizio(idServizio);
  1063.                         }catch(DriverRegistroServiziNotFound dNotFound){
  1064.                             // ignore
  1065.                         }
  1066.                     }
  1067.                     if(servS==null){
  1068.                        
  1069.                         // è cambiato il soggetto erogatore. non è più valido il servizio
  1070.                         servizio = null;
  1071.                         idServizio = null;
  1072.                         if(serviziList!=null && serviziList.length>0){
  1073.                             servizio = serviziList[0];
  1074.                             String [] tmp = servizio.split(" ");
  1075.                             idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tmp[1].split("/")[0],tmp[1].split("/")[1],
  1076.                                     tmp[0].split("/")[0],tmp[0].split("/")[1],
  1077.                                     Integer.parseInt(tmp[1].split("/")[2]));
  1078.                             try{
  1079.                                 servS = apsCore.getServizio(idServizio);
  1080.                             }catch(DriverRegistroServiziNotFound dNotFound){
  1081.                                 // ignore
  1082.                             }
  1083.                             if(servS==null){
  1084.                                 servizio = null;
  1085.                                 idServizio = null;
  1086.                             }
  1087.                         }
  1088.                     }
  1089.                 }
  1090.                
  1091.                 AccordoServizioParteComuneSintetico as = null;
  1092.                 if (servS != null) {
  1093.                     IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(servS.getAccordoServizioParteComune());
  1094.                     as = apcCore.getAccordoServizioSintetico(idAccordo);
  1095.                     if(serviceBinding == null) {
  1096.                         serviceBinding = apcCore.toMessageServiceBinding(as.getServiceBinding());
  1097.                     }
  1098.                 }
  1099.                
  1100.                
  1101.                 String[] azioniList = null;
  1102.                 String[] azioniListLabel = null;
  1103.                 List<String> filtraAzioniUtilizzate = new ArrayList<>();
  1104.                 if ((modeaz != null) && modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_REGISTER_INPUT)) {
  1105.                
  1106.                     Map<String,String> azioni = apcCore.getAzioniConLabel(servS, as, addTrattinoSelezioneNonEffettuata , true, filtraAzioniUtilizzate);
  1107.                     if(azioni != null && azioni.size() > 0) {
  1108.                         azioniList = new String[azioni.size()];
  1109.                         azioniListLabel = new String[azioni.size()];
  1110.                         int i = 0;
  1111.                         for (Map.Entry<String,String> entry : azioni.entrySet()) {
  1112.                             azioniList[i] = entry.getKey();
  1113.                             azioniListLabel[i] = entry.getValue();
  1114.                             i++;
  1115.                         }
  1116.                     }
  1117.                 }

  1118.                 // setto oldNomePD
  1119.                 pd.addHidden(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_OLD_NOME_PA, oldNomePA);
  1120.                
  1121.                 // preparo i campi
  1122.                 List<DataElement> dati = new ArrayList<>();
  1123.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  1124.                 dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.CHANGE, idPorta, idsogg, idPorta, idAsps, dati);

  1125.                 dati = porteApplicativeHelper.addPorteAppToDati(TipoOperazione.CHANGE,dati,
  1126.                         nomePorta, descr, soggvirt, soggettiList, soggettiListLabel, servizio,
  1127.                         serviziList, serviziListLabel, azione, azioniList, azioniListLabel, stateless, ricsim, ricasim, idsogg,
  1128.                         idPorta, statoValidazione, tipoValidazione, gestBody, gestManifest,integrazioneStato, integrazione,
  1129.                         integrazioneGruppi, integrazioneGruppiDaVisualizzare, integrazioneGruppiValoriDeiGruppi,
  1130.                         numCorrApp,scadcorr,autorizzazioneContenutiStato, autorizzazioneContenuti, autorizzazioneContenutiProperties, protocollo,
  1131.                         numSA,numRuoli,ruoloMatch,
  1132.                         statoMessageSecurity,statoMTOM,numCorrelazioneReq,numCorrelazioneRes,numProprProt,applicaMTOM,
  1133.                         behaviour,servizioApplicativoList,servizioApplicativo,idSa,
  1134.                         autenticazione, autorizzazione,
  1135.                         autenticazioneOpzionale, autenticazionePrincipal, autenticazioneParametroList, autenticazioneCustom, autorizzazioneCustom,
  1136.                         isSupportatoAutenticazioneSoggetti,autorizzazioneAutenticati,autorizzazioneRuoli,autorizzazioneRuoliTipologia,
  1137.                         servS,as,serviceBinding,
  1138.                         statoPorta,modeaz,  azid, patternAzione, forceWsdlBased, usataInConfigurazioni,usataInConfigurazioneDefault,
  1139.                         StatoFunzionalita.ABILITATO.equals(pa.getRicercaPortaAzioneDelegata()),
  1140.                         (pa.getAzione()!=null ? pa.getAzione().getNomePortaDelegante() : null), gestioneToken,null,null,
  1141.                         gestioneTokenPolicy,gestioneTokenOpzionale,
  1142.                         gestioneTokenValidazioneInput,gestioneTokenIntrospection,gestioneTokenUserInfo,gestioneTokenTokenForward,
  1143.                         autenticazioneTokenIssuer, autenticazioneTokenClientId, autenticazioneTokenSubject, autenticazioneTokenUsername, autenticazioneTokenEMail,
  1144.                         autorizzazioneToken,autorizzazioneTokenOptions,
  1145.                         autorizzazioneScope,numScope, autorizzazioneScopeMatch,allegatoXacmlPolicy,
  1146.                         messageEngine, pa.getCanale(),
  1147.                         identificazioneAttributiStato, null,null, attributeAuthoritySelezionate, attributeAuthorityAttributi,
  1148.                         autorizzazioneAutenticatiToken, null, numAutenticatiToken,
  1149.                         autorizzazioneRuoliToken,  null, numRuoliToken, autorizzazioneRuoliTipologiaToken, autorizzazioneRuoliMatchToken,
  1150.                         ctModalitaSincronizzazione, ctImplementazione, ctContatori, ctTipologia,
  1151.                         ctHeaderHttp, ctHeaderHttpLimit, ctHeaderHttpRemaining, ctHeaderHttpReset,
  1152.                         ctHeaderHttpRetryAfter, ctHeaderHttpRetryAfterBackoff);

  1153.                 pd.setDati(dati);



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

  1155.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE,
  1156.                         ForwardParams.CHANGE());
  1157.             }

  1158.             // Controlli sui campi immessi
  1159.             boolean isOk = porteApplicativeHelper.porteAppCheckData(TipoOperazione.CHANGE, oldNomePA, isSupportatoAutenticazioneSoggetti, datiAltroPorta,
  1160.                     serviceBinding);
  1161.             if (!isOk) {
  1162.                 // setto la barra del titolo
  1163.                 ServletUtils.setPageDataTitle(pd,lstParm);

  1164.                 // Prendo la lista di soggetti (tranne il mio) e li metto in un
  1165.                 // array per la funzione SoggettoVirtuale
  1166.                 String[] soggettiList = null;
  1167.                 String[] soggettiListLabel = null;
  1168.                 Boolean soggVirt = ServletUtils.getObjectFromSession(request, session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_GESTIONE_SOGGETTI_VIRTUALI);
  1169.                 if (soggVirt!=null && soggVirt.booleanValue()) {
  1170.                     List<IDServizio> list = null;
  1171.                     List<IDSoggetto> listSoggetti = new ArrayList<>();
  1172.                     List<String> identitaSoggetti = new ArrayList<>();
  1173.                     try{
  1174.                         list = apsCore.getAllIdServizi(new FiltroRicercaServizi());
  1175.                     }catch(DriverRegistroServiziNotFound dNotFound){
  1176.                         // ignore
  1177.                     }
  1178.                     if(list!=null){
  1179.                         for (int i = 0; i < list.size(); i++) {
  1180.                             String idSoggetto = list.get(i).getSoggettoErogatore().toString();
  1181.                             if (
  1182.                                     (!idSoggetto.equals(tipoNomeSoggettoProprietario)) && // non aggiungo il soggetto proprietario della porta applicativa
  1183.                                     (!identitaSoggetti.contains(idSoggetto))
  1184.                                 ){
  1185.                                 identitaSoggetti.add(idSoggetto);
  1186.                                 listSoggetti.add(list.get(i).getSoggettoErogatore());
  1187.                             }
  1188.                         }
  1189.                     }
  1190.                     int totEl = listSoggetti.size() + 1;
  1191.                     soggettiList = new String[totEl];
  1192.                     soggettiListLabel = new String[totEl];
  1193.                     soggettiList[0] = "-";
  1194.                     soggettiListLabel[0] = "-";
  1195.                     Map<String, String> soggettiMapTmp = new HashMap<>();
  1196.                     int i = 1;
  1197.                     List<String> listSoggettiOrdered = new ArrayList<>();
  1198.                     for (IDSoggetto idSoggetto : listSoggetti) {
  1199.                         listSoggettiOrdered.add(idSoggetto.getTipo() + "/" + idSoggetto.getNome());
  1200.                         soggettiMapTmp.put(idSoggetto.getTipo() + "/" + idSoggetto.getNome(), porteApplicativeHelper.getLabelNomeSoggetto(protocollo,
  1201.                                 idSoggetto.getTipo(), idSoggetto.getNome()));
  1202.                     }
  1203.                     Collections.sort(listSoggettiOrdered);
  1204.                     for (String idSOrdered : listSoggettiOrdered) {
  1205.                         soggettiList[i] = idSOrdered;
  1206.                         soggettiListLabel[i] = soggettiMapTmp.get(idSOrdered);
  1207.                         i++;
  1208.                     }
  1209.                 }

  1210.                 // Prendo la lista di servizi e li metto in un array
  1211.                 String[] serviziList = null;
  1212.                 String[] serviziListLabel = null;
  1213.                 FiltroRicercaServizi filtroServizi = new FiltroRicercaServizi();
  1214.                 if ( (!soggvirt.equals("")) && (!soggvirt.equals("-")) ){
  1215.                     filtroServizi.setTipoSoggettoErogatore(soggvirt.split("/")[0]);
  1216.                     filtroServizi.setNomeSoggettoErogatore(soggvirt.split("/")[1]);
  1217.                 }
  1218.                 else{
  1219.                     filtroServizi.setTipoSoggettoErogatore(tipoSoggettoProprietario);
  1220.                     filtroServizi.setNomeSoggettoErogatore(nomeSoggettoProprietario);
  1221.                 }
  1222.                 List<IDServizio> listIdServ = null;
  1223.                 try{
  1224.                     listIdServ = apsCore.getAllIdServizi(filtroServizi);
  1225.                 }catch(DriverRegistroServiziNotFound dNotFound){
  1226.                     // ignore
  1227.                 }
  1228.                
  1229.                 if(listIdServ!=null && !listIdServ.isEmpty()){
  1230.                     List<String> serviziListTmp = new ArrayList<>();
  1231.                     Map<String, IDServizio> serviziMapTmp = new HashMap<>();
  1232.                     for (IDServizio idServizio : listIdServ) {
  1233.                         if(tipiServizioCompatibiliAccordo.contains(idServizio.getTipo())){
  1234.                             String keyServizio = idServizio.getSoggettoErogatore().getTipo() + "/" + idServizio.getSoggettoErogatore().getNome() + " " + idServizio.getTipo() + "/" + idServizio.getNome() + "/" + idServizio.getVersione().intValue();
  1235.                             serviziListTmp.add(keyServizio);
  1236.                             serviziMapTmp.put(keyServizio, idServizio);
  1237.                         }
  1238.                     }

  1239.                     Collections.sort(serviziListTmp);
  1240.                     serviziList = serviziListTmp.toArray(new String[1]);
  1241.                     serviziListLabel = new String[serviziList.length];
  1242.                     for (int i = 0; i < serviziList.length; i++) {
  1243.                         String idServTmp = serviziList[i];
  1244.                         serviziListLabel[i] = porteApplicativeHelper.getLabelIdServizio(protocollo, serviziMapTmp.get(idServTmp));
  1245.                     }
  1246.                 }

  1247.                 AccordoServizioParteSpecifica servS = null;
  1248.                 IDServizio idServizio = null;
  1249.                 try{
  1250.                     if (servizio != null) {
  1251.                         String [] tmp = servizio.split(" ");
  1252.                         idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tmp[1].split("/")[0],tmp[1].split("/")[1],
  1253.                                 tmp[0].split("/")[0],tmp[0].split("/")[1],
  1254.                                 Integer.parseInt(tmp[1].split("/")[2]));
  1255.                         try{
  1256.                             servS = apsCore.getServizio(idServizio);
  1257.                         }catch(DriverRegistroServiziNotFound dNotFound){
  1258.                             // ignore
  1259.                         }
  1260.                     }
  1261.                 } catch (Exception e) {
  1262.                     // Il refresh, in seguito al cambio della validazione puo'
  1263.                     // avvenire anche se il servizio non e' selezionato
  1264.                 }
  1265.                
  1266.                 AccordoServizioParteComuneSintetico as = null;
  1267.                 if(servS!=null){
  1268.                     IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(servS.getAccordoServizioParteComune());
  1269.                     as = apcCore.getAccordoServizioSintetico(idAccordo);
  1270.                 }
  1271.                
  1272.                 // Prendo le azioni associate al servizio
  1273.                 String[] azioniList = null;
  1274.                 String[] azioniListLabel = null;
  1275.                 List<String> filtraAzioniUtilizzate = new ArrayList<>();
  1276.                 if ((modeaz != null) && modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_REGISTER_INPUT)) {
  1277.                
  1278.                     Map<String,String> azioni = apcCore.getAzioniConLabel(servS, as, addTrattinoSelezioneNonEffettuata , true, filtraAzioniUtilizzate);
  1279.                     if(azioni != null && azioni.size() > 0) {
  1280.                         azioniList = new String[azioni.size()];
  1281.                         azioniListLabel = new String[azioni.size()];
  1282.                         int i = 0;
  1283.                         for (Map.Entry<String,String> entry : azioni.entrySet()) {
  1284.                             azioniList[i] = entry.getKey();
  1285.                             azioniListLabel[i] = entry.getValue();
  1286.                             i++;
  1287.                         }
  1288.                     }
  1289.                 }

  1290.                 // setto oldNomePD
  1291.                 pd.addHidden(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_OLD_NOME_PA, oldNomePA);
  1292.                
  1293.                 // preparo i campi
  1294.                 List<DataElement> dati = new ArrayList<>();

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

  1296.                 dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.CHANGE, idPorta, idsogg, idPorta, idAsps, dati);

  1297.                 dati = porteApplicativeHelper.addPorteAppToDati(TipoOperazione.CHANGE,dati,
  1298.                         nomePorta, descr, soggvirt, soggettiList, soggettiListLabel, servizio,
  1299.                         serviziList, serviziListLabel, azione, azioniList, azioniListLabel,  stateless, ricsim,
  1300.                         ricasim, idsogg, idPorta, statoValidazione, tipoValidazione, gestBody, gestManifest,integrazioneStato, integrazione,
  1301.                         integrazioneGruppi, integrazioneGruppiDaVisualizzare, integrazioneGruppiValoriDeiGruppi,
  1302.                         numCorrApp,scadcorr,autorizzazioneContenutiStato, autorizzazioneContenuti, autorizzazioneContenutiProperties,protocollo,
  1303.                         numSA,numRuoli,ruoloMatch,
  1304.                         statoMessageSecurity,statoMTOM,numCorrelazioneReq,numCorrelazioneRes,numProprProt,applicaMTOM,
  1305.                         behaviour,servizioApplicativoList,servizioApplicativo,idSa,
  1306.                         autenticazione, autorizzazione,
  1307.                         autenticazioneOpzionale, autenticazionePrincipal, autenticazioneParametroList, autenticazioneCustom, autorizzazioneCustom,
  1308.                         isSupportatoAutenticazioneSoggetti,autorizzazioneAutenticati,autorizzazioneRuoli,autorizzazioneRuoliTipologia,
  1309.                         servS,as,serviceBinding,
  1310.                         statoPorta,modeaz,  azid, azione, forceWsdlBased, usataInConfigurazioni,usataInConfigurazioneDefault,
  1311.                         StatoFunzionalita.ABILITATO.equals(pa.getRicercaPortaAzioneDelegata()),
  1312.                         (pa.getAzione()!=null ? pa.getAzione().getNomePortaDelegante() : null), gestioneToken,null,null,
  1313.                         gestioneTokenPolicy,gestioneTokenOpzionale,
  1314.                         gestioneTokenValidazioneInput,gestioneTokenIntrospection,gestioneTokenUserInfo,gestioneTokenTokenForward,
  1315.                         autenticazioneTokenIssuer, autenticazioneTokenClientId, autenticazioneTokenSubject, autenticazioneTokenUsername, autenticazioneTokenEMail,
  1316.                         autorizzazioneToken,autorizzazioneTokenOptions,
  1317.                         autorizzazioneScope,numScope, autorizzazioneScopeMatch,allegatoXacmlPolicy,
  1318.                         messageEngine, pa.getCanale(),
  1319.                         identificazioneAttributiStato, null,null, attributeAuthoritySelezionate, attributeAuthorityAttributi,
  1320.                         autorizzazioneAutenticatiToken, null, numAutenticatiToken,
  1321.                         autorizzazioneRuoliToken,  null, numRuoliToken, autorizzazioneRuoliTipologiaToken, autorizzazioneRuoliMatchToken,
  1322.                         ctModalitaSincronizzazione, ctImplementazione, ctContatori, ctTipologia,
  1323.                         ctHeaderHttp, ctHeaderHttpLimit, ctHeaderHttpRemaining, ctHeaderHttpReset,
  1324.                         ctHeaderHttpRetryAfter, ctHeaderHttpRetryAfterBackoff);

  1325.                 pd.setDati(dati);

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

  1327.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE,
  1328.                         ForwardParams.CHANGE());
  1329.             }

  1330.             // Modifico i dati della porta applicativa nel db
  1331.             pa.setNome(nomePorta);
  1332.             IDPortaApplicativa oldIDPortaApplicativaForUpdate = new IDPortaApplicativa();
  1333.             oldIDPortaApplicativaForUpdate.setNome(oldNomePA);
  1334.             pa.setOldIDPortaApplicativaForUpdate(oldIDPortaApplicativaForUpdate);
  1335.             if(modificaDescrizione && (descr==null || StringUtils.isEmpty(descr)) && ImplementationConfiguration.isDescriptionDefault(pa.getDescrizione())) {
  1336.                 // lascio la precedente descrizione
  1337.                 /**pa.setDescrizione(pa.getDescrizione());*/
  1338.             }
  1339.             else {
  1340.                 pa.setDescrizione(descr);
  1341.             }
  1342.             if(statoPorta==null || "".equals(statoPorta) || CostantiConfigurazione.ABILITATO.toString().equals(statoPorta)){
  1343.                 pa.setStato(StatoFunzionalita.ABILITATO);
  1344.             }
  1345.             else{
  1346.                 pa.setStato(StatoFunzionalita.DISABILITATO);
  1347.             }
  1348.        
  1349.             if (stateless!=null && stateless.equals(PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_STATELESS_DEFAULT))
  1350.                 pa.setStateless(null);
  1351.             else
  1352.                 pa.setStateless(StatoFunzionalita.toEnumConstant(stateless));
  1353.             if (PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_GEST_BODY_ALLEGA.equals(gestBody))
  1354.                 pa.setAllegaBody(StatoFunzionalita.toEnumConstant(PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_ABILITATO));
  1355.             else
  1356.                 pa.setAllegaBody(StatoFunzionalita.toEnumConstant(PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_DISABILITATO));
  1357.             if (PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_GEST_BODY_SCARTA.equals(gestBody))
  1358.                 pa.setScartaBody(StatoFunzionalita.toEnumConstant(PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_ABILITATO));
  1359.             else
  1360.                 pa.setScartaBody(StatoFunzionalita.toEnumConstant(PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_DISABILITATO));
  1361.             if (gestManifest!=null && gestManifest.equals(PorteApplicativeCostanti.DEFAULT_VALUE_PARAMETRO_PORTE_APPLICATIVE_GEST_MANIFEST_DEFAULT))
  1362.                 pa.setGestioneManifest(null);
  1363.             else
  1364.                 pa.setGestioneManifest(StatoFunzionalita.toEnumConstant(gestManifest));
  1365.             pa.setRicevutaAsincronaSimmetrica(StatoFunzionalita.toEnumConstant(ricsim));
  1366.             pa.setRicevutaAsincronaAsimmetrica(StatoFunzionalita.toEnumConstant(ricasim));
  1367.            
  1368.             Map<String, List<String>> props = PropertiesSerializator.convertoFromDBColumnValue(pa.getOptions());
  1369.             props.remove(CostantiPdD.OPTIONS_MESSAGE_FACTORY);
  1370.             if(messageEngine!=null && !"".equals(messageEngine) && !CostantiControlStation.GESTIONE_MESSAGE_ENGINE_DEFAULT.equals(messageEngine)) {
  1371.                 TransportUtils.put(props,CostantiPdD.OPTIONS_MESSAGE_FACTORY, messageEngine, false);
  1372.             }
  1373.             if(props.size()>0) {
  1374.                 PropertiesSerializator ps = new PropertiesSerializator(props);
  1375.                 pa.setOptions(ps.convertToDBColumnValue());
  1376.             }
  1377.             else {
  1378.                 pa.setOptions(null);
  1379.             }
  1380.            
  1381.             if (idSoggettoVirtuale!=null) {
  1382.                 String tipoSoggVirt = idSoggettoVirtuale.getTipo();
  1383.                 String nomeSoggVirt = idSoggettoVirtuale.getNome();
  1384.                 PortaApplicativaSoggettoVirtuale pasv = new PortaApplicativaSoggettoVirtuale();
  1385.                 pasv.setTipo(tipoSoggVirt);
  1386.                 pasv.setNome(nomeSoggVirt);
  1387.                 pa.setSoggettoVirtuale(pasv);
  1388.             } else
  1389.                 pa.setSoggettoVirtuale(null);
  1390.             if (servizio!=null) {
  1391.                 String [] tmp = servizio.split(" ");
  1392.                 IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tmp[1].split("/")[0],tmp[1].split("/")[1],
  1393.                         tmp[0].split("/")[0],tmp[0].split("/")[1],
  1394.                         Integer.parseInt(tmp[1].split("/")[2]));
  1395.                 PortaApplicativaServizio pas = new PortaApplicativaServizio();
  1396.                 pas.setTipo(idServizio.getTipo());
  1397.                 pas.setNome(idServizio.getNome());
  1398.                 pas.setVersione(idServizio.getVersione());
  1399.                 pa.setServizio(pas);
  1400.             } else
  1401.                 pa.setServizio(null);
  1402.            
  1403.             // se l azione e' settata allora creo il bean
  1404.             if(modeaz!=null && modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_DELEGATED_BY)) {
  1405.                 // non modifico paAzione
  1406.             }
  1407.             else if (( (azione!=null && !azione.equals("")) ||
  1408.                         PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_INPUT_BASED.equals(modeaz) ||
  1409.                         PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_SOAP_ACTION_BASED.equals(modeaz) ||
  1410.                         PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_PROTOCOL_BASED.equals(modeaz) ||
  1411.                         PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_HEADER_BASED.equals(modeaz) ||
  1412.                         PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_INTERFACE_BASED.equals(modeaz)) ||
  1413.                         (azid!=null && !azid.equals("")) ) {
  1414.                 PortaApplicativaAzione paa = new PortaApplicativaAzione();

  1415.                 if (modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_REGISTER_INPUT)) {
  1416.                     azione = azid;
  1417.                     if(paa.getId()<=0){
  1418.                         paa.setId(-2l);
  1419.                     }
  1420.                 }
  1421.                
  1422.                 paa.setIdentificazione(PortaApplicativaAzioneIdentificazione.toEnumConstant(modeaz));
  1423.                
  1424.                 if (modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_HEADER_BASED) ||
  1425.                         modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_URL_BASED) ||
  1426.                         modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_CONTENT_BASED)
  1427.                         ) {
  1428.                     paa.setNome(null);
  1429.                     paa.setPattern(azione);
  1430.                 }
  1431.                 else if (modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_REGISTER_INPUT)
  1432.                         ) {
  1433.                     paa.setNome(azione);
  1434.                     paa.setPattern(null);
  1435.                 }
  1436.                 else {
  1437.                     paa.setNome(null);
  1438.                     paa.setPattern(null);
  1439.                 }
  1440.                
  1441.                 //FORCE WSDL BASED
  1442.                 if(!modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_REGISTER_INPUT) &&
  1443.                         !modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_PROTOCOL_BASED) &&
  1444.                         !modeaz.equals(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_MODE_INTERFACE_BASED)){

  1445.                     if(forceWsdlBased != null && (ServletUtils.isCheckBoxEnabled(forceWsdlBased))){
  1446.                         paa.setForceInterfaceBased(StatoFunzionalita.ABILITATO);
  1447.                     }else {
  1448.                         paa.setForceInterfaceBased(StatoFunzionalita.DISABILITATO);
  1449.                     }
  1450.                 }else {
  1451.                     paa.setForceInterfaceBased(null);
  1452.                 }

  1453.                 pa.setAzione(paa);
  1454.             }  else {
  1455.                 pa.setAzione(null);
  1456.             }

  1457.             // Cambio i dati della vecchia CorrelazioneApplicativa
  1458.             // Non ne creo una nuova, altrimenti mi perdo le vecchie entry
  1459.             if (ca != null)
  1460.                 ca.setScadenza(scadcorr);
  1461.             pa.setCorrelazioneApplicativa(ca);
  1462.            
  1463.             if(integrazioneStato.equals(CostantiControlStation.VALUE_PARAMETRO_PORTE_INTEGRAZIONE_STATO_DEFAULT)) {
  1464.                 pa.setIntegrazione(null);
  1465.             } else if(integrazioneStato.equals(CostantiControlStation.VALUE_PARAMETRO_PORTE_INTEGRAZIONE_STATO_DISABILITATO)) {
  1466.                 pa.setIntegrazione(CostantiControlStation.VALUE_PARAMETRO_PORTE_INTEGRAZIONE_STATO_DISABILITATO);
  1467.             } else {
  1468.                 List<String> valoriFinaliIntegrazione = new ArrayList<>();
  1469.                 for (GruppoIntegrazione group : integrazioneGruppiDaVisualizzare) {
  1470.                     valoriFinaliIntegrazione.addAll(integrazioneGruppiValoriDeiGruppi.get(group.getValue()));
  1471.                 }
  1472.                 pa.setIntegrazione(StringUtils.join(valoriFinaliIntegrazione.toArray(new String[valoriFinaliIntegrazione.size()]), ","));
  1473.             }
  1474.            
  1475.             if(datiAltroPorta) {
  1476.                 PolicyConfiguration oldPolicyConfig = new PolicyConfiguration(pa.getProprietaRateLimitingList(), porteApplicativeCore.getControlloTrafficoPolicyRateLimitingTipiGestori(), false);
  1477.                 boolean changeImpl = false;
  1478.                 if(oldPolicyConfig.getEngineType()!=null) {
  1479.                     changeImpl=!oldPolicyConfig.getEngineType().equals(ctTipologia);
  1480.                 }
  1481.                 else if(ctContatori!=null) {
  1482.                     changeImpl=true;
  1483.                 }
  1484.                
  1485.                 PolicyConfiguration policyConfig = new PolicyConfiguration();
  1486.                 if(changeImpl) {
  1487.                     policyConfig.setGestorePolicyConfigDate(DateManager.getTimeMillis());
  1488.                 }
  1489.                 else {
  1490.                     policyConfig.setGestorePolicyConfigDate(oldPolicyConfig.getGestorePolicyConfigDate());
  1491.                 }
  1492.                 policyConfig.setSyncMode(ctModalitaSincronizzazione);
  1493.                 policyConfig.setImpl(ctImplementazione);
  1494.                 policyConfig.setCount(ctContatori);
  1495.                 policyConfig.setEngineType(ctTipologia);
  1496.                 policyConfig.setHttpMode(ctHeaderHttp);
  1497.                 policyConfig.setHttpMode_limit(ctHeaderHttpLimit);
  1498.                 policyConfig.setHttpMode_remaining(ctHeaderHttpRemaining);
  1499.                 policyConfig.setHttpMode_reset(ctHeaderHttpReset);
  1500.                 policyConfig.setHttpMode_retry_after(ctHeaderHttpRetryAfter);
  1501.                 policyConfig.setHttpMode_retry_after_backoff(ctHeaderHttpRetryAfterBackoff);
  1502.                 pa.setProprietaRateLimitingList(new ArrayList<>());
  1503.                 policyConfig.saveIn(pa.getProprietaRateLimitingList());
  1504.             }
  1505.            
  1506.             if(!porteApplicativeCore.isConnettoriMultipliEnabled()) {
  1507.                 if(behaviour!=null && !"".equals(behaviour)){
  1508.                     pa.setBehaviour(new PortaApplicativaBehaviour());
  1509.                     pa.getBehaviour().setNome(behaviour);
  1510.                 }else
  1511.                     pa.setBehaviour(null);
  1512.             }

  1513.             if(!datiInvocazione && !datiAltroApi && !datiAltroPorta &&
  1514.                 servizioApplicativo!=null && !"".equals(servizioApplicativo)){
  1515.                 // Se il servizioApplicativo e' valorizzato deve esistere un solo SA nella porta applicativa
  1516.                 if(pa.sizeServizioApplicativoList()>0)
  1517.                     pa.removeServizioApplicativo(0);
  1518.                 if(!"-".equals(servizioApplicativo)){
  1519.                     PortaApplicativaServizioApplicativo sa = new PortaApplicativaServizioApplicativo();
  1520.                     sa.setNome(servizioApplicativo);
  1521.                     pa.addServizioApplicativo(sa);
  1522.                 }
  1523.             }
  1524.            
  1525.             String userLogin = ServletUtils.getUserLoginFromSession(session);

  1526.             porteApplicativeCore.performUpdateOperation(userLogin, porteApplicativeHelper.smista(), pa);

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


  1529.             List<PortaApplicativa> lista = null;
  1530.             int idLista = -1;
  1531.            
  1532.        
  1533.             switch (parentPA) {
  1534.             case PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE:
  1535.                
  1536.                 boolean datiInvocazioneCheck = ServletUtils.isCheckBoxEnabled(porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONFIGURAZIONE_DATI_INVOCAZIONE));
  1537.                 boolean datiAltroApiCheck = ServletUtils.isCheckBoxEnabled(porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONFIGURAZIONE_ALTRO_API));
  1538.                 if(datiInvocazioneCheck || datiAltroApiCheck) {
  1539.                     if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  1540.                         ErogazioniHelper erogazioniHelper = new ErogazioniHelper(request, pd, session);
  1541.                         erogazioniHelper.prepareErogazioneChange(TipoOperazione.CHANGE, asps, null);
  1542.                         ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  1543.                         return ServletUtils.getStrutsForwardEditModeFinished(mapping, ErogazioniCostanti.OBJECT_NAME_ASPS_EROGAZIONI, ForwardParams.CHANGE());
  1544.                     }
  1545.                    
  1546.                     idLista = Liste.SERVIZI;
  1547.                     ricerca = porteApplicativeHelper.checkSearchParameters(idLista, ricerca);
  1548.                    
  1549.                     String tipologia = ServletUtils.getObjectFromSession(request, session, String.class, AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE);
  1550.                     if(tipologia!=null &&
  1551.                         AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_EROGAZIONE.equals(tipologia)) {
  1552.                         ricerca.addFilter(idLista, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE);
  1553.                     }
  1554.                    
  1555.                     boolean [] permessi = new boolean[2];
  1556.                     PermessiUtente pu = ServletUtils.getUserFromSession(request, session).getPermessi();
  1557.                     permessi[0] = pu.isServizi();
  1558.                     permessi[1] = pu.isAccordiCooperazione();
  1559.                     List<AccordoServizioParteSpecifica> listaS = null;
  1560.                     String superUser   = ServletUtils.getUserLoginFromSession(session);
  1561.                     if(apsCore.isVisioneOggettiGlobale(superUser)){
  1562.                         listaS = apsCore.soggettiServizioList(null, ricerca,permessi,session, request);
  1563.                     }else{
  1564.                         listaS = apsCore.soggettiServizioList(superUser, ricerca,permessi,session, request);
  1565.                     }
  1566.                     AccordiServizioParteSpecificaHelper apsHelper = new AccordiServizioParteSpecificaHelper(request, pd, session);
  1567.                     apsHelper.prepareServiziList(ricerca, listaS);
  1568.                 }
  1569.                 else {          
  1570.                     idLista = Liste.CONFIGURAZIONE_EROGAZIONE;
  1571.                     ricerca = porteApplicativeHelper.checkSearchParameters(idLista, ricerca);
  1572.                     int idServizio = Integer.parseInt(idAsps);
  1573.                     asps = apsCore.getAccordoServizioParteSpecifica(idServizio);
  1574.                     IDServizio idServizio2 = IDServizioFactory.getInstance().getIDServizioFromAccordo(asps);
  1575.                     Long idSoggetto = asps.getIdSoggetto() != null ? asps.getIdSoggetto() : -1L;
  1576.                     List<MappingErogazionePortaApplicativa> lista2 = apsCore.mappingServiziPorteAppList(idServizio2,asps.getId(),ricerca);
  1577.                     AccordiServizioParteSpecificaHelper apsHelper = new AccordiServizioParteSpecificaHelper(request, pd, session);
  1578.                     apsHelper.prepareServiziConfigurazioneList(lista2, idAsps, idSoggetto+"", ricerca);
  1579.                 }
  1580.                 break;
  1581.             case PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_SOGGETTO:
  1582.                 idLista = Liste.PORTE_APPLICATIVE_BY_SOGGETTO;
  1583.                 ricerca = porteApplicativeHelper.checkSearchParameters(idLista, ricerca);
  1584.                 lista = porteApplicativeCore.porteAppList(soggInt, ricerca);
  1585.                 porteApplicativeHelper.preparePorteAppList(ricerca, lista,idLista);
  1586.                 break;
  1587.             case PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_NONE:
  1588.             default:
  1589.                 idLista = Liste.PORTE_APPLICATIVE;
  1590.                 ricerca = porteApplicativeHelper.checkSearchParameters(idLista, ricerca);
  1591.                 lista = porteApplicativeCore.porteAppList(null, ricerca);
  1592.                 porteApplicativeHelper.preparePorteAppList(ricerca, lista,idLista);
  1593.                 break;
  1594.             }

  1595.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  1596.            
  1597.             ForwardParams fwP = ForwardParams.CHANGE();
  1598.            
  1599.             if( (datiAltroPorta || modificaDescrizione) && !porteApplicativeHelper.isModalitaCompleta()) {
  1600.                 fwP = PorteApplicativeCostanti.TIPO_OPERAZIONE_CONFIGURAZIONE;
  1601.             }
  1602.             // Forward control to the specified success URI
  1603.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE,
  1604.                     fwP);
  1605.         } catch (Exception e) {
  1606.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  1607.                     PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE,
  1608.                     ForwardParams.CHANGE());

  1609.         }
  1610.     }
  1611. }