ApplicativiApiHelper.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.core.config.rs.server.api.impl.applicativi;

  21. import java.lang.reflect.InvocationTargetException;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.stream.Collectors;

  27. import org.apache.commons.lang.StringUtils;
  28. import org.openspcoop2.core.byok.BYOKUtilities;
  29. import org.openspcoop2.core.config.Connettore;
  30. import org.openspcoop2.core.config.Credenziali;
  31. import org.openspcoop2.core.config.InvocazioneCredenziali;
  32. import org.openspcoop2.core.config.InvocazionePorta;
  33. import org.openspcoop2.core.config.InvocazionePortaGestioneErrore;
  34. import org.openspcoop2.core.config.InvocazioneServizio;
  35. import org.openspcoop2.core.config.PortaApplicativa;
  36. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  37. import org.openspcoop2.core.config.PortaDelegata;
  38. import org.openspcoop2.core.config.PortaDelegataServizioApplicativo;
  39. import org.openspcoop2.core.config.RispostaAsincrona;
  40. import org.openspcoop2.core.config.Ruolo;
  41. import org.openspcoop2.core.config.ServizioApplicativo;
  42. import org.openspcoop2.core.config.ServizioApplicativoRuoli;
  43. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  44. import org.openspcoop2.core.config.constants.CredenzialeTipo;
  45. import org.openspcoop2.core.config.constants.FaultIntegrazioneTipo;
  46. import org.openspcoop2.core.config.constants.InvocazioneServizioTipoAutenticazione;
  47. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  48. import org.openspcoop2.core.config.constants.TipologiaErogazione;
  49. import org.openspcoop2.core.config.constants.TipologiaFruizione;
  50. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  51. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  52. import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
  53. import org.openspcoop2.core.config.rs.server.api.impl.ApiKeyInfo;
  54. import org.openspcoop2.core.config.rs.server.api.impl.Helper;
  55. import org.openspcoop2.core.config.rs.server.api.impl.HttpRequestWrapper;
  56. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ConnettoreAPIHelper;
  57. import org.openspcoop2.core.config.rs.server.config.ServerProperties;
  58. import org.openspcoop2.core.config.rs.server.model.Applicativo;
  59. import org.openspcoop2.core.config.rs.server.model.ApplicativoItem;
  60. import org.openspcoop2.core.config.rs.server.model.ApplicativoServer;
  61. import org.openspcoop2.core.config.rs.server.model.ApplicativoServerItem;
  62. import org.openspcoop2.core.config.rs.server.model.AuthenticationApiKey;
  63. import org.openspcoop2.core.config.rs.server.model.AuthenticationHttps;
  64. import org.openspcoop2.core.config.rs.server.model.BaseCredenziali;
  65. import org.openspcoop2.core.config.rs.server.model.ModalitaAccessoEnum;
  66. import org.openspcoop2.core.config.rs.server.model.OneOfBaseCredenzialiCredenziali;
  67. import org.openspcoop2.core.config.rs.server.model.Proprieta4000;
  68. import org.openspcoop2.core.config.rs.server.model.Proprieta4000OpzioneCifratura;
  69. import org.openspcoop2.core.id.IDPortaDelegata;
  70. import org.openspcoop2.core.id.IDServizioApplicativo;
  71. import org.openspcoop2.core.id.IDSoggetto;
  72. import org.openspcoop2.core.registry.Soggetto;
  73. import org.openspcoop2.core.registry.constants.RuoloContesto;
  74. import org.openspcoop2.core.registry.constants.RuoloTipologia;
  75. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  76. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  77. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  78. import org.openspcoop2.pdd.core.autenticazione.ApiKey;
  79. import org.openspcoop2.pdd.core.autenticazione.ApiKeyUtilities;
  80. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  81. import org.openspcoop2.protocol.sdk.ProtocolException;
  82. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  83. import org.openspcoop2.protocol.sdk.properties.AbstractProperty;
  84. import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
  85. import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
  86. import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
  87. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  88. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  89. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  90. import org.openspcoop2.utils.UtilsException;
  91. import org.openspcoop2.utils.regexp.RegularExpressionEngine;
  92. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  93. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  94. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  95. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  96. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  97. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
  98. import org.openspcoop2.web.ctrlstat.servlet.ConsoleHelper;
  99. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  100. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  101. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  102. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCostanti;
  103. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  104. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  105. /**
  106.  * ApplicativiApiHelper
  107.  *
  108.  * @author $Author$
  109.  * @version $Rev$, $Date$
  110.  *
  111.  */
  112. public class ApplicativiApiHelper {
  113.    
  114.     public static void validateCredentials(OneOfBaseCredenzialiCredenziali creds, boolean dominioInterno, boolean profiloModi) throws Exception {
  115.         if(creds!=null && creds instanceof AuthenticationHttps) {
  116.             AuthenticationHttps https = (AuthenticationHttps) creds;
  117.             if(https.getToken()!=null && (dominioInterno || !profiloModi)) {
  118.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è possibile definire anche una configurazione 'token' alle credenziali di tipo '"+creds.getModalitaAccesso()+"' se l'applicativo non è di profilo ModI e di dominio esterno");
  119.             }
  120.         }
  121.     }

  122.     public static void overrideSAParameters(HttpRequestWrapper wrap, ConsoleHelper consoleHelper, ServizioApplicativo sa, Applicativo applicativo,
  123.             ApiKeyInfo apiKeyInfo, boolean updateKey) {
  124.         overrideSAParameters(wrap, consoleHelper, sa, applicativo.getCredenziali(),
  125.                 apiKeyInfo, updateKey);
  126.     }
  127.     public static void overrideSAParameters(HttpRequestWrapper wrap, ConsoleHelper consoleHelper, ServizioApplicativo sa, OneOfBaseCredenzialiCredenziali credenzialiApiRest,
  128.             ApiKeyInfo apiKeyInfo, boolean updateKey) {
  129.         Credenziali credenziali = sa.getInvocazionePorta().getCredenziali(0);
  130.        
  131.         wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME, sa.getNome());
  132.         wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto());
  133.         wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT, ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP);
  134.        
  135.         wrap.overrideParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE, credenziali.getTipo().toString());
  136.         if(CredenzialeTipo.SSL.equals(credenziali.getTipo())){
  137.             if(credenziali.getTokenPolicy()!=null && StringUtils.isNotEmpty(credenziali.getTokenPolicy())){
  138.                 wrap.overrideParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE,  ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL_E_TOKEN_OAUTH);
  139.             }
  140.         }
  141.        
  142.         if(credenzialiApiRest!=null) {
  143.            
  144.             Helper.overrideAuthParams(wrap, consoleHelper, credenzialiApiRest,
  145.                     apiKeyInfo, updateKey);
  146.         }
  147.     }
  148.    
  149.     public static void overrideSAParametersApplicativoServer(HttpRequestWrapper wrap, ConsoleHelper consoleHelper, ServizioApplicativo sa, boolean updateKey) {
  150. //      Credenziali credenziali = sa.getInvocazionePorta().getCredenziali(0);
  151.        
  152.         wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_NOME, sa.getNome());
  153.         wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto());
  154.         wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_FAULT, ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP);
  155.        
  156. //      wrap.overrideParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE, credenziali.getTipo().toString());
  157.        
  158.     }
  159.    
  160.    
  161.     public static ServizioApplicativo applicativoToServizioApplicativo(
  162.             ApplicativoServer applicativo,
  163.             String tipoProtocollo,
  164.             String soggetto,
  165.             ControlStationCore stationCore) throws UtilsException, DriverControlStationException, ProtocolException, DriverRegistroServiziException, DriverRegistroServiziNotFound {

  166.         ServerProperties serverProperties = ServerProperties.getInstance();
  167.    
  168.         if(stationCore!=null) {
  169.             // nop
  170.         }
  171.        
  172.         ControlStationCore core = new ControlStationCore(true, serverProperties.getConfDirectory(),tipoProtocollo);
  173.         SoggettiCore soggettiCore = new SoggettiCore(core);

  174.         String tipoSoggetto = ProtocolFactoryManager.getInstance().getDefaultOrganizationTypes().get(tipoProtocollo);
  175.         IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto,soggetto);
  176.         Soggetto soggettoRegistro = soggettiCore.getSoggettoRegistro(idSoggetto);
  177.        
  178.    
  179.         //soggettoRegistro.get
  180.         ServizioApplicativo sa = new ServizioApplicativo();
  181.    
  182.         sa.setDescrizione(applicativo.getDescrizione());
  183.        
  184.         sa.setNome(applicativo.getNome());
  185.         sa.setTipologiaFruizione(TipologiaFruizione.NORMALE.getValue());
  186.         sa.setTipo(CostantiConfigurazione.SERVER);
  187.         sa.setTipologiaErogazione(TipologiaErogazione.DISABILITATO.getValue());
  188.        
  189.         //Inseriamo il soggetto del registro locale
  190.         sa.setIdSoggetto(soggettoRegistro.getId());
  191.         sa.setNomeSoggettoProprietario(soggettoRegistro.getNome());
  192.         sa.setTipoSoggettoProprietario(soggettoRegistro.getTipo());    
  193.        
  194.         // *** risposta asinc ***
  195.         InvocazioneCredenziali credenzialiInvocazione = new InvocazioneCredenziali();
  196.         credenzialiInvocazione.setUser("");
  197.         credenzialiInvocazione.setPassword("");
  198.        
  199.         RispostaAsincrona rispostaAsinc = new RispostaAsincrona();
  200.         rispostaAsinc.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
  201.         rispostaAsinc.setCredenziali(credenzialiInvocazione);
  202.         rispostaAsinc.setGetMessage(CostantiConfigurazione.DISABILITATO);
  203.    
  204.         sa.setRispostaAsincrona(rispostaAsinc);
  205.        
  206.         InvocazioneServizio invServizio = new InvocazioneServizio();
  207.         invServizio.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
  208.         invServizio.setCredenziali(credenzialiInvocazione);
  209.         invServizio.setGetMessage(CostantiConfigurazione.DISABILITATO);
  210.        
  211.         invServizio.setConnettore(new Connettore());
  212.        
  213.         sa.setInvocazioneServizio(invServizio);
  214.        
  215.         // *** Invocazione Porta ***
  216.         InvocazionePorta invocazionePorta = new InvocazionePorta();
  217.         //      List<Credenziali> credenziali = credenzialiFromAuth(applicativo.getCredenziali(), keyInfo);
  218. //
  219. //      invocazionePorta.getCredenzialiList().add(credenziali);
  220.        
  221.         //Imposto i ruoli
  222. //      FiltroRicercaRuoli filtroRuoli = new FiltroRicercaRuoli();
  223. //      filtroRuoli.setContesto(RuoloContesto.QUALSIASI); // gli applicativi possono essere usati anche nelle erogazioni.
  224. //      filtroRuoli.setTipologia(RuoloTipologia.INTERNO);
  225. //  
  226. //      List<String> allRuoli = stationCore.getAllRuoli(filtroRuoli);
  227. //      final ServizioApplicativoRuoli ruoli = invocazionePorta.getRuoli() == null ? new ServizioApplicativoRuoli() : invocazionePorta.getRuoli();
  228. //      
  229. //      if (applicativo.getRuoli() != null) {
  230. //          applicativo.getRuoli().forEach( nome -> {
  231. //              
  232. //              if (!allRuoli.contains(nome)) {
  233. //                  throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo di nome " + nome + " non è presente o assegnabile al servizio applicativo.");
  234. //              }
  235. //              Ruolo r = new Ruolo();
  236. //              r.setNome(nome);
  237. //              ruoli.addRuolo(r);
  238. //          });
  239. //      }
  240. //      invocazionePorta.setRuoli(ruoli);
  241.            
  242.         final String fault = ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP;
  243.        
  244.         InvocazionePortaGestioneErrore ipge = new InvocazionePortaGestioneErrore();
  245.         ipge.setFault(FaultIntegrazioneTipo.toEnumConstant(fault));
  246.         invocazionePorta.setGestioneErrore(ipge);
  247.        
  248.         invocazionePorta.setSbustamentoInformazioniProtocollo(StatoFunzionalita.toEnumConstant(""));

  249.         sa.setInvocazionePorta(invocazionePorta);
  250.        
  251.         // *** proprieta ***
  252.         if(applicativo.getProprieta()!=null && !applicativo.getProprieta().isEmpty()) {
  253.             for (Proprieta4000 proprieta : applicativo.getProprieta()) {
  254.                 org.openspcoop2.core.config.Proprieta pConfig = new org.openspcoop2.core.config.Proprieta();
  255.                 pConfig.setNome(proprieta.getNome());
  256.                 pConfig.setValore(proprieta.getValore());
  257.                 sa.addProprieta(pConfig);
  258.             }
  259.         }
  260.        
  261.         return sa;

  262.     }
  263.    
  264.    
  265.     public static ServizioApplicativo applicativoToServizioApplicativo(
  266.             Applicativo applicativo,
  267.             String tipoProtocollo,
  268.             String soggetto,
  269.             ControlStationCore stationCore,
  270.             ApiKeyInfo keyInfo,
  271.             boolean useEncryptEngine) throws UtilsException, DriverControlStationException, ProtocolException, DriverRegistroServiziException, DriverRegistroServiziNotFound, IllegalAccessException, InvocationTargetException, InstantiationException {

  272.         ServerProperties serverProperties = ServerProperties.getInstance();
  273.    
  274.        
  275.         ControlStationCore core = new ControlStationCore(true, serverProperties.getConfDirectory(),tipoProtocollo);
  276.         SoggettiCore soggettiCore = new SoggettiCore(core);

  277.         String tipoSoggetto = ProtocolFactoryManager.getInstance().getDefaultOrganizationTypes().get(tipoProtocollo);
  278.         IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto,soggetto);
  279.         Soggetto soggettoRegistro = soggettiCore.getSoggettoRegistro(idSoggetto);
  280.        
  281.    
  282.         //soggettoRegistro.get
  283.         ServizioApplicativo sa = new ServizioApplicativo();
  284.    
  285.         sa.setDescrizione(applicativo.getDescrizione());
  286.        
  287.         sa.setNome(applicativo.getNome());
  288.         sa.setTipologiaFruizione(TipologiaFruizione.NORMALE.getValue());
  289.         sa.setTipo(CostantiConfigurazione.CLIENT);
  290.         sa.setTipologiaErogazione(TipologiaErogazione.DISABILITATO.getValue());
  291.        
  292.         //Inseriamo il soggetto del registro locale
  293.         sa.setIdSoggetto(soggettoRegistro.getId());
  294.         sa.setNomeSoggettoProprietario(soggettoRegistro.getNome());
  295.         sa.setTipoSoggettoProprietario(soggettoRegistro.getTipo());    
  296.        
  297.         // *** risposta asinc ***
  298.         InvocazioneCredenziali credenzialiInvocazione = new InvocazioneCredenziali();
  299.         credenzialiInvocazione.setUser("");
  300.         credenzialiInvocazione.setPassword("");
  301.        
  302.         RispostaAsincrona rispostaAsinc = new RispostaAsincrona();
  303.         rispostaAsinc.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
  304.         rispostaAsinc.setCredenziali(credenzialiInvocazione);
  305.         rispostaAsinc.setGetMessage(CostantiConfigurazione.DISABILITATO);
  306.    
  307.         sa.setRispostaAsincrona(rispostaAsinc);
  308.        
  309.         InvocazioneServizio invServizio = new InvocazioneServizio();
  310.         invServizio.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
  311.         invServizio.setCredenziali(credenzialiInvocazione);
  312.         invServizio.setGetMessage(CostantiConfigurazione.DISABILITATO);
  313.        
  314.         sa.setInvocazioneServizio(invServizio);
  315.        
  316.         // *** Invocazione Porta ***
  317.         InvocazionePorta invocazionePorta = new InvocazionePorta();
  318.         List<Credenziali> credenziali = credenzialiFromAuth(applicativo.getCredenziali(), keyInfo);

  319.         invocazionePorta.getCredenzialiList().addAll(credenziali);
  320.        
  321.         //Imposto i ruoli
  322.         FiltroRicercaRuoli filtroRuoli = new FiltroRicercaRuoli();
  323.         filtroRuoli.setContesto(RuoloContesto.QUALSIASI); // gli applicativi possono essere usati anche nelle erogazioni.
  324.         filtroRuoli.setTipologia(RuoloTipologia.INTERNO);
  325.    
  326.         List<String> allRuoli = stationCore.getAllRuoli(filtroRuoli);
  327.         final ServizioApplicativoRuoli ruoli = invocazionePorta.getRuoli() == null ? new ServizioApplicativoRuoli() : invocazionePorta.getRuoli();
  328.        
  329.         if (applicativo.getRuoli() != null) {
  330.             applicativo.getRuoli().forEach( nome -> {
  331.                
  332.                 if (!allRuoli.contains(nome)) {
  333.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il ruolo di nome " + nome + " non è presente o assegnabile al servizio applicativo.");
  334.                 }
  335.                 Ruolo r = new Ruolo();
  336.                 r.setNome(nome);
  337.                 ruoli.addRuolo(r);
  338.             });
  339.         }
  340.         invocazionePorta.setRuoli(ruoli);
  341.            
  342.         final String fault = ServiziApplicativiCostanti.SERVIZI_APPLICATIVI_FAULT_SOAP;
  343.        
  344.         InvocazionePortaGestioneErrore ipge = new InvocazionePortaGestioneErrore();
  345.         ipge.setFault(FaultIntegrazioneTipo.toEnumConstant(fault));
  346.         invocazionePorta.setGestioneErrore(ipge);
  347.        
  348.         invocazionePorta.setSbustamentoInformazioniProtocollo(StatoFunzionalita.toEnumConstant(""));

  349.         sa.setInvocazionePorta(invocazionePorta);
  350.        
  351.         // *** proprieta ***
  352.         if(applicativo.getProprieta()!=null && !applicativo.getProprieta().isEmpty()) {
  353.             for (Proprieta4000OpzioneCifratura proprieta : applicativo.getProprieta()) {
  354.                 org.openspcoop2.core.config.Proprieta pConfig = new org.openspcoop2.core.config.Proprieta();
  355.                 pConfig.setNome(proprieta.getNome());
  356.                 if(useEncryptEngine && stationCore.getDriverBYOKUtilities()!=null &&
  357.                         proprieta.isEncrypted()!=null && proprieta.isEncrypted().booleanValue()) {
  358.                     pConfig.setValore(stationCore.getDriverBYOKUtilities().wrap(proprieta.getValore()));
  359.                 }
  360.                 else {
  361.                     if(proprieta.getValore().length()>4000) {
  362.                         throw FaultCode.RICHIESTA_NON_VALIDA.toException(CostantiControlStation.MESSAGGIO_ERRORE_VALORE_PROPRIETA_4000);
  363.                     }
  364.                     pConfig.setValore(proprieta.getValore());
  365.                 }
  366.                 sa.addProprieta(pConfig);
  367.             }
  368.         }
  369.        
  370.         return sa;
  371.     }
  372.    
  373.    
  374.     public static final Applicativo servizioApplicativoToApplicativo(ServizioApplicativo sa) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
  375.         Applicativo ret = new Applicativo();
  376.        
  377.         ret.setNome(sa.getNome());

  378.         ret.setDescrizione(sa.getDescrizione());
  379.        
  380.         InvocazionePorta invPorta = sa.getInvocazionePorta();
  381.         if (invPorta != null) {
  382.             ServizioApplicativoRuoli ruoli = invPorta.getRuoli();
  383.             if (ruoli != null) {
  384.                 ret.setRuoli(ruoli.getRuoloList().stream().map( ruolo -> ruolo.getNome().toString() ).collect(Collectors.toList()));
  385.             }
  386.         }
  387.    
  388.         if(invPorta!=null) {
  389.             ret.setCredenziali(authFromCredenziali(invPorta.getCredenzialiList()));
  390.         }
  391.            
  392.         if(sa.sizeProprietaList()>0) {
  393.             for (org.openspcoop2.core.config.Proprieta proprieta : sa.getProprietaList()) {
  394.                 Proprieta4000OpzioneCifratura p = new Proprieta4000OpzioneCifratura();
  395.                 p.setNome(proprieta.getNome());
  396.                 p.setValore(proprieta.getValore());
  397.                 p.setEncrypted(BYOKUtilities.isWrappedValue(p.getValore()));
  398.                 if(ret.getProprieta()==null) {
  399.                     ret.setProprieta(new ArrayList<>());
  400.                 }
  401.                 ret.addProprietaItem(p);
  402.             }
  403.         }
  404.        
  405.         return ret;
  406.     }
  407.    
  408.     public static final ApplicativoServer servizioApplicativoToApplicativoServer(ServizioApplicativo sa) throws Exception {
  409.         ApplicativoServer ret = new ApplicativoServer();
  410.        
  411.         ret.setNome(sa.getNome());

  412.         ret.setDescrizione(sa.getDescrizione());
  413.        
  414.         ret.setConnettore(ConnettoreAPIHelper.getConnettoreApplicativoServer(sa));
  415.            
  416.         if(sa.sizeProprietaList()>0) {
  417.             for (org.openspcoop2.core.config.Proprieta proprieta : sa.getProprietaList()) {
  418.                 Proprieta4000 p = new Proprieta4000();
  419.                 p.setNome(proprieta.getNome());
  420.                 p.setValore(proprieta.getValore());
  421.                 if(ret.getProprieta()==null) {
  422.                     ret.setProprieta(new ArrayList<Proprieta4000>());
  423.                 }
  424.                 ret.addProprietaItem(p);
  425.             }
  426.         }
  427.        
  428.         return ret;
  429.     }
  430.    
  431.     public static Map<String, AbstractProperty<?>> getProtocolPropertiesMap(ServizioApplicativo sa, ApplicativiEnv env) throws Exception {

  432.         ProtocolProperties prop = getProtocolProperties(sa, env);
  433.         Map<String, AbstractProperty<?>> p = new HashMap<>();

  434.         for(int i =0; i < prop.sizeProperties(); i++) {
  435.             p.put(prop.getIdProperty(i), prop.getProperty(i));
  436.         }
  437.        
  438.         return p;
  439.     }

  440.     public static ProtocolProperties getProtocolProperties(ServizioApplicativo sa, ApplicativiEnv env) throws Exception {
  441.         ConsoleConfiguration consoleConf = getConsoleConfiguration(sa, env);

  442.         ProtocolProperties prop = env.saHelper.estraiProtocolPropertiesDaRequest(consoleConf, ConsoleOperationType.CHANGE);
  443.         ProtocolPropertiesUtils.mergeProtocolPropertiesConfig(prop, sa.getProtocolPropertyList(), ConsoleOperationType.CHANGE);
  444.         return prop;
  445.     }

  446.     public static ConsoleConfiguration getConsoleConfiguration(ServizioApplicativo sa, ApplicativiEnv env) throws Exception {
  447.         IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
  448.         IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  449.         IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);

  450.         IDServizioApplicativo idSA = new IDServizioApplicativo();
  451.         idSA.setIdSoggettoProprietario(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  452.         idSA.setNome(sa.getNome());
  453.        
  454.         return consoleDynamicConfiguration.getDynamicConfigServizioApplicativo(ConsoleOperationType.ADD, env.saHelper,
  455.                 registryReader, configRegistryReader, idSA);

  456.     }

  457.     public static ProtocolProperties getProtocolProperties(Applicativo body, ProfiloEnum profilo, ServizioApplicativo sa, ApplicativiEnv env) throws Exception {


  458.         if(!profilo.equals(ProfiloEnum.MODI) && !profilo.equals(ProfiloEnum.MODIPA) && body.getModi() != null) {
  459.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Configurazione 'ModI' non conforme con il profilo '"+profilo+"' indicato");
  460.         }

  461.         switch(profilo) {
  462.         case APIGATEWAY:
  463.             return null;// trasparente
  464.         case EDELIVERY:
  465.             return EDeliveryApplicativiApiHelper.getProtocolProperties(body);
  466.         case FATTURAPA:
  467.             return FatturaPAApplicativiApiHelper.getProtocolProperties(body);
  468.         case MODI:
  469.         case MODIPA:
  470.             return ModiApplicativiApiHelper.getProtocolProperties(body, sa, env);
  471.         case SPCOOP:
  472.             return SPCoopApplicativiApiHelper.getProtocolProperties(body);
  473.         }
  474.         return null;
  475.     }


  476.     public static void populateProtocolInfo(ServizioApplicativo sa, Applicativo ret, ApplicativiEnv env, ProfiloEnum profilo) throws Exception {
  477.        
  478.         if(profilo != null) {
  479.             switch(profilo) {
  480.             case APIGATEWAY:
  481.                 break;
  482.             case EDELIVERY: EDeliveryApplicativiApiHelper.populateProtocolInfo(sa, env, ret);
  483.                 break;
  484.             case FATTURAPA: FatturaPAApplicativiApiHelper.populateProtocolInfo(sa, env, ret);
  485.                 break;
  486.             case MODI:
  487.             case MODIPA: ModiApplicativiApiHelper.populateProtocolInfo(sa, env, ret);
  488.                 break;
  489.             case SPCOOP: SPCoopApplicativiApiHelper.populateProtocolInfo(sa, env, ret);
  490.                 break;
  491.             default:
  492.                 break;}
  493.         }

  494.     }
  495.     // Rationale: Questa funzione è bene che sia unchecked. Se non esplicitamente catturata infatti, comporterà in ogni caso lato API
  496.     // la segnalazione di un errore interno.
  497.     //
  498.     // Il fatto che abbiamo creato nel sistema un oggetto di tipo ServizioApplicativo ritenuto corretto (il parametro)
  499.     // ma per il quale non si riesce più a recuperare, mmmh.
  500.     //  + Il tipo del soggetto propietario
  501.     //  + Il tipo del protocollo associato al tipo del soggeto
  502.     //  + Il servizio protocolli stesso
  503.     //
  504.     // Denotano un errore interno.
  505.     //
  506.     // è una funzione che effettua un mapping da un tipo all'altro e che potrà essere utilizzata liberamente negli stream.
  507.    
  508.     public static final ApplicativoItem servizioApplicativoToApplicativoItem(ServizioApplicativo sa) {
  509.         ApplicativoItem ret = new ApplicativoItem();
  510.        
  511.         ret.setNome(sa.getNome());
  512.        
  513.         String tipo_protocollo = null;
  514.        
  515.         try {
  516.             tipo_protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(sa.getTipoSoggettoProprietario());
  517.         } catch (ProtocolException e) {
  518.        
  519.             e.printStackTrace(System.err);
  520.             throw new RuntimeException(e);
  521.         }      
  522.        
  523.         ret.setProfilo(BaseHelper.profiloFromTipoProtocollo.get(tipo_protocollo));
  524.         ret.setSoggetto(sa.getNomeSoggettoProprietario());
  525.        
  526.         ServizioApplicativoRuoli saRoles = null;
  527.         if(sa.getInvocazionePorta()!=null) {
  528.             saRoles = sa.getInvocazionePorta().getRuoli();
  529.         }
  530.         if (saRoles == null) {
  531.             ret.setCountRuoli(0);
  532.         }
  533.         else {
  534.             ret.setCountRuoli(saRoles.sizeRuoloList());
  535.         }
  536.        
  537.         return ret;
  538.     }
  539.    
  540.     public static final ApplicativoServerItem servizioApplicativoToApplicativoServerItem(ServizioApplicativo sa) {
  541.         ApplicativoServerItem ret = new ApplicativoServerItem();
  542.        
  543.         ret.setNome(sa.getNome());
  544.        
  545.         String tipo_protocollo = null;
  546.        
  547.         try {
  548.             tipo_protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(sa.getTipoSoggettoProprietario());
  549.         } catch (ProtocolException e) {
  550.        
  551.             e.printStackTrace(System.err);
  552.             throw new RuntimeException(e);
  553.         }      
  554.        
  555.         ret.setProfilo(BaseHelper.profiloFromTipoProtocollo.get(tipo_protocollo));
  556.         ret.setSoggetto(sa.getNomeSoggettoProprietario());
  557.        
  558.         return ret;
  559.     }
  560.    
  561.    
  562.    
  563.     public static final IDSoggetto getIDSoggetto(String nome, String tipo_protocollo) throws ProtocolException {
  564.         String tipo_soggetto = ProtocolFactoryManager.getInstance().getDefaultOrganizationTypes().get(tipo_protocollo);
  565.         return  new IDSoggetto(tipo_soggetto,nome);
  566.     }
  567.    
  568.     public static final Soggetto getSoggetto(String nome, ProfiloEnum modalita, SoggettiCore soggettiCore) throws DriverRegistroServiziException, DriverRegistroServiziNotFound, ProtocolException {
  569.         return soggettiCore.getSoggettoRegistro(getIDSoggetto(nome,BaseHelper.tipoProtocolloFromProfilo.get(modalita)));

  570.     }
  571.            
  572.    
  573.     /**
  574.      * Swagger passa le credenziali come una linkedHashMap.
  575.      * Dobbiamo trasformarla nei relativi oggetti di autenticazione.
  576.      *
  577.      * TODO: Rimuovere questa versione e utilizzare quella in RestApiHelper.
  578.      *
  579.      * @param applicativo
  580.      * @return
  581.      * @throws Exception
  582.      */
  583.     public static OneOfBaseCredenzialiCredenziali translateCredenzialiApplicativo(Applicativo applicativo, boolean create) {
  584.         if(applicativo.getCredenziali()==null) {
  585.             return null;
  586.         }
  587.         return translateCredenzialiApplicativo(applicativo.getCredenziali(), create);
  588.     }
  589.     public static OneOfBaseCredenzialiCredenziali translateCredenzialiApplicativo(BaseCredenziali baseCredenziali, boolean create) {
  590.         if(baseCredenziali==null) {
  591.             return null;
  592.         }
  593.         return translateCredenzialiApplicativo(baseCredenziali.getCredenziali(), create);
  594.     }
  595.     public static OneOfBaseCredenzialiCredenziali translateCredenzialiApplicativo(OneOfBaseCredenzialiCredenziali c, boolean create) {
  596.         OneOfBaseCredenzialiCredenziali creds = null;
  597.        
  598.         if(c==null || c.getModalitaAccesso()==null) {
  599.             return null;
  600.         }
  601.        
  602.         String  tipoauthSA = Helper.tipoAuthSAFromModalita.get(c.getModalitaAccesso().toString());
  603.        
  604.         if (tipoauthSA == null)
  605.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Tipo modalità accesso sconosciuto: " + c.getModalitaAccesso());
  606.        
  607.         if (tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC) ||
  608.                 tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_PRINCIPAL) ||
  609.                 tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY) ||
  610.                 tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL) ||
  611.                 tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN)) {
  612.             creds = Helper.translateCredenziali(c, create);
  613.         }
  614.         else if (tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA)) {
  615.             creds = null;
  616.         }
  617.         else {
  618.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Tipo autenticazione sconosciuto: " + tipoauthSA);
  619.         }

  620.         return creds;
  621.     }
  622.    
  623.    
  624.     public static ApiKeyInfo createApiKey(OneOfBaseCredenzialiCredenziali creds, IDServizioApplicativo idSA, ServiziApplicativiCore saCore, String protocollo) throws Exception {
  625.         if(creds!=null && ModalitaAccessoEnum.API_KEY.equals(creds.getModalitaAccesso())) {
  626.             AuthenticationApiKey apiKey = (AuthenticationApiKey) creds;
  627.             boolean appId = Helper.isAppId(apiKey.isAppId());
  628.             ApiKeyInfo keyInfo = new ApiKeyInfo();
  629.             keyInfo.setMultipleApiKeys(appId);
  630.             ApiKey apiKeyGenerated = null;
  631.             if(appId) {
  632.                 apiKeyGenerated = saCore.newMultipleApiKey();
  633.                 keyInfo.setAppId(saCore.toAppId(protocollo, idSA, appId));
  634.             }
  635.             else {
  636.                 keyInfo.setAppId(saCore.toAppId(protocollo, idSA, appId));
  637.                 apiKeyGenerated = saCore.newApiKey(protocollo, idSA);
  638.             }
  639.             keyInfo.setPassword(apiKeyGenerated.getPassword());
  640.             keyInfo.setApiKey(apiKeyGenerated.getApiKey());
  641.             return keyInfo;
  642.         }
  643.         return null;
  644.     }
  645.     public static ApiKeyInfo getApiKey(ServizioApplicativo sa, boolean setApiKey) throws Exception {
  646.         if(sa!=null && sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().sizeCredenzialiList()>0) {
  647.             Credenziali c = sa.getInvocazionePorta().getCredenziali(0);
  648.             if(CredenzialeTipo.APIKEY.equals(c.getTipo())){
  649.                 ApiKeyInfo keyInfo = new ApiKeyInfo();
  650.                 keyInfo.setMultipleApiKeys(c.isAppId());
  651.                 keyInfo.setAppId(c.getUser());
  652.                 keyInfo.setPassword(c.getPassword());
  653.                 keyInfo.setCifrata(c.isCertificateStrictVerification());
  654.                 if(setApiKey) {
  655.                     if(c.isAppId()) {
  656.                         keyInfo.setApiKey(ApiKeyUtilities.encodeMultipleApiKey(c.getPassword()));
  657.                     }
  658.                     else {
  659.                         keyInfo.setApiKey(ApiKeyUtilities.encodeApiKey(c.getUser(), c.getPassword()));
  660.                     }
  661.                 }
  662.                 return keyInfo;
  663.             }
  664.         }
  665.         return null;
  666.     }
  667.    
  668.     /**
  669.      * Trasforma le credenziali di autenticazione di un servizio applicativo nelle credenziali
  670.      * di un'InvocazionePorta.
  671.      * @throws UtilsException
  672.      * @throws InstantiationException
  673.      * @throws InvocationTargetException
  674.      * @throws IllegalAccessException
  675.      *
  676.      */
  677.     public static List<Credenziali> credenzialiFromAuth(OneOfBaseCredenzialiCredenziali cred, ApiKeyInfo keyInfo) throws IllegalAccessException, InvocationTargetException, InstantiationException, UtilsException {
  678.        
  679.         List<Credenziali> credenziali = null;
  680.        
  681.         if(cred!=null) {
  682.        
  683.             ModalitaAccessoEnum modalitaAccesso = cred.getModalitaAccesso();
  684.             if(modalitaAccesso == null) {
  685.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Modalità di accesso delle credenziali non indicata");
  686.             }
  687.            
  688.             String tipoauthSA = Helper.tipoAuthSAFromModalita.get(modalitaAccesso.toString());
  689.            
  690.            
  691.             if (tipoauthSA.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA)) {
  692.                 credenziali = new ArrayList<Credenziali>();
  693.                 Credenziali cre = new Credenziali();
  694.                 cre.setTipo(null);
  695.                 credenziali.add(cre);
  696.             }
  697.             else {
  698.            
  699.                 credenziali = Helper.apiCredenzialiToGovwayCred(
  700.                         cred,
  701.                         modalitaAccesso,
  702.                         Credenziali.class,
  703.                         org.openspcoop2.core.config.constants.CredenzialeTipo.class,
  704.                         keyInfo
  705.                         );  
  706.            
  707.             }
  708.            
  709.         }
  710.        
  711.         return credenziali;
  712.     }
  713.    
  714.     /**
  715.      * Trasforma le credenziali per un'InvocazionePorta nelle credenziali conservate in un applicativo.
  716.      *
  717.      * @param cred
  718.      * @return
  719.      * @throws NoSuchMethodException
  720.      * @throws InvocationTargetException
  721.      * @throws IllegalAccessException
  722.      */
  723.     public static OneOfBaseCredenzialiCredenziali authFromCredenziali(List<Credenziali> cred) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
  724.        
  725.         return Helper.govwayCredenzialiToApi(
  726.                 cred,
  727.                 Credenziali.class,
  728.                 org.openspcoop2.core.config.constants.CredenzialeTipo.class);

  729.     }
  730.    
  731.    
  732.     public static void checkApplicativoName(String nome) throws Exception {

  733.         if (nome.equals(""))        
  734.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(
  735.                     "Dati incompleti. E' necessario indicare: " + ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME
  736.             );
  737.                    
  738.         if (nome.indexOf(" ") != -1 || nome.indexOf('\"') != -1) {
  739.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non inserire spazi o doppi apici nei campi di testo");
  740.         }
  741.        
  742.         checkIntegrationEntityName(nome);
  743.         checkLength255(nome, ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME);
  744.     }
  745.    
  746.    
  747.     public static boolean isApplicativoDuplicato(ServizioApplicativo sa, ServiziApplicativiCore saCore) throws DriverConfigurazioneException {

  748.         IDServizioApplicativo idSA = new IDServizioApplicativo();
  749.         IDSoggetto idSoggetto = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  750.         idSA.setIdSoggettoProprietario(idSoggetto);
  751.         idSA.setNome(sa.getNome());
  752.        
  753.         return saCore.existsServizioApplicativo(idSA);
  754.     }
  755.    
  756.    
  757.     public static void checkIntegrationEntityName(String name) throws Exception{
  758.         // Il nome deve contenere solo lettere e numeri e '_' '-' '.' '/'
  759.         if (!RegularExpressionEngine.isMatch(name,"^[_A-Za-z][\\-\\._/A-Za-z0-9]*$")) {
  760.            
  761.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(
  762.                     "Il campo '" +
  763.                      ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_NOME +
  764.                      "' può iniziare solo con un carattere [A-Za-z] o il simbolo '_' e dev'essere formato solo da caratteri, cifre, '_' , '-'");
  765.         }
  766.     }
  767.    
  768.    
  769.     public static void checkLength255(String value, String object) {
  770.         checkLength(value, object, -1, 255);
  771.     }
  772.    
  773.    
  774.     public static void checkLength(String value, String object, int minLength, int maxLength) {
  775.        
  776.         boolean error = false;
  777.        
  778.         if(minLength>0) {
  779.             if(value==null || value.length()<minLength) {
  780.                 error = true;
  781.             }
  782.         }
  783.         if(maxLength>0) {
  784.             if(value!=null && value.length()>maxLength) {
  785.                 error = true;
  786.             }
  787.         }
  788.        
  789.         if (error) {
  790.             throw FaultCode.RICHIESTA_NON_VALIDA.toException(
  791.                     "L'informazione fornita nel campo " +
  792.                     object +
  793.                     " deve essere compresa fa " + Integer.toString(minLength) + " e " + Integer.toString(maxLength) +" caratteri"
  794.             );
  795.         }
  796.            
  797.     }

  798.    
  799.     public static final void checkNoDuplicateCred(
  800.             ServizioApplicativo sa,
  801.             List<ServizioApplicativo> saConflicts,
  802.             SoggettiCore soggettiCore,
  803.             TipoOperazione tipoOperazione ) throws DriverRegistroServiziNotFound, DriverRegistroServiziException
  804.     {      
  805.         Soggetto soggettoToCheck = soggettiCore.getSoggettoRegistro(sa.getIdSoggetto());
  806.         String portaDominio = soggettoToCheck.getPortaDominio();
  807.        
  808.         for (int i = 0; i < saConflicts.size(); i++) {
  809.             ServizioApplicativo saConflict = saConflicts.get(i);

  810.             // controllo se soggetto appartiene a nal diversi, in tal caso e' possibile avere stesse credenziali
  811.             Soggetto tmpSoggettoProprietarioSa = soggettiCore.getSoggettoRegistro(saConflict.getIdSoggetto());
  812.             if (!portaDominio.equals(tmpSoggettoProprietarioSa.getPortaDominio()))
  813.                 continue;
  814.            
  815.             if (tipoOperazione == TipoOperazione.CHANGE && sa.getNome().equals(saConflict.getNome()) && (sa.getIdSoggetto().longValue() == saConflict.getIdSoggetto().longValue())) {
  816.                 continue;
  817.             }
  818.            
  819.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Esistono gia' altri servizi applicativi che possiedono le credenziali indicate.");
  820.         }
  821.        
  822.     }
  823.    
  824.     public static final ServizioApplicativo getServizioApplicativo(String nome, String soggetto, String tipo_protocollo, ServiziApplicativiCore saCore) throws ProtocolException, DriverConfigurazioneException  {
  825.         IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  826.         idServizioApplicativo.setIdSoggettoProprietario(ApplicativiApiHelper.getIDSoggetto(soggetto, tipo_protocollo));
  827.         idServizioApplicativo.setNome(nome);
  828.        
  829.         return saCore.getServizioApplicativo(idServizioApplicativo);
  830.     }


  831.     public static List<IDPortaDelegata> getIdPorteDelegate(ServizioApplicativo oldSa, PorteDelegateCore pCore) throws DriverConfigurazioneException {
  832.         FiltroRicercaPorteDelegate filtro = new FiltroRicercaPorteDelegate();
  833.         filtro.setTipoSoggetto(oldSa.getTipoSoggettoProprietario());
  834.         filtro.setNomeSoggetto(oldSa.getNomeSoggettoProprietario());
  835.         filtro.setNomeServizioApplicativo(oldSa.getNome());
  836.         return pCore.getAllIdPorteDelegate(filtro);
  837.        
  838.     }


  839.     public static void checkServizioApplicativoInUso(ServizioApplicativo oldSa, SoggettiCore soggetiCore) throws DriverConfigurazioneNotFound, DriverConfigurazioneException {
  840.        
  841.         org.openspcoop2.core.config.Soggetto oldSogg = soggetiCore.getSoggetto(oldSa.getIdSoggetto());
  842.         String nomeProv = oldSogg.getTipo() + "/" + oldSogg.getNome();

  843.         boolean servizioApplicativoInUso = false;
  844.        
  845.         for (int i = 0; i < oldSogg.sizePortaDelegataList(); i++) {
  846.             PortaDelegata pde = oldSogg.getPortaDelegata(i);
  847.             for (int j = 0; j < pde.sizeServizioApplicativoList(); j++) {
  848.                 PortaDelegataServizioApplicativo tmpSA = pde.getServizioApplicativo(j);
  849.                 if (oldSa.getNome().equals(tmpSA.getNome())) {
  850.                     servizioApplicativoInUso = true;
  851.                     break;
  852.                 }
  853.             }
  854.             if (servizioApplicativoInUso)
  855.                 break;
  856.         }

  857.         if (!servizioApplicativoInUso) {
  858.             for (int i = 0; i < oldSogg.sizePortaApplicativaList(); i++) {
  859.                 PortaApplicativa pa = oldSogg.getPortaApplicativa(i);
  860.                 for (int j = 0; j < pa.sizeServizioApplicativoList(); j++) {
  861.                     PortaApplicativaServizioApplicativo tmpSA = pa.getServizioApplicativo(j);
  862.                     if (oldSa.getNome().equals(tmpSA.getNome())) {
  863.                         servizioApplicativoInUso = true;
  864.                         break;
  865.                     }
  866.                 }
  867.                 if (servizioApplicativoInUso)
  868.                     break;
  869.             }
  870.         }
  871.        
  872.         if (servizioApplicativoInUso) {
  873.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il Servizio Applicativo " + oldSa.getNome() + "è già stato associato ad alcune porte delegate e/o applicative del Soggetto " + nomeProv + ". Se si desidera modificare il Soggetto è necessario eliminare prima tutte le occorrenze del Servizio Applicativo");
  874.         }
  875.     }

  876.     public static void validateProperties(ApplicativiEnv env, ProtocolProperties protocolProperties,
  877.             ServizioApplicativo sa,
  878.             ConsoleOperationType operationType) throws Exception {
  879.         if(protocolProperties!=null) {
  880.             try{

  881.                 ConsoleConfiguration consoleConf = getConsoleConfiguration(sa, env);

  882.                 env.saHelper.validaProtocolProperties(consoleConf, operationType, protocolProperties);
  883.                
  884.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  885.                 idSA.setIdSoggettoProprietario(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  886.                 idSA.setNome(sa.getNome());
  887.                
  888.                 IConsoleDynamicConfiguration consoleDynamicConfiguration = env.protocolFactory.createDynamicConfigurationConsole();
  889.                 IRegistryReader registryReader = env.soggettiCore.getRegistryReader(env.protocolFactory);
  890.                 IConfigIntegrationReader configRegistryReader = env.soggettiCore.getConfigIntegrationReader(env.protocolFactory);
  891.                 consoleDynamicConfiguration.updateDynamicConfigServizioApplicativo(consoleConf, operationType, env.saHelper, protocolProperties,
  892.                         registryReader, configRegistryReader, idSA);
  893.                
  894.                 consoleDynamicConfiguration.validateDynamicConfigServizioApplicativo(consoleConf, operationType, env.saHelper, protocolProperties,
  895.                         registryReader, configRegistryReader, idSA);  
  896.                
  897.             }catch(ProtocolException e){
  898.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(e.getMessage());
  899.             }
  900.         }
  901.        
  902.     }
  903.    
  904. }