ServiziApplicativiHelper.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.sa;

  21. import java.text.MessageFormat;
  22. import java.util.ArrayList;
  23. import java.util.Date;
  24. import java.util.Iterator;
  25. import java.util.List;

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

  28. import org.apache.commons.lang.StringEscapeUtils;
  29. import org.apache.commons.lang.StringUtils;
  30. import org.openspcoop2.core.commons.Filtri;
  31. import org.openspcoop2.core.commons.ISearch;
  32. import org.openspcoop2.core.commons.Liste;
  33. import org.openspcoop2.core.commons.SearchUtils;
  34. import org.openspcoop2.core.config.Connettore;
  35. import org.openspcoop2.core.config.Credenziali;
  36. import org.openspcoop2.core.config.GenericProperties;
  37. import org.openspcoop2.core.config.InvocazionePorta;
  38. import org.openspcoop2.core.config.InvocazioneServizio;
  39. import org.openspcoop2.core.config.PortaApplicativa;
  40. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  41. import org.openspcoop2.core.config.PortaDelegata;
  42. import org.openspcoop2.core.config.PortaDelegataServizioApplicativo;
  43. import org.openspcoop2.core.config.Proprieta;
  44. import org.openspcoop2.core.config.RispostaAsincrona;
  45. import org.openspcoop2.core.config.ServizioApplicativo;
  46. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  47. import org.openspcoop2.core.config.constants.CredenzialeTipo;
  48. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  49. import org.openspcoop2.core.config.constants.TipologiaErogazione;
  50. import org.openspcoop2.core.config.constants.TipologiaFruizione;
  51. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  52. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  53. import org.openspcoop2.core.config.driver.FiltroRicercaPorteApplicative;
  54. import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
  55. import org.openspcoop2.core.config.driver.db.IDServizioApplicativoDB;
  56. import org.openspcoop2.core.constants.CostantiLabel;
  57. import org.openspcoop2.core.constants.TipiConnettore;
  58. import org.openspcoop2.core.id.IDPortaApplicativa;
  59. import org.openspcoop2.core.id.IDPortaDelegata;
  60. import org.openspcoop2.core.id.IDServizio;
  61. import org.openspcoop2.core.id.IDServizioApplicativo;
  62. import org.openspcoop2.core.id.IDSoggetto;
  63. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  64. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  65. import org.openspcoop2.core.registry.Ruolo;
  66. import org.openspcoop2.core.registry.Soggetto;
  67. import org.openspcoop2.core.registry.constants.PddTipologia;
  68. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  69. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  70. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  71. import org.openspcoop2.message.constants.ServiceBinding;
  72. import org.openspcoop2.protocol.engine.ConfigurazioneFiltroServiziApplicativi;
  73. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  74. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  75. import org.openspcoop2.protocol.sdk.config.IProtocolConfiguration;
  76. import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
  77. import org.openspcoop2.utils.certificate.ArchiveLoader;
  78. import org.openspcoop2.utils.certificate.ArchiveType;
  79. import org.openspcoop2.utils.certificate.Certificate;
  80. import org.openspcoop2.utils.certificate.KeystoreParams;
  81. import org.openspcoop2.utils.certificate.byok.BYOKManager;
  82. import org.openspcoop2.utils.crypt.PasswordGenerator;
  83. import org.openspcoop2.utils.crypt.PasswordVerifier;
  84. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  85. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  86. import org.openspcoop2.web.ctrlstat.core.ControlStationCoreException;
  87. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  88. import org.openspcoop2.web.ctrlstat.costanti.InUsoType;
  89. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
  90. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationNotFound;
  91. import org.openspcoop2.web.ctrlstat.plugins.ExtendedConnettore;
  92. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCostanti;
  93. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniCostanti;
  94. import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviCostanti;
  95. import org.openspcoop2.web.ctrlstat.servlet.archivi.ExporterUtils;
  96. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoreStatusParams;
  97. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  98. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriHelper;
  99. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCostanti;
  100. import org.openspcoop2.web.ctrlstat.servlet.ruoli.RuoliCostanti;
  101. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;
  102. import org.openspcoop2.web.lib.mvc.AreaBottoni;
  103. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  104. import org.openspcoop2.web.lib.mvc.Costanti;
  105. import org.openspcoop2.web.lib.mvc.DataElement;
  106. import org.openspcoop2.web.lib.mvc.DataElementType;
  107. import org.openspcoop2.web.lib.mvc.PageData;
  108. import org.openspcoop2.web.lib.mvc.Parameter;
  109. import org.openspcoop2.web.lib.mvc.ServletUtils;
  110. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  111. /**
  112.  * ServiziApplicativiHelper
  113.  *
  114.  * @author Poli Andrea (apoli@link.it)
  115.  * @author $Author$
  116.  * @version $Rev$, $Date$
  117.  */
  118. public class ServiziApplicativiHelper extends ConnettoriHelper {

  119.     public ServiziApplicativiHelper(HttpServletRequest request, PageData pd,
  120.             HttpSession session) throws Exception {
  121.         super(request, pd,  session);
  122.     }
  123.     public ServiziApplicativiHelper(ControlStationCore core, HttpServletRequest request, PageData pd,
  124.             HttpSession session) throws Exception {
  125.         super(core, request, pd,  session);
  126.     }

  127.     // Controlla i dati dell'invocazione servizio del servizioApplicativo
  128.     public boolean servizioApplicativoEndPointCheckData(String protocollo, List<ExtendedConnettore> listExtendedConnettore, ServizioApplicativo saOld)
  129.             throws Exception {
  130.         try{
  131.             String sbustamento= this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_SOAP);
  132.             String sbustamentoInformazioniProtocolloRichiesta = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_INFO_PROTOCOLLO_RICHIESTA);
  133.             String getmsg = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_MESSAGE_BOX);
  134.             String getmsgUsername = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  135.             String getmsgPassword = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  136.             String tipoauth = this.getParameter(ConnettoriCostanti.PARAMETRO_INVOCAZIONE_CREDENZIALI_TIPO_AUTENTICAZIONE);
  137.             if (tipoauth == null) {
  138.                 tipoauth = ConnettoriCostanti.DEFAULT_AUTENTICAZIONE_TIPO;
  139.             }
  140.             String utente = this.getParameter(ConnettoriCostanti.PARAMETRO_INVOCAZIONE_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  141.             String password = this.getLockedParameter(ConnettoriCostanti.PARAMETRO_INVOCAZIONE_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  142.             // String confpw = this.getParameter("confpw");
  143.            
  144.             String servizioApplicativoServerEnabledS = this.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_ABILITA_USO_APPLICATIVO_SERVER);
  145.             boolean servizioApplicativoServerEnabled = ServletUtils.isCheckBoxEnabled(servizioApplicativoServerEnabledS);
  146. //          String servizioApplicativoServer = this.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_ID_APPLICATIVO_SERVER);
  147.            
  148.             if(!servizioApplicativoServerEnabled) {    
  149.            
  150.                 // Campi obbligatori
  151.                 if (tipoauth.equals("")) {
  152.                     this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare il Tipo");
  153.                     return false;
  154.                 }
  155.                 if (tipoauth.equals(CostantiConfigurazione.CREDENZIALE_BASIC.toString()) && (utente.equals("") || password.equals("") /*
  156.                  * ||
  157.                  * confpw
  158.                  * .
  159.                  * equals
  160.                  * (
  161.                  * ""
  162.                  * )
  163.                  */)) {
  164.                     String tmpElenco = "";
  165.                     if (utente.equals("")) {
  166.                         tmpElenco = ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_USERNAME;
  167.                     }
  168.                     if (password.equals("")) {
  169.                         if (tmpElenco.equals("")) {
  170.                             tmpElenco = ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD;
  171.                         } else {
  172.                             tmpElenco = tmpElenco + ", "+ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD;
  173.                         }
  174.                     }
  175.                     /*
  176.                      * if (confpw.equals("")) { if (tmpElenco.equals("")) { tmpElenco =
  177.                      * "Conferma password"; } else { tmpElenco = tmpElenco + ", Conferma
  178.                      * password"; } }
  179.                      */
  180.                     this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare: " + tmpElenco);
  181.                     return false;
  182.                 }
  183.    
  184.                 // Controllo che non ci siano spazi nei campi di testo
  185.                 if (tipoauth.equals(CostantiConfigurazione.CREDENZIALE_BASIC.toString()) && ((utente.indexOf(" ") != -1) || (password.indexOf(" ") != -1))) {
  186.                     this.pd.setMessage("Non inserire spazi nei campi di testo");
  187.                     return false;
  188.                 }
  189.    
  190.                 // Controllo che i campi DataElementType.SELECT abbiano uno dei valori ammessi
  191.                 if (!CostantiConfigurazione.ABILITATO.toString().equals(getmsg) && !CostantiConfigurazione.DISABILITATO.toString().equals(getmsg)) {
  192.                     this.pd.setMessage("Servizio '"+ServiziApplicativiCostanti.LABEL_SERVIZIO_MESSAGE_BOX+"' dev'essere "+CostantiConfigurazione.ABILITATO+" o "+CostantiConfigurazione.DISABILITATO);
  193.                     return false;
  194.                 }
  195.                 if (getmsg!=null && getmsg.equals(CostantiConfigurazione.ABILITATO.toString()) ){
  196.                    
  197.                     boolean add = true;
  198.                     if(saOld!=null && saOld.getInvocazionePorta()!=null && saOld.getInvocazionePorta().sizeCredenzialiList()>0) {
  199.                         Credenziali c = saOld.getInvocazionePorta().getCredenziali(0);
  200.                         if(CredenzialeTipo.BASIC.equals(c.getTipo())) {
  201.                             add = false;
  202.                         }
  203.                     }
  204.                     boolean encryptEnabled = this.saCore.isApplicativiPasswordEncryptEnabled();
  205.                    
  206.                     boolean validaPassword = false;
  207.                     if(add || !encryptEnabled) {
  208.                         validaPassword = true;
  209.                     }
  210.                     else {
  211.                         String changePwd = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CHANGE_PASSWORD);
  212.                         if(ServletUtils.isCheckBoxEnabled(changePwd)) {
  213.                             validaPassword = true;
  214.                         }
  215.                     }
  216.                    
  217.                     boolean passwordEmpty = false;
  218.                     if(validaPassword) {
  219.                         if(getmsgPassword==null || getmsgPassword.equals("")) {
  220.                             passwordEmpty = true;
  221.                         }
  222.                     }
  223.                    
  224.                     if(getmsgUsername==null || "".equals(getmsgUsername)) {
  225.                         this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare 'Username' per il servizio '"+ServiziApplicativiCostanti.LABEL_SERVIZIO_MESSAGE_BOX+"'");
  226.                         return false;
  227.                     }
  228.                     if(passwordEmpty) {
  229.                         this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare 'Password' per il servizio '"+ServiziApplicativiCostanti.LABEL_SERVIZIO_MESSAGE_BOX+"'");
  230.                         return false;
  231.                     }
  232.                     if (((getmsgUsername.indexOf(" ") != -1) || (validaPassword && getmsgPassword.indexOf(" ") != -1))) {
  233.                         this.pd.setMessage("Non inserire spazi nei campi di testo");
  234.                         return false;
  235.                     }
  236.                    
  237.                     if(validaPassword) {
  238.                         PasswordVerifier passwordVerifier = this.saCore.getApplicativiPasswordVerifier();
  239.                         if(passwordVerifier!=null){
  240.                             StringBuilder motivazioneErrore = new StringBuilder();
  241.                             if(passwordVerifier.validate(getmsgUsername, getmsgPassword, motivazioneErrore)==false){
  242.                                 this.pd.setMessage(motivazioneErrore.toString());
  243.                                 return false;
  244.                             }
  245.                         }
  246.                     }
  247.                    
  248.                     // recupera lista servizi applicativi con stesse credenziali
  249.                     boolean checkPassword = this.saCore.isApplicativiCredenzialiBasicCheckUniqueUsePassword(); // la password non viene utilizzata per riconoscere se l'username e' già utilizzato.
  250.                     List<ServizioApplicativo> saList = this.saCore.servizioApplicativoWithCredenzialiBasicList(getmsgUsername, getmsgPassword, checkPassword);

  251.                     for (int i = 0; i < saList.size(); i++) {
  252.                         ServizioApplicativo sa = saList.get(i);

  253.                         if(saOld!=null && saOld.getId().longValue() == sa.getId().longValue()) {
  254.                             continue;
  255.                         }

  256.                         // Messaggio di errore
  257.                         IDSoggetto idSoggettoProprietario = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  258.                         String labelSoggetto = this.getLabelNomeSoggetto(idSoggettoProprietario);
  259.                         if(sa.getTipo()!=null && StringUtils.isNotEmpty(sa.getTipo())) {
  260.                             this.pd.setMessage("L'applicativo "+sa.getNome()+" (soggetto: "+labelSoggetto+") possiede già l'utente (http-basic) indicato");
  261.                         }
  262.                         else {
  263.                             IDServizioApplicativo idSA = new IDServizioApplicativo();
  264.                             idSA.setIdSoggettoProprietario(idSoggettoProprietario);
  265.                             idSA.setNome(sa.getNome());
  266.                             List<IDPortaApplicativa> list = this.porteApplicativeCore.porteApplicativeWithApplicativoErogatore(idSA);
  267.                             String labelErogazione = sa.getNome();
  268.                             if(list!=null && !list.isEmpty()) {
  269.                                 try {
  270.                                     PortaApplicativa paFound = this.porteApplicativeCore.getPortaApplicativa(list.get(0));
  271.                                     MappingErogazionePortaApplicativa mappingPA = this.porteApplicativeCore.getMappingErogazionePortaApplicativa(paFound);
  272.                                     labelErogazione = this.getLabelIdServizio(mappingPA.getIdServizio());
  273.                                     if(!mappingPA.isDefault()) {
  274.                                         labelErogazione = labelErogazione+" (gruppo:"+mappingPA.getDescrizione()+")";
  275.                                     }
  276.                                 }catch(Throwable t) {
  277.                                     this.logError("Errore durante l'identificazione dell'erogazione: "+t.getMessage(),t);
  278.                                 }
  279.                             }
  280.                             this.pd.setMessage("L'erogazione "+labelErogazione+" possiede già l'utente (http-basic) indicato per il servizio '"+ServiziApplicativiCostanti.LABEL_SERVIZIO_MESSAGE_BOX+"'");
  281.                         }
  282.                         return false;
  283.                     }
  284.                 }
  285.                 if (!tipoauth.equals(CostantiConfigurazione.CREDENZIALE_BASIC.toString()) &&
  286.                         !tipoauth.equals(CostantiConfigurazione.CREDENZIALE_SSL.toString()) &&
  287.                         !tipoauth.equals("nessuna")) {
  288.                     this.pd.setMessage("Tipo Autenticazione dev'essere "+CostantiConfigurazione.CREDENZIALE_BASIC.toString()+", "
  289.                             + ""+CostantiConfigurazione.CREDENZIALE_SSL.toString()+" o nessuna");
  290.                     return false;
  291.                 }
  292.                 if (!sbustamento.equals(CostantiConfigurazione.ABILITATO.toString()) && !sbustamento.equals(CostantiConfigurazione.DISABILITATO.toString())) {
  293.                     this.pd.setMessage("Sbustamento SOAP dev'essere "+CostantiConfigurazione.ABILITATO+" o "+CostantiConfigurazione.DISABILITATO);
  294.                     return false;
  295.                 }
  296.                 if (!sbustamentoInformazioniProtocolloRichiesta.equals(CostantiConfigurazione.ABILITATO.toString()) && !sbustamentoInformazioniProtocolloRichiesta.equals(CostantiConfigurazione.DISABILITATO.toString())) {
  297.                     this.pd.setMessage("Sbustamento Informazioni del Protocollo dev'essere "+CostantiConfigurazione.ABILITATO+" o "+CostantiConfigurazione.DISABILITATO);
  298.                     return false;
  299.                 }
  300.    
  301.    
  302.                 // Controllo che le password corrispondano
  303.                 /*
  304.                  * if (tipoauth.equals("basic") && !password.equals(confpw)) {
  305.                  * this.pd.setMessage("Le password non corrispondono"); return false; }
  306.                  */

  307.             }
  308.             if (!this.endPointCheckData(null, protocollo, true, listExtendedConnettore)) {
  309.                 return false;
  310.             }

  311.             return true;
  312.         } catch (Exception e) {
  313.             this.logError("Exception: " + e.getMessage(), e);
  314.             throw new Exception(e.getMessage(),e);
  315.         }
  316.     }

  317.     public List<DataElement> addServizioApplicativoToDati(List<DataElement> dati, String oldNomeSA, String nome, String descrizione, String tipoENomeSoggetto, String fault, TipoOperazione tipoOperazione,  
  318.             long idSA, Boolean contaListe,String[] soggettiList,String[] soggettiListLabel, String provider, String dominio,
  319.             String utente,String password, String subject, String principal, String tipoauth,
  320.             String faultactor,String genericfault,String prefixfault, String invrif, String sbustamentoInformazioniProtocolloRisposta,
  321.             String servlet,String id, String nomeProtocollo,
  322.             String ruoloFruitore, String ruoloErogatore,
  323.             String sbustamento, String sbustamentoInformazioniProtocolloRichiesta, String getmsg,
  324.             String invrifRichiesta, String risprif,
  325.             String endpointtype, String autenticazioneHttp, String url, String nomeCodaJMS, String tipoCodaJMS,
  326.             String userRichiesta, String passwordRichiesta, String initcont, String urlpgk,
  327.             String provurl, String connfact, String sendas,  
  328.             String httpsurl, String httpstipologia, boolean httpshostverify,
  329.             boolean httpsTrustVerifyCert, String httpspath, String httpstipo, String httpspwd,
  330.             String httpsalgoritmo, boolean httpsstato, String httpskeystore,
  331.             String httpspwdprivatekeytrust, String httpspathkey,
  332.             String httpstipokey, String httpspwdkey,
  333.             String httpspwdprivatekey, String httpsalgoritmokey,
  334.             String httpsKeyAlias, String httpsTrustStoreCRLs, String httpsTrustStoreOCSPPolicy, String httpsKeyStoreBYOKPolicy,
  335.             String tipoconn,
  336.             String connettoreDebug,
  337.             Boolean isConnettoreCustomUltimaImmagineSalvata,
  338.             String proxyEnabled, String proxyHost, String proxyPort, String proxyUsername, String proxyPassword,
  339.             String tempiRispostaEnabled, String tempiRispostaConnectionTimeout, String tempiRispostaReadTimeout, String tempiRispostaTempoMedioRisposta,
  340.             String opzioniAvanzate, String transferMode, String transferModeChunkSize, String redirectMode, String redirectMaxHop,
  341.             String requestOutputFileName, String requestOutputFileNamePermissions, String requestOutputFileNameHeaders, String requestOutputFileNameHeadersPermissions,
  342.             String requestOutputParentDirCreateIfNotExists,String requestOutputOverwriteIfExists,
  343.             String responseInputMode, String responseInputFileName, String responseInputFileNameHeaders, String responseInputDeleteAfterRead, String responseInputWaitTime,
  344.             String tipoProtocollo, List<String> listaTipiProtocollo, List<ExtendedConnettore> listExtendedConnettore,String tipoCredenzialiSSLSorgente, ArchiveType tipoCredenzialiSSLTipoArchivio, BinaryParameter tipoCredenzialiSSLFileCertificato,
  345.             String tipoCredenzialiSSLFileCertificatoPassword,
  346.             List<String> listaAliasEstrattiCertificato, String tipoCredenzialiSSLAliasCertificato,  String tipoCredenzialiSSLAliasCertificatoSubject, String tipoCredenzialiSSLAliasCertificatoIssuer,
  347.             String tipoCredenzialiSSLAliasCertificatoType, String tipoCredenzialiSSLAliasCertificatoVersion, String tipoCredenzialiSSLAliasCertificatoSerialNumber, String tipoCredenzialiSSLAliasCertificatoSelfSigned,
  348.             String tipoCredenzialiSSLAliasCertificatoNotBefore, String tipoCredenzialiSSLAliasCertificatoNotAfter, String tipoCredenzialiSSLVerificaTuttiICampi, String tipoCredenzialiSSLConfigurazioneManualeSelfSigned,
  349.             String issuer,String tipoCredenzialiSSLStatoElaborazioneCertificato,
  350.             String changepwd,
  351.             String multipleApiKey, String appId, String apiKey,
  352.             boolean autenticazioneToken, String tokenPolicy, String tipoSA, boolean useAsClient,
  353.             boolean integrationManagerEnabled,
  354.             boolean visualizzaModificaCertificato, boolean visualizzaAddCertificato, String servletCredenzialiList, List<Parameter> parametersServletCredenzialiList, Integer numeroCertificati, String servletCredenzialiAdd,
  355.             String tokenPolicySA, String tokenClientIdSA, boolean tokenWithHttpsEnabledByConfigSA,
  356.             String autenticazioneApiKey, boolean useOAS3Names, boolean useAppId, String apiKeyHeader, String apiKeyValue, String appIdHeader, String appIdValue,
  357.             ConnettoreStatusParams connettoreStatusParams) throws Exception {

  358.         if(oldNomeSA!=null && invrifRichiesta!=null) {
  359.             // nop
  360.         }
  361.        
  362.         ServizioApplicativo sa = null;
  363.         if(TipoOperazione.CHANGE.equals(tipoOperazione)){
  364.            
  365.             sa = this.saCore.getServizioApplicativo(idSA);

  366.             if(sa==null) {
  367.                 throw new ControlStationCoreException("Servizi applicativo con id '"+idSA+"' non trovato");
  368.             }
  369.            
  370.             IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  371.             idServizioApplicativo.setNome(sa.getNome());
  372.             idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  373.            
  374.             String labelApplicativo = (this.isSoggettoMultitenantSelezionato() ? sa.getNome() : this.getLabelServizioApplicativoConDominioSoggetto(idServizioApplicativo));
  375.            
  376.             Parameter pSAId = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getId()+"");
  377.             Parameter pSAIdSoggetto = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+"");
  378.             Parameter pDominio = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO, dominio);
  379.             List<Parameter> listaParametriChange = new ArrayList<>();
  380.             listaParametriChange.add(pSAId);
  381.             listaParametriChange.add(pSAIdSoggetto);
  382.             listaParametriChange.add(pDominio);

  383.            
  384.             // In Uso Button
  385.             this.addComandoInUsoButton(labelApplicativo,
  386.                     idSA+"",
  387.                     InUsoType.SERVIZIO_APPLICATIVO);
  388.            
  389.             // Verifica Certificati
  390.             if(this.core.isApplicativiVerificaCertificati()) {
  391.                
  392.                 // Verifica certificati visualizzato solo se il soggetto ha credenziali https
  393.                 boolean ssl = false;
  394.                 InvocazionePorta ip = sa.getInvocazionePorta();
  395.                 for (int i = 0; i < ip.sizeCredenzialiList(); i++) {
  396.                     Credenziali c = ip.getCredenziali(i);
  397.                     if(org.openspcoop2.core.config.constants.CredenzialeTipo.SSL.equals(c.getTipo())) {
  398.                             //&& c.getCertificate()!=null) { non viene ritornato dalla lista
  399.                         ssl = true;
  400.                     }
  401.                 }
  402.    
  403.                 // Verifica configurazione modi di sicurezza
  404.                 boolean modi = this.core.isProfiloModIPA(tipoProtocollo);
  405.                 boolean sicurezzaMessaggioModi = false;
  406.                 boolean server = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo());
  407.                 if(modi){
  408.                     KeystoreParams keystoreParams = org.openspcoop2.protocol.utils.ModIUtils.getApplicativoKeystoreParams(sa.getProtocolPropertyList());
  409.                     sicurezzaMessaggioModi = keystoreParams!= null;
  410.                 }
  411.                
  412.                 if(ssl || sicurezzaMessaggioModi || server) {
  413.                     this.pd.addComandoVerificaCertificatiElementoButton(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI, listaParametriChange);
  414.                 }
  415.             }

  416.             // Verifica connettività
  417.             if(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo())) {
  418.                 List<Parameter> listaParametriVerificaConnettivitaChange = new ArrayList<>();
  419.                 listaParametriVerificaConnettivitaChange.addAll(listaParametriChange);
  420.                 listaParametriVerificaConnettivitaChange.add(new Parameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTIVITA, "true"));
  421.                 this.pd.addComandoVerificaConnettivitaElementoButton(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI, listaParametriVerificaConnettivitaChange);
  422.             }
  423.            
  424.             // se e' abilitata l'opzione reset cache per elemento, visualizzo il comando nell'elenco dei comandi disponibili nella lista
  425.             if(this.core.isElenchiVisualizzaComandoResetCacheSingoloElemento()){
  426.                 listaParametriChange.add(new Parameter(CostantiControlStation.PARAMETRO_ELIMINA_ELEMENTO_DALLA_CACHE, "true"));
  427.                 this.pd.addComandoResetCacheElementoButton(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE, listaParametriChange);
  428.             }
  429.            
  430.             // Proprieta Button
  431.             if(sa!=null && this.existsProprietaOggetto(sa.getProprietaOggetto(), sa.getDescrizione())) {
  432.                 this.addComandoProprietaOggettoButton(labelApplicativo,
  433.                         idSA+"", InUsoType.SERVIZIO_APPLICATIVO);
  434.             }
  435.         }

  436.        
  437.         if(ruoloFruitore==null){
  438.             ruoloFruitore = TipologiaFruizione.DISABILITATO.getValue();
  439.         }
  440.         if(ruoloErogatore==null){
  441.             ruoloErogatore = TipologiaErogazione.DISABILITATO.getValue();
  442.         }
  443.        
  444.         boolean multitenant = this.saCore.isMultitenant();
  445.        
  446.         boolean configurazioneStandardNonApplicabile = false;
  447.        
  448.         // prelevo il flag che mi dice da quale pagina ho acceduto la sezione
  449.         Integer parentSA = ServletUtils.getIntegerAttributeFromSession(ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT, this.session, this.request);
  450.         if(parentSA == null) parentSA = ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_NONE;
  451.         Boolean useIdSoggObject = parentSA == ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_SOGGETTO;
  452.         boolean useIdSogg = false;
  453.         if(useIdSoggObject!=null) {
  454.             useIdSogg = useIdSoggObject.booleanValue();
  455.         }

  456.         IProtocolFactory<?> p = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(tipoProtocollo);
  457.         IProtocolConfiguration config = p.createProtocolConfiguration();
  458.        
  459.         if(TipoOperazione.CHANGE.equals(tipoOperazione)){
  460.             DataElement de = new DataElement();
  461.             de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID);
  462.             de.setValue(id);
  463.             de.setType(DataElementType.HIDDEN);
  464.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID);
  465.             dati.add(de);
  466.         }

  467.         DataElement de = new DataElement();
  468.         if(this.isModalitaCompleta()) {
  469.             de.setLabel(ServiziApplicativiCostanti.LABEL_SERVIZIO_APPLICATIVO);
  470.         }
  471.         else {
  472.             de.setLabel(ServiziApplicativiCostanti.LABEL_APPLICATIVO);
  473.         }
  474.         de.setType(DataElementType.TITLE);
  475.         dati.add(de);


  476.         if(!useIdSogg) {
  477.             de = new DataElement();
  478.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO);
  479.    
  480.             boolean showProtocolli = TipoOperazione.CHANGE.equals(tipoOperazione) && (this.core.countProtocolli(this.request, this.session)>1);
  481.            
  482.             if( (listaTipiProtocollo != null && listaTipiProtocollo.size() > 1) || showProtocolli){
  483.                 if(TipoOperazione.CHANGE.equals(tipoOperazione)){
  484.                    
  485.                     DataElement deLABEL = new DataElement();
  486.                     deLABEL.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO);
  487.                     deLABEL.setType(DataElementType.TEXT);
  488.                     deLABEL.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO+CostantiControlStation.PARAMETRO_SUFFIX_LABEL);
  489.                     deLABEL.setValue(this.getLabelProtocollo(tipoProtocollo));
  490.                     dati.add(deLABEL);
  491.                    
  492.                     de.setValue(tipoProtocollo);
  493.                     de.setType(DataElementType.HIDDEN);
  494.                     de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO);
  495.                 }else {
  496.                     de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO);
  497.                     de.setValues(listaTipiProtocollo);
  498.                     de.setLabels(this.getLabelsProtocolli(listaTipiProtocollo));
  499.                     de.setSelected(tipoProtocollo);
  500.                     de.setType(DataElementType.SELECT);
  501.                     de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO);
  502.                     de.setPostBack(true);
  503.                 }
  504.             } else {
  505.                 de.setValue(tipoProtocollo);
  506.                 de.setType(DataElementType.HIDDEN);
  507.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO);
  508.             }
  509.             de.setSize(this.getSize());
  510.             dati.add(de);
  511.         }
  512.        
  513.         boolean dominioEsterno = false;
  514.         boolean isSupportatoAutenticazioneApplicativiEsterni = this.saCore.isSupportatoAutenticazioneApplicativiEsterniErogazione(nomeProtocollo);
  515.         if(isSupportatoAutenticazioneApplicativiEsterni) {
  516.             de = new DataElement();
  517.             de.setLabel(SoggettiCostanti.LABEL_PARAMETRO_SOGGETTO_DOMINIO);
  518.             de.setName(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO);
  519.             if(TipoOperazione.CHANGE.equals(tipoOperazione)){
  520.                 de.setType(DataElementType.HIDDEN);
  521.                 de.setValue(dominio);
  522.                 dati.add(de);
  523.                
  524.                 de = new DataElement();
  525.                 de.setType(DataElementType.TEXT);
  526.                 de.setLabel(SoggettiCostanti.LABEL_PARAMETRO_SOGGETTO_DOMINIO);
  527.                 de.setName(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO+CostantiControlStation.PARAMETRO_SUFFIX_LABEL);
  528.                 String valueDom = dominio;
  529.                 String [] sdValues = SoggettiCostanti.getSoggettiDominiValue();
  530.                 String [] sdLabels = SoggettiCostanti.getSoggettiDominiLabel();
  531.                 for (int i = 0; i < sdValues.length; i++) {
  532.                     if(sdValues[i].equals(dominio)) {
  533.                         valueDom = sdLabels[i];
  534.                         break;
  535.                     }
  536.                 }
  537.                 de.setValue(valueDom);
  538.             }
  539.             else {
  540.                 de.setType(DataElementType.SELECT);
  541.                 de.setValues(SoggettiCostanti.getSoggettiDominiValue());
  542.                 de.setLabels(SoggettiCostanti.getSoggettiDominiLabel());
  543.                 de.setSelected(dominio);
  544.                 de.setPostBack(true);
  545.             }
  546.            
  547.             dominioEsterno = SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE.equals(dominio);
  548.            
  549.             dati.add(de);
  550.         }
  551.        
  552.        
  553.        
  554.         String oldtipoauth = null;
  555.         String nomePdd = null;
  556.         // se operazione change visualizzo i link per invocazione servizio,
  557.         // risposta asincrona
  558.         // e ruoli
  559.         if (TipoOperazione.CHANGE.equals(tipoOperazione)) {

  560.             if(sa==null) {
  561.                 sa = this.saCore.getServizioApplicativo(idSA);
  562.             }
  563.             String tipoSoggetto = null;
  564.             String nomeSoggetto = null;
  565.             if(this.core.isRegistroServiziLocale()){
  566.                 Soggetto soggetto = this.soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
  567.                 tipoSoggetto = soggetto.getTipo();
  568.                 nomeSoggetto = soggetto.getNome();
  569.                 nomePdd = soggetto.getPortaDominio();
  570.             }
  571.             else{
  572.                 org.openspcoop2.core.config.Soggetto soggetto = this.soggettiCore.getSoggetto(sa.getIdSoggetto());
  573.                 tipoSoggetto = soggetto.getTipo();
  574.                 nomeSoggetto = soggetto.getNome();
  575.             }

  576.             // oldtipoauth
  577.             if(sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().sizeCredenzialiList()>0) {
  578.                 // prendo il primo
  579.                 CredenzialeTipo tipo = sa.getInvocazionePorta().getCredenziali(0).getTipo();
  580.                 if(tipo!=null) {
  581.                     oldtipoauth = tipo.getValue();
  582.                 }
  583.                 else {
  584.                     oldtipoauth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA;
  585.                 }
  586.             }
  587.            
  588.             // soggetto proprietario
  589.             de = new DataElement();
  590.             if(multitenant && !this.isSoggettoMultitenantSelezionato()) {
  591.                 de.setType(DataElementType.TEXT);
  592.             }
  593.             else if(isSupportatoAutenticazioneApplicativiEsterni) {
  594.                 de.setType(DataElementType.TEXT);
  595.             }
  596.             else {
  597.                 de.setType(DataElementType.HIDDEN);
  598.             }
  599.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  600.             de.setValue(tipoENomeSoggetto);
  601.             dati.add(de);
  602.            
  603.             if(this.isModalitaCompleta()) {
  604.                 de = new DataElement();
  605.                 de.setType(DataElementType.LINK);
  606.                 de.setValue(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_VISUALIZZA_DATI_PROVIDER);
  607.                 de.setUrl(SoggettiCostanti.SERVLET_NAME_SOGGETTI_CHANGE,
  608.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getIdSoggetto()+""),
  609.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_TIPO_SOGGETTO, tipoSoggetto),
  610.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME_SOGGETTO, nomeSoggetto)
  611.                         );
  612.                 dati.add(de);
  613.             }

  614.             de = new DataElement();
  615.             de.setType(DataElementType.HIDDEN);
  616.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);              
  617.             de.setValue(provider);
  618.             dati.add(de);
  619.            
  620.         }else{
  621.             de = new DataElement();
  622.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  623.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);              
  624.             // Aggiunta di un servizio applicativo passando dal menu'
  625.             if(!useIdSogg){
  626.                
  627.                 boolean visualizzaSoggetto = isSupportatoAutenticazioneApplicativiEsterni;
  628.                 if(visualizzaSoggetto) {
  629.                     if(!dominioEsterno) {
  630.                         visualizzaSoggetto = soggettiList!=null && soggettiList.length>1;
  631.                     }
  632.                 }
  633.                
  634.                 if((multitenant && !this.isSoggettoMultitenantSelezionato()) || visualizzaSoggetto) {
  635.                     de.setType(DataElementType.SELECT);
  636.                     de.setPostBack(true);
  637.                
  638.                     de.setValues(soggettiList);
  639.                     de.setLabels(soggettiListLabel);
  640.                     // selezion il provider (se)/che era stato precedentemente
  641.                     // selezionato
  642.                     // fix 2866
  643.                     if ((provider != null) && !provider.equals("")) {
  644.                         de.setSelected(provider);
  645.                     }
  646.                 }
  647.                 else {
  648.                     de.setType(DataElementType.HIDDEN);
  649.                     de.setValue(provider);
  650.                 }
  651.                                
  652.             } else {
  653.                 de.setType(DataElementType.HIDDEN);
  654.                 de.setValue(provider);
  655.                 dati.add(de);

  656.                 de = new DataElement();
  657.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);

  658.                 // Aggiunta di un servizio applicativo passando dalla schermata soggetti
  659.                 org.openspcoop2.core.config.Soggetto sog = this.soggettiCore.getSoggetto(Integer.parseInt(provider));
  660.                
  661.                 de.setType(DataElementType.TEXT);
  662.                 de.setValue(this.getLabelNomeSoggetto(tipoProtocollo, sog.getTipo(), sog.getNome()));
  663.                 de.setSize(this.getSize());

  664.             }
  665.             dati.add(de);

  666.         }
  667.        
  668.        
  669.        
  670.                
  671.         de = new DataElement();
  672.         de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  673.         de.setValue(nome);
  674.         de.setSize(this.getSize());
  675.         de.setType(DataElementType.TEXT_EDIT);
  676.         de.setRequired(true);
  677.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  678.         dati.add(de);
  679.        
  680.        
  681.        
  682.         de = new DataElement();
  683.         de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_DESCRIZIONE);
  684.         de.setValue(descrizione);
  685.         de.setType(DataElementType.TEXT_AREA);
  686.         de.setRows(2);
  687.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_DESCRIZIONE);
  688.         de.setSize( getSize());
  689.         dati.add(de);
  690.        
  691.        
  692.        
  693.        

  694.         boolean applicativiServerEnabled = this.saCore.isApplicativiServerEnabled(this);
  695.        
  696.         // Tipo SA
  697.         de = new DataElement();
  698.         de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_TIPO);
  699.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_TIPO_SA);
  700.         de.setSize(this.getSize());
  701.        
  702.         boolean applicativoServerSelezionabile = true;
  703.         if(isSupportatoAutenticazioneApplicativiEsterni &&
  704.             PddTipologia.ESTERNO.toString().equals(dominio)){
  705.             applicativoServerSelezionabile = false;
  706.             tipoSA = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_CLIENT;
  707.         }

  708.         if(applicativiServerEnabled) {
  709.             if(tipoOperazione.equals(TipoOperazione.ADD) && applicativoServerSelezionabile) {
  710.                 de.setSelected(tipoSA);
  711.                 de.setType(DataElementType.SELECT);
  712.                 de.setLabels(ServiziApplicativiCostanti.getLabelsServiziApplicativiTipo());
  713.                 de.setValues(ServiziApplicativiCostanti.getValuesServiziApplicativiTipo());
  714.                 de.setPostBack(true);
  715.             } else {
  716.                 de.setValue(tipoSA);
  717.                 de.setType(DataElementType.HIDDEN);
  718.                 dati.add(de);
  719.                
  720.                 de = new DataElement();
  721.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_TIPO);
  722.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_TIPO_SA+CostantiControlStation.PARAMETRO_SUFFIX_LABEL);
  723.                 de.setType(DataElementType.TEXT);
  724.                 de.setValue(this.getTipo(tipoSA, (applicativiServerEnabled && useAsClient)));
  725.             }
  726.         } else {
  727.             de.setType(DataElementType.HIDDEN);
  728.             de.setValue(tipoSA);
  729.         }
  730.         dati.add(de);
  731.        
  732.        
  733.         if (!this.isModalitaCompleta()) {
  734. //          
  735. //          de = new DataElement();
  736. //          de.setLabel(ServiziApplicativiCostanti.LABEL_FRUITORE);
  737. //          de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RUOLO_FRUITORE);
  738. //          de.setPostBack(true);
  739. //          de.setType(DataElementType.CHECKBOX);
  740. //          if(!TipologiaFruizione.DISABILITATO.equals(ruoloFruitore)){
  741. //              de.setSelected(true);
  742. //          }
  743. //          dati.add(de);
  744. //          
  745. //          de = new DataElement();
  746. //          de.setLabel(ServiziApplicativiCostanti.LABEL_EROGATORE);
  747. //          de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RUOLO_EROGATORE);
  748. //          de.setPostBack(true);
  749. //          de.setType(DataElementType.CHECKBOX);
  750. //          if(!TipologiaErogazione.DISABILITATO.equals(ruoloErogatore)){
  751. //              de.setSelected(true);
  752. //          }
  753. //          dati.add(de);
  754.            
  755.             de = new DataElement();
  756.             de.setLabel(ServiziApplicativiCostanti.LABEL_TIPOLOGIA);
  757.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RUOLO_SA);
  758.             //de.setPostBack(true);
  759.             //de.setType(DataElementType.SELECT);
  760.             //de.setValues(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO);
  761.            
  762.             // forzo HIDDEN sempre a meno che non e' in modalita' completa
  763.             de.setType(DataElementType.HIDDEN);
  764.            
  765.             if(!TipologiaFruizione.DISABILITATO.equals(ruoloFruitore) && !TipologiaErogazione.DISABILITATO.equals(ruoloErogatore)){
  766.                 if(!applicativiServerEnabled) {
  767.                     de.setLabel(null);
  768.                     de.setValue(CostantiControlStation.LABEL_CONFIGURAZIONE_IMPOSTATA_MODALITA_AVANZATA_SHORT_MESSAGE);
  769.                     de.setType(DataElementType.TEXT);
  770.                     de.setPostBack(false);
  771.                    
  772.                     configurazioneStandardNonApplicabile = true;
  773.                 }
  774.             }
  775.             else if(!TipologiaFruizione.DISABILITATO.equals(ruoloFruitore)){
  776.                 de.setValue(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_FRUITORE);
  777.                 if(!applicativiServerEnabled) {
  778.                     if(tipoauth==null || tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA)){
  779.                         tipoauth = this.saCore.getAutenticazione_generazioneAutomaticaPorteDelegate();
  780.                     }
  781.                 } else {
  782.                     if(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_CLIENT.equals(tipoSA)) {
  783.                         if(tipoauth==null || tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA)){
  784.                             tipoauth = this.saCore.getAutenticazione_generazioneAutomaticaPorteDelegate();
  785.                         }
  786.                     }
  787.                 }
  788.             }
  789.             else if(!TipologiaErogazione.DISABILITATO.equals(ruoloErogatore)){
  790.                 de.setValue(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_EROGATORE);
  791.                 if( (endpointtype==null || TipiConnettore.DISABILITATO.getNome().equals(endpointtype))
  792.                         &&
  793.                         (getmsg==null || CostantiConfigurazione.DISABILITATO.equals(getmsg))){
  794.                     // forzo connettoreAbilitato
  795.                     this.pd.setMessage("Abilitare il servizio di IntegrationManager prima di disabilitare il connettore");
  796.                     endpointtype = TipiConnettore.HTTP.getNome();
  797.                 }
  798.             }
  799.             else{
  800.                 // VECCHIO DEFAULT
  801. //              de.setSelected(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_EROGATORE);
  802. //              // forzo default
  803. //              ruoloErogatore = TipologiaErogazione.TRASPARENTE.getValue();
  804. //              // forzo connettoreAbilitato
  805. //              endpointtype = TipiConnettore.HTTP.getNome();

  806.                 de.setValue(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_FRUITORE);
  807.                 // forzo default
  808.                 ruoloFruitore = TipologiaFruizione.NORMALE.getValue();
  809.                 if(tipoauth==null || tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA)){
  810.                     tipoauth = this.saCore.getAutenticazione_generazioneAutomaticaPorteDelegate();
  811.                    
  812.                     // label del tasto invia
  813.                     if(tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL) && StringUtils.isNotEmpty(tipoCredenzialiSSLStatoElaborazioneCertificato) && ( tipoCredenzialiSSLStatoElaborazioneCertificato.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CARICA_CERTIFICATO)
  814.                             ||tipoCredenzialiSSLStatoElaborazioneCertificato.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_PASSWORD_NON_PRESENTE)
  815.                             || tipoCredenzialiSSLStatoElaborazioneCertificato.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_ERRORE_LETTURA_CERTIFICATO)
  816.                             )) {
  817.                         if(tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO)) {
  818.                             this.pd.setLabelBottoneInvia(ConnettoriCostanti.LABEL_BUTTON_INVIA_CARICA_CERTIFICATO);
  819.                         }
  820.                     }
  821.                    
  822.                 }
  823.                 de.setType(DataElementType.HIDDEN);
  824.                
  825.             }
  826.                        
  827.             dati.add(de);
  828.            
  829.         }// fine !modalitàCompleta
  830.        
  831.         // Link Proprieta
  832.        
  833.         if(tipoOperazione.equals(TipoOperazione.CHANGE)) {
  834.             de = new DataElement();
  835.             de.setType(DataElementType.LINK);
  836.            
  837.             List<Parameter> parametersServletSAChange = new ArrayList<>();
  838.             Parameter pIdSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getId()+"");
  839.             parametersServletSAChange.add(pIdSA);
  840.             int idProv = sa.getIdSoggetto().intValue();
  841.             Parameter pIdSoggettoSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, idProv+"");
  842.             parametersServletSAChange.add(pIdSoggettoSA);
  843.             if(dominio != null) {
  844.                 Parameter pDominio = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO, dominio);
  845.                 parametersServletSAChange.add(pDominio);
  846.             }
  847.            
  848.             de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_PROPRIETA_LIST, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()]));
  849.             if (contaListe) {
  850.                 de.setValue(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROPRIETA+"(" + sa.sizeProprietaList() + ")");
  851.             } else {
  852.                 de.setValue(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROPRIETA);
  853.             }
  854.            
  855.             dati.add(de);
  856.         }
  857.        
  858.        
  859.         boolean showLinkInvocazioneServizio = false;
  860.         boolean showLinkRispostaAsincrona = false;
  861.         boolean supportAsincroni = false;
  862.         if (TipoOperazione.CHANGE.equals(tipoOperazione)) {
  863.             if (this.isModalitaCompleta() && !this.pddCore.isPddEsterna(nomePdd)) {
  864.                 showLinkInvocazioneServizio = true;
  865.                 showLinkRispostaAsincrona = true;
  866.             }
  867.             else {
  868.                 if(!this.pddCore.isPddEsterna(nomePdd)){
  869.                     List<ServiceBinding> serviceBindingListProtocollo = this.core.getServiceBindingListProtocollo(nomeProtocollo);
  870.                     for (ServiceBinding serviceBinding : serviceBindingListProtocollo) {
  871.                         supportAsincroni = this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(nomeProtocollo,serviceBinding, ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)
  872.                                 || this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(nomeProtocollo, serviceBinding, ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
  873.                         if(supportAsincroni) {
  874.                             break;
  875.                         }
  876.                     }
  877.                 }
  878.             }
  879.         }
  880.        
  881.        
  882.         if(supportAsincroni) {
  883.             RispostaAsincrona rispAsin = sa.getRispostaAsincrona();
  884.             Connettore connettoreRis = rispAsin != null ? rispAsin.getConnettore() : null;
  885.             StatoFunzionalita getMSGRisp = rispAsin != null ? rispAsin.getGetMessage() : null;

  886.             boolean attualeConnettoreDisabilitato = (connettoreRis == null || TipiConnettore.DISABILITATO.getNome().equals(connettoreRis.getTipo())) && CostantiConfigurazione.DISABILITATO.equals(getMSGRisp);
  887.            
  888.             if(!attualeConnettoreDisabilitato || !this.isModalitaStandard()) {
  889.            
  890.                 de = new DataElement();
  891.                 de.setType(DataElementType.LINK);
  892.                 de.setLabel(ServiziApplicativiCostanti.LABEL_RISPOSTA_ASINCRONA);
  893.                 if(this.pddCore.isPddEsterna(nomePdd)){
  894.                     de.setType(DataElementType.TEXT);
  895.                     de.setValue("(non presente)");
  896.                 }
  897.                 else{
  898.                     if (attualeConnettoreDisabilitato) {
  899.                         // de.setValue(CostantiConfigurazione.DISABILITATO);
  900.                         de.setValue(ServiziApplicativiCostanti.LABEL_RISPOSTA_ASINCRONA+" (disabilitato)");
  901.                     } else {
  902.                         // de.setValue("visualizza");
  903.                         de.setValue(ServiziApplicativiCostanti.LABEL_RISPOSTA_ASINCRONA+" (visualizza)");
  904.                     }
  905.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_ENDPOINT_RISPOSTA,
  906.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,sa.getIdSoggetto()+""),
  907.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME_SERVIZIO_APPLICATIVO,sa.getNome()),
  908.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""));
  909.                 }
  910.    
  911.                 dati.add(de);
  912.                
  913.             }
  914.         }
  915.        
  916.        
  917.        
  918.         boolean showFruitore = false;
  919.         boolean showErogatore = false;
  920.        
  921.         boolean connettoreErogatoreForceEnabled = false;
  922.         if(applicativiServerEnabled) {
  923.             showFruitore = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_CLIENT.equals(tipoSA);
  924.             showErogatore = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(tipoSA);
  925.            
  926.             if(
  927.                     //va visualizzato comunque se già configurato: !this.isModalitaStandard() &&
  928.                     getmsg!=null && CostantiConfigurazione.ABILITATO.toString().equals(getmsg)) {
  929.                 connettoreErogatoreForceEnabled = false;
  930.             }
  931.             else {
  932.                 connettoreErogatoreForceEnabled = true;
  933.                 if(TipiConnettore.DISABILITATO.getNome().equals(endpointtype)) {
  934.                     endpointtype = TipiConnettore.HTTP.getNome();
  935.                 }
  936.             }
  937.         }
  938.         else {
  939.             showFruitore = !TipologiaFruizione.DISABILITATO.equals(ruoloFruitore);
  940.             showErogatore = this.isModalitaStandard() && !TipologiaErogazione.DISABILITATO.equals(ruoloErogatore);
  941.         }
  942.        
  943.         boolean postBackViaPost = false;
  944.         if(showErogatore) {
  945.             postBackViaPost = true;
  946.         }
  947.        
  948.        
  949.        
  950.        
  951.        
  952.         // ************ FRUITORE ********************
  953.        
  954.         if (this.isModalitaCompleta() ||  showFruitore) {
  955.                
  956. //          if(this.isModalitaStandard()){
  957. //              de = new DataElement();
  958. //              de.setLabel(ServiziApplicativiCostanti.LABEL_FRUITORE);
  959. //              de.setType(DataElementType.TITLE);
  960. //              dati.add(de);
  961. //              
  962. //              de = new DataElement();
  963. //              de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_INFO_PROTOCOLLO + " '" + nomeProtocollo + "' Risposta");
  964. //              de.setType(DataElementType.SELECT);
  965. //              de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_INFO_PROTOCOLLO_RISPOSTA);
  966. //              de.setValues(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_SBUSTAMENTO_PROTOCOLLO);
  967. //              de.setSelected(sbustamentoInformazioniProtocolloRisposta);
  968. //              dati.add(de);
  969. //          }
  970. //          else{
  971. //              de = new DataElement();
  972. //              de.setLabel(ServiziApplicativiCostanti.LABEL_CREDENZIALI_ACCESSO_PORTA);
  973. //              de.setType(DataElementType.TITLE);
  974. //              dati.add(de);
  975. //          }

  976.             // Credenziali di accesso
  977.             if (utente == null) {
  978.                 utente = "";
  979.             }
  980.             if (password == null) {
  981.                 password = "";
  982.             }
  983.             if (subject == null) {
  984.                 subject = "";
  985.             }
  986.             if (principal == null) {
  987.                 principal = "";
  988.             }
  989.             boolean showLabelCredenzialiAccesso = true;
  990.             boolean visualizzaTipoAutenticazione = true;
  991.             String titleConfigSslCredenziali = null;
  992.             String subtitleConfigSslCredenziali = null;
  993.             boolean dominioEsternoProfiloModIPA = dominioEsterno && this.isProfiloModIPA(nomeProtocollo);
  994.             if(dominioEsternoProfiloModIPA) {
  995.                
  996.                 visualizzaTipoAutenticazione = false;
  997.                 boolean trovato = false;
  998.                 for (String tipoAuthModIEsterno: ConnettoriCostanti.CREDENZIALI_MODI_ESTERNO_VALUES) {
  999.                     if(tipoAuthModIEsterno.equals(tipoauth)) {
  1000.                         trovato = true;
  1001.                     }
  1002.                 }
  1003.                 if(!trovato && !ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN.equals(tipoauth)) {
  1004.                     tipoauth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL;
  1005.                 }
  1006.                
  1007.                 String label = CostantiLabel.MODIPA_PROTOCOL_LABEL;
  1008.                 if(label!=null && !"".equals(label)) {
  1009.                     showLabelCredenzialiAccesso = false;
  1010.                     titleConfigSslCredenziali = label;
  1011.                 }
  1012.                
  1013.                 subtitleConfigSslCredenziali = CostantiLabel.MODIPA_SICUREZZA_MESSAGGIO_SUBTITLE_LABEL;
  1014.             }
  1015.            
  1016.             if(!dominioEsternoProfiloModIPA) {
  1017.                 dati = this.addCredenzialiToDati(tipoOperazione, dati, tipoauth, oldtipoauth, utente, password, subject, principal, servlet, showLabelCredenzialiAccesso, null, false, visualizzaTipoAutenticazione, null, true,
  1018.                         tipoCredenzialiSSLSorgente, tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato, tipoCredenzialiSSLFileCertificatoPassword,listaAliasEstrattiCertificato,
  1019.                         tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLAliasCertificatoSubject, tipoCredenzialiSSLAliasCertificatoIssuer,
  1020.                         tipoCredenzialiSSLAliasCertificatoType, tipoCredenzialiSSLAliasCertificatoVersion, tipoCredenzialiSSLAliasCertificatoSerialNumber,
  1021.                         tipoCredenzialiSSLAliasCertificatoSelfSigned, tipoCredenzialiSSLAliasCertificatoNotBefore, tipoCredenzialiSSLAliasCertificatoNotAfter,
  1022.                         tipoCredenzialiSSLVerificaTuttiICampi, tipoCredenzialiSSLConfigurazioneManualeSelfSigned, issuer, tipoCredenzialiSSLStatoElaborazioneCertificato,
  1023.                         changepwd,
  1024.                         multipleApiKey, appId, apiKey,
  1025.                         subtitleConfigSslCredenziali, visualizzaModificaCertificato, visualizzaAddCertificato, servletCredenzialiList, parametersServletCredenzialiList, numeroCertificati, servletCredenzialiAdd,
  1026.                         true, tokenPolicySA, tokenClientIdSA, tokenWithHttpsEnabledByConfigSA,
  1027.                         dominioEsterno, tipoProtocollo,
  1028.                         postBackViaPost);
  1029.             }
  1030.             else {
  1031.                 // aggiungo dopo il link sui ruoli
  1032.             }
  1033.            
  1034.            
  1035.             if (TipoOperazione.CHANGE.equals(tipoOperazione)) {
  1036.            
  1037.                 de = new DataElement();
  1038.                 de.setLabel(RuoliCostanti.LABEL_RUOLI);
  1039.                 de.setType(DataElementType.TITLE);
  1040.                 dati.add(de);
  1041.                
  1042.                 de = new DataElement();
  1043.                 de.setType(DataElementType.LINK);
  1044.                 if(useIdSogg){
  1045.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  1046.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""),
  1047.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,sa.getIdSoggetto()+""));
  1048.                 }
  1049.                 else{
  1050.                     if(this.isModalitaCompleta()) {
  1051.                         de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  1052.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""));
  1053.                     }
  1054.                     else {
  1055.                         // Imposto Accesso da Change!
  1056.                         de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  1057.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""),
  1058.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RUOLI_ACCESSO_DA_CHANGE,Costanti.CHECK_BOX_ENABLED));
  1059.                     }
  1060.                 }
  1061.                 if (contaListe) {
  1062.                     // BugFix OP-674
  1063.                     //List<String> lista1 = this.saCore.servizioApplicativoRuoliList(sa.getId(),new Search(true));
  1064.                     ConsoleSearch searchForCount = new ConsoleSearch(true,1);
  1065.                     this.saCore.servizioApplicativoRuoliList(sa.getId(),searchForCount);
  1066.                     //int numRuoli = lista1.size();
  1067.                     int numRuoli = searchForCount.getNumEntries(Liste.SERVIZIO_APPLICATIVO_RUOLI);
  1068.                     ServletUtils.setDataElementVisualizzaLabel(de,(long)numRuoli);
  1069.                 } else
  1070.                     ServletUtils.setDataElementVisualizzaLabel(de);
  1071.                 dati.add(de);
  1072.                
  1073.             }
  1074.            
  1075.             if(dominioEsternoProfiloModIPA) {
  1076.                
  1077.                 if(showLabelCredenzialiAccesso == false) {
  1078.                     de = new DataElement();
  1079.                     de.setLabel(titleConfigSslCredenziali);
  1080.                     de.setType(DataElementType.TITLE);
  1081.                     dati.add(de);
  1082.                 }
  1083.                
  1084.                 dati = this.addCredenzialiToDati(tipoOperazione, dati, tipoauth, oldtipoauth, utente, password, subject, principal, servlet, showLabelCredenzialiAccesso, null, false, visualizzaTipoAutenticazione, null, true,
  1085.                         tipoCredenzialiSSLSorgente, tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato, tipoCredenzialiSSLFileCertificatoPassword,listaAliasEstrattiCertificato,
  1086.                         tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLAliasCertificatoSubject, tipoCredenzialiSSLAliasCertificatoIssuer,
  1087.                         tipoCredenzialiSSLAliasCertificatoType, tipoCredenzialiSSLAliasCertificatoVersion, tipoCredenzialiSSLAliasCertificatoSerialNumber,
  1088.                         tipoCredenzialiSSLAliasCertificatoSelfSigned, tipoCredenzialiSSLAliasCertificatoNotBefore, tipoCredenzialiSSLAliasCertificatoNotAfter,
  1089.                         tipoCredenzialiSSLVerificaTuttiICampi, tipoCredenzialiSSLConfigurazioneManualeSelfSigned, issuer, tipoCredenzialiSSLStatoElaborazioneCertificato,
  1090.                         changepwd,
  1091.                         multipleApiKey, appId, apiKey,
  1092.                         subtitleConfigSslCredenziali, visualizzaModificaCertificato, visualizzaAddCertificato, servletCredenzialiList, parametersServletCredenzialiList, numeroCertificati, servletCredenzialiAdd,
  1093.                         true, tokenPolicySA, tokenClientIdSA, tokenWithHttpsEnabledByConfigSA,
  1094.                         dominioEsterno, tipoProtocollo,
  1095.                         postBackViaPost);
  1096.             }
  1097.            
  1098.         }
  1099.         else {
  1100.    
  1101.             // Devo far vedere il link dei ruoli anche se il server è utilizzabile come client
  1102.            
  1103.             if (TipoOperazione.CHANGE.equals(tipoOperazione) && applicativiServerEnabled && ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(tipoSA) && useAsClient) {
  1104.                
  1105.                 de = new DataElement();
  1106.                 de.setLabel(RuoliCostanti.LABEL_RUOLI);
  1107.                 de.setType(DataElementType.TITLE);
  1108.                 dati.add(de);
  1109.                
  1110.                 de = new DataElement();
  1111.                 de.setType(DataElementType.LINK);
  1112.                 if(useIdSogg){
  1113.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  1114.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""),
  1115.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,sa.getIdSoggetto()+""));
  1116.                 }
  1117.                 else{
  1118.                     if(this.isModalitaCompleta()) {
  1119.                         de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  1120.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""));
  1121.                     }
  1122.                     else {
  1123.                         // Imposto Accesso da Change!
  1124.                         de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  1125.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""),
  1126.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RUOLI_ACCESSO_DA_CHANGE,Costanti.CHECK_BOX_ENABLED));
  1127.                     }
  1128.                 }
  1129.                 if (contaListe) {
  1130.                     // BugFix OP-674
  1131.                     //List<String> lista1 = this.saCore.servizioApplicativoRuoliList(sa.getId(),new Search(true));
  1132.                     ConsoleSearch searchForCount = new ConsoleSearch(true,1);
  1133.                     this.saCore.servizioApplicativoRuoliList(sa.getId(),searchForCount);
  1134.                     //int numRuoli = lista1.size();
  1135.                     int numRuoli = searchForCount.getNumEntries(Liste.SERVIZIO_APPLICATIVO_RUOLI);
  1136.                     ServletUtils.setDataElementVisualizzaLabel(de,(long)numRuoli);
  1137.                 } else
  1138.                     ServletUtils.setDataElementVisualizzaLabel(de);
  1139.                 dati.add(de);
  1140.                
  1141.             }
  1142.            
  1143.         }


  1144.         boolean avanzatoFruitore = this.isModalitaAvanzata() &&
  1145.                 !TipologiaFruizione.DISABILITATO.equals(ruoloFruitore);
  1146.        
  1147.         boolean faultChoice = avanzatoFruitore && config.isSupportoSceltaFault();
  1148.         if (faultChoice) {
  1149.             de = new DataElement();
  1150.             de.setLabel(ServiziApplicativiCostanti.LABEL_ERRORE_APPLICATIVO);
  1151.             de.setType(DataElementType.TITLE);
  1152.             dati.add(de);
  1153.         }

  1154.         if (TipoOperazione.ADD.equals(tipoOperazione)) {
  1155.             de = new DataElement();
  1156.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_FAULT);
  1157.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT);
  1158.             if (faultChoice) {
  1159.                 de.setType(DataElementType.SELECT);
  1160.                 de.setValues(ServiziApplicativiCostanti.getServiziApplicativiFault());
  1161.                 de.setSelected(fault);
  1162.             }
  1163.             else{
  1164.                 de.setType(DataElementType.HIDDEN);
  1165.                 de.setValue(fault);
  1166.             }
  1167.             dati.add(de);
  1168.         }
  1169.         else{
  1170.             de = new DataElement();
  1171.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_FAULT);
  1172.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT);
  1173.             if (faultChoice) {
  1174.                 de.setType(DataElementType.SELECT);
  1175.                 de.setValues(ServiziApplicativiCostanti.getServiziApplicativiFault());
  1176.                 de.setSelected(fault);
  1177.                 if(postBackViaPost) {
  1178.                     de.setPostBack_viaPOST(true);
  1179.                 }
  1180.                 else {
  1181.                     de.setPostBack(true);
  1182.                 }
  1183.             }
  1184.             else{
  1185.                 de.setType(DataElementType.HIDDEN);
  1186.                 de.setValue(fault);
  1187.             }
  1188.             dati.add(de);

  1189.             if (fault.equals(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP)) {
  1190.                 de = new DataElement();
  1191.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_FAULT_ACTOR);
  1192.                 de.setValue(faultactor);
  1193.                 if (faultChoice) {
  1194.                     de.setType(DataElementType.TEXT_EDIT);
  1195.                 }
  1196.                 else{
  1197.                     de.setType(DataElementType.HIDDEN);
  1198.                 }
  1199.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT_ACTOR);
  1200.                 de.setSize(this.getSize());
  1201.                 dati.add(de);
  1202.             }


  1203.             de = new DataElement();
  1204.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_FAULT_GENERIC_CODE);
  1205.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT_GENERIC_CODE);
  1206.             if (faultChoice) {
  1207.                 de.setType(DataElementType.SELECT);
  1208.                 de.setValues(ServiziApplicativiCostanti.getServiziApplicativiFaultGenericCode());
  1209.                 de.setSelected(genericfault);
  1210.             }
  1211.             else{
  1212.                 de.setType(DataElementType.HIDDEN);
  1213.                 de.setValue(genericfault);
  1214.             }
  1215.             dati.add(de);

  1216.             de = new DataElement();
  1217.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_FAULT_PREFIX);
  1218.             de.setValue(prefixfault);
  1219.             if (faultChoice) {
  1220.                 de.setType(DataElementType.TEXT_EDIT);
  1221.             }
  1222.             else{
  1223.                 de.setType(DataElementType.HIDDEN);
  1224.             }
  1225.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT_PREFIX);
  1226.             de.setSize(this.getSize());
  1227.             dati.add(de);
  1228.         }

  1229.        
  1230.         if( (this.isModalitaCompleta() && !TipoOperazione.ADD.equals(tipoOperazione))  ||
  1231.                 (avanzatoFruitore && config.isSupportoSbustamentoProtocollo()) ) {
  1232.             de = new DataElement();
  1233.             de.setLabel(ServiziApplicativiCostanti.LABEL_TRATTAMENTO_MESSAGGIO);
  1234.             de.setType(DataElementType.TITLE);
  1235.             dati.add(de);
  1236.         }
  1237.        
  1238.        
  1239.         de = new DataElement();
  1240.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_INFO_PROTOCOLLO_RISPOSTA);
  1241.         de.setLabel(ServiziApplicativiCostanti.getLabelSbustamentoProtocollo(nomeProtocollo));
  1242.         if(avanzatoFruitore && config.isSupportoSbustamentoProtocollo()){
  1243.             de.setType(DataElementType.SELECT);
  1244.             de.setValues(ServiziApplicativiCostanti.getServiziApplicativiSbustamentoProtocollo());
  1245.             de.setSelected(sbustamentoInformazioniProtocolloRisposta);
  1246.         }
  1247.         else {
  1248.             de.setType(DataElementType.HIDDEN);
  1249.             de.setValue(sbustamentoInformazioniProtocolloRisposta);
  1250.         }
  1251.         dati.add(de);
  1252.            
  1253.                    

  1254.         if (this.isModalitaCompleta()==false) {
  1255.             de = new DataElement();
  1256.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO);
  1257.             de.setType(DataElementType.HIDDEN);
  1258.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO_RISPOSTA);
  1259.             de.setValue(invrif == null || "".equals(invrif) ? CostantiConfigurazione.DISABILITATO.toString() : invrif);
  1260.             dati.add(de);
  1261.         } else {
  1262.             if (!TipoOperazione.ADD.equals(tipoOperazione)) {
  1263.                 de = new DataElement();
  1264.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO);
  1265.                 de.setType(DataElementType.SELECT);
  1266.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO_RISPOSTA);
  1267.                 de.setValues(ServiziApplicativiCostanti.getServiziApplicativiInvioPerRiferimento());
  1268.                 de.setSelected(invrif);
  1269.                 dati.add(de);
  1270.             }else{
  1271.                 de = new DataElement();
  1272.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO);
  1273.                 de.setType(DataElementType.HIDDEN);
  1274.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO_RISPOSTA);
  1275.                 de.setValue(invrif == null || "".equals(invrif) ? ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO_DISABILITATO : invrif);
  1276.                 dati.add(de);
  1277.             }
  1278.         }



  1279.         // se operazione change visualizzo i link per invocazione servizio,
  1280.         // risposta asincrona
  1281.        
  1282.         if (showLinkInvocazioneServizio || showLinkRispostaAsincrona) {

  1283.             de = new DataElement();
  1284.             de.setLabel(ServiziApplicativiCostanti.LABEL_INFO_INTEGRAZIONE);
  1285.             de.setType(DataElementType.TITLE);
  1286.             dati.add(de);
  1287.            
  1288.             // invocazione servizio
  1289.             if(showLinkInvocazioneServizio) {
  1290.                 InvocazioneServizio invServ = sa.getInvocazioneServizio();
  1291.                 Connettore connettoreInv = invServ != null ? invServ.getConnettore() : null;
  1292.                 StatoFunzionalita getMSGInv = invServ != null ? invServ.getGetMessage() : null;
  1293.    
  1294.                 de = new DataElement();
  1295.                 de.setLabel(ServiziApplicativiCostanti.LABEL_INVOCAZIONE_SERVIZIO);
  1296.                 de.setType(DataElementType.LINK);
  1297.                 if(this.pddCore.isPddEsterna(nomePdd)){
  1298.                     de.setType(DataElementType.TEXT);
  1299.                     de.setValue("(non presente)");
  1300.                 } else {
  1301.                     if ((connettoreInv == null || TipiConnettore.DISABILITATO.getNome().equals(connettoreInv.getTipo())) && CostantiConfigurazione.DISABILITATO.equals(getMSGInv)) {
  1302.                         de.setValue(ServiziApplicativiCostanti.LABEL_INVOCAZIONE_SERVIZIO+" (disabilitato)");
  1303.                     } else {
  1304.                         de.setValue(ServiziApplicativiCostanti.LABEL_INVOCAZIONE_SERVIZIO+" (visualizza)");
  1305.                     }
  1306.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_ENDPOINT,
  1307.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,sa.getIdSoggetto()+""),
  1308.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME_SERVIZIO_APPLICATIVO,sa.getNome()),
  1309.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+"")
  1310.                             );
  1311.                 }
  1312.                 dati.add(de);
  1313.             }

  1314.             // risposta asincrona
  1315.             if(showLinkRispostaAsincrona) {
  1316.                 RispostaAsincrona rispAsin = sa.getRispostaAsincrona();
  1317.                 Connettore connettoreRis = rispAsin != null ? rispAsin.getConnettore() : null;
  1318.                 StatoFunzionalita getMSGRisp = rispAsin != null ? rispAsin.getGetMessage() : null;
  1319.    
  1320.                 de = new DataElement();
  1321.                 de.setType(DataElementType.LINK);
  1322.                 de.setLabel(ServiziApplicativiCostanti.LABEL_RISPOSTA_ASINCRONA);
  1323.                 if(this.pddCore.isPddEsterna(nomePdd)){
  1324.                     de.setType(DataElementType.TEXT);
  1325.                     de.setValue("(non presente)");
  1326.                 }
  1327.                 else{
  1328.                     if ((connettoreRis == null || TipiConnettore.DISABILITATO.getNome().equals(connettoreRis.getTipo())) && CostantiConfigurazione.DISABILITATO.equals(getMSGRisp)) {
  1329.                         // de.setValue(CostantiConfigurazione.DISABILITATO);
  1330.                         de.setValue(ServiziApplicativiCostanti.LABEL_RISPOSTA_ASINCRONA+" (disabilitato)");
  1331.                     } else {
  1332.                         // de.setValue("visualizza");
  1333.                         de.setValue(ServiziApplicativiCostanti.LABEL_RISPOSTA_ASINCRONA+" (visualizza)");
  1334.                     }
  1335.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_ENDPOINT_RISPOSTA,
  1336.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,sa.getIdSoggetto()+""),
  1337.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME_SERVIZIO_APPLICATIVO,sa.getNome()),
  1338.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""));
  1339.                 }
  1340.    
  1341.                 dati.add(de);
  1342.             }

  1343.         }

  1344.        
  1345.        
  1346.        
  1347.        
  1348.        
  1349.        
  1350.        
  1351.        
  1352.        
  1353.        
  1354.        
  1355.         // ************ EROGATORE ********************
  1356.        
  1357.         if(showErogatore){
  1358.            
  1359.             boolean servizioApplicativoServerEnabled = false;
  1360.            
  1361.             if (utente == null) {
  1362.                 utente = "";
  1363.             }
  1364.             if (password == null) {
  1365.                 password = "";
  1366.             }
  1367.                    
  1368.             this.addEndPointToDati(dati,id,nome,sbustamento,sbustamentoInformazioniProtocolloRichiesta,
  1369.                     getmsg, utente, password, true, invrif,risprif,nomeProtocollo,false,true, true,
  1370.                     parentSA,null,null,servizioApplicativoServerEnabled,
  1371.                     tipoSA, useAsClient,
  1372.                     integrationManagerEnabled,
  1373.                     tipoOperazione, tipoCredenzialiSSLVerificaTuttiICampi, changepwd,
  1374.                     postBackViaPost);
  1375.            
  1376.             if(!applicativiServerEnabled && TipologiaFruizione.DISABILITATO.equals(ruoloFruitore) &&
  1377.                     CostantiConfigurazione.ABILITATO.equals(getmsg)){
  1378.                
  1379.                 if(tipoauth==null || tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA)){
  1380.                     tipoauth = this.saCore.getAutenticazione_generazioneAutomaticaPorteDelegate();
  1381.                 }
  1382.                    
  1383.                 // Credenziali di accesso
  1384. //              if (utente == null) {
  1385. //                  utente = "";
  1386. //              }
  1387. //              if (password == null) {
  1388. //                  password = "";
  1389. //              }
  1390.                 if (subject == null) {
  1391.                     subject = "";
  1392.                 }
  1393.                 if (principal == null) {
  1394.                     principal = "";
  1395.                 }
  1396.                 dati = this.addCredenzialiToDati(tipoOperazione, dati, tipoauth, oldtipoauth, utente, password, subject, principal, servlet, true, null, false, true, null, true,
  1397.                         tipoCredenzialiSSLSorgente, tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato, tipoCredenzialiSSLFileCertificatoPassword, listaAliasEstrattiCertificato,
  1398.                         tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLAliasCertificatoSubject, tipoCredenzialiSSLAliasCertificatoIssuer,
  1399.                         tipoCredenzialiSSLAliasCertificatoType, tipoCredenzialiSSLAliasCertificatoVersion, tipoCredenzialiSSLAliasCertificatoSerialNumber,
  1400.                         tipoCredenzialiSSLAliasCertificatoSelfSigned, tipoCredenzialiSSLAliasCertificatoNotBefore, tipoCredenzialiSSLAliasCertificatoNotAfter,
  1401.                         tipoCredenzialiSSLVerificaTuttiICampi, tipoCredenzialiSSLConfigurazioneManualeSelfSigned, issuer, tipoCredenzialiSSLStatoElaborazioneCertificato,
  1402.                         changepwd,
  1403.                         multipleApiKey, appId, apiKey,
  1404.                         visualizzaModificaCertificato, visualizzaAddCertificato, servletCredenzialiList, parametersServletCredenzialiList, numeroCertificati, servletCredenzialiAdd,
  1405.                         true, tokenPolicySA, tokenClientIdSA, tokenWithHttpsEnabledByConfigSA,
  1406.                         dominioEsterno, tipoProtocollo,
  1407.                         postBackViaPost
  1408.                         );
  1409.                
  1410.             }
  1411.            
  1412.            
  1413.            
  1414.            
  1415.             dati = this.addEndPointToDati(dati, null, connettoreDebug, endpointtype, autenticazioneHttp, "",//ServiziApplicativiCostanti.LABEL_EROGATORE+" ",
  1416.                     url, nomeCodaJMS,
  1417.                     tipoCodaJMS, userRichiesta, passwordRichiesta, initcont, urlpgk, provurl,
  1418.                     connfact, sendas, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI, TipoOperazione.CHANGE,
  1419.                     httpsurl, httpstipologia, httpshostverify,
  1420.                     httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  1421.                     httpsalgoritmo, httpsstato, httpskeystore,
  1422.                     httpspwdprivatekeytrust, httpspathkey,
  1423.                     httpstipokey, httpspwdkey,
  1424.                     httpspwdprivatekey, httpsalgoritmokey,
  1425.                     httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1426.                     tipoconn, ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_ENDPOINT,
  1427.                     nome, id, null, null, null, null,
  1428.                     null, null, true,
  1429.                     isConnettoreCustomUltimaImmagineSalvata,
  1430.                     proxyEnabled, proxyHost, proxyPort, proxyUsername, proxyPassword,
  1431.                     tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1432.                     opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1433.                     requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1434.                     requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1435.                     responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1436.                     autenticazioneToken, tokenPolicy, false, false,
  1437.                     listExtendedConnettore, connettoreErogatoreForceEnabled,
  1438.                     nomeProtocollo, false, false
  1439.                     , false, servizioApplicativoServerEnabled, null, null,
  1440.                     autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1441.                     connettoreStatusParams,
  1442.                     postBackViaPost
  1443.                     );
  1444.         }
  1445.        
  1446.        
  1447.        
  1448.        
  1449.        
  1450.        
  1451.         if(configurazioneStandardNonApplicabile){
  1452.             this.pd.setMessage(CostantiControlStation.LABEL_CONFIGURAZIONE_IMPOSTATA_MODALITA_AVANZATA_LONG_MESSAGE,Costanti.MESSAGE_TYPE_INFO);
  1453.             this.pd.disableEditMode();
  1454.            
  1455.             for (int i = 0; i < dati.size(); i++) {
  1456.                 DataElement deCheck = dati.get(i);
  1457.                 if(ConnettoriCostanti.PARAMETRO_CONNETTORE_ABILITA_USO_APPLICATIVO_SERVER.equals(deCheck.getName())) {
  1458.                     dati.remove(i);
  1459.                     break;
  1460.                 }
  1461.             }
  1462.         }
  1463.        
  1464.        
  1465.         return dati;
  1466.     }


  1467.     public boolean servizioApplicativoCheckData(TipoOperazione tipoOperazione, String[] soggettiList, long idProvOld,
  1468.             String ruoloFruitoreParam, String ruoloErogatore, List<ExtendedConnettore> listExtendedConnettore,
  1469.             ServizioApplicativo saOld, StringBuilder sbWarningChange)
  1470.             throws Exception {
  1471.         try {
  1472.            
  1473.             if(ruoloFruitoreParam!=null) {
  1474.                 // nop
  1475.             }
  1476.            
  1477.             String tipoSA = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_TIPO_SA);
  1478.             boolean isApplicativiServerEnabled = this.saCore.isApplicativiServerEnabled(this);
  1479.            
  1480.             boolean useAsClient = false;
  1481.             if(isApplicativiServerEnabled &&
  1482.                 tipoSA.equals(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER)) {
  1483.                 String tmp = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_UTILIZZABILE_COME_CLIENT);
  1484.                 useAsClient = ServletUtils.isCheckBoxEnabled(tmp);
  1485.             }
  1486.            
  1487.             if(ruoloErogatore==null){
  1488.                 ruoloErogatore = TipologiaErogazione.DISABILITATO.getValue();
  1489.             }
  1490.            
  1491.             String nome = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  1492.             String provider = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  1493.             String descrizione = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_DESCRIZIONE);
  1494.             int newProv = 0;
  1495.             if (provider == null) {
  1496.                 provider = "";
  1497.             } else {
  1498.                 newProv = Integer.parseInt(provider);
  1499.             }
  1500.             String fault = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT);
  1501. /**         String tipoauth = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE_SA);
  1502. //          if (tipoauth == null) {
  1503. //              tipoauth = ServiziApplicativiCostanti.DEFAULT_SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE;
  1504. //          }
  1505. //          String utente = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_AUTENTICAZIONE_USERNAME_SA);
  1506. //          String password = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_AUTENTICAZIONE_PASSWORD_SA);
  1507. //          // String confpw = this.getParameter("confpw");
  1508. //          String subject = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_AUTENTICAZIONE_SUBJECT_SA);*/

  1509.             // Campi obbligatori
  1510.             if (nome.equals("") || (tipoOperazione.equals(TipoOperazione.ADD) && provider.equals(""))) {
  1511.                 String tmpElenco = "";
  1512.                 if (nome.equals("")) {
  1513.                     tmpElenco = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME;
  1514.                 }
  1515.                 if (tipoOperazione.equals(TipoOperazione.ADD) && provider.equals("")) {
  1516.                     if (tmpElenco.equals("")) {
  1517.                         tmpElenco = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER;
  1518.                     } else {
  1519.                         tmpElenco = tmpElenco + ", "+ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER;
  1520.                     }
  1521.                 }
  1522.                 this.pd.setMessage("Dati incompleti. &Egrave; necessario indicare: " + tmpElenco);
  1523.                 return false;
  1524.             }
  1525.            
  1526.             // descrizione
  1527.             if( (descrizione!=null && StringUtils.isNotEmpty(descrizione))
  1528.                     &&
  1529.                 (!this.checkLength4000(descrizione, ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_DESCRIZIONE))
  1530.                 ){
  1531.                 return false;
  1532.             }
  1533.            
  1534.             // Controllo che non ci siano spazi nei campi di testo
  1535.             if (nome.indexOf(" ") != -1 || nome.indexOf('\"') != -1) {
  1536.                 this.pd.setMessage("Non inserire spazi o doppi apici nei campi di testo");
  1537.                 return false;
  1538.             }
  1539.             if(this.checkIntegrationEntityName(nome, ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME)==false){
  1540.                 return false;
  1541.             }
  1542.             if(this.checkLength255(nome, ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME)==false) {
  1543.                 return false;
  1544.             }
  1545.            
  1546.            
  1547. /**         if (tipoauth.equals(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE_BASIC) && ((utente.indexOf(" ") != -1) || (password.indexOf(" ") != -1))) {
  1548. //              this.pd.setMessage("Non inserire spazi nei campi di testo");
  1549. //              return false;
  1550. //          }*/
  1551.             /**if (tipoauth.equals("ssl") && (subject.indexOf(" ") != -1)) {
  1552.                         this.pd.setMessage("Non inserire spazi nei campi di testo");
  1553.                         return false;
  1554.                     }*/

  1555.             // Controllo che i campi DataElementType.SELECT abbiano uno dei valori ammessi
  1556.             if (!fault.equals(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP) && !fault.equals(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_XML)) {
  1557.                 this.pd.setMessage("Modalit&agrave; di fault dev'essere "+
  1558.                         ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP+" o "+ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_XML);
  1559.                 return false;
  1560.             }
  1561. /**         if (!tipoauth.equals(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE_BASIC) &&
  1562. //                  !tipoauth.equals(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE_SSL) &&
  1563. //                  !tipoauth.equals(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE_NESSUNA)) {
  1564. //              this.pd.setMessage("Tipo dev'essere "+
  1565. //                      ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE_BASIC+", "+
  1566. //                      ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE_SSL+" o "+
  1567. //                      ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_TIPO_AUTENTICAZIONE_NESSUNA);
  1568. //              return false;
  1569. //          }*/

  1570.             // Controllo che le password corrispondano
  1571.             /**
  1572.              * if (tipoauth.equals("basic") && !password.equals(confpw)) {
  1573.              * this.pd.setMessage("Le password non corrispondono"); return
  1574.              * false; }
  1575.              */

  1576.             // Controllo che il provider appartenga alla lista di
  1577.             // providers disponibili
  1578.             if (tipoOperazione.equals(TipoOperazione.ADD)) {
  1579.                 boolean trovatoProv = false;
  1580.                 if(soggettiList!=null) {
  1581.                     for (int i = 0; i < soggettiList.length; i++) {
  1582.                         String tmpSogg = soggettiList[i];
  1583.                         if (tmpSogg.equals(provider)) {
  1584.                             trovatoProv = true;
  1585.                         }
  1586.                     }
  1587.                 }
  1588.                 if (!trovatoProv) {
  1589.                     this.pd.setMessage("Il soggetto dev'essere scelto tra quelli definiti nel pannello Soggetti");
  1590.                     return false;
  1591.                 }
  1592.             }
  1593.            
  1594.             if (tipoOperazione.equals(TipoOperazione.CHANGE)) {
  1595.                 if(isApplicativiServerEnabled && ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(tipoSA) && !useAsClient &&
  1596.                         saOld.getInvocazionePorta()!=null && saOld.getInvocazionePorta().getRuoli()!=null && saOld.getInvocazionePorta().getRuoli().sizeRuoloList()>0) {
  1597.                     this.pd.setMessage("Prima di disabilitare l'opzione '"+ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_UTILIZZABILE_COME_CLIENT+"' devono essere rimossi i ruoli assegnati all'applicativo");
  1598.                     return false;
  1599.                 }
  1600.             }

  1601.             IDSoggetto ids = null;
  1602.             String portaDominioSoggetto = null;
  1603.             if(this.core.isRegistroServiziLocale()){
  1604.                 Soggetto mySogg = this.soggettiCore.getSoggettoRegistro(newProv);
  1605.                 ids = new IDSoggetto(mySogg.getTipo(), mySogg.getNome());
  1606.                 portaDominioSoggetto = mySogg.getPortaDominio();
  1607.             }else{
  1608.                 org.openspcoop2.core.config.Soggetto mySogg = this.soggettiCore.getSoggetto(newProv);
  1609.                 ids = new IDSoggetto(mySogg.getTipo(), mySogg.getNome());
  1610.             }
  1611.             IDServizioApplicativo idSA = new IDServizioApplicativo();
  1612.             idSA.setIdSoggettoProprietario(ids);
  1613.             idSA.setNome(nome);
  1614.             String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(idSA.getIdSoggettoProprietario().getTipo());
  1615.            
  1616.             boolean dominioEsternoModI = this.isProfiloModIPA(protocollo) && this.pddCore.isPddEsterna(portaDominioSoggetto);
  1617.            
  1618.             // Se tipoOp = add, controllo che il servizioApplicativo non sia
  1619.             // gia'
  1620.             // stato registrato
  1621.             if (tipoOperazione.equals(TipoOperazione.ADD)) {
  1622.                 boolean giaRegistrato = this.saCore.existsServizioApplicativo(idSA);
  1623.                 if (giaRegistrato) {
  1624.                     this.pd.setMessage("Il Servizio Applicativo " + nome + " &egrave; gi&agrave; stato registrato per il soggetto scelto.");
  1625.                     return false;
  1626.                 }
  1627.             }
  1628.             else if(tipoOperazione.equals(TipoOperazione.CHANGE)) {
  1629.                 long idSa = 0;
  1630.                 boolean giaRegistrato = this.saCore.existsServizioApplicativo(idSA);
  1631.                 if (giaRegistrato) {
  1632.                     ServizioApplicativo sa = this.saCore.getServizioApplicativo(idSA);
  1633.                     idSa = sa.getId().longValue();
  1634.                     if ( saOld==null || (saOld.getId().longValue() != idSa)) {
  1635.                         this.pd.setMessage("Il Servizio Applicativo " + nome + " &egrave; gi&agrave; stato registrato per il soggetto scelto.");
  1636.                         return false;
  1637.                     }
  1638.                 }
  1639.             }

  1640.             if (tipoOperazione.equals(TipoOperazione.CHANGE)) {
  1641.                
  1642.                 String oldTipoAuth = null;
  1643.                 String oldTokenPolicy = null;
  1644.                 TipologiaFruizione tipologiaFruizione = null;
  1645.                 if(saOld!=null) {
  1646.                     tipologiaFruizione = TipologiaFruizione.toEnumConstant(saOld.getTipologiaFruizione());
  1647.                 }
  1648.                 if(tipologiaFruizione!=null && !TipologiaFruizione.DISABILITATO.equals(tipologiaFruizione) &&
  1649.                         saOld.getInvocazionePorta()!=null && saOld.getInvocazionePorta().sizeCredenzialiList()>0) {
  1650.                     // prendo il primo
  1651.                     CredenzialeTipo tipo = saOld.getInvocazionePorta().getCredenziali(0).getTipo();
  1652.                     if(tipo!=null) {
  1653.                         oldTipoAuth = tipo.getValue();
  1654.                     }
  1655.                     else {
  1656.                         oldTipoAuth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA;
  1657.                     }
  1658.                     oldTokenPolicy = saOld.getInvocazionePorta().getCredenziali(0).getTokenPolicy();
  1659.                 }
  1660.                
  1661.                 String tipoauthAttuale = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE);
  1662.                 String tipoauth = tipoauthAttuale;
  1663.                 boolean tokenWithHttpsEnabledByConfigSA = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_PDND.equals(tipoauth) || ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_OAUTH.equals(tipoauth);
  1664.                 if(tokenWithHttpsEnabledByConfigSA) {
  1665.                     tipoauth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL;
  1666.                 }
  1667.                 boolean tokenModiPDNDOauth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_PDND.equals(tipoauth) || ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_OAUTH.equals(tipoauth);
  1668.                 if(tokenModiPDNDOauth) {
  1669.                     tipoauth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN;
  1670.                 }
  1671.                
  1672.                 boolean changeTipoAuth = false;
  1673.                 if(oldTipoAuth!=null && !oldTipoAuth.equals(tipoauth)) {
  1674.                     changeTipoAuth=true;
  1675.                 }
  1676.                 boolean segnalaWarning = false;
  1677.                 if(changeTipoAuth && oldTokenPolicy!=null) {
  1678.                    
  1679.                     boolean tokenWithHttsSupportato = false;
  1680.                     boolean dominioEsterno = this.pddCore.isPddEsterna(portaDominioSoggetto);
  1681.                     if(dominioEsterno && protocollo!=null) {
  1682.                         ProtocolFactoryManager protocolFactoryManager = ProtocolFactoryManager.getInstance();
  1683.                         tokenWithHttsSupportato = protocolFactoryManager.getProtocolFactoryByName(protocollo).createProtocolConfiguration().isSupportatoAutenticazioneApplicativiHttpsConToken();
  1684.                     }
  1685.                    
  1686.                     boolean tokenModIPDND = this.saCore.isPolicyGestioneTokenPDND(oldTokenPolicy);
  1687.                     if(tokenWithHttsSupportato) {
  1688.                         if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL.equals(oldTipoAuth)) {
  1689.                             if(tokenModIPDND) {
  1690.                                 oldTipoAuth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_PDND;
  1691.                             }
  1692.                             else {
  1693.                                 oldTipoAuth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_OAUTH;
  1694.                             }
  1695.                         }
  1696.                         else {
  1697.                             if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN.equals(oldTipoAuth)){
  1698.                                 if(tokenModIPDND) {
  1699.                                     oldTipoAuth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_PDND;
  1700.                                 }
  1701.                                 else {
  1702.                                     oldTipoAuth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_OAUTH;
  1703.                                 }
  1704.                             }
  1705.                         }
  1706.                     }

  1707.                     if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_PDND.equals(oldTipoAuth) && ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_PDND.equals(tipoauthAttuale)) {
  1708.                         // aggiungere il certificato deve essere possibile
  1709.                         changeTipoAuth=false;
  1710.                     }
  1711.                     else if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_PDND.equals(oldTipoAuth) && ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_PDND.equals(tipoauthAttuale)) {
  1712.                         // eliminare il certificato non andrebbe permesso se usato
  1713.                         // questo vincolo viene rilasciato per consentirlo da console,
  1714.                         // tanto poi eventualmente il runtime lo segnala e una nuova aggiunta dell'applicativo non è concessa nell'erogazione che richiede il certificato.
  1715.                         // mentre quello autorizzato andrà poi eliminato.
  1716.                         segnalaWarning = true;
  1717.                     }
  1718.                     else if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_OAUTH.equals(oldTipoAuth) && ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_OAUTH.equals(tipoauthAttuale)) {
  1719.                         // aggiungere il certificato deve essere possibile
  1720.                         changeTipoAuth=false;
  1721.                     }
  1722.                     else if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_OAUTH.equals(oldTipoAuth) && ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_OAUTH.equals(tipoauthAttuale)) {
  1723.                         // eliminare il certificato non andrebbe permesso se usato
  1724.                         // questo vincolo viene rilasciato per consentirlo da console,
  1725.                         // tanto poi eventualmente il runtime lo segnala e una nuova aggiunta dell'applicativo non è concessa nell'erogazione che richiede il certificato.
  1726.                         // mentre quello autorizzato andrà poi eliminato.
  1727.                         segnalaWarning = true;
  1728.                     }
  1729.                    
  1730.                 }
  1731.                
  1732.                 if(changeTipoAuth) {
  1733.                     // controllo che non sia usato in qualche PD
  1734.                    
  1735.                     StringBuilder sbWarningDetails = new StringBuilder();
  1736.                                        
  1737.                     FiltroRicercaPorteDelegate filtro = new FiltroRicercaPorteDelegate();
  1738.                     filtro.setTipoSoggetto(idSA.getIdSoggettoProprietario().getTipo());
  1739.                     filtro.setNomeSoggetto(idSA.getIdSoggettoProprietario().getNome());
  1740.                     filtro.setNomeServizioApplicativo(idSA.getNome());
  1741.                     List<IDPortaDelegata> list = this.porteDelegateCore.getAllIdPorteDelegate(filtro);
  1742.                     if(list!=null && list.size()>0) {
  1743.                         String msg = "l'applicativo viene utilizzato all'interno del controllo degli accessi (autorizzazione trasporto) di "+
  1744.                                 list.size()+" fruizion"+(list.size()>1?"i":"e");
  1745.                         if(segnalaWarning) {
  1746.                             if(sbWarningDetails.length()>0) {
  1747.                                 sbWarningDetails.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1748.                             }
  1749.                             sbWarningDetails.append("- "+msg);
  1750.                         }
  1751.                         else {
  1752.                             this.pd.setMessage("Non &egrave; possibile modificare il tipo di credenziali poich&egrave; "+msg);
  1753.                             return false;
  1754.                         }
  1755.                     }
  1756.                    
  1757.                     String tipoTrasporto = "trasporto";
  1758.                     if(this.isProfiloModIPA(protocollo)) {
  1759.                         tipoTrasporto = "messaggio";
  1760.                     }
  1761.                    
  1762.                     FiltroRicercaPorteApplicative filtroPA = new FiltroRicercaPorteApplicative();
  1763.                     IDServizioApplicativo idServizioApplicativoAutorizzato = new IDServizioApplicativo();
  1764.                     idServizioApplicativoAutorizzato.setIdSoggettoProprietario(new IDSoggetto(idSA.getIdSoggettoProprietario().getTipo(), idSA.getIdSoggettoProprietario().getNome()));
  1765.                     idServizioApplicativoAutorizzato.setNome(idSA.getNome());
  1766.                     filtroPA.setIdServizioApplicativoAutorizzato(idServizioApplicativoAutorizzato);
  1767.                     List<IDPortaApplicativa> listPA = this.porteApplicativeCore.getAllIdPorteApplicative(filtroPA);
  1768.                     if(listPA!=null && listPA.size()>0) {
  1769.                         String msg = "l'applicativo viene utilizzato all'interno del controllo degli accessi (autorizzazione "+tipoTrasporto+") di "+
  1770.                                 listPA.size()+" erogazion"+(listPA.size()>1?"i":"e");
  1771.                         if(segnalaWarning) {
  1772.                             if(sbWarningDetails.length()>0) {
  1773.                                 sbWarningDetails.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1774.                             }
  1775.                             sbWarningDetails.append("- "+msg);
  1776.                         }
  1777.                         else {
  1778.                             this.pd.setMessage("Non &egrave; possibile modificare il tipo di credenziali poich&egrave; "+msg);
  1779.                             return false;
  1780.                         }
  1781.                     }
  1782.                    
  1783.                     filtro = new FiltroRicercaPorteDelegate();
  1784.                     filtro.setTipoSoggetto(idSA.getIdSoggettoProprietario().getTipo());
  1785.                     filtro.setNomeSoggetto(idSA.getIdSoggettoProprietario().getNome());
  1786.                     filtro.setNomeServizioApplicativoToken(idSA.getNome());
  1787.                     list = this.porteDelegateCore.getAllIdPorteDelegate(filtro);
  1788.                     if(list!=null && !list.isEmpty()) {
  1789.                         String msg = "l'applicativo viene utilizzato all'interno del controllo degli accessi (autorizzazione token) di "+
  1790.                                 list.size()+" fruizion"+(list.size()>1?"i":"e");
  1791.                         if(segnalaWarning) {
  1792.                             if(sbWarningDetails.length()>0) {
  1793.                                 sbWarningDetails.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1794.                             }
  1795.                             sbWarningDetails.append("- "+msg);
  1796.                         }
  1797.                         else {
  1798.                             this.pd.setMessage("Non &egrave; possibile modificare il tipo di credenziali poich&egrave; "+msg);
  1799.                             return false;
  1800.                         }
  1801.                     }
  1802.                    
  1803.                     filtroPA = new FiltroRicercaPorteApplicative();
  1804.                     filtroPA.setIdServizioApplicativoAutorizzatoToken(idServizioApplicativoAutorizzato);
  1805.                     listPA = this.porteApplicativeCore.getAllIdPorteApplicative(filtroPA);
  1806.                     if(listPA!=null && !listPA.isEmpty()) {
  1807.                         String msg = "l'applicativo viene utilizzato all'interno del controllo degli accessi (autorizzazione token) di "+
  1808.                                 listPA.size()+" erogazion"+(listPA.size()>1?"i":"e");
  1809.                         if(segnalaWarning) {
  1810.                             if(sbWarningDetails.length()>0) {
  1811.                                 sbWarningDetails.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1812.                             }
  1813.                             sbWarningDetails.append("- "+msg);
  1814.                         }
  1815.                         else {
  1816.                             this.pd.setMessage("Non &egrave; possibile modificare il tipo di credenziali poich&egrave; "+msg);
  1817.                             return false;
  1818.                         }
  1819.                     }
  1820.                    
  1821.                     if(segnalaWarning && sbWarningDetails.length()>0) {
  1822.                         sbWarningChange.append("Il certificato di firma dell'applicativo potrebbe essere richiesto per fruire di una API.");
  1823.                         sbWarningChange.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1824.                         sbWarningChange.append("Verificare le configurazioni dove risulta associato l'applicativo:");
  1825.                         sbWarningChange.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  1826.                         sbWarningChange.append(sbWarningDetails.toString());
  1827.                     }
  1828.                 }
  1829.                
  1830.                
  1831.             }
  1832.            
  1833.             // Se tipoOp = change, se sto cambiando provider controllo che
  1834.             // il servizioApplicativo non sia associato al vecchio provider
  1835.             // Ovvero, che non sia associato ad una delle porte delegate
  1836.             // o applicative del vecchio provider
  1837.             if (tipoOperazione.equals(TipoOperazione.CHANGE)) {
  1838.                 String nomeProv = "";
  1839.                 boolean servizioApplicativoInUso = false;

  1840.                 if (newProv != idProvOld) {
  1841.                     // Prendo nome e tipo del provider
  1842.                     org.openspcoop2.core.config.Soggetto oldSogg = this.soggettiCore.getSoggetto(idProvOld);
  1843.                     nomeProv = oldSogg.getTipo() + "/" + oldSogg.getNome();

  1844.                     for (int i = 0; i < oldSogg.sizePortaDelegataList(); i++) {
  1845.                         PortaDelegata pde = oldSogg.getPortaDelegata(i);
  1846.                         for (int j = 0; j < pde.sizeServizioApplicativoList(); j++) {
  1847.                             PortaDelegataServizioApplicativo tmpSA = pde.getServizioApplicativo(j);
  1848.                             if (nome.equals(tmpSA.getNome())) {
  1849.                                 servizioApplicativoInUso = true;
  1850.                                 break;
  1851.                             }
  1852.                         }
  1853.                         if (servizioApplicativoInUso)
  1854.                             break;
  1855.                     }

  1856.                     if (!servizioApplicativoInUso) {
  1857.                         for (int i = 0; i < oldSogg.sizePortaApplicativaList(); i++) {
  1858.                             PortaApplicativa pa = oldSogg.getPortaApplicativa(i);
  1859.                             for (int j = 0; j < pa.sizeServizioApplicativoList(); j++) {
  1860.                                 PortaApplicativaServizioApplicativo tmpSA = pa.getServizioApplicativo(j);
  1861.                                 if (nome.equals(tmpSA.getNome())) {
  1862.                                     servizioApplicativoInUso = true;
  1863.                                     break;
  1864.                                 }
  1865.                             }
  1866.                             if (servizioApplicativoInUso)
  1867.                                 break;
  1868.                         }
  1869.                     }
  1870.                 }

  1871.                 if (servizioApplicativoInUso) {
  1872.                     this.pd.setMessage("Il Servizio Applicativo " + nome + " &egrave; gi&agrave; stato associato ad alcune porte delegate e/o applicative del Soggetto " + nomeProv + ". Se si desidera modificare il Soggetto, &egrave; necessario eliminare prima tutte le occorrenze del Servizio Applicativo");
  1873.                     return false;
  1874.                 }
  1875.             }

  1876.            
  1877.             boolean oldPasswordCifrata = false;
  1878.             if(saOld!=null && saOld.getInvocazionePorta()!=null && saOld.getInvocazionePorta().sizeCredenzialiList()>0 && saOld.getInvocazionePorta().getCredenziali(0).isCertificateStrictVerification()) {
  1879.                 oldPasswordCifrata = true;
  1880.             }
  1881.             boolean encryptEnabled = this.saCore.isApplicativiPasswordEncryptEnabled();
  1882.             if(this.credenzialiCheckData(tipoOperazione,oldPasswordCifrata, encryptEnabled, this.saCore.getApplicativiPasswordVerifier())==false){
  1883.                 return false;
  1884.             }
  1885.            
  1886.             String tipoauth = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE);
  1887.             if (tipoauth == null) {
  1888.                 tipoauth = ConnettoriCostanti.DEFAULT_AUTENTICAZIONE_TIPO;
  1889.             }
  1890.             String utente = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  1891.             String password = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  1892.             String subject = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_SUBJECT);
  1893.             String issuer = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_ISSUER);
  1894.             if("".equals(issuer)) {
  1895.                 issuer = null;
  1896.             }
  1897.             String principal = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PRINCIPAL);

  1898.             String tokenPolicy = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_TOKEN_POLICY);
  1899.             String tokenClientId = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_TOKEN_CLIENT_ID);
  1900.             @SuppressWarnings("unused")
  1901.             boolean tokenByPDND = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_PDND.equals(tipoauth) || ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_PDND.equals(tipoauth);
  1902.             boolean tokenWithHttpsEnabledByConfigSA = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_PDND.equals(tipoauth) || ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_OAUTH.equals(tipoauth);
  1903.             if(tokenWithHttpsEnabledByConfigSA) {
  1904.                 tipoauth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL;
  1905.             }
  1906.             boolean tokenModiPDNDOauth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_PDND.equals(tipoauth) || ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN_OAUTH.equals(tipoauth);
  1907.             if(tokenModiPDNDOauth) {
  1908.                 tipoauth = ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN;
  1909.             }
  1910.            
  1911.             // Se sono presenti credenziali, controllo che non siano gia'
  1912.             // utilizzate da altri soggetti
  1913.             if (tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC)) {
  1914.                 // recupera lista servizi applicativi con stesse credenziali
  1915.                 boolean checkPassword = this.saCore.isApplicativiCredenzialiBasicCheckUniqueUsePassword(); // la password non viene utilizzata per riconoscere se l'username e' già utilizzato.
  1916.                 List<ServizioApplicativo> saList = this.saCore.servizioApplicativoWithCredenzialiBasicList(utente, password, checkPassword);

  1917.                 String portaDominio = null;
  1918.                 if(this.core.isRegistroServiziLocale()){
  1919.                     Soggetto soggettoToCheck = tipoOperazione.equals(TipoOperazione.CHANGE) ?
  1920.                             this.soggettiCore.getSoggettoRegistro(idProvOld) : this.soggettiCore.getSoggettoRegistro(newProv);
  1921.                             portaDominio = soggettoToCheck.getPortaDominio();
  1922.                 }

  1923.                 for (int i = 0; i < saList.size(); i++) {
  1924.                     ServizioApplicativo sa = saList.get(i);

  1925.                     /**String tipoNomeSoggetto = null;*/

  1926.                     if(!this.core.isSinglePdD()){

  1927.                         // bugfix #66
  1928.                         // controllo se soggetto appartiene a nal diversi, in tal
  1929.                         // caso e' possibile
  1930.                         // avere stesse credenziali
  1931.                         // Raccolgo informazioni soggetto
  1932.                         Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
  1933.                         /**tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();*/

  1934.                         // se appartengono a nal diversi allora va bene continuo
  1935.                         if (!portaDominio.equals(tmpSoggettoProprietarioSa.getPortaDominio()))
  1936.                             continue;
  1937.                     }
  1938.                     else{

  1939.                         /**org.openspcoop2.core.config.Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggetto(sa.getIdSoggetto());
  1940.                         //tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();*/

  1941.                     }

  1942.                     if ((tipoOperazione.equals(TipoOperazione.CHANGE)) && (nome.equals(sa.getNome())) && (idProvOld == sa.getIdSoggetto())) {
  1943.                         continue;
  1944.                     }
  1945.                     if(saOld!=null && tipoOperazione.equals(TipoOperazione.CHANGE) && saOld.getId().longValue() == sa.getId().longValue()) {
  1946.                         continue;
  1947.                     }

  1948.                     // Messaggio di errore
  1949.                     String labelSoggetto = this.getLabelNomeSoggetto(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  1950.                     if(sa.getTipo()!=null && StringUtils.isNotEmpty(sa.getTipo())) {
  1951.                         this.pd.setMessage("L'applicativo "+sa.getNome()+" (soggetto: "+labelSoggetto+") possiede già l'utente (http-basic) indicato");
  1952.                     }
  1953.                     else {
  1954.                         this.pd.setMessage("L'erogazione "+sa.getNome()+" possiede già l'utente (http-basic) indicato per il servizio '"+ServiziApplicativiCostanti.LABEL_SERVIZIO_MESSAGE_BOX+"'");
  1955.                     }
  1956.                     return false;
  1957.                 }
  1958.                
  1959.                 if(!this.soggettiCore.isSoggettiApplicativiCredenzialiBasicPermitSameCredentials()) {
  1960.                     // Verifico soggetti
  1961.                    
  1962.                     boolean checkPasswordSoggetti = this.soggettiCore.isSoggettiCredenzialiBasicCheckUniqueUsePassword(); // la password non viene utilizzata per riconoscere se l'username e' già utilizzato.
  1963.                     Soggetto soggettoAutenticato = this.soggettiCore.soggettoWithCredenzialiBasic(utente, password, checkPasswordSoggetti);
  1964.                    
  1965.                     // Messaggio di errore
  1966.                     if(soggettoAutenticato!=null){
  1967.                         String labelSoggettoAutenticato = this.getLabelNomeSoggetto(new IDSoggetto(soggettoAutenticato.getTipo(), soggettoAutenticato.getNome()));
  1968.                         this.pd.setMessage("Il soggetto "+labelSoggettoAutenticato+" possiede già l'utente (http-basic) indicato");
  1969.                         return false;
  1970.                     }
  1971.                 }
  1972.             }
  1973.             else if (tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY)) {
  1974.                 // Univocita garantita dal meccanismo di generazione delle chiavi
  1975.                 /**
  1976.                 // Viene calcolato String appId = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_APP_ID);
  1977.                 String multipleApiKeys = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_MULTIPLE_API_KEYS);
  1978.                
  1979.                 // recupera lista servizi applicativi con stesse credenziali
  1980.                 boolean multipleApiKeysEnabled = ServletUtils.isCheckBoxEnabled(multipleApiKeys);
  1981.                 String appId = this.saCore.toAppId(protocollo, idSA, multipleApiKeysEnabled);
  1982.                 List<ServizioApplicativo> saList = this.saCore.servizioApplicativoWithCredenzialiApiKeyList(appId,multipleApiKeysEnabled);

  1983.                 String portaDominio = null;
  1984.                 if(this.core.isRegistroServiziLocale()){
  1985.                     Soggetto soggettoToCheck = tipoOperazione.equals(TipoOperazione.CHANGE) ?
  1986.                             this.soggettiCore.getSoggettoRegistro(idProvOld) : this.soggettiCore.getSoggettoRegistro(newProv);
  1987.                             portaDominio = soggettoToCheck.getPortaDominio();
  1988.                 }

  1989.                 for (int i = 0; i < saList.size(); i++) {
  1990.                     ServizioApplicativo sa = saList.get(i);

  1991.                     //String tipoNomeSoggetto = null;

  1992.                     if(!this.core.isSinglePdD()){

  1993.                         // bugfix #66
  1994.                         // controllo se soggetto appartiene a nal diversi, in tal
  1995.                         // caso e' possibile
  1996.                         // avere stesse credenziali
  1997.                         // Raccolgo informazioni soggetto
  1998.                         Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
  1999.                         //tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();

  2000.                         // se appartengono a nal diversi allora va bene continuo
  2001.                         if (!portaDominio.equals(tmpSoggettoProprietarioSa.getPortaDominio()))
  2002.                             continue;
  2003.                     }
  2004.                     else{

  2005.                         //org.openspcoop2.core.config.Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggetto(sa.getIdSoggetto());
  2006.                         //tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();

  2007.                     }

  2008.                     if ((tipoOperazione.equals(TipoOperazione.CHANGE)) && (nome.equals(sa.getNome())) && (idProvOld == sa.getIdSoggetto())) {
  2009.                         continue;
  2010.                     }
  2011.                     if(saOld!=null && tipoOperazione.equals(TipoOperazione.CHANGE) && saOld.getId().longValue() == sa.getId().longValue()) {
  2012.                         continue;
  2013.                     }

  2014.                     // Messaggio di errore
  2015.                     String labelSoggetto = this.getLabelNomeSoggetto(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  2016.                     String tipoCredenzialiApiKey = ServletUtils.isCheckBoxEnabled(multipleApiKeys) ? ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_MULTIPLE_API_KEYS_DESCR : ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_API_KEY;
  2017.                     this.pd.setMessage("L'applicativo "+sa.getNome()+" (soggetto: "+labelSoggetto+") possiede già una credenziale '"+tipoCredenzialiApiKey+"' con identico '"+ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_APP_ID+"'");

  2018.                     return false;
  2019.                 }
  2020.                 */
  2021.             }
  2022.             else if (tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL) &&
  2023.                     !tokenWithHttpsEnabledByConfigSA // se e' abilitato il token non deve essere controllata l'univocita' del certificato
  2024.                     ) {
  2025.                 String tipoCredenzialiSSLSorgente = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL);
  2026.                 if(tipoCredenzialiSSLSorgente == null) {
  2027.                     tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE;
  2028.                 }
  2029.                 String tipoCredenzialiSSLConfigurazioneManualeSelfSigned= this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_MANUALE_SELF_SIGNED);
  2030.                 if (tipoCredenzialiSSLConfigurazioneManualeSelfSigned == null) {
  2031.                     tipoCredenzialiSSLConfigurazioneManualeSelfSigned = Costanti.CHECK_BOX_ENABLED;
  2032.                 }
  2033.                
  2034.                 String details = "";
  2035.                 List<ServizioApplicativo> saList = null;
  2036.                 String tipoSsl = null;
  2037.                 Certificate cSelezionato = null;
  2038.                 boolean strictVerifier = false;
  2039.                
  2040.                
  2041.                
  2042.                 if(tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE)) {
  2043.                     saList = this.saCore.servizioApplicativoWithCredenzialiSslList(subject,issuer,
  2044.                             dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  2045.                     tipoSsl = "subject/issuer";
  2046.                 }
  2047.                 else {
  2048.                    
  2049.                     BinaryParameter tipoCredenzialiSSLFileCertificato = this.getBinaryParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO);
  2050.                     String tipoCredenzialiSSLVerificaTuttiICampi = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI);
  2051.                     strictVerifier = ServletUtils.isCheckBoxEnabled(tipoCredenzialiSSLVerificaTuttiICampi);
  2052.                     String tipoCredenzialiSSLTipoArchivioS = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_TIPO_ARCHIVIO);
  2053.                     String tipoCredenzialiSSLFileCertificatoPassword = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO_PASSWORD);
  2054.                     String tipoCredenzialiSSLAliasCertificato = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO);
  2055.                     if (tipoCredenzialiSSLAliasCertificato == null) {
  2056.                         tipoCredenzialiSSLAliasCertificato = "";
  2057.                     }
  2058.                     org.openspcoop2.utils.certificate.ArchiveType tipoCredenzialiSSLTipoArchivio= null;
  2059.                     if(tipoCredenzialiSSLTipoArchivioS == null) {
  2060.                         tipoCredenzialiSSLTipoArchivio = org.openspcoop2.utils.certificate.ArchiveType.CER;
  2061.                     } else {
  2062.                         tipoCredenzialiSSLTipoArchivio = org.openspcoop2.utils.certificate.ArchiveType.valueOf(tipoCredenzialiSSLTipoArchivioS);
  2063.                     }
  2064.                    
  2065.                     byte [] archivio = tipoCredenzialiSSLFileCertificato.getValue();
  2066.                     if(TipoOperazione.CHANGE.equals(tipoOperazione) && archivio==null) {
  2067.                         archivio = saOld.getInvocazionePorta().getCredenziali(0).getCertificate();
  2068.                     }
  2069.                     if(tipoCredenzialiSSLTipoArchivio.equals(org.openspcoop2.utils.certificate.ArchiveType.CER)) {
  2070.                         cSelezionato = ArchiveLoader.load(archivio);
  2071.                     }else {
  2072.                         cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLTipoArchivio, archivio, tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLFileCertificatoPassword);
  2073.                     }
  2074.                     saList = this.saCore.servizioApplicativoWithCredenzialiSslList(cSelezionato.getCertificate(), strictVerifier,
  2075.                             dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  2076.                     if(!strictVerifier && saList!=null && !saList.isEmpty()) {
  2077.                         List<ServizioApplicativo> saListCheck = this.saCore.servizioApplicativoWithCredenzialiSslList(cSelezionato.getCertificate(), true,
  2078.                                 dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  2079.                         if(saListCheck==null || saListCheck.isEmpty() ) {
  2080.                             details=ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_DETAILS;
  2081.                         }
  2082.                     }
  2083.                     tipoSsl = "certificato";
  2084.                    
  2085.                 }
  2086.                
  2087.                 String portaDominio = null;
  2088.                 if(this.core.isRegistroServiziLocale()){
  2089.                     Soggetto soggettoToCheck = tipoOperazione.equals(TipoOperazione.CHANGE) ?
  2090.                             this.soggettiCore.getSoggettoRegistro(idProvOld) : this.soggettiCore.getSoggettoRegistro(newProv);
  2091.                             portaDominio = soggettoToCheck.getPortaDominio();
  2092.                 }

  2093.                 if(saList!=null) {
  2094.                     for (int i = 0; i < saList.size(); i++) {
  2095.                         ServizioApplicativo sa = saList.get(i);
  2096.    
  2097.                         /**String tipoNomeSoggetto = null;*/
  2098.    
  2099.                         if(!this.core.isSinglePdD()){
  2100.    
  2101.                             // bugfix #66
  2102.                             // controllo se soggetto appartiene a nal diversi, in tal
  2103.                             // caso e' possibile
  2104.                             // avere stesse credenziali
  2105.                             // Raccolgo informazioni soggetto
  2106.                             Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
  2107.                             /**tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();*/
  2108.    
  2109.                             // se appartengono a nal diversi allora va bene continuo
  2110.                             if (!portaDominio.equals(tmpSoggettoProprietarioSa.getPortaDominio()))
  2111.                                 continue;
  2112.    
  2113.                         }else{
  2114.    
  2115.                             /**org.openspcoop2.core.config.Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggetto(sa.getIdSoggetto());
  2116.                             //tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();*/
  2117.    
  2118.                         }
  2119.    
  2120.                         if ((tipoOperazione.equals(TipoOperazione.CHANGE)) && (nome.equals(sa.getNome())) && (idProvOld == sa.getIdSoggetto())) {
  2121.                             continue;
  2122.                         }
  2123.                         if(saOld!=null && tipoOperazione.equals(TipoOperazione.CHANGE) && saOld.getId().longValue() == sa.getId().longValue()) {
  2124.                             continue;
  2125.                         }
  2126.    
  2127.                         // Raccolgo informazioni soggetto
  2128.                         // Messaggio di errore
  2129.                         String labelSoggetto = this.getLabelNomeSoggetto(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  2130.                         this.pd.setMessage("L'applicativo "+sa.getNome()+" (soggetto: "+labelSoggetto+") possiede già le credenziali ssl ("+tipoSsl+") indicate."+details);
  2131.                         return false;
  2132.                     }
  2133.                 }

  2134.                 if(!tokenWithHttpsEnabledByConfigSA &&  // se e' abilitato il token non deve essere controllata l'univocita' del certificato)
  2135.                     !this.soggettiCore.isSoggettiApplicativiCredenzialiSslPermitSameCredentials() &&
  2136.                     !dominioEsternoModI
  2137.                     ) {
  2138.                     // Verifico soggetti
  2139.                
  2140.                     details = "";
  2141.                     Soggetto soggettoAutenticato = null;
  2142.                     if(tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE)) {
  2143.                
  2144.                         // recupero soggetto con stesse credenziali
  2145.                         soggettoAutenticato = this.soggettiCore.getSoggettoRegistroAutenticatoSsl(subject, issuer);
  2146.                         tipoSsl = "subject/issuer";
  2147.                
  2148.                     } else {
  2149.                        
  2150.                         /**soggettoAutenticato = this.soggettiCore.getSoggettoRegistroAutenticatoSsl(cSelezionato.getCertificate(), strictVerifier);*/
  2151.                         // Fix: usando il metodo sopra e' permesso caricare due soggetti con lo stesso certificato (anche serial number) uno in strict e uno no, e questo e' sbagliato.
  2152.                         List<org.openspcoop2.core.registry.Soggetto> soggettiAutenticati = this.soggettiCore.soggettoWithCredenzialiSslList(cSelezionato.getCertificate(), strictVerifier);
  2153.                         if(soggettiAutenticati!=null && !soggettiAutenticati.isEmpty()) {
  2154.                             soggettoAutenticato = soggettiAutenticati.get(0);
  2155.                             if(!strictVerifier) {
  2156.                                 List<org.openspcoop2.core.registry.Soggetto> soggettiAutenticatiCheck = this.soggettiCore.soggettoWithCredenzialiSslList(cSelezionato.getCertificate(), true);
  2157.                                 if(soggettiAutenticatiCheck==null || soggettiAutenticatiCheck.isEmpty() ) {
  2158.                                     details=ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_DETAILS;
  2159.                                 }
  2160.                             }
  2161.                         }
  2162.                         tipoSsl = "certificato";
  2163.                     }
  2164.                    
  2165.                     // Messaggio di errore
  2166.                     if(soggettoAutenticato!=null){
  2167.                         String labelSoggettoAutenticato = this.getLabelNomeSoggetto(new IDSoggetto(soggettoAutenticato.getTipo(), soggettoAutenticato.getNome()));
  2168.                         this.pd.setMessage("Il soggetto "+labelSoggettoAutenticato+" possiede già le credenziali ssl ("+tipoSsl+") indicate."+details);
  2169.                         return false;
  2170.                     }
  2171.                 }
  2172.                
  2173.             }
  2174.             else if (tipoauth.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_PRINCIPAL)) {
  2175.                 // recupera lista servizi applicativi con stesse credenziali
  2176.                 List<ServizioApplicativo> saList = this.saCore.servizioApplicativoWithCredenzialiPrincipalList(principal);

  2177.                 String portaDominio = null;
  2178.                 if(this.core.isRegistroServiziLocale()){
  2179.                     Soggetto soggettoToCheck = tipoOperazione.equals(TipoOperazione.CHANGE) ?
  2180.                             this.soggettiCore.getSoggettoRegistro(idProvOld) : this.soggettiCore.getSoggettoRegistro(newProv);
  2181.                             portaDominio = soggettoToCheck.getPortaDominio();
  2182.                 }

  2183.                 for (int i = 0; i < saList.size(); i++) {
  2184.                     ServizioApplicativo sa = saList.get(i);

  2185.                     /**String tipoNomeSoggetto = null;*/

  2186.                     if(!this.core.isSinglePdD()){

  2187.                         // bugfix #66
  2188.                         // controllo se soggetto appartiene a nal diversi, in tal
  2189.                         // caso e' possibile
  2190.                         // avere stesse credenziali
  2191.                         // Raccolgo informazioni soggetto
  2192.                         Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
  2193.                         /**tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();*/

  2194.                         // se appartengono a nal diversi allora va bene continuo
  2195.                         if (!portaDominio.equals(tmpSoggettoProprietarioSa.getPortaDominio()))
  2196.                             continue;
  2197.                     }
  2198.                     else{

  2199.                         /**org.openspcoop2.core.config.Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggetto(sa.getIdSoggetto());
  2200.                         //tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();*/

  2201.                     }

  2202.                     if ((tipoOperazione.equals(TipoOperazione.CHANGE)) && (nome.equals(sa.getNome())) && (idProvOld == sa.getIdSoggetto())) {
  2203.                         continue;
  2204.                     }
  2205.                     if(saOld!=null && tipoOperazione.equals(TipoOperazione.CHANGE) && saOld.getId().longValue() == sa.getId().longValue()) {
  2206.                         continue;
  2207.                     }

  2208.                     // Messaggio di errore
  2209.                     String labelSoggetto = this.getLabelNomeSoggetto(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  2210.                     this.pd.setMessage("L'applicativo "+sa.getNome()+" (soggetto: "+labelSoggetto+") possiede già il principal indicato");
  2211.                     return false;
  2212.                 }
  2213.                
  2214.                
  2215.                 if(!this.soggettiCore.isSoggettiApplicativiCredenzialiPrincipalPermitSameCredentials()) {
  2216.                     // Verifico applicativi
  2217.                    
  2218.                     Soggetto soggettoAutenticato = this.soggettiCore.getSoggettoRegistroAutenticatoPrincipal(principal);
  2219.                    
  2220.                     // Messaggio di errore
  2221.                     if(soggettoAutenticato!=null){
  2222.                         String labelSoggettoAutenticato = this.getLabelNomeSoggetto(new IDSoggetto(soggettoAutenticato.getTipo(), soggettoAutenticato.getNome()));
  2223.                         this.pd.setMessage("Il soggetto "+labelSoggettoAutenticato+" possiede già il principal indicato");
  2224.                         return false;
  2225.                     }
  2226.                 }
  2227.                
  2228.             }
  2229.             //else per gestire la possibilita' con https
  2230.             if (ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN.equals(tipoauth) || tokenWithHttpsEnabledByConfigSA) {
  2231.                
  2232.                 if(tokenPolicy==null || StringUtils.isEmpty(tokenPolicy) || CostantiControlStation.DEFAULT_VALUE_NON_SELEZIONATO.equals(tokenPolicy)) {
  2233.                     this.pd.setMessage("TokenPolicy non indicata");
  2234.                 }
  2235.                 if(ControlStationCore.isAPIMode()) {
  2236.                     // Altrimenti la select list è valorizzata con quelli esistenti
  2237.                     GenericProperties gp = null;
  2238.                     try {
  2239.                         gp = this.confCore.getGenericProperties(tokenPolicy, org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA, false);
  2240.                     }catch(DriverConfigurazioneNotFound notFound) {}
  2241.                     if(gp==null) {
  2242.                         this.pd.setMessage("TokenPolicy indicata '"+tokenPolicy+"' non esiste");
  2243.                         return false;
  2244.                     }
  2245.                 }
  2246.                
  2247.                 // recupera lista servizi applicativi con stesse credenziali
  2248.                 List<ServizioApplicativo> saList = this.saCore.servizioApplicativoWithCredenzialiTokenList(tokenPolicy, tokenClientId);

  2249.                 String portaDominio = null;
  2250.                 if(this.core.isRegistroServiziLocale()){
  2251.                     Soggetto soggettoToCheck = tipoOperazione.equals(TipoOperazione.CHANGE) ?
  2252.                             this.soggettiCore.getSoggettoRegistro(idProvOld) : this.soggettiCore.getSoggettoRegistro(newProv);
  2253.                             portaDominio = soggettoToCheck.getPortaDominio();
  2254.                 }

  2255.                 for (int i = 0; i < saList.size(); i++) {
  2256.                     ServizioApplicativo sa = saList.get(i);

  2257.                     /**String tipoNomeSoggetto = null;*/

  2258.                     if(!this.core.isSinglePdD()){

  2259.                         // bugfix #66
  2260.                         // controllo se soggetto appartiene a nal diversi, in tal
  2261.                         // caso e' possibile
  2262.                         // avere stesse credenziali
  2263.                         // Raccolgo informazioni soggetto
  2264.                         Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
  2265.                         /**tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();*/

  2266.                         // se appartengono a nal diversi allora va bene continuo
  2267.                         if (!portaDominio.equals(tmpSoggettoProprietarioSa.getPortaDominio()))
  2268.                             continue;
  2269.                     }
  2270.                     else{

  2271.                         /**org.openspcoop2.core.config.Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggetto(sa.getIdSoggetto());
  2272.                         //tipoNomeSoggetto = tmpSoggettoProprietarioSa.getTipo() + "/" + tmpSoggettoProprietarioSa.getNome();*/

  2273.                     }

  2274.                     if ((tipoOperazione.equals(TipoOperazione.CHANGE)) && (nome.equals(sa.getNome())) && (idProvOld == sa.getIdSoggetto())) {
  2275.                         continue;
  2276.                     }
  2277.                     if(saOld!=null && tipoOperazione.equals(TipoOperazione.CHANGE) && saOld.getId().longValue() == sa.getId().longValue()) {
  2278.                         continue;
  2279.                     }

  2280.                     // Messaggio di errore
  2281.                     String labelSoggetto = this.getLabelNomeSoggetto(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  2282.                     if(protocollo!=null && this.core.isProfiloModIPA(protocollo)) {
  2283.                         this.pd.setMessage("L'applicativo "+sa.getNome()+" (soggetto: "+labelSoggetto+") possiede già l'identificativo client indicato");
  2284.                     }
  2285.                     else {
  2286.                         this.pd.setMessage("L'applicativo "+sa.getNome()+" (soggetto: "+labelSoggetto+") possiede già le credenziali indicate");
  2287.                     }
  2288.                     return false;
  2289.                 }
  2290.                
  2291.                 String oldTokenPolicy = null;
  2292.                 if (tipoOperazione.equals(TipoOperazione.CHANGE)) {
  2293.                     if(saOld!=null && saOld.getInvocazionePorta()!=null && saOld.getInvocazionePorta().sizeCredenzialiList()>0) {
  2294.                         // prendo il primo
  2295.                         oldTokenPolicy = saOld.getInvocazionePorta().getCredenziali(0).getTokenPolicy();
  2296.                     }
  2297.                 }
  2298.                
  2299.                 if(oldTokenPolicy!=null && !oldTokenPolicy.equals(tokenPolicy)) {
  2300.                     // controllo che non sia usato in qualche PD
  2301.                    
  2302.                     FiltroRicercaPorteDelegate filtro = new FiltroRicercaPorteDelegate();
  2303.                     filtro.setTipoSoggetto(idSA.getIdSoggettoProprietario().getTipo());
  2304.                     filtro.setNomeSoggetto(idSA.getIdSoggettoProprietario().getNome());
  2305.                     filtro.setNomeServizioApplicativo(idSA.getNome());
  2306.                     List<IDPortaDelegata> list = this.porteDelegateCore.getAllIdPorteDelegate(filtro);
  2307.                     if(list!=null && !list.isEmpty()) {
  2308.                         this.pd.setMessage("Non &egrave; possibile modificare la token policy poich&egrave; l'applicativo viene utilizzato all'interno del controllo degli accessi (autorizzazione trasporto) di "+
  2309.                                 list.size()+" fruizion"+(list.size()>1?"i":"e"));
  2310.                         return false;
  2311.                     }
  2312.                    
  2313.                     String tipoTrasporto = "trasporto";
  2314.                     if(this.isProfiloModIPA(protocollo)) {
  2315.                         tipoTrasporto = "messaggio";
  2316.                     }
  2317.                    
  2318.                     FiltroRicercaPorteApplicative filtroPA = new FiltroRicercaPorteApplicative();
  2319.                     IDServizioApplicativo idServizioApplicativoAutorizzato = new IDServizioApplicativo();
  2320.                     idServizioApplicativoAutorizzato.setIdSoggettoProprietario(new IDSoggetto(idSA.getIdSoggettoProprietario().getTipo(), idSA.getIdSoggettoProprietario().getNome()));
  2321.                     idServizioApplicativoAutorizzato.setNome(idSA.getNome());
  2322.                     filtroPA.setIdServizioApplicativoAutorizzato(idServizioApplicativoAutorizzato);
  2323.                     List<IDPortaApplicativa> listPA = this.porteApplicativeCore.getAllIdPorteApplicative(filtroPA);
  2324.                     if(listPA!=null && !listPA.isEmpty()) {
  2325.                         this.pd.setMessage("Non &egrave; possibile modificare la token policy poich&egrave; l'applicativo viene utilizzato all'interno del controllo degli accessi (autorizzazione "+tipoTrasporto+") di "+
  2326.                                 listPA.size()+" erogazion"+(listPA.size()>1?"i":"e"));
  2327.                         return false;
  2328.                     }
  2329.                    
  2330.                     filtro = new FiltroRicercaPorteDelegate();
  2331.                     filtro.setTipoSoggetto(idSA.getIdSoggettoProprietario().getTipo());
  2332.                     filtro.setNomeSoggetto(idSA.getIdSoggettoProprietario().getNome());
  2333.                     filtro.setNomeServizioApplicativoToken(idSA.getNome());
  2334.                     list = this.porteDelegateCore.getAllIdPorteDelegate(filtro);
  2335.                     if(list!=null && !list.isEmpty()) {
  2336.                         this.pd.setMessage("Non &egrave; possibile modificare la token policy poich&egrave; l'applicativo viene utilizzato all'interno del controllo degli accessi (autorizzazione token) di "+
  2337.                                 list.size()+" fruizion"+(list.size()>1?"i":"e"));
  2338.                         return false;
  2339.                     }
  2340.                    
  2341.                     filtroPA = new FiltroRicercaPorteApplicative();
  2342.                     filtroPA.setIdServizioApplicativoAutorizzatoToken(idServizioApplicativoAutorizzato);
  2343.                     listPA = this.porteApplicativeCore.getAllIdPorteApplicative(filtroPA);
  2344.                     if(listPA!=null && !listPA.isEmpty()) {
  2345.                         this.pd.setMessage("Non &egrave; possibile modificare la token policy poich&egrave; l'applicativo viene utilizzato all'interno del controllo degli accessi (autorizzazione token) di "+
  2346.                                 listPA.size()+" erogazion"+(listPA.size()>1?"i":"e"));
  2347.                         return false;
  2348.                     }
  2349.                 }
  2350.                
  2351.                
  2352.             }

  2353.             // erogatore
  2354.             boolean validaEndPoint = this.isModalitaStandard() && !TipologiaErogazione.DISABILITATO.equals(ruoloErogatore);
  2355.             if(isApplicativiServerEnabled) {
  2356.                 validaEndPoint = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(tipoSA);
  2357.             }
  2358.            
  2359.             if(validaEndPoint){
  2360.                 boolean isOk = this.servizioApplicativoEndPointCheckData(protocollo, listExtendedConnettore, saOld);
  2361.                 if (!isOk) {
  2362.                     return false;
  2363.                 }
  2364.             }
  2365.            
  2366.             return true;

  2367.         } catch (Exception e) {
  2368.             this.logError("Exception: " + e.getMessage(), e);
  2369.             throw new Exception(e.getMessage(),e);
  2370.         }
  2371.     }

  2372.     private void addFilterRuoloServizioApplicativo(String ruoloSA, boolean postBack) throws Exception{
  2373.         try {
  2374.             String [] tmp = ServiziApplicativiCostanti.getServiziApplicativiRuolo();
  2375.            
  2376.             String [] values = new String[tmp.length + 1];
  2377.             String [] labels = new String[tmp.length + 1];
  2378.             labels[0] = ServiziApplicativiCostanti.LABEL_PARAMETRO_FILTRO_RUOLO_QUALSIASI;
  2379.             values[0] = CostantiControlStation.DEFAULT_VALUE_PARAMETRO_SERVICE_BINDING_QUALSIASI;
  2380.             for (int i =0; i < tmp.length ; i ++) {
  2381.                 labels[i+1] = tmp[i];
  2382.                 values[i+1] = tmp[i];
  2383.             }
  2384.            
  2385.             String selectedValue = ruoloSA != null ? ruoloSA : CostantiControlStation.DEFAULT_VALUE_PARAMETRO_SERVICE_BINDING_QUALSIASI;
  2386.            
  2387.             String label = ServiziApplicativiCostanti.LABEL_TIPOLOGIA;

  2388.             this.pd.addFilter(Filtri.FILTRO_RUOLO_SERVIZIO_APPLICATIVO, label, selectedValue, values, labels, postBack, this.getSize());
  2389.            
  2390.         } catch (Exception e) {
  2391.             this.logError("Exception: " + e.getMessage(), e);
  2392.             throw new Exception(e.getMessage(),e);
  2393.         }
  2394.     }
  2395.    
  2396.     private void addFilterTipoServizioApplicativo(String tipoSA, boolean postBack) throws Exception{
  2397.         try {
  2398.             String [] tmp_labels = ServiziApplicativiCostanti.getLabelsServiziApplicativiTipo();
  2399.             String [] tmp_values = ServiziApplicativiCostanti.getValuesServiziApplicativiTipo();
  2400.            
  2401.             String [] values = new String[tmp_values.length + 1];
  2402.             String [] labels = new String[tmp_labels.length + 1];
  2403.             labels[0] = ServiziApplicativiCostanti.LABEL_PARAMETRO_FILTRO_RUOLO_QUALSIASI;
  2404.             values[0] = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_QUALSIASI;
  2405.             for (int i =0; i < tmp_labels.length ; i ++) {
  2406.                 labels[i+1] = tmp_labels[i];
  2407.                 values[i+1] = tmp_values[i];
  2408.             }
  2409.            
  2410.             String selectedValue = tipoSA != null ? tipoSA : ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_QUALSIASI;
  2411.            
  2412.             String label = ServiziApplicativiCostanti.LABEL_TIPO;

  2413.             this.pd.addFilter(Filtri.FILTRO_TIPO_SERVIZIO_APPLICATIVO, label, selectedValue, values, labels, postBack, this.getSize());
  2414.            
  2415.         } catch (Exception e) {
  2416.             this.logError("Exception: " + e.getMessage(), e);
  2417.             throw new Exception(e.getMessage(),e);
  2418.         }
  2419.     }


  2420.     public void prepareServizioApplicativoList(ISearch ricerca, List<ServizioApplicativo> lista, boolean useIdSoggetto) throws Exception {
  2421.         prepareServizioApplicativoList(ricerca, lista, useIdSoggetto, true);
  2422.     }
  2423.     public void prepareServizioApplicativoList(ISearch ricerca, List<ServizioApplicativo> lista, boolean useIdSoggetto, boolean readProvider) throws Exception {
  2424.         try {
  2425.             boolean modalitaCompleta = this.isModalitaCompleta();
  2426.            
  2427.             String idProvider = null;
  2428.             if(readProvider) {
  2429.                 idProvider = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  2430.             }
  2431.            
  2432.             boolean multitenant = this.saCore.isMultitenant();
  2433.            
  2434.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione
  2435.             Integer parentSA = ServletUtils.getIntegerAttributeFromSession(ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT, this.session, this.request);
  2436.             if(parentSA == null) parentSA = ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_NONE;
  2437.             Boolean useIdSoggObject = parentSA == ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_SOGGETTO;
  2438.             boolean useIdSogg = false;
  2439.             if(useIdSoggObject!=null) {
  2440.                 useIdSogg = useIdSoggObject.booleanValue();
  2441.             }

  2442.             if(useIdSogg){
  2443.                 Parameter pProvider = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, idProvider);
  2444.                 ServletUtils.addListElementIntoSession(this.request, this.session, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI,pProvider );
  2445.             }else
  2446.                 ServletUtils.addListElementIntoSession(this.request, this.session, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI);

  2447.             Boolean contaListe = ServletUtils.getContaListeFromSession(this.session);

  2448.             @SuppressWarnings("unused")
  2449.             Boolean singlePdD = ServletUtils.getObjectFromSession(this.request, this.session, Boolean.class, CostantiControlStation.SESSION_PARAMETRO_SINGLE_PDD);
  2450.            
  2451.             if(!modalitaCompleta && !useIdSogg) {
  2452.                 this.pd.setCustomListViewName(ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_NOME_VISTA_CUSTOM_LISTA);
  2453.             }
  2454.            
  2455.             // Prendo il soggetto
  2456.             String tmpTitle = null;
  2457.             String protocolloSoggetto = null;
  2458.             boolean supportAsincroni = true;
  2459.             if(useIdSogg){
  2460.                 if(this.core.isRegistroServiziLocale()){
  2461.                     Soggetto tmpSogg = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(idProvider));
  2462.                     protocolloSoggetto = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  2463.                     tmpTitle = this.getLabelNomeSoggetto(protocolloSoggetto, tmpSogg.getTipo() , tmpSogg.getNome());
  2464.                 }else{
  2465.                     org.openspcoop2.core.config.Soggetto tmpSogg = this.soggettiCore.getSoggetto(Integer.parseInt(idProvider));
  2466.                     protocolloSoggetto = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  2467.                     tmpTitle = this.getLabelNomeSoggetto(protocolloSoggetto, tmpSogg.getTipo() , tmpSogg.getNome());
  2468.                 }
  2469.                
  2470.                 List<ServiceBinding> serviceBindingListProtocollo = this.core.getServiceBindingListProtocollo(protocolloSoggetto);
  2471.                 for (ServiceBinding serviceBinding : serviceBindingListProtocollo) {
  2472.                     supportAsincroni = this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(protocolloSoggetto,serviceBinding, ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)
  2473.                             || this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(protocolloSoggetto, serviceBinding, ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
  2474.                 }
  2475.                
  2476.                 if(!supportAsincroni &&
  2477.                     this.isModalitaAvanzata()){
  2478.                     supportAsincroni = this.core.isElenchiSAAsincroniNonSupportatiVisualizzaRispostaAsincrona();
  2479.                 }
  2480.             }

  2481.             int idLista = useIdSogg ? Liste.SERVIZI_APPLICATIVI_BY_SOGGETTO : Liste.SERVIZIO_APPLICATIVO;
  2482.             int limit = ricerca.getPageSize(idLista);
  2483.             int offset = ricerca.getIndexIniziale(idLista);
  2484.             String search = ServletUtils.getSearchFromSession(ricerca, idLista);

  2485.             String filterProtocollo = null;
  2486.             String filterSoggetto = null;
  2487.             boolean profiloSelezionato = false;
  2488.             boolean supportatoAutenticazioneApplicativiEsterni = false;
  2489.             String protocolloS = null;
  2490.             if(!useIdSogg) {
  2491.                 filterProtocollo = addFilterProtocol(ricerca, idLista, true);

  2492.                 protocolloS = filterProtocollo;
  2493.                 if(protocolloS==null) {
  2494.                     // significa che e' stato selezionato un protocollo nel menu in alto a destra
  2495.                     List<String> protocolli = this.core.getProtocolli(this.request, this.session);
  2496.                     if(protocolli!=null && protocolli.size()==1) {
  2497.                         protocolloS = protocolli.get(0);
  2498.                     }
  2499.                 }
  2500.                 if(protocolloS!=null && ! "".equals(protocolloS)) {
  2501.                     supportatoAutenticazioneApplicativiEsterni = this.saCore.isSupportatoAutenticazioneApplicativiEsterniErogazione(protocolloS); // devono essere fatti vedere tutti i soggetti, anche quelli esterni.
  2502.                 }
  2503.                
  2504.                 if( (filterProtocollo!=null &&
  2505.                         //!"".equals(filterProtocollo) &&
  2506.                         !CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PROTOCOLLO_QUALSIASI.equals(filterProtocollo))
  2507.                         ||
  2508.                     (filterProtocollo==null && protocolloS!=null)
  2509.                         ) {
  2510.                     profiloSelezionato = true;
  2511.                 }
  2512.                
  2513.                 if( profiloSelezionato &&
  2514.                         (!this.isSoggettoMultitenantSelezionato() || supportatoAutenticazioneApplicativiEsterni)) {
  2515.                    
  2516.                     boolean soloSoggettiOperativi = true;
  2517.                     if(supportatoAutenticazioneApplicativiEsterni) {
  2518.                         soloSoggettiOperativi = false;
  2519.                     }
  2520.                     filterSoggetto = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_SOGGETTO);
  2521.                     this.addFilterSoggetto(filterSoggetto,protocolloS,soloSoggettiOperativi,true);
  2522.                 }
  2523.             }
  2524.             if(this.isSoggettoMultitenantSelezionato()){
  2525.                 filterSoggetto = getSoggettoMultitenantSelezionato();
  2526.             }
  2527.            
  2528.             String filterDominio = null;
  2529.             if(this.core.isGestionePddAbilitata(this)==false && multitenant && supportatoAutenticazioneApplicativiEsterni) {
  2530.                 filterDominio = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_DOMINIO);
  2531.                 addFilterDominio(filterDominio, true);
  2532.             }
  2533.            
  2534.             if(modalitaCompleta) {
  2535.                 String filterRuoloSA = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_RUOLO_SERVIZIO_APPLICATIVO);
  2536.                 this.addFilterRuoloServizioApplicativo(filterRuoloSA,false);
  2537.             }
  2538.            
  2539.             boolean applicativiServerEnabled = this.core.isApplicativiServerEnabled(this);
  2540.             String filterTipoSA = null;
  2541.             if(applicativiServerEnabled) {
  2542.                 filterTipoSA = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_TIPO_SERVIZIO_APPLICATIVO);
  2543.                 this.addFilterTipoServizioApplicativo(filterTipoSA, true);
  2544.             }
  2545.            
  2546.             String filterTipoCredenziali = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_TIPO_CREDENZIALI);
  2547.             this.addFilterTipoCredenziali(filterTipoCredenziali,true,true);
  2548.            
  2549.             if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN.equals(filterTipoCredenziali)) {
  2550.                 String filterCredenzialeTokenPolicy = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_CREDENZIALE_TOKEN_POLICY);
  2551.                 this.addFilterCredenzialeTokenPolicy(filterCredenzialeTokenPolicy, false);
  2552.             }
  2553.            
  2554.             String filterCredenziale = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_CREDENZIALE);
  2555.             this.addFilterCredenziale(filterTipoCredenziali, filterCredenziale);
  2556.            
  2557.             String filterCredenzialeIssuer = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_CREDENZIALE_ISSUER);
  2558.             this.addFilterCredenzialeIssuer(filterTipoCredenziali, filterCredenzialeIssuer);
  2559.                    
  2560.             String filterRuolo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_RUOLO);
  2561.             addFilterRuolo(filterRuolo, false);
  2562.            
  2563.             String filterGruppo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_GRUPPO);
  2564.             addFilterGruppo(filterProtocollo, filterGruppo, true);
  2565.            
  2566.             String filterApiContesto = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_API_CONTESTO);
  2567.             this.addFilterApiContesto(filterApiContesto, true);
  2568.            
  2569.             if(profiloSelezionato &&
  2570.                     filterApiContesto!=null &&
  2571.                     //!"".equals(filterApiContesto) &&
  2572.                     !CostantiControlStation.DEFAULT_VALUE_PARAMETRO_API_CONTESTO_QUALSIASI.equals(filterApiContesto)) {
  2573.                 String filterApiImplementazione = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_API_IMPLEMENTAZIONE);
  2574.                 this.addFilterApiImplementazione(filterProtocollo, filterSoggetto, filterGruppo, filterApiContesto, filterApiImplementazione, false);
  2575.             }
  2576.             else {
  2577.                 SearchUtils.clearFilter(ricerca, idLista, Filtri.FILTRO_API_IMPLEMENTAZIONE);
  2578.             }
  2579.            
  2580.             // filtro sui connettori solo se tipoSA = qualsiasi o server
  2581.             if(applicativiServerEnabled &&
  2582.                 (filterTipoSA ==null || (ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_QUALSIASI.equals(filterTipoSA) ||
  2583.                         ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(filterTipoSA)))
  2584.                 ){
  2585.                    
  2586.                 // **** filtro connettore ****
  2587.                
  2588.                 // nuovi filtri connettore
  2589.                 this.addFilterSubtitle(ConnettoriCostanti.NAME_SUBTITLE_DATI_CONNETTORE, ConnettoriCostanti.LABEL_SUBTITLE_DATI_CONNETTORE, false);
  2590.                
  2591.                 // filtro tipo connettore con voce IM solo sulle erogazioni
  2592.                 String filterTipoConnettore = this.addFilterTipoConnettore(ricerca, idLista, true);
  2593.                
  2594.                 // filtro plugin
  2595.                 this.addFilterConnettorePlugin(ricerca, idLista, filterTipoConnettore);

  2596.                 // filtro debug
  2597.                 if(!this.isModalitaStandard()) {
  2598.                     this.addFilterConnettoreDebug(ricerca, idLista, filterTipoConnettore);
  2599.                 }
  2600.                
  2601.                 // filtro token policy
  2602.                 this.addFilterConnettoreTokenPolicy(ricerca, idLista, filterTipoConnettore);
  2603.                
  2604.                 // filtro endpoint
  2605.                 this.addFilterConnettoreEndpoint(ricerca, idLista, filterTipoConnettore);
  2606.                
  2607.                 // filtro keystore
  2608.                 this.addFilterConnettoreKeystore(ricerca, idLista, filterTipoConnettore);
  2609.                                    
  2610.                 // imposto apertura sezione
  2611.                 this.impostaAperturaSubtitle(ConnettoriCostanti.NAME_SUBTITLE_DATI_CONNETTORE);
  2612.                
  2613.                 // **** fine filtro connettore ****
  2614.                
  2615.             }
  2616.            
  2617.             // filtri modipa solo se tipoSA = client o qualsiasi
  2618.             if(filterTipoSA ==null || (ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_QUALSIASI.equals(filterTipoSA) ||
  2619.                     ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_CLIENT.equals(filterTipoSA))) {
  2620.                 // filtri MODIPA da visualizzare solo se non e' stato selezionato un protocollo in alto a dx  (opzione pilota da file di proprieta')
  2621.                 // oppure e' selezionato MODIPA
  2622.                 // oppure non e' stato selezionato un protocollo in alto e nessun protocollo nei filtri  (opzione pilota da file di proprieta')
  2623.                 // oppure MODIPA nei filtri
  2624.                 boolean profiloModipaSelezionato = false;
  2625.                 // solo se il protocollo modipa e' caricato faccio la verifica
  2626.                 if(this.core.getProtocolli().contains(CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PROTOCOLLO_MODIPA)) {
  2627.                     List<String> profiloModipaSelezionatoOpzioniAccettate = new ArrayList<>();
  2628.                     profiloModipaSelezionatoOpzioniAccettate.add(CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PROTOCOLLO_MODIPA);
  2629.                     if(this.core.isModipaFiltroRicercaProfiloQualsiasiVisualizzaDatiModi()) {
  2630.                         profiloModipaSelezionatoOpzioniAccettate.add(CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PROTOCOLLO_QUALSIASI);
  2631.                     }
  2632.                     if( (filterProtocollo!=null && profiloModipaSelezionatoOpzioniAccettate.contains(filterProtocollo))
  2633.                             ||
  2634.                         (filterProtocollo==null && protocolloS!=null && profiloModipaSelezionatoOpzioniAccettate.contains(protocolloS))
  2635.                         ) {
  2636.                         profiloModipaSelezionato = true;
  2637.                     }
  2638.                 }
  2639.                
  2640.                 if(profiloModipaSelezionato) {
  2641.                    
  2642.                     // **** filtro modi ****
  2643.                    
  2644.                     this.addFilterSubtitle(CostantiControlStation.NAME_SUBTITLE_FILTRI_MODIPA, CostantiControlStation.LABEL_SUBTITLE_FILTRI_MODIPA, false);
  2645.                    
  2646.                     // ulteriore condizione per la visualizzazione della sezione e' che il Dominio non deve essere esterno
  2647.                     if(!this.core.isGestionePddAbilitata(this) && multitenant) {
  2648.                        
  2649.                         if(!SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE.equals(filterDominio)) {
  2650.                            
  2651.                             // filtro sicurezza messaggio
  2652.                             String sicurezzaMessaggio = this.addFilterModISicurezzaMessaggioSA(ricerca, idLista, true);
  2653.                            
  2654.                             if(sicurezzaMessaggio!=null && !CostantiControlStation.DEFAULT_VALUE_PARAMETRO_SOGGETTO_QUALSIASI.equals(sicurezzaMessaggio) &&
  2655.                                     StatoFunzionalita.ABILITATO.getValue().equals(sicurezzaMessaggio)) {
  2656.                            
  2657.                                 // filtro keystore
  2658.                                 this.addFilterModIKeystorePath(ricerca, idLista);
  2659.                                 this.addFilterModIKeystoreSubject(ricerca, idLista);
  2660.                                 this.addFilterModIKeystoreIssuer(ricerca, idLista);
  2661.                                
  2662.                             }
  2663.                            
  2664.                             // filtro sicurezza token
  2665.                             String sicurezzaToken = this.addFilterModISicurezzaTokenSA(ricerca, idLista, true);
  2666.                            
  2667.                             if(sicurezzaToken!=null && !CostantiControlStation.DEFAULT_VALUE_PARAMETRO_SOGGETTO_QUALSIASI.equals(sicurezzaToken) &&
  2668.                                     StatoFunzionalita.ABILITATO.getValue().equals(sicurezzaToken)) {
  2669.                            
  2670.                                 // filtro token
  2671.                                 this.addFilterModITokenPolicy(ricerca, idLista, false);
  2672.                                 this.addFilterModITokenClientId(ricerca, idLista);
  2673.                                
  2674.                             }
  2675.                                                                
  2676.                         }
  2677.                     }
  2678.                    
  2679.                     // filtro audience
  2680.                     this.addFilterModIAudience(ricerca, idLista, true, null, filterDominio);
  2681.                    
  2682.                     // imposto apertura sezione
  2683.                     this.impostaAperturaSubtitle(CostantiControlStation.NAME_SUBTITLE_FILTRI_MODIPA);
  2684.                    
  2685.                     // **** fine filtro modi ****
  2686.                 }
  2687.             }
  2688.            
  2689.             String protocolloPerFiltroProprieta = protocolloS;
  2690.             // valorizzato con il protocollo nel menu in alto a destra oppure null, controllo se e' stato selezionato nel filtro di ricerca
  2691.             if(protocolloPerFiltroProprieta == null) {
  2692.                 if(
  2693.                         //"".equals(filterProtocollo) ||
  2694.                         CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PROTOCOLLO_QUALSIASI.equals(filterProtocollo)) {
  2695.                     protocolloPerFiltroProprieta = null;
  2696.                 } else {
  2697.                     protocolloPerFiltroProprieta = filterProtocollo;
  2698.                 }
  2699.             }
  2700.            
  2701.             String soggettoPerFiltroProprieta = null;
  2702.             if(profiloSelezionato) {
  2703.                 // soggetto non selezionato nel menu' in alto a dx
  2704.                 if(!this.isSoggettoMultitenantSelezionato()) {
  2705.                     soggettoPerFiltroProprieta = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_SOGGETTO);
  2706.                     if(
  2707.                             //"".equals(soggettoPerFiltroProprieta) ||
  2708.                             CostantiControlStation.DEFAULT_VALUE_PARAMETRO_SOGGETTO_QUALSIASI.equals(soggettoPerFiltroProprieta)) {
  2709.                         soggettoPerFiltroProprieta = null;
  2710.                     }
  2711.                 } else {
  2712.                     soggettoPerFiltroProprieta = this.getSoggettoMultitenantSelezionato();
  2713.                 }
  2714.             }
  2715.            
  2716.             // **** filtro proprieta ****
  2717.            
  2718.             List<String> nomiProprieta = this.nomiProprietaSA(protocolloPerFiltroProprieta,soggettoPerFiltroProprieta);
  2719.             if(nomiProprieta != null && !nomiProprieta.isEmpty()) {
  2720.                 this.addFilterSubtitle(CostantiControlStation.NAME_SUBTITLE_PROPRIETA, CostantiControlStation.LABEL_SUBTITLE_PROPRIETA, false);
  2721.                
  2722.                 // filtro nome
  2723.                 this.addFilterProprietaNome(ricerca, idLista, nomiProprieta);
  2724.                
  2725.                 // filtro valore
  2726.                 this.addFilterProprietaValore(ricerca, idLista, nomiProprieta);
  2727.                
  2728.                 // imposto apertura sezione
  2729.                 this.impostaAperturaSubtitle(CostantiControlStation.NAME_SUBTITLE_PROPRIETA);
  2730.             }
  2731.            
  2732.             // **** fine filtro proprieta ****
  2733.            
  2734.            
  2735.             this.pd.setIndex(offset);
  2736.             this.pd.setPageSize(limit);
  2737.             this.pd.setNumEntries(ricerca.getNumEntries(idLista));


  2738.             // setto la barra del titolo
  2739.            
  2740.             String labelApplicativi = ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI;
  2741.             String labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_DI;
  2742.             if(!modalitaCompleta) {
  2743.                 labelApplicativi = ServiziApplicativiCostanti.LABEL_APPLICATIVI;
  2744.                 labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_APPLICATIVI_DI;
  2745.             }
  2746.            
  2747.             if(!useIdSogg){
  2748.                 this.pd.setSearchLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  2749.                 if (search.equals("")) {
  2750.                     this.pd.setSearchDescription("");
  2751.                     ServletUtils.setPageDataTitle(this.pd,
  2752.                             new Parameter(labelApplicativi,ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST));
  2753.                 }
  2754.                 else{
  2755.                     ServletUtils.setPageDataTitle(this.pd,
  2756.                             new Parameter(labelApplicativi,ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST),
  2757.                             new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA,null));  
  2758.                 }
  2759.             } else {
  2760.                 List<Parameter> lstParam = new ArrayList<>();

  2761.                 lstParam.add(new Parameter(SoggettiCostanti.LABEL_SOGGETTI, SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST));

  2762.                 this.pd.setSearchLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  2763.                 if(search.equals("")){
  2764.                     this.pd.setSearchDescription("");
  2765.                     lstParam.add(new Parameter(labelApplicativiDi + tmpTitle,null));
  2766.                 }else{
  2767.                     lstParam.add(new Parameter(labelApplicativiDi + tmpTitle,
  2768.                             ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST ,
  2769.                             new Parameter( ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, idProvider)));
  2770.                     lstParam.add(new Parameter(PorteApplicativeCostanti.LABEL_PORTE_APPLICATIVE_RISULTATI_RICERCA, null));
  2771.                 }

  2772.                 ServletUtils.setPageDataTitle(this.pd, lstParam.toArray(new Parameter[lstParam.size()]));
  2773.             }

  2774.             // controllo eventuali risultati ricerca
  2775.             if (!search.equals("")) {
  2776.                 ServletUtils.enabledPageDataSearch(this.pd, labelApplicativi, search);
  2777.             }

  2778.             boolean showProtocolli = this.core.countProtocolli(this.request, this.session)>1;
  2779.            
  2780.             supportatoAutenticazioneApplicativiEsterni = false;
  2781.             if (lista != null) {
  2782.                 Iterator<ServizioApplicativo> it = lista.iterator();
  2783.                 while (it.hasNext()) {
  2784.                     ServizioApplicativo sa = it.next();
  2785.                     String protocolloCheck = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(sa.getTipoSoggettoProprietario());
  2786.                     if(this.saCore.isSupportatoAutenticazioneApplicativiEsterniErogazione(protocolloCheck)) {
  2787.                         supportatoAutenticazioneApplicativiEsterni = true;
  2788.                         break;
  2789.                     }
  2790.                 }
  2791.             }
  2792.            
  2793.             // setto le label delle colonne
  2794.             this.setLabelColonne(modalitaCompleta, useIdSogg, multitenant, supportatoAutenticazioneApplicativiEsterni, showProtocolli, supportAsincroni);

  2795.             // preparo i dati
  2796.             List<List<DataElement>> dati = new ArrayList<>();

  2797.             if (lista != null) {
  2798.                 Iterator<ServizioApplicativo> it = lista.iterator();
  2799.                 while (it.hasNext()) {
  2800.                     List<DataElement> e = (!modalitaCompleta && !useIdSogg) ?
  2801.                            
  2802.                             this.creaEntryCustom(multitenant, useIdSogg, showProtocolli, supportatoAutenticazioneApplicativiEsterni, applicativiServerEnabled, it) :
  2803.                            
  2804.                             this.creaEntry(modalitaCompleta, multitenant, useIdSogg, contaListe, supportAsincroni, showProtocolli, supportatoAutenticazioneApplicativiEsterni, applicativiServerEnabled, it);

  2805.                     dati.add(e);
  2806.                 }
  2807.             }

  2808.             this.pd.setDati(dati);
  2809.             this.pd.setAddButton(true);

  2810.             // preparo bottoni
  2811.             if(lista!=null && !lista.isEmpty()){
  2812.                 if (this.core.isShowPulsantiImportExport()) {

  2813.                     ExporterUtils exporterUtils = new ExporterUtils(this.archiviCore);
  2814.                     if(exporterUtils.existsAtLeastOneExportMode(org.openspcoop2.protocol.sdk.constants.ArchiveType.SERVIZIO_APPLICATIVO, this.request, this.session)){

  2815.                         List<AreaBottoni> bottoni = new ArrayList<>();

  2816.                         AreaBottoni ab = new AreaBottoni();
  2817.                         List<DataElement> otherbott = new ArrayList<>();
  2818.                         DataElement de = new DataElement();
  2819.                         de.setValue(ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_ESPORTA_SELEZIONATI);
  2820.                         de.setOnClick(ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_ESPORTA_SELEZIONATI_ONCLICK);
  2821.                         de.setDisabilitaAjaxStatus();
  2822.                         otherbott.add(de);
  2823.                         ab.setBottoni(otherbott);
  2824.                         bottoni.add(ab);

  2825.                         this.pd.setAreaBottoni(bottoni);

  2826.                     }

  2827.                 }
  2828.             }
  2829.            
  2830.         } catch (Exception e) {
  2831.             this.logError("Exception: " + e.getMessage(), e);
  2832.             throw new Exception(e.getMessage(),e);
  2833.         }
  2834.     }
  2835.     private List<DataElement> creaEntry(boolean modalitaCompleta, boolean multitenant, Boolean useIdSogg,
  2836.             Boolean contaListe, boolean supportAsincroni, boolean showProtocolli, boolean supportatoAutenticazioneApplicativiEsterni, boolean applicativiServerEnabled,
  2837.             Iterator<ServizioApplicativo> it) throws DriverRegistroServiziNotFound, DriverRegistroServiziException,
  2838.             DriverControlStationException, DriverControlStationNotFound, Exception, DriverConfigurazioneException {
  2839.         ServizioApplicativo sa = it.next();
  2840.         List<DataElement> e = new ArrayList<>();

  2841.         DataElement de = new DataElement();
  2842.         de.setType(DataElementType.HIDDEN);
  2843.         de.setValue("" + sa.getId());
  2844.         e.add(de);

  2845.         String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(sa.getTipoSoggettoProprietario());
  2846.        
  2847.         IDSoggetto idSoggettoProprietario = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  2848.         Soggetto soggettoProprietario = this.soggettiCore.getSoggettoRegistro(idSoggettoProprietario);
  2849.         String dominio = this.pddCore.isPddEsterna(soggettoProprietario.getPortaDominio()) ? SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE : SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE;
  2850.        
  2851.         de = new DataElement();
  2852.         de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE,
  2853.                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getId()+""),
  2854.                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+""),
  2855.                 new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO, dominio));
  2856.         de.setSize(this.core.getElenchiMenuIdentificativiLunghezzaMassima());
  2857.         de.setValue(sa.getNome());
  2858.         de.setIdToRemove(sa.getId().toString());
  2859.         e.add(de);

  2860.         if(!useIdSogg && (
  2861.                 (multitenant && !this.isSoggettoMultitenantSelezionato())
  2862.                 ||
  2863.                 (supportatoAutenticazioneApplicativiEsterni)
  2864.                 )) {
  2865.             de = new DataElement();
  2866.             if(modalitaCompleta) {
  2867.                 de.setUrl(SoggettiCostanti.SERVLET_NAME_SOGGETTI_CHANGE,
  2868.                         new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_ID, sa.getIdSoggetto()+""),
  2869.                         new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_NOME, sa.getNomeSoggettoProprietario()),
  2870.                         new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_TIPO, sa.getTipoSoggettoProprietario()));
  2871.             }
  2872.             de.setValue(this.getLabelNomeSoggetto(protocollo, sa.getTipoSoggettoProprietario() , sa.getNomeSoggettoProprietario()));
  2873.             e.add(de);
  2874.         }

  2875.         if( showProtocolli ) {
  2876.             de = new DataElement();
  2877.             de.setValue(this.getLabelProtocollo(protocollo));
  2878.             e.add(de);
  2879.         }
  2880.        
  2881.         boolean pddEsterna = false;
  2882.         if(this.core.isRegistroServiziLocale()){
  2883.             IDSoggetto tmpIDS = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  2884.             Soggetto tmpSogg = this.soggettiCore.getSoggettoRegistro(tmpIDS);
  2885.             String nomePdd = tmpSogg.getPortaDominio();
  2886.             if(this.pddCore.isPddEsterna(nomePdd)){
  2887.                 pddEsterna = true;
  2888.             }
  2889.         }
  2890.        
  2891.         // Tipo
  2892.         boolean isServer = false;
  2893.        
  2894.         if(applicativiServerEnabled) {
  2895.             de = new DataElement();
  2896.             isServer = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo());
  2897.             String tipoLabel = this.getTipo(sa);
  2898.             if(sa.isUseAsClient()) {
  2899.                 isServer = false;
  2900.                 // tipoLabel = tipoLabel+" / "+ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_TIPO_CLIENT; gia aggiunto in metodo getTipo
  2901.             }
  2902.             de.setValue(tipoLabel);
  2903.             e.add(de);
  2904.         }

  2905.         if(!modalitaCompleta) {
  2906.             de = new DataElement();
  2907.             if(isServer) {
  2908.                 de.setValue("-");
  2909.             }
  2910.             else {
  2911.                 if(useIdSogg){
  2912.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  2913.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""),
  2914.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,sa.getIdSoggetto()+""));
  2915.                 }
  2916.                 else{
  2917.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  2918.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO,sa.getId()+""));
  2919.                 }
  2920.                 if (contaListe) {
  2921.                     // BugFix OP-674
  2922.                     //List<String> lista1 = this.saCore.servizioApplicativoRuoliList(sa.getId(),new Search(true));
  2923.                     ConsoleSearch searchForCount = new ConsoleSearch(true,1);
  2924.                     this.saCore.servizioApplicativoRuoliList(sa.getId(),searchForCount);
  2925.                     //int numRuoli = lista1.size();
  2926.                     int numRuoli = searchForCount.getNumEntries(Liste.SERVIZIO_APPLICATIVO_RUOLI);
  2927.                     ServletUtils.setDataElementVisualizzaLabel(de,(long)numRuoli);
  2928.                 } else
  2929.                     ServletUtils.setDataElementVisualizzaLabel(de);
  2930.             }
  2931.             e.add(de);
  2932.         }
  2933.        
  2934.         if (modalitaCompleta){
  2935.             de = new DataElement();
  2936.             de.setValue(this.getTipologia(sa));
  2937.             e.add(de);
  2938.         }
  2939.        
  2940.         if (modalitaCompleta){
  2941.             de = new DataElement();
  2942.             // se la pdd e' esterna non e' possibile modificare il
  2943.             // connettore invocazione servizio
  2944.             if (pddEsterna) {
  2945.                 de.setValue("-");// non visualizzo nulla e il link e'
  2946.                 // disabilitato
  2947.             } else {
  2948.                 de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_ENDPOINT,
  2949.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME_SERVIZIO_APPLICATIVO, sa.getNome()),
  2950.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO, sa.getId()+""),
  2951.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+""));
  2952.                 InvocazioneServizio is = sa.getInvocazioneServizio();
  2953.                 if (is == null) {
  2954.                     de.setValue(CostantiConfigurazione.ABILITATO.toString());
  2955.                 } else {
  2956.                     org.openspcoop2.core.config.Connettore connettore = is.getConnettore();
  2957.                     boolean connettoreDisabilitato = ((CostantiConfigurazione.DISABILITATO.equals(connettore.getTipo())) || ("".equals(connettore.getTipo())) || (connettore.getTipo() == null));
  2958.                     boolean messageBoxDisabilitato = ((CostantiConfigurazione.DISABILITATO.equals(is.getGetMessage())) || (is.getGetMessage() == null) || ("".equals(is.getGetMessage().getValue())));
  2959.                     if ( connettoreDisabilitato && messageBoxDisabilitato) {
  2960.                         de.setValue(CostantiConfigurazione.DISABILITATO.toString());
  2961.                     } else {
  2962.                         if(connettoreDisabilitato){
  2963.                             de.setValue(ServiziApplicativiCostanti.LABEL_CONNETTORE_ABILITATO_SOLO_IM);
  2964.                         }
  2965.                         else{
  2966.                             de.setValue(CostantiConfigurazione.ABILITATO.toString());
  2967.                         }
  2968.                     }
  2969.                 }
  2970.             }
  2971.             e.add(de);
  2972.         }

  2973.         if(supportAsincroni && modalitaCompleta){
  2974.             de = new DataElement();
  2975.             // se la pdd e' esterna non e' possibile modificare il
  2976.             // connettore risposta asincrona
  2977.            
  2978.             boolean supportoAsincronoPuntualeSoggetto = true;
  2979.             if(useIdSogg==false){
  2980.                 String protocolloPuntuale = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(sa.getTipoSoggettoProprietario());
  2981.                 List<ServiceBinding> serviceBindingListProtocollo = this.core.getServiceBindingListProtocollo(protocolloPuntuale);
  2982.                 for (ServiceBinding serviceBinding : serviceBindingListProtocollo) {
  2983.                     supportoAsincronoPuntualeSoggetto = this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(protocolloPuntuale,serviceBinding, ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)
  2984.                             || this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(protocolloPuntuale, serviceBinding, ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
  2985.                 }

  2986.                 if(supportoAsincronoPuntualeSoggetto==false){
  2987.                     if (this.isModalitaAvanzata()){
  2988.                         supportoAsincronoPuntualeSoggetto = this.core.isElenchiSAAsincroniNonSupportatiVisualizzaRispostaAsincrona();
  2989.                     }
  2990.                 }
  2991.             }
  2992.            
  2993.             if (pddEsterna || !supportoAsincronoPuntualeSoggetto) {
  2994.                 de.setValue("-");// non visualizzo nulla e il link e'
  2995.                 // disabilitato
  2996.             } else {
  2997.                 de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_ENDPOINT_RISPOSTA,
  2998.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME_SERVIZIO_APPLICATIVO, sa.getNome()),
  2999.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO, sa.getId()+""),
  3000.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+""));
  3001.                 RispostaAsincrona ra = sa.getRispostaAsincrona();
  3002.                 if (ra == null) {
  3003.                     de.setValue(CostantiConfigurazione.DISABILITATO.toString());
  3004.                 } else {
  3005.                     org.openspcoop2.core.config.Connettore connettore = ra.getConnettore();
  3006.                     boolean connettoreDisabilitato = ((CostantiConfigurazione.DISABILITATO.equals(connettore.getTipo())) || ("".equals(connettore.getTipo())) || (connettore.getTipo() == null));
  3007.                     boolean messageBoxDisabilitato = ((CostantiConfigurazione.DISABILITATO.equals(ra.getGetMessage())) || (ra.getGetMessage() == null) || ("".equals(ra.getGetMessage().getValue())) );
  3008.                     if ( connettoreDisabilitato && messageBoxDisabilitato) {
  3009.                         de.setValue(CostantiConfigurazione.DISABILITATO.toString());
  3010.                     } else {
  3011.                         if(connettoreDisabilitato){
  3012.                             de.setValue(ServiziApplicativiCostanti.LABEL_CONNETTORE_ABILITATO_SOLO_IM);
  3013.                         }
  3014.                         else{
  3015.                             de.setValue(CostantiConfigurazione.ABILITATO.toString());
  3016.                         }
  3017.                     }
  3018.                 }
  3019.             }
  3020.             e.add(de);
  3021.         }
  3022.         return e;
  3023.     }
  3024.     private List<DataElement> creaEntryCustom(boolean multitenant, Boolean useIdSoggParam, boolean showProtocolli, boolean supportatoAutenticazioneApplicativiEsterni,
  3025.             boolean applicativiServerEnabled, Iterator<ServizioApplicativo> it) throws DriverRegistroServiziNotFound, DriverRegistroServiziException,
  3026.         DriverControlStationException, DriverControlStationNotFound, DriverConfigurazioneException {
  3027.             ServizioApplicativo sa = it.next();
  3028.             List<DataElement> e = new ArrayList<>();
  3029.         String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(sa.getTipoSoggettoProprietario());
  3030.        
  3031.         IDSoggetto idSoggettoProprietario = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  3032.         Soggetto soggettoProprietario = this.soggettiCore.getSoggettoRegistro(idSoggettoProprietario);
  3033.         String dominio = this.pddCore.isPddEsterna(soggettoProprietario.getPortaDominio()) ? SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE : SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE;
  3034.        
  3035.         Parameter pSAId = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getId()+"");
  3036.         Parameter pSAIdSoggetto = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+"");
  3037.         Parameter pDominio = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO, dominio);
  3038.        
  3039.        
  3040.         List<Parameter> listaParametriChange = new ArrayList<>();
  3041.         listaParametriChange.add(pSAId);
  3042.         listaParametriChange.add(pSAIdSoggetto);
  3043.         listaParametriChange.add(pDominio);
  3044.         // TITOLO (nome + soggetto)
  3045.         String nome = sa.getNome();
  3046.         DataElement de = new DataElement();
  3047.         de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE, pSAId, pSAIdSoggetto, pDominio);
  3048.         de.setSize(this.core.getElenchiMenuIdentificativiLunghezzaMassima());
  3049.        
  3050.         de.setIdToRemove(sa.getId().toString());
  3051.         de.setType(DataElementType.TITLE);
  3052.        
  3053.         boolean useIdSogg = false;
  3054.         if(useIdSoggParam!=null) {
  3055.             useIdSogg = useIdSoggParam.booleanValue();
  3056.         }
  3057.        
  3058.         if(!useIdSogg && ((multitenant && !this.isSoggettoMultitenantSelezionato()) || (supportatoAutenticazioneApplicativiEsterni))) {
  3059.             nome = nome + "@" + this.getLabelNomeSoggetto(protocollo, sa.getTipoSoggettoProprietario() , sa.getNomeSoggettoProprietario());
  3060.         }
  3061.         de.setValue(nome);
  3062.         e.add(de);

  3063.         // Metadati (profilo + tipo)
  3064.        
  3065.         String tipoLabel = "";
  3066.         boolean isServer = false;
  3067.        
  3068.         if(applicativiServerEnabled || showProtocolli) {
  3069.             de = new DataElement();
  3070.             boolean addMetadati = true;
  3071.            
  3072.             if(applicativiServerEnabled) {
  3073.                 isServer = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo());
  3074.                 tipoLabel = this.getTipo(sa);
  3075.                 if(sa.isUseAsClient()) {
  3076.                     isServer = false;
  3077.                     //tipoLabel = tipoLabel+" / "+ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_TIPO_CLIENT; gia aggiunto in metodo getTipo
  3078.                 }
  3079.                
  3080.                 if(showProtocolli) {
  3081.                     String labelProtocollo =this.getLabelProtocollo(protocollo);
  3082.                     de.setValue(MessageFormat.format(ServiziApplicativiCostanti.MESSAGE_METADATI_SERVIZIO_APPLICATIVO_CON_PROFILO, labelProtocollo, tipoLabel));
  3083.                 } else {
  3084.                     de.setValue(MessageFormat.format(ServiziApplicativiCostanti.MESSAGE_METADATI_SERVIZIO_APPLICATIVO_SENZA_PROFILO, tipoLabel));
  3085.                 }
  3086.             } else {
  3087.                 if(showProtocolli) {
  3088.                     String labelProtocollo =this.getLabelProtocollo(protocollo);
  3089.                     de.setValue(MessageFormat.format(ServiziApplicativiCostanti.MESSAGE_METADATI_SERVIZIO_APPLICATIVO_SOLO_PROFILO, labelProtocollo));
  3090.                 } else {
  3091.                     de.setValue(ServiziApplicativiCostanti.MESSAGE_METADATI_SERVIZIO_APPLICATIVO_VUOTI);
  3092.                     addMetadati = false;
  3093.                 }
  3094.             }
  3095.             de.setType(DataElementType.SUBTITLE);
  3096.            
  3097.             if(addMetadati)
  3098.                 e.add(de);
  3099.         }
  3100.        
  3101.         // Ruoli e' come i tag per ora
  3102.         if(!isServer) {
  3103.             List<String> listaRuoli = this.saCore.servizioApplicativoRuoliList(sa.getId(),new ConsoleSearch(true));
  3104.             for (int j = 0; j < listaRuoli.size(); j++) {
  3105.                 String ruolo = listaRuoli.get(j);
  3106.                
  3107.                 de = new DataElement();
  3108.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RUOLO + "_" + j);
  3109.                 de.setType(DataElementType.BUTTON);
  3110.                 de.setLabel(ruolo);
  3111.                
  3112. /**                 int indexOf = ruoliDisponibili.indexOf(ruolo);
  3113. //                  if(indexOf == -1)
  3114. //                      indexOf = 0;
  3115. //                  
  3116. //                  indexOf = indexOf % CostantiControlStation.NUMERO_GRUPPI_CSS;*/
  3117.                
  3118.                 de.setStyleClass("ruolo-label-info-0"); /**+indexOf);*/
  3119.                
  3120.                 de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_RUOLI_LIST,
  3121.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO, sa.getId()+""));
  3122.                
  3123.                 de.setToolTip(RuoliCostanti.LABEL_RUOLI);
  3124.                
  3125.                 e.add(de);
  3126.             }
  3127.         }
  3128.        
  3129.        
  3130.         IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  3131.         idServizioApplicativo.setNome(sa.getNome());
  3132.         idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  3133.        
  3134.         listaParametriChange.add(new Parameter(CostantiControlStation.PARAMETRO_VERIFICA_CERTIFICATI_FROM_LISTA, "true"));
  3135.         listaParametriChange.add(new Parameter(CostantiControlStation.PARAMETRO_RESET_CACHE_FROM_LISTA, "true"));
  3136.        
  3137.         // In Uso Button
  3138.         this.addInUsoButton(e,
  3139.                 (this.isSoggettoMultitenantSelezionato() ? sa.getNome() : this.getLabelServizioApplicativoConDominioSoggetto(idServizioApplicativo)),
  3140.                 sa.getId()+"", InUsoType.SERVIZIO_APPLICATIVO);
  3141.        
  3142.         // Verifica certificati visualizzato solo se l'applicativo ha credenziali https oppure una configurazione modi di sicurezza
  3143.         if(this.core.isApplicativiVerificaCertificati()) {
  3144.            
  3145.             // Verifica certificati visualizzato solo se il soggetto ha credenziali https
  3146.             boolean ssl = false;
  3147.             InvocazionePorta ip = sa.getInvocazionePorta();
  3148.             for (int i = 0; i < ip.sizeCredenzialiList(); i++) {
  3149.                 Credenziali c = ip.getCredenziali(i);
  3150.                 if(org.openspcoop2.core.config.constants.CredenzialeTipo.SSL.equals(c.getTipo())) {
  3151.                         //&& c.getCertificate()!=null) { non viene ritornato dalla lista
  3152.                     ssl = true;
  3153.                 }
  3154.             }

  3155.             // Verifica configurazione modi di sicurezza
  3156.             boolean modi = this.core.isProfiloModIPA(protocollo);
  3157.             boolean sicurezzaMessaggioModi = false;
  3158.             boolean server = ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo());
  3159.             if(modi){
  3160.                 KeystoreParams keystoreParams = org.openspcoop2.protocol.utils.ModIUtils.getApplicativoKeystoreParams(sa.getProtocolPropertyList());
  3161.                 sicurezzaMessaggioModi = keystoreParams!= null;
  3162.             }
  3163.            
  3164.             if(ssl || sicurezzaMessaggioModi || server) {
  3165.                 this.addVerificaCertificatiButton(e, ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI, listaParametriChange);
  3166.             }
  3167.         }
  3168.        
  3169.         // Verifica connettività
  3170.         if(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo())) {
  3171.             List<Parameter> listaParametriVerificaConnettivitaChange = new ArrayList<>();
  3172.             listaParametriVerificaConnettivitaChange.addAll(listaParametriChange);
  3173.             listaParametriVerificaConnettivitaChange.add(new Parameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTIVITA, "true"));
  3174.             this.addVerificaConnettivitaButton(e, ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI, listaParametriVerificaConnettivitaChange);
  3175.         }
  3176.        
  3177.         // se e' abilitata l'opzione reset cache per elemento, visualizzo il comando nell'elenco dei comandi disponibili nella lista
  3178.         if(this.core.isElenchiVisualizzaComandoResetCacheSingoloElemento()){
  3179.             this.addComandoResetCacheButton(e, (this.isSoggettoMultitenantSelezionato() ? sa.getNome() : this.getLabelServizioApplicativoConDominioSoggetto(idServizioApplicativo)),
  3180.                      ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE, listaParametriChange);
  3181.         }
  3182.        
  3183.         // Proprieta Button
  3184.         /**if(this.existsProprietaOggetto(sa.getProprietaOggetto(), sa.getDescrizione())) {
  3185.          ** la lista non riporta le proprietà. Ma esistono e poi sarà la servlet a gestirlo
  3186.          */
  3187.         this.addProprietaOggettoButton(e, (this.isSoggettoMultitenantSelezionato() ? sa.getNome() : this.getLabelServizioApplicativoConDominioSoggetto(idServizioApplicativo)),
  3188.                 sa.getId()+"", InUsoType.SERVIZIO_APPLICATIVO);
  3189.    
  3190.        
  3191.         return e;
  3192.     }
  3193.    
  3194.     private void setLabelColonne(boolean modalitaCompleta, boolean useIdSogg, boolean multitenant, boolean supportatoAutenticazioneApplicativiEsterni, boolean showProtocolli, boolean supportAsincroni) {
  3195.         if(!modalitaCompleta && !useIdSogg) {
  3196.             List<String> labels = new ArrayList<>();
  3197.             //          labels.add("");//ServiziApplicativiCostanti.LABEL_SA_STATO); // colonna info
  3198.             labels.add(ServiziApplicativiCostanti.LABEL_APPLICATIVI);
  3199.            
  3200.             this.pd.setLabels(labels.toArray(new String[1]));
  3201.         } else {
  3202.             List<String> labels = new ArrayList<>();
  3203.             labels.add(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  3204.             if(!useIdSogg && (
  3205.                     (multitenant && !this.isSoggettoMultitenantSelezionato())
  3206.                     ||
  3207.                     (supportatoAutenticazioneApplicativiEsterni)
  3208.                     )) {
  3209.                 labels.add(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  3210.             }
  3211.             if( showProtocolli ) {
  3212.                 labels.add(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO_COMPACT);
  3213.             }
  3214.             if(this.core.isApplicativiServerEnabled(this)) {
  3215.                 labels.add(ServiziApplicativiCostanti.LABEL_TIPO);
  3216.             }
  3217.             if(!modalitaCompleta) {
  3218.                 labels.add(RuoliCostanti.LABEL_RUOLI);
  3219.             }
  3220.             if(modalitaCompleta) {
  3221.                 labels.add(ServiziApplicativiCostanti.LABEL_TIPOLOGIA);
  3222.             }
  3223.             if (modalitaCompleta){
  3224.                 labels.add(ServiziApplicativiCostanti.LABEL_INVOCAZIONE_SERVIZIO);
  3225.             }
  3226.             if(supportAsincroni && modalitaCompleta){
  3227.                 labels.add(ServiziApplicativiCostanti.LABEL_RISPOSTA_ASINCRONA);
  3228.             }
  3229.             this.pd.setLabels(labels.toArray(new String[1]));
  3230.         }
  3231.     }
  3232.    
  3233.     private String getTipo(ServizioApplicativo sa){
  3234.         return getTipo(sa.getTipo(),sa.isUseAsClient());
  3235.     }
  3236.    
  3237.     private String getTipo(String tipo, boolean useServerAsClient){
  3238.         if(tipo == null)
  3239.             return ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_TIPO_NON_CONFIGURATO;
  3240.        
  3241.         if(tipo.equals(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_CLIENT))
  3242.             return ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_TIPO_CLIENT;
  3243.         else if(tipo.equals(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER)) {
  3244.             if(useServerAsClient) {
  3245.                 return ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_TIPO_SERVER+" / "+ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_TIPO_CLIENT;
  3246.             }
  3247.             else {
  3248.                 return ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_TIPO_SERVER;
  3249.             }
  3250.         }
  3251.        
  3252.         return tipo;
  3253.     }

  3254.    
  3255.     private String getTipologia(ServizioApplicativo sa){
  3256.        
  3257.         String ruoloFruitore = sa.getTipologiaFruizione();
  3258.         String ruoloErogatore = sa.getTipologiaErogazione();
  3259.         TipologiaFruizione tipologiaFruizione = TipologiaFruizione.toEnumConstant(ruoloFruitore);
  3260.         TipologiaErogazione tipologiaErogazione = TipologiaErogazione.toEnumConstant(ruoloErogatore);
  3261.        
  3262.        
  3263.         if(tipologiaFruizione==null){
  3264.            
  3265.             // cerco di comprenderlo dalla configurazione del sa
  3266.             if(sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().sizeCredenzialiList()>0){
  3267.                 tipologiaFruizione = TipologiaFruizione.NORMALE;
  3268.             }
  3269.             else{
  3270.                 tipologiaFruizione = TipologiaFruizione.DISABILITATO;
  3271.             }
  3272.            
  3273.         }
  3274.        
  3275.         if(tipologiaErogazione==null){
  3276.            
  3277.             // cerco di comprenderlo dalla configurazione del sa
  3278.            
  3279.             if(sa.getInvocazioneServizio()!=null){
  3280.                 if(StatoFunzionalita.ABILITATO.equals(sa.getInvocazioneServizio().getGetMessage())){
  3281.                     tipologiaErogazione = TipologiaErogazione.MESSAGE_BOX;
  3282.                 }
  3283.                 else if(sa.getInvocazioneServizio().getConnettore()!=null &&
  3284.                         !TipiConnettore.DISABILITATO.getNome().equals(sa.getInvocazioneServizio().getConnettore().getTipo())){
  3285.                     tipologiaErogazione = TipologiaErogazione.TRASPARENTE;
  3286.                 }
  3287.                 else{
  3288.                     tipologiaErogazione = TipologiaErogazione.DISABILITATO;
  3289.                 }
  3290.             }
  3291.             else{
  3292.                 tipologiaErogazione = TipologiaErogazione.DISABILITATO;
  3293.             }
  3294.         }
  3295.        
  3296.        
  3297.         if(!TipologiaFruizione.DISABILITATO.equals(tipologiaFruizione) &&
  3298.                 !TipologiaErogazione.DISABILITATO.equals(tipologiaErogazione) ){
  3299.             return ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_FRUITORE + "/" + ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_EROGATORE;
  3300.         }
  3301.         else if(!TipologiaFruizione.DISABILITATO.equals(tipologiaFruizione)){
  3302.             return ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_FRUITORE;
  3303.         }
  3304.         else if(!TipologiaErogazione.DISABILITATO.equals(tipologiaErogazione)){
  3305.             return ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_EROGATORE;
  3306.         }
  3307.         else{
  3308.             return ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_RUOLO_NON_CONFIGURATO;
  3309.         }
  3310.        
  3311.     }
  3312.    
  3313.     public void addEndPointToDati(List<DataElement> dati,
  3314.             String idsil,String nomeservizioApplicativo,String sbustamento,String sbustamentoInformazioniProtocolloRichiesta,
  3315.             String getmsg,String usernameGetMsg, String passwordGetMsg,boolean gestioneCredenzialiGetMsg,
  3316.             String invrif,String risprif, String nomeProtocollo, boolean showName,
  3317.             boolean isInvocazioneServizio, boolean showTitleTrattamentoMessaggio,
  3318.             Integer parentSA, ServiceBinding serviceBinding,
  3319.             String accessoDaAPSParametro, boolean servizioApplicativoServerEnabled,
  3320.             String tipoSA, boolean useAsClient,
  3321.             boolean integrationManagerEnabled,
  3322.             TipoOperazione tipoOperazione, String tipoCredenzialiSSLVerificaTuttiICampi, String changepwd,
  3323.             boolean postBackViaPost) throws Exception{
  3324.        
  3325.         if(servizioApplicativoServerEnabled) {
  3326.             this.addEndPointToDatiAsHidden(dati, idsil, nomeservizioApplicativo, sbustamento,
  3327.                     sbustamentoInformazioniProtocolloRichiesta, getmsg, usernameGetMsg, passwordGetMsg,
  3328.                     gestioneCredenzialiGetMsg, invrif, risprif, nomeProtocollo, showName, isInvocazioneServizio,
  3329.                     showTitleTrattamentoMessaggio, parentSA, serviceBinding, accessoDaAPSParametro, servizioApplicativoServerEnabled);
  3330.             return;
  3331.         }

  3332.         IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(nomeProtocollo);
  3333.         IProtocolConfiguration config = protocolFactory.createProtocolConfiguration();
  3334.        
  3335.         DataElement de = new DataElement();
  3336.         de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO);
  3337.         de.setValue(idsil);
  3338.         de.setType(DataElementType.HIDDEN);
  3339.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO);
  3340.         dati.add(de);

  3341.         if(accessoDaAPSParametro!=null && !"".equals(accessoDaAPSParametro)) {
  3342.             de = new DataElement();
  3343.             de.setType(DataElementType.HIDDEN);
  3344.             de.setValue(accessoDaAPSParametro);
  3345.             de.setName(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORE_DA_LISTA_APS);
  3346.             dati.add(de);
  3347.         }
  3348.        
  3349.         boolean showFromConfigurazione = false;
  3350.         if(parentSA!=null && (parentSA.intValue() == ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_CONFIGURAZIONE)) {
  3351.             showFromConfigurazione = true;
  3352.         }
  3353.        
  3354.         if(showName && !showFromConfigurazione){
  3355.            
  3356.             de = new DataElement();
  3357.             de.setLabel(ServiziApplicativiCostanti.LABEL_SERVIZIO_APPLICATIVO);
  3358.             de.setType(DataElementType.TITLE);
  3359.             dati.add(de);
  3360.            
  3361.             de = new DataElement();
  3362.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  3363.             de.setValue(nomeservizioApplicativo);
  3364.             de.setType(DataElementType.TEXT);
  3365.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME_SERVIZIO_APPLICATIVO);
  3366.             de.setSize(this.getSize());
  3367.             dati.add(de);
  3368.         }
  3369.        
  3370.        
  3371.             boolean sbustamentoSoapEnabled = !this.isModalitaStandard() && (serviceBinding == null || serviceBinding.equals(ServiceBinding.SOAP));
  3372.             boolean sbustamentoProtocolloEnabled = !this.isModalitaStandard() &&  config.isSupportoSbustamentoProtocollo();
  3373.            
  3374.             //controllo aggiunta sezione trattamento messaggio appare se c'e' almeno un elemento sui 4 previsti che puo' essere visualizzato.
  3375.             showTitleTrattamentoMessaggio = showTitleTrattamentoMessaggio && (
  3376.                     sbustamentoSoapEnabled ||
  3377.                     sbustamentoProtocolloEnabled ||
  3378.                     this.isModalitaCompleta()          
  3379.                     );
  3380.            
  3381.             if(showTitleTrattamentoMessaggio){
  3382.                 de = new DataElement();
  3383.                 de.setLabel(ServiziApplicativiCostanti.LABEL_TRATTAMENTO_MESSAGGIO);
  3384.                 de.setType(DataElementType.TITLE);
  3385.                 dati.add(de);
  3386.             }
  3387.            
  3388.             String[] tipoSbustamentoSOAP = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3389.             de = new DataElement();
  3390.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_SOAP);
  3391.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_SOAP);
  3392.             if(sbustamentoSoapEnabled) {
  3393.                 de.setType(DataElementType.SELECT);
  3394.                 de.setValues(tipoSbustamentoSOAP);
  3395.                 if(sbustamento==null){
  3396.                     de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3397.                 }else{
  3398.                     de.setSelected(sbustamento);
  3399.                 }
  3400.             } else {
  3401.                 de.setType(DataElementType.HIDDEN);
  3402.                 if(sbustamento==null){
  3403.                     de.setValue(CostantiConfigurazione.DISABILITATO.toString());
  3404.                 }else{
  3405.                     de.setValue(sbustamento);
  3406.                 }
  3407.             }
  3408.            
  3409.             dati.add(de);
  3410.    
  3411.             String[] tipoSbustamentoInformazioniProtocollo = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3412.             de = new DataElement();
  3413.             if(nomeProtocollo!=null && !"".equals(nomeProtocollo)){
  3414.                 de.setLabel(ServiziApplicativiCostanti.getLabelSbustamentoProtocollo(nomeProtocollo));
  3415.             }else{
  3416.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_INFO_PROTOCOLLO_INFO_PROTOCOLLO);
  3417.             }
  3418.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_INFO_PROTOCOLLO_RICHIESTA);
  3419.             if(sbustamentoProtocolloEnabled) {
  3420.                 de.setType(DataElementType.SELECT);
  3421.                 de.setValues(tipoSbustamentoInformazioniProtocollo);
  3422.                 if(sbustamentoInformazioniProtocolloRichiesta==null){
  3423.                     de.setSelected(CostantiConfigurazione.ABILITATO.toString());
  3424.                 }else{
  3425.                     de.setSelected(sbustamentoInformazioniProtocolloRichiesta);
  3426.                 }
  3427.             }
  3428.             else {
  3429.                 de.setType(DataElementType.HIDDEN);
  3430.                 if(sbustamentoInformazioniProtocolloRichiesta==null){
  3431.                     de.setValue(CostantiConfigurazione.ABILITATO.toString());
  3432.                 }else{
  3433.                     de.setValue(sbustamentoInformazioniProtocolloRichiesta);
  3434.                 }
  3435.             }
  3436.             dati.add(de);
  3437.    
  3438.             if (!this.isModalitaCompleta()) {
  3439.                 de = new DataElement();
  3440.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO);
  3441.                 de.setType(DataElementType.HIDDEN);
  3442.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO_RICHIESTA);
  3443.                 de.setValue(invrif);
  3444.                 dati.add(de);
  3445.    
  3446.                 de = new DataElement();
  3447.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_RISPOSTA_PER_RIFERIMENTO);
  3448.                 de.setType(DataElementType.HIDDEN);
  3449.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RISPOSTA_PER_RIFERIMENTO);
  3450.                 de.setValue(risprif);
  3451.                 dati.add(de);
  3452.             } else {
  3453.                 String[] tipoInvRif = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3454.                 de = new DataElement();
  3455.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO);
  3456.                 de.setType(DataElementType.SELECT);
  3457.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO_RICHIESTA);
  3458.                 de.setValues(tipoInvRif);
  3459.                 if(invrif==null){
  3460.                     de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3461.                 }else{
  3462.                     de.setSelected(invrif);
  3463.                 }
  3464.                 dati.add(de);
  3465.    
  3466.                 String[] tipoRispRif = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3467.                 de = new DataElement();
  3468.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_RISPOSTA_PER_RIFERIMENTO);
  3469.                 de.setType(DataElementType.SELECT);
  3470.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RISPOSTA_PER_RIFERIMENTO);
  3471.                 de.setValues(tipoRispRif);
  3472.                 if(risprif==null){
  3473.                     de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3474.                 }else{
  3475.                     de.setSelected(risprif);
  3476.                 }
  3477.                 dati.add(de);
  3478.             }
  3479.            
  3480.            
  3481.             if(integrationManagerEnabled) {
  3482.                 de = new DataElement();
  3483.                 de.setLabel(ServiziApplicativiCostanti.LABEL_SERVIZIO_MESSAGE_BOX);
  3484.                 de.setType(DataElementType.TITLE);
  3485.                 dati.add(de);
  3486.             }
  3487.            
  3488.             String[] tipoGM = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3489.             de = new DataElement();
  3490.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_MESSAGE_BOX);
  3491.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_MESSAGE_BOX);
  3492.            
  3493.             if(integrationManagerEnabled) {
  3494.                 de.setType(DataElementType.SELECT);
  3495.                 de.setValues(tipoGM);
  3496.                 if(getmsg==null){
  3497.                     de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3498.                 }else{
  3499.                     de.setSelected(getmsg);
  3500.                 }
  3501.                 if(postBackViaPost) {
  3502.                     de.setPostBack_viaPOST(true);
  3503.                 }
  3504.                 else {
  3505.                     de.setPostBack(true);
  3506.                 }
  3507.             } else {
  3508.                 de.setType(DataElementType.HIDDEN);
  3509.                 if(getmsg==null){
  3510.                     de.setValue(CostantiConfigurazione.DISABILITATO.toString());
  3511.                 }else{
  3512.                     de.setValue(getmsg);
  3513.                 }
  3514.             }
  3515.             dati.add(de);
  3516.            
  3517.             if(gestioneCredenzialiGetMsg && CostantiConfigurazione.ABILITATO.toString().equals(getmsg)) {
  3518.                 de = new DataElement();
  3519.                 de.setLabel(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  3520.                 de.setValue(StringEscapeUtils.escapeHtml(usernameGetMsg));
  3521.                 if(integrationManagerEnabled) {
  3522.                     de.setType(DataElementType.TEXT_EDIT);
  3523.                 }
  3524.                 else {
  3525.                     de.setType(DataElementType.HIDDEN);
  3526.                 }
  3527.                 de.setName(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  3528.                 de.setSize(this.getSize());
  3529.                 de.setRequired(true);
  3530.                 dati.add(de);
  3531.    
  3532.                 boolean change = TipoOperazione.CHANGE.equals(tipoOperazione);
  3533.                
  3534.                 boolean passwordCifrata = ServletUtils.isCheckBoxEnabled(tipoCredenzialiSSLVerificaTuttiICampi); // tipoCredenzialiSSLVerificaTuttiICampi usata come informazione per sapere se una password e' cifrata o meno
  3535.                 if(change && passwordCifrata) {
  3536.                     try {
  3537.                         long idS = -1;
  3538.                         if(idsil!=null) {
  3539.                             idS = Long.valueOf(idsil);
  3540.                         }
  3541.                         if(idS>0) {
  3542.                             ServizioApplicativo oldSA = this.saCore.getServizioApplicativo(idS);
  3543.                             boolean oldIMState = false;
  3544.                             if(isInvocazioneServizio) {
  3545.                                 oldIMState = oldSA.getInvocazioneServizio()!=null && oldSA.getInvocazioneServizio().getGetMessage()!=null &&
  3546.                                         StatoFunzionalita.ABILITATO.equals(oldSA.getInvocazioneServizio().getGetMessage());
  3547.                             }
  3548.                             else {
  3549.                                 oldIMState = oldSA.getRispostaAsincrona()!=null && oldSA.getRispostaAsincrona().getGetMessage()!=null &&
  3550.                                         StatoFunzionalita.ABILITATO.equals(oldSA.getRispostaAsincrona().getGetMessage());
  3551.                             }
  3552.                             if(!oldIMState) {
  3553.                                 // se prima di questa modifica l'integration manager non era abilitato, devo far impostare la password
  3554.                                 passwordCifrata = false;
  3555.                             }
  3556.                         }
  3557.                     }catch(Throwable t) {}
  3558.                 }
  3559.                
  3560.                 if(change && passwordCifrata ){
  3561.                     DataElement deModifica = new DataElement();
  3562.                     deModifica.setLabel(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_MODIFICA_PASSWORD);
  3563.                     deModifica.setType(DataElementType.CHECKBOX);
  3564.                     deModifica.setName(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CHANGE_PASSWORD);
  3565.                     deModifica.setPostBack(true);
  3566.                     deModifica.setSelected(changepwd);
  3567.                     deModifica.setSize(this.getSize());
  3568.                     dati.add(deModifica);
  3569.                    
  3570.                     DataElement deCifratura = new DataElement();
  3571.                     deCifratura.setName(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI);
  3572.                     deCifratura.setType(DataElementType.HIDDEN);
  3573.                     deCifratura.setValue(tipoCredenzialiSSLVerificaTuttiICampi);
  3574.                     dati.add(deCifratura);
  3575.                    
  3576.                 }
  3577.                
  3578.                 if( (!change) || (!passwordCifrata) || (ServletUtils.isCheckBoxEnabled(changepwd)) ){
  3579.                
  3580.                     de = new DataElement();
  3581.                     if(ServletUtils.isCheckBoxEnabled(changepwd)) {
  3582.                         de.setLabel(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_NUOVA_PASSWORD);
  3583.                     }
  3584.                     else {
  3585.                         de.setLabel(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  3586.                     }
  3587.                     if(change && passwordCifrata && ServletUtils.isCheckBoxEnabled(changepwd) ){
  3588.                         de.setValue(null); // non faccio vedere una password cifrata
  3589.                     }
  3590.                     else{
  3591.                         de.setValue(StringEscapeUtils.escapeHtml(passwordGetMsg));
  3592.                     }
  3593.                     if(integrationManagerEnabled) {
  3594.                         //de.setType(DataElementType.TEXT_EDIT);
  3595.                         // Nuova visualizzazione Password con bottone genera password
  3596.                         de.setType(DataElementType.CRYPT);
  3597.                         de.getPassword().setVisualizzaPasswordChiaro(true);
  3598.                         de.getPassword().setVisualizzaBottoneGeneraPassword(true);
  3599.                        
  3600.                         PasswordVerifier passwordVerifier = null;
  3601.                         boolean isBasicPasswordEnableConstraints = this.connettoriCore.isApplicativiBasicPasswordEnableConstraints();
  3602.                         int lunghezzaPasswordGenerate= this.connettoriCore.getApplicativiBasicLunghezzaPasswordGenerate();
  3603.                         if(isBasicPasswordEnableConstraints) {
  3604.                             passwordVerifier = this.connettoriCore.getApplicativiPasswordVerifier();
  3605.                         }
  3606.                         if(passwordVerifier != null) {
  3607.                             PasswordGenerator passwordGenerator = new PasswordGenerator(passwordVerifier);
  3608.                             de.getPassword().setPasswordGenerator(passwordGenerator);
  3609.                             de.setNote(passwordVerifier.help(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE));
  3610.                         }
  3611.                         de.getPassword().getPasswordGenerator().setDefaultLength(lunghezzaPasswordGenerate);                        
  3612.                     }
  3613.                     else {
  3614.                         de.setType(DataElementType.HIDDEN);
  3615.                     }
  3616.                     de.setName(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  3617.                     de.setSize(this.getSize());
  3618.                     de.setRequired(true);
  3619.                     dati.add(de);
  3620.                    
  3621.                 }
  3622.                 else {
  3623.                    
  3624.                     de = new DataElement();
  3625.                     de.setType(DataElementType.HIDDEN);
  3626.                     de.setName(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  3627.                     de.setValue(StringEscapeUtils.escapeHtml(passwordGetMsg));
  3628.                     dati.add(de);
  3629.                    
  3630.                 }
  3631.                
  3632.                 if(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(tipoSA)) {
  3633.                     de = new DataElement();
  3634.                     de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_UTILIZZABILE_COME_CLIENT);
  3635.                     de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_UTILIZZABILE_COME_CLIENT);
  3636.                     de.setType(DataElementType.CHECKBOX);
  3637.                     de.setSelected(useAsClient);
  3638.                     //de.setPostBack(true); Non abilitare senno spunta il link 'ruoli' prima di aver salvata effettivamente l'opzione usaComeClient
  3639.                     dati.add(de);
  3640.                 }
  3641.             }
  3642.            
  3643.     }
  3644.    
  3645.     public void addEndPointToDatiAsHidden(List<DataElement> dati,
  3646.             String idsil,String nomeservizioApplicativo,String sbustamento,String sbustamentoInformazioniProtocolloRichiesta,
  3647.             String getmsg,String usernameGetMsg, String passwordGetMsg,boolean gestioneCredenzialiGetMsg,
  3648.             String invrif,String risprif, String nomeProtocollo, boolean showName,
  3649.             boolean isInvocazioneServizio, boolean showTitleTrattamentoMessaggio,
  3650.             Integer parentSA, ServiceBinding serviceBinding,
  3651.             String accessoDaAPSParametro, boolean servizioApplicativoServerEnabled) throws Exception{

  3652.         IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(nomeProtocollo);
  3653.         IProtocolConfiguration config = protocolFactory.createProtocolConfiguration();
  3654.        
  3655.         DataElement de = new DataElement();
  3656.         de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO);
  3657.         de.setValue(idsil);
  3658.         de.setType(DataElementType.HIDDEN);
  3659.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO);
  3660.         dati.add(de);

  3661.         if(accessoDaAPSParametro!=null && !"".equals(accessoDaAPSParametro)) {
  3662.             de = new DataElement();
  3663.             de.setType(DataElementType.HIDDEN);
  3664.             de.setValue(accessoDaAPSParametro);
  3665.             de.setName(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_CONNETTORE_DA_LISTA_APS);
  3666.             dati.add(de);
  3667.         }
  3668.        
  3669.         boolean showFromConfigurazione = false;
  3670.         if(parentSA!=null && (parentSA.intValue() == ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_CONFIGURAZIONE)) {
  3671.             showFromConfigurazione = true;
  3672.         }
  3673.        
  3674.         if(showName && !showFromConfigurazione){
  3675.            
  3676. //          de = new DataElement();
  3677. //          de.setLabel(ServiziApplicativiCostanti.LABEL_SERVIZIO_APPLICATIVO);
  3678. //          de.setType(DataElementType.TITLE);
  3679. //          dati.add(de);
  3680.            
  3681.             de = new DataElement();
  3682.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  3683.             de.setValue(nomeservizioApplicativo);
  3684.             de.setType(DataElementType.HIDDEN);
  3685.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME_SERVIZIO_APPLICATIVO);
  3686.             de.setSize(this.getSize());
  3687.             dati.add(de);
  3688.         }
  3689.        
  3690.             boolean sbustamentoSoapEnabled = !this.isModalitaStandard() && (serviceBinding == null || serviceBinding.equals(ServiceBinding.SOAP));
  3691.             boolean sbustamentoProtocolloEnabled = !this.isModalitaStandard() &&  config.isSupportoSbustamentoProtocollo();
  3692.            
  3693.             //controllo aggiunta sezione trattamento messaggio appare se c'e' almeno un elemento sui 4 previsti che puo' essere visualizzato.
  3694.             showTitleTrattamentoMessaggio = showTitleTrattamentoMessaggio && (
  3695.                     sbustamentoSoapEnabled ||
  3696.                     sbustamentoProtocolloEnabled ||
  3697.                     this.isModalitaCompleta()          
  3698.                     );
  3699.            
  3700. //          if(showTitleTrattamentoMessaggio){
  3701. //              de = new DataElement();
  3702. //              de.setLabel(ServiziApplicativiCostanti.LABEL_TRATTAMENTO_MESSAGGIO);
  3703. //              de.setType(DataElementType.TITLE);
  3704. //              dati.add(de);
  3705. //          }
  3706.            
  3707. //          String[] tipoSbustamentoSOAP = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3708.             de = new DataElement();
  3709.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_SOAP);
  3710.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_SOAP);
  3711. //          if(sbustamentoSoapEnabled) {
  3712. //              de.setType(DataElementType.SELECT);
  3713. //              de.setValues(tipoSbustamentoSOAP);
  3714. //              if(sbustamento==null){
  3715. //                  de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3716. //              }else{
  3717. //                  de.setSelected(sbustamento);
  3718. //              }
  3719. //          } else {
  3720.                 de.setType(DataElementType.HIDDEN);
  3721.                 if(sbustamento==null){
  3722.                     de.setValue(CostantiConfigurazione.DISABILITATO.toString());
  3723.                 }else{
  3724.                     de.setValue(sbustamento);
  3725.                 }
  3726. //          }
  3727.            
  3728.             dati.add(de);
  3729.    
  3730. //          String[] tipoSbustamentoInformazioniProtocollo = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3731.             de = new DataElement();
  3732. //          if(nomeProtocollo!=null && !"".equals(nomeProtocollo)){
  3733. //              de.setLabel(ServiziApplicativiCostanti.getLabelSbustamentoProtocollo(nomeProtocollo));
  3734. //          }else{
  3735. //              de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_INFO_PROTOCOLLO_INFO_PROTOCOLLO);
  3736. //          }
  3737.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_SBUSTAMENTO_INFO_PROTOCOLLO_RICHIESTA);
  3738. //          if(sbustamentoProtocolloEnabled) {
  3739. //              de.setType(DataElementType.SELECT);
  3740. //              de.setValues(tipoSbustamentoInformazioniProtocollo);
  3741. //              if(sbustamentoInformazioniProtocolloRichiesta==null){
  3742. //                  de.setSelected(CostantiConfigurazione.ABILITATO.toString());
  3743. //              }else{
  3744. //                  de.setSelected(sbustamentoInformazioniProtocolloRichiesta);
  3745. //              }
  3746. //          }
  3747. //          else {
  3748.                 de.setType(DataElementType.HIDDEN);
  3749.                 if(sbustamentoInformazioniProtocolloRichiesta==null){
  3750.                     de.setValue(CostantiConfigurazione.ABILITATO.toString());
  3751.                 }else{
  3752.                     de.setValue(sbustamentoInformazioniProtocolloRichiesta);
  3753.                 }
  3754. //          }
  3755.             dati.add(de);
  3756.    
  3757. //          if (!this.isModalitaCompleta()) {
  3758.                 de = new DataElement();
  3759.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO);
  3760.                 de.setType(DataElementType.HIDDEN);
  3761.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO_RICHIESTA);
  3762.                 if(invrif==null){
  3763.                     de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3764.                 }else{
  3765.                     de.setSelected(invrif);
  3766.                 }
  3767.                 dati.add(de);
  3768.    
  3769.                 de = new DataElement();
  3770.                 de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_RISPOSTA_PER_RIFERIMENTO);
  3771.                 de.setType(DataElementType.HIDDEN);
  3772.                 de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RISPOSTA_PER_RIFERIMENTO);
  3773.                 if(risprif==null){
  3774.                     de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3775.                 }else{
  3776.                     de.setSelected(risprif);
  3777.                 }
  3778.                 dati.add(de);
  3779. //          } else {
  3780. //              String[] tipoInvRif = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3781. //              de = new DataElement();
  3782. //              de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO);
  3783. //              de.setType(DataElementType.SELECT);
  3784. //              de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_INVIO_PER_RIFERIMENTO_RICHIESTA);
  3785. //              de.setValues(tipoInvRif);
  3786. //              if(invrif==null){
  3787. //                  de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3788. //              }else{
  3789. //                  de.setSelected(invrif);
  3790. //              }
  3791. //              dati.add(de);
  3792. //  
  3793. //              String[] tipoRispRif = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3794. //              de = new DataElement();
  3795. //              de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_RISPOSTA_PER_RIFERIMENTO);
  3796. //              de.setType(DataElementType.SELECT);
  3797. //              de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RISPOSTA_PER_RIFERIMENTO);
  3798. //              de.setValues(tipoRispRif);
  3799. //              if(risprif==null){
  3800. //                  de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3801. //              }else{
  3802. //                  de.setSelected(risprif);
  3803. //              }
  3804. //              dati.add(de);
  3805. //          }
  3806.            
  3807.            
  3808. //          boolean integrationManagerEnabled = !this.isModalitaStandard() && this.core.isIntegrationManagerEnabled();
  3809.            
  3810. //          if(integrationManagerEnabled) {
  3811. //              de = new DataElement();
  3812. //              de.setLabel(ServiziApplicativiCostanti.LABEL_SERVIZIO_MESSAGE_BOX);
  3813. //              de.setType(DataElementType.TITLE);
  3814. //              dati.add(de);
  3815. //          }
  3816.            
  3817. //          String[] tipoGM = { CostantiConfigurazione.ABILITATO.toString(), CostantiConfigurazione.DISABILITATO.toString() };
  3818.             de = new DataElement();
  3819.             de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_MESSAGE_BOX);
  3820.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_MESSAGE_BOX);
  3821.            
  3822. //          if(integrationManagerEnabled) {
  3823. //              de.setType(DataElementType.SELECT);
  3824. //              de.setValues(tipoGM);
  3825. //              if(getmsg==null){
  3826. //                  de.setSelected(CostantiConfigurazione.DISABILITATO.toString());
  3827. //              }else{
  3828. //                  de.setSelected(getmsg);
  3829. //              }
  3830. //              de.setPostBack(true);
  3831. //          } else {
  3832.                 de.setType(DataElementType.HIDDEN);
  3833.                 if(getmsg==null){
  3834.                     de.setValue(CostantiConfigurazione.DISABILITATO.toString());
  3835.                 }else{
  3836.                     de.setValue(getmsg);
  3837.                 }
  3838. //          }
  3839.             dati.add(de);
  3840.            
  3841.             if(gestioneCredenzialiGetMsg && CostantiConfigurazione.ABILITATO.toString().equals(getmsg)) {
  3842.                 de = new DataElement();
  3843.                 de.setLabel(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  3844.                 de.setValue(StringEscapeUtils.escapeHtml(usernameGetMsg));
  3845. //              if(!this.isModalitaStandard()) {
  3846. //                  de.setType(DataElementType.TEXT_EDIT);
  3847. //              }
  3848. //              else {
  3849.                     de.setType(DataElementType.HIDDEN);
  3850. //              }
  3851.                 de.setName(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  3852.                 de.setSize(this.getSize());
  3853. //              de.setRequired(true);
  3854.                 dati.add(de);
  3855.    
  3856.                 de = new DataElement();
  3857.                 de.setLabel(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  3858.                 de.setValue(StringEscapeUtils.escapeHtml(passwordGetMsg));
  3859. //              if(!this.isModalitaStandard()) {
  3860. //                  de.setType(DataElementType.TEXT_EDIT);
  3861. //              }
  3862. //              else {
  3863.                     de.setType(DataElementType.HIDDEN);
  3864. //              }
  3865.                 de.setName(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  3866.                 de.setSize(this.getSize());
  3867. //              de.setRequired(true);
  3868.                 dati.add(de);
  3869.             }
  3870.            
  3871.     }


  3872.     public List<DataElement> addHiddenFieldsToDati(List<DataElement> dati, String provider,
  3873.             String idAsps, String idPorta){

  3874.         DataElement de = new DataElement();
  3875.         de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  3876.         de.setValue(provider);
  3877.         de.setType(DataElementType.HIDDEN);
  3878.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  3879.         dati.add(de);
  3880.        
  3881.         de = new DataElement();
  3882.         de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_ASPS);
  3883.         de.setValue(idAsps);
  3884.         de.setType(DataElementType.HIDDEN);
  3885.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_ASPS);
  3886.         dati.add(de);
  3887.        
  3888.         de = new DataElement();
  3889.         de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_PORTA);
  3890.         de.setValue(idPorta);
  3891.         de.setType(DataElementType.HIDDEN);
  3892.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_PORTA);
  3893.         dati.add(de);

  3894.         return dati;

  3895.     }

  3896.     public void prepareRuoliList(ISearch ricerca, List<String> lista)
  3897.             throws Exception {
  3898.         try {
  3899.             String idsil = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO);
  3900.             String idProvider = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  3901.             String accessDaChangeTmp = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RUOLI_ACCESSO_DA_CHANGE);
  3902.             boolean accessDaChange = ServletUtils.isCheckBoxEnabled(accessDaChangeTmp);
  3903.            
  3904.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione
  3905.             Integer parentSA = ServletUtils.getIntegerAttributeFromSession(ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT, this.session, this.request);
  3906.             if(parentSA == null) parentSA = ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_NONE;
  3907.             Boolean useIdSogg = parentSA == ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_SOGGETTO;

  3908.             Parameter pSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO, idsil);
  3909.            
  3910.             if(useIdSogg){
  3911.                 Parameter pProvider = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, idProvider);
  3912.                 ServletUtils.addListElementIntoSession(this.request, this.session, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_RUOLI,pSA,pProvider );
  3913.             }else
  3914.                 ServletUtils.addListElementIntoSession(this.request, this.session, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_RUOLI,pSA,
  3915.                         new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_RUOLI_ACCESSO_DA_CHANGE, accessDaChangeTmp));
  3916.            
  3917.             int idLista = Liste.SERVIZIO_APPLICATIVO_RUOLI;
  3918.             int limit = ricerca.getPageSize(idLista);
  3919.             int offset = ricerca.getIndexIniziale(idLista);
  3920.             String search = ServletUtils.getSearchFromSession(ricerca, idLista);
  3921.        
  3922.             this.pd.setIndex(offset);
  3923.             this.pd.setPageSize(limit);
  3924.             this.pd.setNumEntries(ricerca.getNumEntries(idLista));
  3925.        
  3926.             // Prendo il servizio applicativo
  3927.             int idSilInt = Integer.parseInt(idsil);
  3928.             ServizioApplicativo sa = this.saCore.getServizioApplicativo(idSilInt);
  3929.             String nomeservizioApplicativo = sa.getNome();      
  3930.            
  3931.             // Prendo il soggetto
  3932.             String tipoENomeSoggetto = null;
  3933.             String nomeProtocollo = null;
  3934.             if(useIdSogg){
  3935.                 if(this.core.isRegistroServiziLocale()){
  3936.                     Soggetto tmpSogg = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(idProvider));
  3937.                     nomeProtocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  3938.                     tipoENomeSoggetto = this.getLabelNomeSoggetto(nomeProtocollo, tmpSogg.getTipo() , tmpSogg.getNome());
  3939.                 }else{
  3940.                     org.openspcoop2.core.config.Soggetto tmpSogg = this.soggettiCore.getSoggetto(Integer.parseInt(idProvider));
  3941.                     nomeProtocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  3942.                     tipoENomeSoggetto = this.getLabelNomeSoggetto(nomeProtocollo, tmpSogg.getTipo() , tmpSogg.getNome());
  3943.                 }
  3944.             }
  3945.        
  3946.             // setto la barra del titolo
  3947.            
  3948.             List<Parameter> listSA = new ArrayList<>();
  3949.             listSA.add(new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, idsil));
  3950.             listSA.add(new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID_SERVIZIO_APPLICATIVO, idsil));
  3951.             if(useIdSogg){
  3952.                 listSA.add(new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, idProvider));
  3953.             }
  3954.            
  3955.             String labelApplicativi = ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI;
  3956.             String labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_DI;
  3957.             if(this.isModalitaCompleta()==false) {
  3958.                 labelApplicativi = ServiziApplicativiCostanti.LABEL_APPLICATIVI;
  3959.                 labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_APPLICATIVI_DI;
  3960.             }
  3961.            
  3962.             if(accessDaChange) {
  3963.                 ServletUtils.setPageDataTitle_ServletFirst(this.pd, labelApplicativi,
  3964.                         ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST);
  3965.                 ServletUtils.appendPageDataTitle(this.pd,
  3966.                         new Parameter(nomeservizioApplicativo,
  3967.                                 ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE,
  3968.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getId()+""),
  3969.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+"")));
  3970.                 ServletUtils.appendPageDataTitle(this.pd,
  3971.                         new Parameter(RuoliCostanti.LABEL_RUOLI, null));
  3972.             }
  3973.             else {
  3974.                
  3975.                 if(!useIdSogg){
  3976.                     if (search.equals("")) {
  3977.                         this.pd.setSearchDescription("");
  3978.                         ServletUtils.setPageDataTitle(this.pd,
  3979.                                 new Parameter(labelApplicativi,ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST),
  3980.                                 new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_RUOLI_DI + nomeservizioApplicativo,
  3981.                                         ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE,
  3982.                                         listSA));
  3983.                     }
  3984.                     else{
  3985.                         ServletUtils.setPageDataTitle(this.pd,
  3986.                                 new Parameter(labelApplicativi,ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST),
  3987.                                 new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_RUOLI_DI + nomeservizioApplicativo,
  3988.                                         ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE,
  3989.                                         listSA),
  3990.                                 new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA,null));  
  3991.                     }
  3992.                 } else {
  3993.                     List<Parameter> lstParam = new ArrayList<>();
  3994.    
  3995.                     lstParam.add(new Parameter(SoggettiCostanti.LABEL_SOGGETTI, SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST));
  3996.                     lstParam.add(new Parameter(labelApplicativiDi + tipoENomeSoggetto,
  3997.                             ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST,
  3998.                             new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,idProvider)));
  3999.    
  4000.                     if(search.equals("")){
  4001.                         this.pd.setSearchDescription("");
  4002.                         lstParam.add(new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_RUOLI_DI + nomeservizioApplicativo,
  4003.                                 ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE,
  4004.                                 listSA));
  4005.                     }else{
  4006.                         lstParam.add(new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_RUOLI_DI + nomeservizioApplicativo,
  4007.                                 ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE,
  4008.                                 listSA));
  4009.                         lstParam.add(new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
  4010.                     }
  4011.    
  4012.                     ServletUtils.setPageDataTitle(this.pd, lstParam.toArray(new Parameter[lstParam.size()]));
  4013.                 }
  4014.             }
  4015.        
  4016.             // controllo eventuali risultati ricerca
  4017.             this.pd.setSearchLabel(CostantiControlStation.LABEL_PARAMETRO_RUOLO);
  4018.             if (!search.equals("")) {
  4019.                 ServletUtils.enabledPageDataSearch(this.pd, RuoliCostanti.LABEL_RUOLI, search);
  4020.             }
  4021.        
  4022.             // setto le label delle colonne
  4023.             String[] labels = {
  4024.                     CostantiControlStation.LABEL_PARAMETRO_RUOLO
  4025.             };
  4026.             this.pd.setLabels(labels);
  4027.        
  4028.             // preparo i dati
  4029.             List<List<DataElement>> dati = new ArrayList<>();
  4030.        
  4031.             if (lista != null) {
  4032.                 Iterator<String> it = lista.iterator();
  4033.                 while (it.hasNext()) {
  4034.                     String ruolo = it.next();
  4035.        
  4036.                     List<DataElement> e = new ArrayList<>();
  4037.        
  4038.                     DataElement de = new DataElement();
  4039.                     de.setValue(ruolo);
  4040.                     de.setIdToRemove(ruolo);
  4041.                    
  4042.                     if(!this.isModalitaCompleta()) {
  4043.                         Ruolo ruoloObj = this.ruoliCore.getRuolo(ruolo);
  4044.                         Parameter pIdRuolo = new Parameter(RuoliCostanti.PARAMETRO_RUOLO_ID, ruoloObj.getId()+"");
  4045.                        
  4046.                         String url = new Parameter("", RuoliCostanti.SERVLET_NAME_RUOLI_CHANGE , pIdRuolo).getValue();
  4047.                         String tooltip = ruolo;
  4048.                        
  4049.                         this.newDataElementVisualizzaInNuovoTab(de, url, tooltip);
  4050.                     }
  4051.                    
  4052.                     e.add(de);
  4053.        
  4054.                     dati.add(e);
  4055.                 }
  4056.             }
  4057.        
  4058.             this.pd.setDati(dati);
  4059.             this.pd.setAddButton(true);
  4060.        
  4061.         } catch (Exception e) {
  4062.             this.logError("Exception: " + e.getMessage(), e);
  4063.             throw new Exception(e.getMessage(),e);
  4064.         }
  4065.     }
  4066.    
  4067.     public List<Parameter> getTitoloSA(Integer parentSA, String idsogg, String idAsps, String idPorta)  throws Exception, DriverRegistroServiziNotFound, DriverRegistroServiziException {
  4068.        
  4069.         if(parentSA==null) {
  4070.             throw new Exception("Param parentSA is null");
  4071.         }
  4072.         if(idsogg==null) {
  4073.             throw new Exception("Param idsogg is null");
  4074.         }
  4075.        
  4076.         String soggettoTitle = null;
  4077.         if(this.core.isRegistroServiziLocale()){
  4078.             Soggetto mySogg = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(idsogg));
  4079.             String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(mySogg.getTipo());
  4080.             soggettoTitle = this.getLabelNomeSoggetto(protocollo, mySogg.getTipo() , mySogg.getNome());
  4081.         }
  4082.         else{
  4083.             org.openspcoop2.core.config.Soggetto mySogg = this.soggettiCore.getSoggetto(Integer.parseInt(idsogg));
  4084.             String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(mySogg.getTipo());
  4085.             soggettoTitle = this.getLabelNomeSoggetto(protocollo, mySogg.getTipo() , mySogg.getNome());
  4086.         }
  4087.         return _getTitoloSA(parentSA, idsogg, idAsps, soggettoTitle,idPorta);
  4088.     }

  4089.     private List<Parameter> _getTitoloSA(Integer parentSA, String idsogg, String idAsps, String soggettoTitle, String idPorta)  throws Exception, DriverRegistroServiziNotFound, DriverRegistroServiziException {
  4090.        
  4091.         if(parentSA==null) {
  4092.             throw new Exception("Param parentSA is null");
  4093.         }
  4094.        
  4095.         List<Parameter> lstParam = new ArrayList<>();
  4096.         switch (parentSA) {
  4097.         case ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_CONFIGURAZIONE:
  4098.             // Prendo il nome e il tipo del servizio
  4099.             AccordoServizioParteSpecifica asps = this.apsCore.getAccordoServizioParteSpecifica(Integer.parseInt(idAsps));
  4100.             String servizioTmpTile = this.getLabelIdServizio(asps);
  4101.             Parameter pIdServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID, asps.getId()+ "");
  4102.             Parameter pNomeServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SERVIZIO, asps.getNome());
  4103.             Parameter pTipoServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SERVIZIO, asps.getTipo());
  4104.             Parameter pIdsoggErogatore = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID_SOGGETTO_EROGATORE, ""+asps.getIdSoggetto());

  4105.             Boolean vistaErogazioni = ServletUtils.getBooleanAttributeFromSession(ErogazioniCostanti.ASPS_EROGAZIONI_ATTRIBUTO_VISTA_EROGAZIONI, this.session, this.request).getValue();
  4106.             if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  4107.                 lstParam.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_EROGAZIONI, ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_LIST));
  4108.                 lstParam.add(new Parameter(servizioTmpTile, ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_CHANGE, pIdServizio,pNomeServizio, pTipoServizio));
  4109.             } else {
  4110.                 lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_LIST));
  4111.             }
  4112.             //lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS_CONFIGURAZIONI_DI + servizioTmpTile,
  4113.             lstParam.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_GESTIONE_CONFIGURAZIONI,
  4114.                     AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_PORTE_APPLICATIVE_LIST ,pIdServizio,pNomeServizio, pTipoServizio, pIdsoggErogatore));
  4115.             break;
  4116.         case ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_SOGGETTO:
  4117.             lstParam.add(new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SOGGETTI, SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST));
  4118.             lstParam.add(new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_DI + soggettoTitle,
  4119.                     ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST,
  4120.                     new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,idsogg)));
  4121.             break;
  4122.         case ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_NONE:
  4123.         default:
  4124.             String labelApplicativi = ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI;
  4125.             if(this.isModalitaCompleta()==false) {
  4126.                 labelApplicativi = ServiziApplicativiCostanti.LABEL_APPLICATIVI;
  4127.             }
  4128.             lstParam.add(new Parameter(labelApplicativi,ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST));
  4129.             break;
  4130.         }
  4131.         return lstParam;
  4132.     }
  4133.    
  4134.     public void impostaSADefaultAlleConfigurazioniCheUsanoConnettoreDelMappingDiDefault(String idAsps, PortaApplicativa pa, ServizioApplicativo sa, List<Object> oggettiDaAggiornare) throws DriverConfigurazioneException, Exception,
  4135.             DriverRegistroServiziNotFound, DriverRegistroServiziException, DriverConfigurazioneNotFound {
  4136.         // se ho modificato un mapping di default aggiorno le porte che hanno il utilizzano la configurazione di default
  4137.         MappingErogazionePortaApplicativa mappingErogazionePortaApplicativa = this.porteApplicativeCore.getMappingErogazionePortaApplicativa(pa);
  4138.         if(mappingErogazionePortaApplicativa.isDefault()) {
  4139.             String nomeSA = sa.getNome();
  4140.             String tipoSA = sa.getTipo();
  4141.             String servizioApplicativoDefault = pa.getServizioApplicativoDefault();
  4142.             List<MappingErogazionePortaApplicativa> listaMappingErogazionePortaApplicativa = new ArrayList<>();
  4143.             // lettura delle configurazioni associate
  4144.             AccordoServizioParteSpecifica asps = this.apsCore.getAccordoServizioParteSpecifica(Integer.parseInt(idAsps));
  4145.             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(asps);
  4146.             listaMappingErogazionePortaApplicativa = this.apsCore.mappingServiziPorteAppList(idServizio,asps.getId(), null);
  4147.             for(MappingErogazionePortaApplicativa mappinErogazione : listaMappingErogazionePortaApplicativa) {
  4148.                 // scarto il default
  4149.                 if(!mappinErogazione.isDefault()) {
  4150.                     PortaApplicativa portaApplicativaTmp = this.porteApplicativeCore.getPortaApplicativa(mappinErogazione.getIdPortaApplicativa());
  4151.                    
  4152.                     // la porta e' da aggiorare se e' default oppure ridefinita e il SA originale e' lo stesso
  4153.                     if((portaApplicativaTmp.getServizioApplicativoDefault() != null && servizioApplicativoDefault != null &&
  4154.                             portaApplicativaTmp.getServizioApplicativoDefault().equals(servizioApplicativoDefault) ) ){
  4155.                          
  4156.                         // prelevo l'associazione con il vecchio servizio applicativo
  4157.                         PortaApplicativaServizioApplicativo paSAtmpInner = null;
  4158.                         for (PortaApplicativaServizioApplicativo paSAInner : portaApplicativaTmp.getServizioApplicativoList()) {
  4159.                             if(paSAInner.getNome().equals(nomeSA)) {
  4160.                                 paSAtmpInner = paSAInner;
  4161.                                 break;
  4162.                             }
  4163.                         }

  4164.                         if(paSAtmpInner!= null) {
  4165.                             // se ho modificato il server che sto utilizzando lo rimuovo
  4166.                             if(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(tipoSA)){
  4167.                                 portaApplicativaTmp.getServizioApplicativoList().remove(paSAtmpInner);  
  4168.                             }
  4169.                         }

  4170.                         // nuovo SA da aggiungere
  4171.                        
  4172.                         PortaApplicativaServizioApplicativo paSAInner = new PortaApplicativaServizioApplicativo();
  4173.                         paSAInner.setNome(servizioApplicativoDefault);
  4174.                         portaApplicativaTmp.getServizioApplicativoList().add(paSAInner);
  4175.                         portaApplicativaTmp.setServizioApplicativoDefault(null);
  4176.                         oggettiDaAggiornare.add(portaApplicativaTmp);
  4177.                      }
  4178.                    
  4179.                 }
  4180.             }
  4181.         }
  4182.     }

  4183.     public void impostaSAServerAlleConfigurazioniCheUsanoConnettoreDelMappingDiDefault(String idAsps, String nuovoSAServer, PortaApplicativa pa, ServizioApplicativo sa,
  4184.             List<Object> oggettiDaAggiornare)
  4185.             throws DriverConfigurazioneException, Exception, DriverRegistroServiziNotFound,
  4186.             DriverRegistroServiziException, DriverConfigurazioneNotFound {
  4187.         // se ho modificato un mapping di default aggiorno le porte che hanno il utilizzano la configurazione di default
  4188.         MappingErogazionePortaApplicativa mappingErogazionePortaApplicativa = this.porteApplicativeCore.getMappingErogazionePortaApplicativa(pa);
  4189.         if(mappingErogazionePortaApplicativa.isDefault()) {
  4190.             String servizioApplicativoDefault = pa.getServizioApplicativoDefault();
  4191.             List<MappingErogazionePortaApplicativa> listaMappingErogazionePortaApplicativa = new ArrayList<>();
  4192.             // lettura delle configurazioni associate
  4193.             AccordoServizioParteSpecifica asps = this.apsCore.getAccordoServizioParteSpecifica(Integer.parseInt(idAsps));
  4194.             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(asps);
  4195.             listaMappingErogazionePortaApplicativa = this.apsCore.mappingServiziPorteAppList(idServizio,asps.getId(), null);
  4196.             for(MappingErogazionePortaApplicativa mappinErogazione : listaMappingErogazionePortaApplicativa) {
  4197.                 // scarto il default
  4198.                 if(!mappinErogazione.isDefault()) {
  4199.                     PortaApplicativa portaApplicativaTmp = this.porteApplicativeCore.getPortaApplicativa(mappinErogazione.getIdPortaApplicativa());
  4200.                    
  4201.                     // la porta e' da aggiorare se e' default oppure ridefinita e il SA originale e' lo stesso
  4202.                     if((portaApplicativaTmp.getServizioApplicativoDefault() == null && servizioApplicativoDefault == null) ||
  4203.                     (portaApplicativaTmp.getServizioApplicativoDefault() != null && servizioApplicativoDefault != null &&
  4204.                             portaApplicativaTmp.getServizioApplicativoDefault().equals(servizioApplicativoDefault) ) ){
  4205.                          
  4206.                         // prelevo l'associazione con il vecchio servizio applicativo
  4207.                         PortaApplicativaServizioApplicativo paSAtmpInner = null;
  4208.                         for (PortaApplicativaServizioApplicativo paSAInner : portaApplicativaTmp.getServizioApplicativoList()) {
  4209.                             if(paSAInner.getNome().equals(sa.getNome())) {
  4210.                                 paSAtmpInner = paSAInner;
  4211.                                 break;
  4212.                             }
  4213.                         }

  4214.                         if(paSAtmpInner!= null) {
  4215.                             // se ho modificato il server che sto utilizzando lo rimuovo
  4216.                             if(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo())){
  4217.                                 portaApplicativaTmp.getServizioApplicativoList().remove(paSAtmpInner);  
  4218.                             } else {
  4219.                                 // SA di default da conservare
  4220.                                 portaApplicativaTmp.getServizioApplicativoList().remove(paSAtmpInner);
  4221.                                 portaApplicativaTmp.setServizioApplicativoDefault(sa.getNome());
  4222.                             }
  4223.                         }

  4224.                         // nuovo SA da aggiungere
  4225.                         PortaApplicativaServizioApplicativo paSAInner = new PortaApplicativaServizioApplicativo();
  4226.                         paSAInner.setNome(nuovoSAServer);
  4227.                         portaApplicativaTmp.getServizioApplicativoList().add(paSAInner);
  4228.                         oggettiDaAggiornare.add(portaApplicativaTmp);
  4229.                      }
  4230.                 }
  4231.             }
  4232.         }
  4233.     }
  4234.    
  4235.     public static String[] toArray(List<IDServizioApplicativoDB> listIDSa) {
  4236.         if(listIDSa==null || listIDSa.isEmpty()) {
  4237.             return null;
  4238.         }
  4239.         String [] l = new String [listIDSa.size()];
  4240.         for (int i = 0; i < listIDSa.size(); i++) {
  4241.             l[i] = listIDSa.get(i).getNome();
  4242.         }
  4243.         return l;
  4244.     }
  4245.    
  4246.     public void prepareServizioApplicativoCredenzialiList(ServizioApplicativo sa, String id) throws Exception {    
  4247.         try {
  4248.             boolean modalitaCompleta = this.isModalitaCompleta();
  4249.            
  4250.             String idProvider = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  4251.            
  4252.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione
  4253.             Integer parentSA = ServletUtils.getIntegerAttributeFromSession(ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT, this.session, this.request);
  4254.             if(parentSA == null) parentSA = ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_NONE;
  4255.             Boolean useIdSogg = parentSA == ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_SOGGETTO;

  4256.             IDSoggetto idSoggettoProprietario = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  4257.             Soggetto soggettoProprietario = this.soggettiCore.getSoggettoRegistro(idSoggettoProprietario);
  4258.             String dominio = this.pddCore.isPddEsterna(soggettoProprietario.getPortaDominio()) ? SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE : SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE;
  4259.        
  4260.             List<Parameter> parametersServletSAChange = new ArrayList<>();
  4261.             Parameter pIdSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getId()+"");
  4262.             parametersServletSAChange.add(pIdSA);
  4263.             Parameter pIdSoggettoSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+"");
  4264.             parametersServletSAChange.add(pIdSoggettoSA);
  4265.             if(dominio != null) {
  4266.                 Parameter pDominio = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO, dominio);
  4267.                 parametersServletSAChange.add(pDominio);
  4268.             }
  4269.            
  4270.             if(useIdSogg){
  4271.                 Parameter pProvider = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, idProvider);
  4272.                 List<Parameter> parametersServletSAChangeProvider = new ArrayList<>();
  4273.                 parametersServletSAChangeProvider.add(pProvider);
  4274.                 parametersServletSAChangeProvider.addAll(parametersServletSAChange);
  4275.                 ServletUtils.addListElementIntoSession(this.request, this.session, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_CREDENZIALI, parametersServletSAChangeProvider.toArray(new Parameter[parametersServletSAChangeProvider.size()]));
  4276.             }else
  4277.                 ServletUtils.addListElementIntoSession(this.request, this.session, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_CREDENZIALI, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()]));

  4278.             // Prendo il soggetto
  4279.             String tmpTitle = null;
  4280.             String protocolloSoggetto = null;
  4281.             boolean supportAsincroni = true;
  4282.             if(useIdSogg){
  4283.                 if(this.core.isRegistroServiziLocale()){
  4284.                     Soggetto tmpSogg = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(idProvider));
  4285.                     protocolloSoggetto = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  4286.                     tmpTitle = this.getLabelNomeSoggetto(protocolloSoggetto, tmpSogg.getTipo() , tmpSogg.getNome());
  4287.                 }else{
  4288.                     org.openspcoop2.core.config.Soggetto tmpSogg = this.soggettiCore.getSoggetto(Integer.parseInt(idProvider));
  4289.                     protocolloSoggetto = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  4290.                     tmpTitle = this.getLabelNomeSoggetto(protocolloSoggetto, tmpSogg.getTipo() , tmpSogg.getNome());
  4291.                 }
  4292.                
  4293.                 List<ServiceBinding> serviceBindingListProtocollo = this.core.getServiceBindingListProtocollo(protocolloSoggetto);
  4294.                 for (ServiceBinding serviceBinding : serviceBindingListProtocollo) {
  4295.                     supportAsincroni = this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(protocolloSoggetto,serviceBinding, ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)
  4296.                             || this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(protocolloSoggetto, serviceBinding, ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
  4297.                 }
  4298.                
  4299.                 if(supportAsincroni==false){
  4300.                     if (this.isModalitaAvanzata()){
  4301.                         supportAsincroni = this.core.isElenchiSAAsincroniNonSupportatiVisualizzaRispostaAsincrona();
  4302.                     }
  4303.                 }
  4304.             }

  4305.             this.pd.setIndex(0);
  4306.             this.pd.setPageSize(sa.getInvocazionePorta().sizeCredenzialiList());
  4307.             this.pd.setNumEntries(sa.getInvocazionePorta().sizeCredenzialiList());

  4308.             // ricerca disattivata
  4309.             ServletUtils.disabledPageDataSearch(this.pd);

  4310.             // setto la barra del titolo
  4311.            
  4312.             String labelApplicativi = ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI;
  4313.             String labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_DI;
  4314.             if(modalitaCompleta==false) {
  4315.                 labelApplicativi = ServiziApplicativiCostanti.LABEL_APPLICATIVI;
  4316.                 labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_APPLICATIVI_DI;
  4317.             }
  4318.            
  4319.             if(!useIdSogg){
  4320.                 ServletUtils.setPageDataTitle(this.pd,
  4321.                         new Parameter(labelApplicativi, ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST),
  4322.                         new Parameter(sa.getNome(), ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()])),
  4323.                         new Parameter(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CERTIFICATI, null)
  4324.                         );
  4325.             } else {
  4326.                 String provider = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  4327.                 ServletUtils.setPageDataTitle(this.pd,
  4328.                         new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SOGGETTI, SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST),
  4329.                         new Parameter(labelApplicativiDi + tmpTitle,
  4330.                                 ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST,
  4331.                                 new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,provider)),                            
  4332.                         new Parameter(sa.getNome(), ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()])),
  4333.                         new Parameter(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CERTIFICATI, null)
  4334.                         );
  4335.             }

  4336.             // setto le label delle colonne
  4337.             List<String> labels = new ArrayList<>();
  4338.            
  4339.             labels.add(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_PRINCIPALE);
  4340.             labels.add(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_SUBJECT);
  4341.             labels.add(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_ISSUER);
  4342.             labels.add(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI);
  4343.             labels.add(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_NOT_BEFORE);
  4344.             labels.add(ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_NOT_AFTER);
  4345.            
  4346.             this.pd.setLabels(labels.toArray(new String[1]));

  4347.             // preparo i dati
  4348.             List<List<DataElement>> dati = new ArrayList<>();
  4349.            
  4350.             List<Credenziali> lista = sa.getInvocazionePorta().getCredenzialiList();

  4351.             int i = 0;
  4352.            
  4353.            
  4354.             if (lista != null) {
  4355.                 Iterator<Credenziali> it = lista.iterator();
  4356.                 while (it.hasNext()) {
  4357.                    
  4358.                     List<DataElement> e = new ArrayList<>();
  4359.                     Credenziali credenziali = it.next();
  4360.                     Certificate cSelezionato = ArchiveLoader.load(credenziali.getCertificate());
  4361.                     String tipoCredenzialiSSLAliasCertificatoIssuer = cSelezionato.getCertificate().getIssuer().getNameNormalized();
  4362.                     String tipoCredenzialiSSLAliasCertificatoSubject = cSelezionato.getCertificate().getSubject().getNameNormalized();
  4363.                     boolean verificaTuttiCampi = credenziali.getCertificateStrictVerification();
  4364.                     Date notBefore = cSelezionato.getCertificate().getNotBefore();
  4365.                     String tipoCredenzialiSSLAliasCertificatoNotBefore = this.getSdfCredenziali().format(notBefore);
  4366.                     Date notAfter = cSelezionato.getCertificate().getNotAfter();
  4367.                     String tipoCredenzialiSSLAliasCertificatoNotAfter = this.getSdfCredenziali().format(notAfter);
  4368.                    
  4369.                     Parameter pIdCredenziale = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_CREDENZIALI_ID, i+"");
  4370.                     List<Parameter> parametersServletCredenzialeChange = new ArrayList<>();
  4371.                     parametersServletCredenzialeChange.add(pIdCredenziale);
  4372.                     parametersServletCredenzialeChange.addAll(parametersServletSAChange);
  4373.                     parametersServletCredenzialeChange.add(new Parameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO_MULTI_AGGIORNA,Costanti.CHECK_BOX_ENABLED));
  4374.                
  4375.                     //  Principale: si/no
  4376.                     DataElement de = new DataElement();
  4377.                     de.setType(DataElementType.TEXT);
  4378.                     de.setValue(i == 0 ? CostantiControlStation.LABEL_SI : CostantiControlStation.LABEL_NO);
  4379.                     de.allineaTdAlCentro();
  4380.                     de.setWidthPx(60);
  4381.                     e.add(de);
  4382.                    
  4383.                     // Subject con link edit
  4384.                     de = new DataElement();
  4385.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CREDENZIALI_CHANGE,
  4386.                             parametersServletCredenzialeChange.toArray(new Parameter[parametersServletCredenzialeChange.size()]));
  4387.                     de.setSize(ConnettoriCostanti.NUMERO_CARATTERI_SUBJECT_DA_VISUALIZZARE_IN_LISTA_CERTIFICATI);
  4388.                     de.setValue(StringEscapeUtils.escapeHtml(tipoCredenzialiSSLAliasCertificatoSubject));
  4389.                     de.setToolTip(StringEscapeUtils.escapeHtml(tipoCredenzialiSSLAliasCertificatoSubject));
  4390.                     de.setIdToRemove(i+"");
  4391.                     e.add(de);
  4392.                    
  4393.                     // Issuer
  4394.                     de = new DataElement();
  4395.                     String issuerValue = StringEscapeUtils.escapeHtml(tipoCredenzialiSSLAliasCertificatoIssuer);
  4396.                     if(issuerValue.length() > ConnettoriCostanti.NUMERO_CARATTERI_SUBJECT_DA_VISUALIZZARE_IN_LISTA_CERTIFICATI) {
  4397.                         issuerValue = issuerValue.substring(0,(ConnettoriCostanti.NUMERO_CARATTERI_SUBJECT_DA_VISUALIZZARE_IN_LISTA_CERTIFICATI-3)) + "...";
  4398.                     }
  4399.                     de.setValue(issuerValue);
  4400.                     de.setToolTip(StringEscapeUtils.escapeHtml(tipoCredenzialiSSLAliasCertificatoIssuer));
  4401.                     e.add(de);
  4402.                    
  4403.                     // verifica tutti i campi
  4404.                     de = new DataElement();
  4405.                     de.setType(DataElementType.TEXT);
  4406.                     de.setValue(verificaTuttiCampi ? ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI_ENABLE :
  4407.                         ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI_DISABLE);
  4408.                     de.allineaTdAlCentro();
  4409.                     de.setWidthPx(70);
  4410.                     e.add(de);
  4411.                    
  4412.                     // not before
  4413.                     de = new DataElement();
  4414.                     if(verificaTuttiCampi) {
  4415.                         de.setValue(tipoCredenzialiSSLAliasCertificatoNotBefore);
  4416.                     }
  4417.                     else {
  4418.                         de.setValue("-");
  4419.                     }
  4420.                     de.setType(DataElementType.TEXT);
  4421.                     de.allineaTdAlCentro();
  4422.                     de.setWidthPx(140);
  4423.                     if(verificaTuttiCampi && notBefore.after(new Date())) {
  4424.                         // bold
  4425.                         de.setLabelStyleClass(Costanti.INPUT_TEXT_BOLD_CSS_CLASS);
  4426.                         de.setWidthPx(150);
  4427.                     }
  4428.                     e.add(de);  
  4429.                    
  4430.                     // not after
  4431.                     de = new DataElement();
  4432.                     if(verificaTuttiCampi) {
  4433.                         de.setValue(tipoCredenzialiSSLAliasCertificatoNotAfter);
  4434.                     }
  4435.                     else {
  4436.                         de.setValue("-");
  4437.                     }
  4438.                     de.setType(DataElementType.TEXT);
  4439.                     de.allineaTdAlCentro();
  4440.                     de.setWidthPx(140);
  4441.                     if(verificaTuttiCampi && notAfter.before(new Date())) {
  4442.                         // bold e rosso
  4443.                         de.setLabelStyleClass(Costanti.INPUT_TEXT_BOLD_RED_CSS_CLASS);
  4444.                         de.setWidthPx(150);
  4445.                     }
  4446.                    
  4447.                     e.add(de);

  4448.                     dati.add(e);
  4449.                     i++;
  4450.                 }
  4451.             }

  4452.             this.pd.setDati(dati);
  4453.             this.pd.setAddButton(true);
  4454.         } catch (Exception e) {
  4455.             this.logError("Exception: " + e.getMessage(), e);
  4456.             throw new Exception(e.getMessage(),e);
  4457.         }
  4458.        
  4459.     }
  4460.    
  4461.     public List<DataElement> addServizioApplicativoHiddenToDati(List<DataElement> dati, String idSA, String idSoggettoSA, String dominio, String nomeSA) throws Exception {
  4462.        
  4463.         DataElement de = new DataElement();
  4464.         de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID);
  4465.         de.setValue(idSA);
  4466.         de.setType(DataElementType.HIDDEN);
  4467.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID);
  4468.         dati.add(de);
  4469.        
  4470.         if(idSoggettoSA != null) {
  4471.             de = new DataElement();
  4472.             de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  4473.             de.setValue(idSoggettoSA);
  4474.             de.setType(DataElementType.HIDDEN);
  4475.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  4476.             dati.add(de);
  4477.         }
  4478.        
  4479.         if(dominio != null) {
  4480.             de = new DataElement();
  4481.             de.setLabel(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO);
  4482.             de.setValue(dominio);
  4483.             de.setType(DataElementType.HIDDEN);
  4484.             de.setName(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO);
  4485.             dati.add(de);
  4486.         }
  4487.        
  4488.         if(nomeSA != null) {
  4489.             de = new DataElement();
  4490.             de.setLabel(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  4491.             de.setValue(nomeSA);
  4492.             de.setType(DataElementType.HIDDEN);
  4493.             de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  4494.             dati.add(de);
  4495.         }
  4496.        
  4497.         return dati;
  4498.     }
  4499.    
  4500.     public boolean servizioApplicativoCredenzialiCertificatiCheckData(TipoOperazione tipoOperazione, long idProvOld, ServizioApplicativo saOld, int idxCertificato, String protocollo, int idxCredenziale) throws Exception {
  4501.         try {
  4502.             String nome = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  4503.             String provider = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  4504.             int newProv = 0;
  4505.             if (provider != null) {
  4506.                 newProv = Integer.parseInt(provider);
  4507.             }
  4508.             String tipoCredenzialiSSLSorgente = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL);
  4509.             if(tipoCredenzialiSSLSorgente == null) {
  4510.                 tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE;
  4511.             }
  4512.             String tipoCredenzialiSSLConfigurazioneManualeSelfSigned= this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_MANUALE_SELF_SIGNED);
  4513.             if (tipoCredenzialiSSLConfigurazioneManualeSelfSigned == null) {
  4514.                 tipoCredenzialiSSLConfigurazioneManualeSelfSigned = Costanti.CHECK_BOX_ENABLED;
  4515.             }
  4516.            
  4517.             String subject = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_SUBJECT);
  4518.             String issuer = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_ISSUER);
  4519.             if("".equals(issuer)) {
  4520.                 issuer = null;
  4521.             }
  4522.            
  4523.             boolean tokenWithHttpsEnabledByConfigSA = false;
  4524.             if(saOld!=null && saOld.getInvocazionePorta()!=null && saOld.getInvocazionePorta().sizeCredenzialiList()>0) {
  4525.                 Credenziali c = saOld.getInvocazionePorta().getCredenziali(0);
  4526.                 if(c!=null && c.getTokenPolicy()!=null && StringUtils.isNotEmpty(c.getTokenPolicy())) {
  4527.                     // se entro in questa servlet sono sicuramente con credenziale ssl, se esiste anche token policy abbiamo la combo
  4528.                     tokenWithHttpsEnabledByConfigSA = true;
  4529.                 }
  4530.             }
  4531.            
  4532.             boolean dominioEsternoModI = false;
  4533.             if(saOld!=null) {
  4534.                 Soggetto soggetto = this.soggettiCore.getSoggettoRegistro(saOld.getIdSoggetto());
  4535.                 dominioEsternoModI = this.isProfiloModIPA(protocollo) && this.pddCore.isPddEsterna(soggetto.getPortaDominio());
  4536.             }
  4537.            
  4538.             String details = "";
  4539.             List<ServizioApplicativo> saList = null;
  4540.             String tipoSsl = null;
  4541.             Certificate cSelezionato = null;
  4542.             boolean strictVerifier = false;
  4543.             if(tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE)) {
  4544.                 saList = this.saCore.servizioApplicativoWithCredenzialiSslList(subject,issuer,
  4545.                         dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  4546.                 tipoSsl = "subject/issuer";
  4547.             }
  4548.             else {
  4549.                
  4550.                 BinaryParameter tipoCredenzialiSSLFileCertificato = this.getBinaryParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO);
  4551.                 String tipoCredenzialiSSLVerificaTuttiICampi = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI);
  4552.                 strictVerifier = ServletUtils.isCheckBoxEnabled(tipoCredenzialiSSLVerificaTuttiICampi);
  4553.                 String tipoCredenzialiSSLTipoArchivioS = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_TIPO_ARCHIVIO);
  4554.                 String tipoCredenzialiSSLFileCertificatoPassword = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO_PASSWORD);
  4555.                 String tipoCredenzialiSSLAliasCertificato = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO);
  4556.                 if (tipoCredenzialiSSLAliasCertificato == null) {
  4557.                     tipoCredenzialiSSLAliasCertificato = "";
  4558.                 }
  4559.                 org.openspcoop2.utils.certificate.ArchiveType tipoCredenzialiSSLTipoArchivio= null;
  4560.                 if(tipoCredenzialiSSLTipoArchivioS == null) {
  4561.                     tipoCredenzialiSSLTipoArchivio = org.openspcoop2.utils.certificate.ArchiveType.CER;
  4562.                 } else {
  4563.                     tipoCredenzialiSSLTipoArchivio = org.openspcoop2.utils.certificate.ArchiveType.valueOf(tipoCredenzialiSSLTipoArchivioS);
  4564.                 }
  4565.                 byte [] archivio = tipoCredenzialiSSLFileCertificato.getValue();
  4566.                 if(TipoOperazione.CHANGE.equals(tipoOperazione) && archivio==null) {
  4567.                     archivio = saOld.getInvocazionePorta().getCredenziali(idxCertificato).getCertificate();
  4568.                 }
  4569.                 if(tipoCredenzialiSSLTipoArchivio.equals(org.openspcoop2.utils.certificate.ArchiveType.CER)) {
  4570.                     cSelezionato = ArchiveLoader.load(archivio);
  4571.                 }else {
  4572.                     cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLTipoArchivio, archivio, tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLFileCertificatoPassword);
  4573.                 }
  4574.                 saList = this.saCore.servizioApplicativoWithCredenzialiSslList(cSelezionato.getCertificate(), strictVerifier,
  4575.                         dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  4576.                 if(!strictVerifier && saList!=null && !saList.isEmpty()) {
  4577.                     List<ServizioApplicativo> saListCheck = this.saCore.servizioApplicativoWithCredenzialiSslList(cSelezionato.getCertificate(), true,
  4578.                             dominioEsternoModI ? ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiModIFirma() : ConfigurazioneFiltroServiziApplicativi.getFiltroApplicativiHttps());
  4579.                     if(saListCheck==null || saListCheck.isEmpty() ) {
  4580.                         details=ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_DETAILS;
  4581.                     }
  4582.                 }
  4583.                 tipoSsl = "certificato";
  4584.                
  4585.             }
  4586.            
  4587.             String portaDominio = null;
  4588.             if(this.core.isRegistroServiziLocale()){
  4589.                 Soggetto soggettoToCheck = tipoOperazione.equals(TipoOperazione.CHANGE) ?
  4590.                         this.soggettiCore.getSoggettoRegistro(idProvOld) : this.soggettiCore.getSoggettoRegistro(newProv);
  4591.                         portaDominio = soggettoToCheck.getPortaDominio();
  4592.             }
  4593.    
  4594.             if(saList!=null &&
  4595.                     !tokenWithHttpsEnabledByConfigSA  // se e' abilitato il token non deve essere controllata l'univocita' del certificato
  4596.                     ) {
  4597.                 for (int i = 0; i < saList.size(); i++) {
  4598.                     ServizioApplicativo sa = saList.get(i);
  4599.    
  4600.                     if(!this.core.isSinglePdD()){
  4601.    
  4602.                         // bugfix #66
  4603.                         // controllo se soggetto appartiene a nal diversi, in tal
  4604.                         // caso e' possibile
  4605.                         // avere stesse credenziali
  4606.                         // Raccolgo informazioni soggetto
  4607.                         Soggetto tmpSoggettoProprietarioSa = this.soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
  4608.    
  4609.                         // se appartengono a nal diversi allora va bene continuo
  4610.                         if (!portaDominio.equals(tmpSoggettoProprietarioSa.getPortaDominio()))
  4611.                             continue;
  4612.    
  4613.                     }
  4614.    
  4615.                     if ((tipoOperazione.equals(TipoOperazione.CHANGE)) && (nome.equals(sa.getNome())) && (idProvOld == sa.getIdSoggetto())) {
  4616.                         continue;
  4617.                     }
  4618.                     if(saOld!=null && tipoOperazione.equals(TipoOperazione.CHANGE) && saOld.getId().longValue() == sa.getId().longValue()) {
  4619.                         continue;
  4620.                     }
  4621.    
  4622.                     // Raccolgo informazioni soggetto
  4623.                     // Messaggio di errore
  4624.                     String labelSoggetto = this.getLabelNomeSoggetto(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  4625.                     this.pd.setMessage("L'applicativo "+sa.getNome()+" (soggetto: "+labelSoggetto+") possiede già le credenziali ssl ("+tipoSsl+") indicate."+details);
  4626.                     return false;
  4627.                 }
  4628.             }
  4629.            
  4630.            
  4631.            
  4632.             if(!tokenWithHttpsEnabledByConfigSA && // se e' abilitato il token non deve essere controllata l'univocita' del certificato)
  4633.                 !this.soggettiCore.isSoggettiApplicativiCredenzialiSslPermitSameCredentials() &&
  4634.                 !dominioEsternoModI) {
  4635.                 // Verifico soggetti
  4636.                
  4637.                 details = "";
  4638.                 Soggetto soggettoAutenticato = null;
  4639.                 List<org.openspcoop2.core.registry.Soggetto> soggettiAutenticati = null;
  4640.                 if(tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE)) {
  4641.            
  4642.                     // recupero soggetto con stesse credenziali
  4643.                     soggettoAutenticato = this.soggettiCore.getSoggettoRegistroAutenticatoSsl(subject, issuer);
  4644.                     tipoSsl = "subject/issuer";
  4645.            
  4646.                 } else {
  4647.                    
  4648.                     soggettiAutenticati = this.soggettiCore.soggettoWithCredenzialiSslList(cSelezionato.getCertificate(), strictVerifier);
  4649.                     if(soggettiAutenticati!=null && !soggettiAutenticati.isEmpty()) {
  4650.                         soggettoAutenticato = soggettiAutenticati.get(0);
  4651.                         if(!strictVerifier) {
  4652.                             List<org.openspcoop2.core.registry.Soggetto> soggettiAutenticatiCheck = this.soggettiCore.soggettoWithCredenzialiSslList(cSelezionato.getCertificate(), true);
  4653.                             if(soggettiAutenticatiCheck==null || soggettiAutenticatiCheck.isEmpty() ) {
  4654.                                 details=ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_DETAILS;
  4655.                             }
  4656.                         }
  4657.                     }
  4658.                     tipoSsl = "certificato";
  4659.                 }
  4660.                
  4661.                 // Messaggio di errore
  4662.                 if(soggettoAutenticato!=null){
  4663.                     String labelSoggettoAutenticato = this.getLabelNomeSoggetto(new IDSoggetto(soggettoAutenticato.getTipo(), soggettoAutenticato.getNome()));
  4664.                     this.pd.setMessage("Il soggetto "+labelSoggettoAutenticato+" possiede già le credenziali ssl ("+tipoSsl+") indicate."+details);
  4665.                     return false;
  4666.                 }
  4667.                
  4668.             }
  4669.            
  4670.            
  4671.             // Verifico che non sia già associato all'applicativo
  4672.            
  4673.             String actionConfirm = this.getParameter(Costanti.PARAMETRO_ACTION_CONFIRM);
  4674.             boolean promuoviInCorso = false;
  4675.             if(actionConfirm != null && actionConfirm.equals(Costanti.PARAMETRO_ACTION_CONFIRM_VALUE_OK)){
  4676.                 promuoviInCorso = true;
  4677.             }
  4678.            
  4679.             String aggiornatoCertificatoPrecaricatoTmp = this.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO_MULTI_AGGIORNA);
  4680.             boolean aggiornatoCertificatoPrecaricato = ServletUtils.isCheckBoxEnabled(aggiornatoCertificatoPrecaricatoTmp);
  4681.            
  4682.             if(!promuoviInCorso && !aggiornatoCertificatoPrecaricato && cSelezionato!=null &&
  4683.                     /**saList!=null && !saList.isEmpty()) {*/
  4684.                     saOld!=null
  4685.                     ) {
  4686.                 // dovrebbe essere 1 grazie al precedente controllo
  4687.                 ServizioApplicativo saCheck = saOld; /** saList.get(0);*/
  4688.                 if(saCheck.getInvocazionePorta()!=null && saCheck.getInvocazionePorta().sizeCredenzialiList()>0) {
  4689.                     int i = 0;
  4690.                     for (Credenziali c : saCheck.getInvocazionePorta().getCredenzialiList()) {
  4691.                         Certificate check = ArchiveLoader.load(c.getCertificate());
  4692.                         if(check.getCertificate().equals(cSelezionato.getCertificate()) && i!=idxCredenziale) {
  4693.                             this.pd.setMessage("Il certificato selezionato risulta già associato all'applicativo");
  4694.                             return false;
  4695.                         }
  4696.                         i++;
  4697.                     }
  4698.                 }
  4699.             }
  4700.            
  4701.             return true;
  4702.    
  4703.         } catch (Exception e) {
  4704.             this.logError("Exception: " + e.getMessage(), e);
  4705.             throw new Exception(e.getMessage(),e);
  4706.         }
  4707.     }
  4708.    
  4709.     public  List<DataElement> addProprietaToDati(TipoOperazione tipoOp, int size, String nome, String valore, List<DataElement> dati) {

  4710.         DataElement de = new DataElement();
  4711.         de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROPRIETA);
  4712.         de.setType(DataElementType.TITLE);
  4713.         dati.add(de);
  4714.        
  4715.         de = new DataElement();
  4716.         de.setLabel(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROP_NOME);
  4717.         de.setValue(nome);
  4718.         if(TipoOperazione.ADD.equals(tipoOp)){
  4719.             de.setType(DataElementType.TEXT_EDIT);
  4720.             de.setRequired(true);
  4721.         }
  4722.         else{
  4723.             de.setType(DataElementType.TEXT);
  4724.         }
  4725.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROP_NOME);
  4726.         de.setSize(size);
  4727.         dati.add(de);

  4728.         de = new DataElement();
  4729.         de.setLabel(CostantiControlStation.LABEL_PARAMETRO_VALORE);
  4730.         de.setName(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROP_VALORE);
  4731.         this.core.getLockUtilities().lockProperty(de, valore);
  4732.         de.setRequired(true);
  4733.         de.setSize(size);
  4734.         dati.add(de);

  4735.         return dati;
  4736.     }
  4737.    
  4738.     public boolean serviziApplicativiProprietaCheckData(TipoOperazione tipoOp) throws DriverControlStationException {
  4739.         try {
  4740.             String id = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID);
  4741.             int idServizioApplicativo = Integer.parseInt(id);
  4742.             String nome = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROP_NOME);
  4743.             String valore = this.getLockedParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROP_VALORE, false);

  4744.             // Campi obbligatori
  4745.             if (nome.equals("") || valore.equals("")) {
  4746.                 String tmpElenco = "";
  4747.                 if (nome.equals("")) {
  4748.                     tmpElenco = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROP_NOME;
  4749.                 }
  4750.                 if (valore.equals("")) {
  4751.                     if (tmpElenco.equals("")) {
  4752.                         tmpElenco = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROP_VALORE;
  4753.                     } else {
  4754.                         tmpElenco = tmpElenco + ", " + ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROP_VALORE;
  4755.                     }
  4756.                 }
  4757.                 this.pd.setMessage(MessageFormat.format(ServiziApplicativiCostanti.MESSAGGIO_ERRORE_DATI_INCOMPLETI_E_NECESSARIO_INDICARE_XX, tmpElenco));
  4758.                 return false;
  4759.             }

  4760.             if (nome.indexOf(" ") != -1) {
  4761.                 this.pd.setMessage(CostantiControlStation.MESSAGGIO_ERRORE_NON_INSERIRE_SPAZI_NEI_CAMPI_DI_TESTO);
  4762.                 return false;
  4763.             }
  4764.             if(!this.checkLength255(nome, ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROP_NOME)) {
  4765.                 return false;
  4766.             }
  4767.            
  4768.             if( !this.core.getDriverBYOKUtilities().isEnabledBYOK() || !this.core.getDriverBYOKUtilities().isWrappedWithAnyPolicy(valore) ){
  4769.                 if (valore.indexOf(" ") != -1) {
  4770.                     this.pd.setMessage(CostantiControlStation.MESSAGGIO_ERRORE_NON_INSERIRE_SPAZI_NEI_CAMPI_DI_TESTO);
  4771.                     return false;
  4772.                 }
  4773.                 if(!this.checkLength4000(valore, ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROP_VALORE)) {
  4774.                     return false;
  4775.                 }
  4776.             }

  4777.             // Se tipoOp = add, controllo che la property non sia gia'
  4778.             // stata
  4779.             // registrata per l'applicativo
  4780.             if (tipoOp.equals(TipoOperazione.ADD)) {
  4781.                 boolean giaRegistrato = false;
  4782.                 ServizioApplicativo sa = this.saCore.getServizioApplicativo(idServizioApplicativo);
  4783.                 String nomeporta = sa.getNome();

  4784.                 for (int i = 0; i < sa.sizeProprietaList(); i++) {
  4785.                     Proprieta tmpProp = sa.getProprieta(i);
  4786.                     if (nome.equals(tmpProp.getNome())) {
  4787.                         giaRegistrato = true;
  4788.                         break;
  4789.                     }
  4790.                 }

  4791.                 if (giaRegistrato) {
  4792.                     this.pd.setMessage(MessageFormat.format(
  4793.                             ServiziApplicativiCostanti.MESSAGGIO_ERRORE_LA_PROPRIETA_XX_E_GIA_STATO_ASSOCIATA_AL_SA_YY, nome,
  4794.                             nomeporta));
  4795.                     return false;
  4796.                 }
  4797.             }

  4798.             return true;
  4799.         } catch (Exception e) {
  4800.             this.logError("Exception: " + e.getMessage(), e);
  4801.             throw new DriverControlStationException(e.getMessage(),e);
  4802.         }
  4803.     }
  4804.    
  4805.     public void prepareServiziApplicativiProprietaList(ServizioApplicativo sa, ConsoleSearch ricerca, List<Proprieta> lista) throws DriverControlStationException {
  4806.         try {
  4807.             boolean modalitaCompleta = this.isModalitaCompleta();
  4808.            
  4809.             String idProvider = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  4810.            
  4811.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione
  4812.             Integer parentSA = ServletUtils.getIntegerAttributeFromSession(ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT, this.session, this.request);
  4813.             if(parentSA == null) parentSA = ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_NONE;
  4814.             Boolean useIdSogg = parentSA == ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_SOGGETTO;

  4815.             IDSoggetto idSoggettoProprietario = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  4816.             Soggetto soggettoProprietario = this.soggettiCore.getSoggettoRegistro(idSoggettoProprietario);
  4817.             String dominio = this.pddCore.isPddEsterna(soggettoProprietario.getPortaDominio()) ? SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE : SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE;
  4818.        
  4819.             List<Parameter> parametersServletSAChange = new ArrayList<>();
  4820.             Parameter pIdSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getId()+"");
  4821.             parametersServletSAChange.add(pIdSA);
  4822.             Parameter pIdSoggettoSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+"");
  4823.             parametersServletSAChange.add(pIdSoggettoSA);
  4824.             if(dominio != null) {
  4825.                 Parameter pDominio = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO, dominio);
  4826.                 parametersServletSAChange.add(pDominio);
  4827.             }
  4828.            
  4829.             if(useIdSogg!=null && useIdSogg.booleanValue()){
  4830.                 Parameter pProvider = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, idProvider);
  4831.                 List<Parameter> parametersServletSAChangeProvider = new ArrayList<>();
  4832.                 parametersServletSAChangeProvider.add(pProvider);
  4833.                 parametersServletSAChangeProvider.addAll(parametersServletSAChange);
  4834.                 ServletUtils.addListElementIntoSession(this.request, this.session, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_PROPRIETA, parametersServletSAChangeProvider.toArray(new Parameter[parametersServletSAChangeProvider.size()]));
  4835.             }else
  4836.                 ServletUtils.addListElementIntoSession(this.request, this.session, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_PROPRIETA, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()]));

  4837.             int idLista = Liste.SERVIZI_APPLICATIVI_PROP;
  4838.             int limit = ricerca.getPageSize(idLista);
  4839.             int offset = ricerca.getIndexIniziale(idLista);
  4840.             String search = ServletUtils.getSearchFromSession(ricerca, idLista);

  4841.             this.pd.setIndex(offset);
  4842.             this.pd.setPageSize(limit);
  4843.             this.pd.setNumEntries(ricerca.getNumEntries(idLista));
  4844.            
  4845.             // Prendo il soggetto
  4846.             String tmpTitle = null;
  4847.             String protocolloSoggetto = null;
  4848.             boolean supportAsincroni = true;
  4849.             if(useIdSogg!=null && useIdSogg.booleanValue()){
  4850.                 if(this.core.isRegistroServiziLocale()){
  4851.                     Soggetto tmpSogg = this.soggettiCore.getSoggettoRegistro(Integer.parseInt(idProvider));
  4852.                     protocolloSoggetto = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  4853.                     tmpTitle = this.getLabelNomeSoggetto(protocolloSoggetto, tmpSogg.getTipo() , tmpSogg.getNome());
  4854.                 }else{
  4855.                     org.openspcoop2.core.config.Soggetto tmpSogg = this.soggettiCore.getSoggetto(Integer.parseInt(idProvider));
  4856.                     protocolloSoggetto = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  4857.                     tmpTitle = this.getLabelNomeSoggetto(protocolloSoggetto, tmpSogg.getTipo() , tmpSogg.getNome());
  4858.                 }
  4859.                
  4860.                 List<ServiceBinding> serviceBindingListProtocollo = this.core.getServiceBindingListProtocollo(protocolloSoggetto);
  4861.                 for (ServiceBinding serviceBinding : serviceBindingListProtocollo) {
  4862.                     supportAsincroni = this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(protocolloSoggetto,serviceBinding, ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)
  4863.                             || this.core.isProfiloDiCollaborazioneSupportatoDalProtocollo(protocolloSoggetto, serviceBinding, ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
  4864.                 }
  4865.                
  4866.                 if(!supportAsincroni &&
  4867.                     this.isModalitaAvanzata()){
  4868.                     supportAsincroni = this.core.isElenchiSAAsincroniNonSupportatiVisualizzaRispostaAsincrona();
  4869.                 }
  4870.             }
  4871.             if(supportAsincroni) {
  4872.                 // nop
  4873.             }
  4874.            
  4875.             // setto la barra del titolo
  4876.             String labelApplicativi = ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI;
  4877.             String labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_DI;
  4878.             if(!modalitaCompleta) {
  4879.                 labelApplicativi = ServiziApplicativiCostanti.LABEL_APPLICATIVI;
  4880.                 labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_APPLICATIVI_DI;
  4881.             }
  4882.            
  4883.             List<Parameter> lstParam = new ArrayList<>();
  4884.             if(useIdSogg==null || !useIdSogg.booleanValue()){
  4885.                 lstParam.add(new Parameter(labelApplicativi, ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST));
  4886.                 lstParam.add(new Parameter(sa.getNome(), ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()])));
  4887.             } else {
  4888.                 String provider = this.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  4889.                 lstParam.add(new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SOGGETTI, SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST));
  4890.                 lstParam.add(new Parameter(labelApplicativiDi + tmpTitle, ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST, new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,provider)));
  4891.                 lstParam.add(new Parameter(sa.getNome(), ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()])));
  4892.             }

  4893.             this.pd.setSearchLabel(PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_NOME);
  4894.             if(search.equals("")){
  4895.                 this.pd.setSearchDescription("");
  4896.                 lstParam.add(new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROPRIETA, null));
  4897.             }else{
  4898.                 lstParam.add(new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROPRIETA,
  4899.                         ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_PROPRIETA_LIST, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()])));
  4900.                 lstParam.add(new Parameter(PorteApplicativeCostanti.LABEL_PORTE_APPLICATIVE_RISULTATI_RICERCA, null));
  4901.             }

  4902.             // setto la barra del titolo
  4903.             ServletUtils.setPageDataTitle(this.pd, lstParam.toArray(new Parameter[lstParam.size()]));

  4904.             // controllo eventuali risultati ricerca
  4905.             if (!search.equals("")) {
  4906.                 ServletUtils.enabledPageDataSearch(this.pd, ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROPRIETA, search);
  4907.             }

  4908.             // setto le label delle colonne
  4909.             String valueLabel = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROP_VALORE;
  4910.             String[] labels = { ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_PROP_NOME, valueLabel };
  4911.             this.pd.setLabels(labels);

  4912.             // preparo i dati
  4913.             List<List<DataElement>> dati = new ArrayList<>();

  4914.             if (lista != null) {
  4915.                 Iterator<Proprieta> it = lista.iterator();
  4916.                 while (it.hasNext()) {
  4917.                     Proprieta ssp = it.next();

  4918.                     List<DataElement> e = new ArrayList<>();

  4919.                     Parameter pNomeProprieta = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROP_NOME, ssp.getNome());
  4920.                     List<Parameter> parametersServletProprietaChange = new ArrayList<>();
  4921.                     parametersServletProprietaChange.add(pNomeProprieta);
  4922.                     parametersServletProprietaChange.addAll(parametersServletSAChange);
  4923.                
  4924.                     DataElement de = new DataElement();
  4925.                     de.setUrl(ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_PROPRIETA_CHANGE,
  4926.                             parametersServletProprietaChange.toArray(new Parameter[parametersServletProprietaChange.size()]));
  4927.                     de.setValue(ssp.getNome());
  4928.                     de.setIdToRemove(ssp.getNome());
  4929.                     e.add(de);

  4930.                     de = new DataElement();
  4931.                     if(ssp.getValore()!=null) {
  4932.                         if(StringUtils.isNotEmpty(ssp.getValore()) &&
  4933.                                 BYOKManager.isEnabledBYOK() &&
  4934.                                 this.core.getDriverBYOKUtilities().isWrappedWithAnyPolicy(ssp.getValore())) {
  4935.                             de.setValue(CostantiControlStation.VALORE_CIFRATO);
  4936.                         }
  4937.                         else {
  4938.                             de.setValue(ssp.getValore());
  4939.                         }
  4940.                     }
  4941.                     e.add(de);

  4942.                     dati.add(e);
  4943.                 }
  4944.             }

  4945.             this.pd.setDati(dati);
  4946.             this.pd.setAddButton(true);

  4947.         } catch (Exception e) {
  4948.             this.logError("Exception: " + e.getMessage(), e);
  4949.             throw new DriverControlStationException(e.getMessage(),e);
  4950.         }
  4951.     }

  4952.     public void addDescrizioneVerificaConnettivitaToDati(List<DataElement> dati, Connettore connettore,
  4953.             String server, String aliasConnettore) throws Exception {
  4954.                        
  4955.         List<Parameter> downloadCertServerParameters = new ArrayList<>();
  4956.        
  4957.         downloadCertServerParameters.add(new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_ID_CONNETTORE, connettore.getId().longValue()+""));
  4958.        
  4959.         this.addDescrizioneVerificaConnettivitaToDati(dati, connettore,
  4960.                 server, false, aliasConnettore,
  4961.                 downloadCertServerParameters,
  4962.                 true, false);
  4963.        
  4964.     }
  4965. }