ApplicativiServerApiServiceImpl.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_server;

  21. import java.util.List;

  22. import org.apache.commons.lang.StringEscapeUtils;
  23. import org.openspcoop2.core.commons.Filtri;
  24. import org.openspcoop2.core.commons.Liste;
  25. import org.openspcoop2.core.config.InvocazioneCredenziali;
  26. import org.openspcoop2.core.config.InvocazioneServizio;
  27. import org.openspcoop2.core.config.ServizioApplicativo;
  28. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  29. import org.openspcoop2.core.config.constants.InvocazioneServizioTipoAutenticazione;
  30. import org.openspcoop2.core.config.rs.server.api.ApplicativiServerApi;
  31. import org.openspcoop2.core.config.rs.server.api.impl.Helper;
  32. import org.openspcoop2.core.config.rs.server.api.impl.HttpRequestWrapper;
  33. import org.openspcoop2.core.config.rs.server.api.impl.applicativi.ApplicativiApiHelper;
  34. import org.openspcoop2.core.config.rs.server.api.impl.applicativi.ApplicativiEnv;
  35. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ConnettoreAPIHelper;
  36. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniEnv;
  37. import org.openspcoop2.core.config.rs.server.config.ServerProperties;
  38. import org.openspcoop2.core.config.rs.server.model.ApplicativoServer;
  39. import org.openspcoop2.core.config.rs.server.model.ConnettoreConfigurazioneHttpBasic;
  40. import org.openspcoop2.core.config.rs.server.model.ConnettoreEnum;
  41. import org.openspcoop2.core.config.rs.server.model.ConnettoreHttp;
  42. import org.openspcoop2.core.config.rs.server.model.ListaApplicativiServer;
  43. import org.openspcoop2.core.config.rs.server.model.Proprieta4000;
  44. import org.openspcoop2.core.constants.TipiConnettore;
  45. import org.openspcoop2.core.id.IDServizioApplicativo;
  46. import org.openspcoop2.core.id.IDSoggetto;
  47. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  48. import org.openspcoop2.utils.service.BaseImpl;
  49. import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
  50. import org.openspcoop2.utils.service.authorization.AuthorizationManager;
  51. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  52. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  53. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  54. import org.openspcoop2.utils.service.context.IContext;
  55. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  56. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  57. import org.openspcoop2.web.ctrlstat.plugins.ExtendedConnettore;
  58. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCostanti;
  59. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiGeneralInfo;
  60. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiUtilities;
  61. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  62. /**
  63.  * ApplicativiApiServiceImpl
  64.  *
  65.  * @author $Author$
  66.  * @version $Rev$, $Date$
  67.  *
  68.  */
  69. public class ApplicativiServerApiServiceImpl extends BaseImpl implements ApplicativiServerApi {

  70.     public ApplicativiServerApiServiceImpl(){
  71.         super(org.slf4j.LoggerFactory.getLogger(ApplicativiServerApiServiceImpl.class));
  72.     }

  73.     private AuthorizationConfig getAuthorizationConfig() throws Exception{
  74.         return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
  75.     }

  76.     /**
  77.      * Creazione di un applicativo server
  78.      *
  79.      * Questa operazione consente di creare un applicativo server associato ad un soggetto interno
  80.      *
  81.      */
  82.     @Override
  83.     public void createApplicativoServer(ApplicativoServer body, ProfiloEnum profilo, String soggetto) {
  84.         IContext context = this.getContext();
  85.         try {
  86.             context.getLogger().info("Invocazione in corso ...");    

  87.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  88.             context.getLogger().debug("Autorizzazione completata con successo");    
  89.                        
  90.            
  91.            
  92.             // TODO SOGGETTO TIPO OPERATIVO I servizi applicativi di tipo server sono registrabili solamente su soggetti di tipo ‘operativo’.
  93.             BaseHelper.throwIfNull(body);
  94.            
  95.             ApplicativoServer applicativo = body;

  96.             HttpRequestWrapper wrap = new HttpRequestWrapper(context.getServletRequest());
  97.             ApplicativiEnv env = new ApplicativiEnv(wrap, profilo, soggetto, context);                  
  98.             ErogazioniEnv erogEnv = new ErogazioniEnv(wrap, profilo, soggetto, context);                    
  99.    
  100.             String protocollo = env.protocolFactory.getProtocol();
  101.             String tipo_soggetto = ProtocolFactoryManager.getInstance().getDefaultOrganizationTypes().get(protocollo);
  102.             IDSoggetto idSoggetto = new IDSoggetto(tipo_soggetto,env.idSoggetto.getNome());
  103.             IDServizioApplicativo idSA = new IDServizioApplicativo();
  104.             idSA.setIdSoggettoProprietario(idSoggetto);
  105.             idSA.setNome(applicativo.getNome());
  106.            
  107.             ServizioApplicativo sa = ApplicativiApiHelper.applicativoToServizioApplicativo(applicativo, env.tipo_protocollo, env.idSoggetto.getNome(), env.stationCore);
  108.                        
  109.             if ( ApplicativiApiHelper.isApplicativoDuplicato(sa, env.saCore) ) {
  110.                 throw FaultCode.CONFLITTO.toException(
  111.                         "Applicativo server " + sa.getNome() + " già registrato per il soggetto scelto."
  112.                 );
  113.             }
  114.            
  115.             ApplicativiApiHelper.overrideSAParametersApplicativoServer(env.requestWrapper, env.saHelper, sa, false);

  116.             wrap.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO, env.tipo_protocollo);
  117.            
  118.             List<String> listaTipiProtocollo = ProtocolFactoryManager.getInstance().getProtocolNamesAsList();
  119.             IDSoggetto soggettoMultitenantSelezionato = new IDSoggetto(env.idSoggetto.getTipo(), env.idSoggetto.getNome());
  120.            
  121.            
  122.             String dominio = null;

  123.             if(!env.isDominioInterno(idSoggetto)) {
  124.                 if(profilo != null && !(profilo.equals(ProfiloEnum.MODI) || profilo.equals(ProfiloEnum.MODIPA))) {
  125.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Impossibile creare un applicativo per un soggetto esterno col profilo ["+profilo+"]");
  126.                 }
  127.                 dominio = "esterno";
  128.             }

  129.             ServiziApplicativiGeneralInfo generalInfo = ServiziApplicativiUtilities.getGeneralInfo(false, env.idSoggetto.getId().toString(), listaTipiProtocollo,
  130.                     env.saCore, env.saHelper, env.userLogin, true,
  131.                     soggettoMultitenantSelezionato.toString(), dominio);
  132.                        

  133.             List<ExtendedConnettore> listExtendedConnettore = null; // connettori extended non supportati via API

  134.             InvocazioneServizio is = sa.getInvocazioneServizio();
  135.             InvocazioneCredenziali credenziali_is = is.getCredenziali();
  136.             org.openspcoop2.core.config.Connettore connis = is.getConnettore();

  137.             String oldConnT = connis.getTipo();
  138.             if ((connis.getCustom() != null && connis.getCustom())
  139.                     && !connis.getTipo().equals(TipiConnettore.HTTPS.toString())
  140.                     && !connis.getTipo().equals(TipiConnettore.FILE.toString())
  141.                     && !connis.getTipo().equals(TipiConnettore.STATUS.toString())) {
  142.                 oldConnT = TipiConnettore.CUSTOM.toString();
  143.             }

  144.             if (!ConnettoreAPIHelper.connettoreCheckData(body.getConnettore(), erogEnv, true)) {
  145.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  146.             }

  147.             ConnettoreAPIHelper.fillConnettoreConfigurazione(sa, erogEnv, body.getConnettore(), oldConnT);

  148.             if(body.getConnettore().getTipo().equals(ConnettoreEnum.HTTP) && ((ConnettoreHttp) body.getConnettore()).getAutenticazioneHttp() != null) {
  149.                     if (credenziali_is == null) {
  150.                         credenziali_is = new InvocazioneCredenziali();
  151.                     }
  152.                    
  153.                     ConnettoreConfigurazioneHttpBasic authHttp = ((ConnettoreHttp) body.getConnettore()).getAutenticazioneHttp();
  154.                     credenziali_is.setUser(authHttp.getUsername());
  155.                     credenziali_is.setPassword(authHttp.getPassword());
  156.                     is.setCredenziali(credenziali_is);
  157.                     is.setAutenticazione(InvocazioneServizioTipoAutenticazione.BASIC);
  158.             } else {
  159.                 is.setCredenziali(null);
  160.                 is.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
  161.             }

  162.             is.setConnettore(connis);
  163.             sa.setInvocazioneServizio(is);

  164.             if (! env.saHelper.servizioApplicativoCheckData(
  165.                     TipoOperazione.ADD,
  166.                     generalInfo.getSoggettiList(),
  167.                     -1,
  168.                     sa.getTipologiaFruizione(),
  169.                     sa.getTipologiaErogazione(),
  170.                     listExtendedConnettore, sa,
  171.                     new StringBuilder()
  172.                 )) {
  173.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  174.             }
  175.                
  176.             env.saCore.performCreateOperation(env.userLogin, false, sa);
  177.            
  178.             context.getLogger().info("Invocazione completata con successo");
  179.        
  180.             // Bug Fix: altrimenti viene generato 204
  181.             context.getServletResponse().setStatus(201);
  182.         }
  183.         catch(javax.ws.rs.WebApplicationException e) {
  184.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  185.             throw e;
  186.         }
  187.         catch(Throwable e) {
  188.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  189.             throw FaultCode.ERRORE_INTERNO.toException(e);
  190.         }
  191.     }
  192.    
  193.     /**
  194.      * Elimina un applicativo server
  195.      *
  196.      * Questa operazione consente di eliminare un applicativo server identificato dal nome e dal soggetto di riferimento
  197.      *
  198.      */
  199.     @Override
  200.     public void deleteApplicativoServer(String nome, ProfiloEnum profilo, String soggetto) {
  201.         IContext context = this.getContext();
  202.         try {
  203.             context.getLogger().info("Invocazione in corso ...");    

  204.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  205.             context.getLogger().debug("Autorizzazione completata con successo");    
  206.                        
  207.             ApplicativiEnv env = new ApplicativiEnv(context.getServletRequest(), profilo, soggetto, context);
  208.             IDServizioApplicativo idServizioApplicativo = null;
  209.             ServizioApplicativo sa = null;
  210.             try {
  211.                 idServizioApplicativo = new IDServizioApplicativo();
  212.                 idServizioApplicativo.setIdSoggettoProprietario(env.idSoggetto.toIDSoggetto());
  213.                
  214.             } catch (Exception e) {
  215.                 throw FaultCode.NOT_FOUND.toException("Soggetto non trovato.");
  216.             }
  217.            
  218.             idServizioApplicativo.setNome(nome);
  219.             try {
  220.                 sa = env.saCore.getServizioApplicativo(idServizioApplicativo);
  221.                 if(!sa.getTipo().equals(CostantiConfigurazione.SERVER)) {
  222.                     sa = null;
  223.                 }
  224.             } catch (Exception e) {
  225.             }
  226.            
  227.             if (sa != null) {
  228.                 StringBuilder inUsoMessage = new StringBuilder();
  229.                 ServiziApplicativiUtilities.deleteServizioApplicativo(sa, env.userLogin, env.saCore, env.saHelper, inUsoMessage, "\n");
  230.                
  231.                 if (inUsoMessage.length() > 0) {
  232.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
  233.                 }
  234.                
  235.             } else if (env.delete_404) {
  236.                 throw FaultCode.NOT_FOUND.toException("Applicativo server con nome: " + nome + " non trovato.");
  237.             }
  238.            
  239.             context.getLogger().info("Invocazione completata con successo");    
  240.        
  241.      
  242.         }
  243.         catch(javax.ws.rs.WebApplicationException e) {
  244.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  245.             throw e;
  246.         }
  247.         catch(Throwable e) {
  248.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  249.             throw FaultCode.ERRORE_INTERNO.toException(e);
  250.         }
  251.     }
  252.    
  253.     /**
  254.      * Ricerca applicativi server
  255.      *
  256.      * Elenca gli applicativi server registrati
  257.      *
  258.      */
  259.     @Override
  260.     public ListaApplicativiServer findAllApplicativiServer(ProfiloEnum profilo, String soggetto, String q, Integer limit, Integer offset, Boolean profiloQualsiasi, Boolean soggettoQualsiasi) {
  261.         IContext context = this.getContext();
  262.         try {
  263.             context.getLogger().info("Invocazione in corso ...");    

  264.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  265.             context.getLogger().debug("Autorizzazione completata con successo");    
  266.                        
  267.             ApplicativiEnv env = new ApplicativiEnv(context.getServletRequest(), profilo, soggetto, context);
  268.            
  269.             int idLista = Liste.SERVIZIO_APPLICATIVO;

  270.             ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  271.            
  272.             if(profiloQualsiasi!=null && profiloQualsiasi) {
  273.                 ricerca.clearFilter(idLista, Filtri.FILTRO_PROTOCOLLO);
  274.             }
  275.             if(soggettoQualsiasi!=null && soggettoQualsiasi) {
  276.                 ricerca.clearFilter(idLista, Filtri.FILTRO_SOGGETTO);
  277.             }
  278.            
  279.             //ricerca.addFilter(idLista, Filtri.FILTRO_RUOLO_SERVIZIO_APPLICATIVO, Filtri.VALUE_FILTRO_RUOLO_SERVIZIO_APPLICATIVO_FRUITORE);
  280.             //ricerca.addFilter(idLista, Filtri.FILTRO_TIPO_SERVIZIO_APPLICATIVO, CostantiConfigurazione.CLIENT_OR_SERVER);
  281.             ricerca.addFilter(idLista, Filtri.FILTRO_TIPO_SERVIZIO_APPLICATIVO, CostantiConfigurazione.SERVER); // Nelle API per adesso sono gestiti solo gli applicativi SERVER
  282.            
  283.             List<ServizioApplicativo> saLista = env.saCore.soggettiServizioApplicativoList(null, ricerca);
  284.            
  285.             final ListaApplicativiServer ret = ListaUtils.costruisciListaPaginata(
  286.                     context.getUriInfo(),
  287.                     ricerca.getIndexIniziale(idLista),
  288.                     ricerca.getPageSize(idLista),
  289.                     ricerca.getNumEntries(idLista),
  290.                     ListaApplicativiServer.class
  291.                 );
  292.                
  293.             saLista.forEach( sa -> ret.addItemsItem(ApplicativiApiHelper.servizioApplicativoToApplicativoServerItem(sa)));  
  294.        
  295.             context.getLogger().info("Invocazione completata con successo");
  296.            
  297.             return Helper.returnOrNotFound(ret);
  298.      
  299.         }
  300.         catch(javax.ws.rs.WebApplicationException e) {
  301.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  302.             throw e;
  303.         }
  304.         catch(Throwable e) {
  305.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  306.             throw FaultCode.ERRORE_INTERNO.toException(e);
  307.         }
  308.     }
  309.    
  310.     /**
  311.      * Restituisce il dettaglio di un applicativo server
  312.      *
  313.      * Questa operazione consente di ottenere il dettaglio di un applicativo server identificato dal nome e dal soggetto di riferimento
  314.      *
  315.      */
  316.     @Override
  317.     public ApplicativoServer getApplicativoServer(String nome, ProfiloEnum profilo, String soggetto) {
  318.         IContext context = this.getContext();
  319.         try {
  320.             context.getLogger().info("Invocazione in corso ...");    

  321.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  322.             context.getLogger().debug("Autorizzazione completata con successo");    
  323.                        
  324.             ApplicativiEnv env = new ApplicativiEnv(context.getServletRequest(), profilo, soggetto, context);
  325.            
  326.             ServizioApplicativo sa = null;          
  327.             try {
  328.                 IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  329.                 idServizioApplicativo.setIdSoggettoProprietario(env.idSoggetto.toIDSoggetto());
  330.                 idServizioApplicativo.setNome(nome);
  331.                 sa = env.saCore.getServizioApplicativo(idServizioApplicativo);
  332.                
  333.                 if(!sa.getTipo().equals(CostantiConfigurazione.SERVER)) {
  334.                     throw new Exception("Applicativo non di tipo server: " + sa.getTipo());
  335.                 }
  336.             } catch ( Exception e) {
  337.                 throw FaultCode.NOT_FOUND.toException("Applicativo server con nome: " + nome + " non trovato.");
  338.             }
  339.            
  340.             context.getLogger().info("Invocazione completata con successo");
  341.            
  342.             ApplicativoServer applicativo = ApplicativiApiHelper.servizioApplicativoToApplicativoServer(sa);
  343.        
  344.             context.getLogger().info("Invocazione completata con successo");
  345.            
  346.             return applicativo;    
  347.         }
  348.         catch(javax.ws.rs.WebApplicationException e) {
  349.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  350.             throw e;
  351.         }
  352.         catch(Throwable e) {
  353.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  354.             throw FaultCode.ERRORE_INTERNO.toException(e);
  355.         }
  356.     }
  357.    
  358.     /**
  359.      * Modifica i dati di un applicativo server
  360.      *
  361.      * Questa operazione consente di aggiornare i dati di un applicativo server identificato dal nome e dal soggetto di riferimento
  362.      *
  363.      */
  364.     @Override
  365.     public void updateApplicativoServer(ApplicativoServer body, String nome, ProfiloEnum profilo, String soggetto) {
  366.         IContext context = this.getContext();
  367.         try {
  368.             context.getLogger().info("Invocazione in corso ...");    

  369.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  370.             context.getLogger().debug("Autorizzazione completata con successo");    
  371.                        
  372.             BaseHelper.throwIfNull(body);
  373.            
  374.             ApplicativoServer applicativo = body;

  375.             final ApplicativiEnv env = new ApplicativiEnv(context.getServletRequest(), profilo, soggetto, context);
  376.             final ErogazioniEnv erogEnv = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  377.             soggetto = env.idSoggetto.getNome();
  378.            
  379.             final ServizioApplicativo oldSa = BaseHelper.supplyOrNotFound( () -> ApplicativiApiHelper.getServizioApplicativo(nome, env.idSoggetto.getNome(), env.tipo_protocollo, env.saCore), "Servizio Applicativo");
  380.            
  381.             if(!oldSa.getTipo().equals(CostantiConfigurazione.SERVER)) {
  382.                 throw FaultCode.NOT_FOUND.toException("Applicativo server con nome "+oldSa.getNome()+" non trovato");
  383.             }

  384.             final ServizioApplicativo tmpSa = ApplicativiApiHelper.applicativoToServizioApplicativo(applicativo, env.tipo_protocollo, soggetto, env.stationCore);
  385.             final ServizioApplicativo newSa = ApplicativiApiHelper.getServizioApplicativo(nome, env.idSoggetto.getNome(), env.tipo_protocollo, env.saCore);
  386.            
  387.             newSa.setNome(tmpSa.getNome());
  388.             newSa.setDescrizione(tmpSa.getDescrizione());
  389.             newSa.setIdSoggetto(tmpSa.getIdSoggetto());
  390.             newSa.setNomeSoggettoProprietario(tmpSa.getNomeSoggettoProprietario());
  391.             newSa.setTipoSoggettoProprietario(tmpSa.getTipoSoggettoProprietario());    
  392.             newSa.getInvocazionePorta().setCredenzialiList(tmpSa.getInvocazionePorta().getCredenzialiList());
  393.             newSa.getInvocazionePorta().setRuoli(tmpSa.getInvocazionePorta().getRuoli());

  394.             newSa.getProprietaList().clear();
  395.             if(applicativo.getProprieta()!=null && !applicativo.getProprieta().isEmpty()) {
  396.                 for (Proprieta4000 proprieta : applicativo.getProprieta()) {
  397.                     org.openspcoop2.core.config.Proprieta pConfig = new org.openspcoop2.core.config.Proprieta();
  398.                     pConfig.setNome(proprieta.getNome());
  399.                     pConfig.setValore(proprieta.getValore());
  400.                     newSa.addProprieta(pConfig);
  401.                 }
  402.             }
  403.            
  404.             InvocazioneServizio is = newSa.getInvocazioneServizio();
  405.             InvocazioneCredenziali credenziali_is = is.getCredenziali();
  406.             org.openspcoop2.core.config.Connettore connis = is.getConnettore();

  407.             String oldConnT = connis.getTipo();
  408.             if ((connis.getCustom() != null && connis.getCustom())
  409.                     && !connis.getTipo().equals(TipiConnettore.HTTPS.toString())
  410.                     && !connis.getTipo().equals(TipiConnettore.FILE.toString())
  411.                     && !connis.getTipo().equals(TipiConnettore.STATUS.toString())) {
  412.                 oldConnT = TipiConnettore.CUSTOM.toString();
  413.             }

  414.             if (!ConnettoreAPIHelper.connettoreCheckData(body.getConnettore(), erogEnv, true)) {
  415.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  416.             }

  417.             ConnettoreAPIHelper.fillConnettoreConfigurazione(newSa, erogEnv, body.getConnettore(), oldConnT);

  418.             if(body.getConnettore().getTipo().equals(ConnettoreEnum.HTTP) && ((ConnettoreHttp) body.getConnettore()).getAutenticazioneHttp() != null) {
  419.                 if (credenziali_is == null) {
  420.                     credenziali_is = new InvocazioneCredenziali();
  421.                 }
  422.                
  423.                 ConnettoreConfigurazioneHttpBasic authHttp = ((ConnettoreHttp) body.getConnettore()).getAutenticazioneHttp();
  424.                 credenziali_is.setUser(authHttp.getUsername());
  425.                 credenziali_is.setPassword(authHttp.getPassword());
  426.                 is.setCredenziali(credenziali_is);
  427.                 is.setAutenticazione(InvocazioneServizioTipoAutenticazione.BASIC);
  428.             }

  429.             else {
  430.                 is.setCredenziali(null);
  431.                 is.setAutenticazione(InvocazioneServizioTipoAutenticazione.NONE);
  432.             }

  433.             is.setConnettore(connis);
  434.             newSa.setInvocazioneServizio(is);


  435.             IDServizioApplicativo oldID = new IDServizioApplicativo();
  436.             oldID.setIdSoggettoProprietario(ApplicativiApiHelper.getIDSoggetto(oldSa.getNomeSoggettoProprietario(), env.tipo_protocollo));
  437.             oldID.setNome(oldSa.getNome());
  438.            
  439.             newSa.setOldIDServizioApplicativoForUpdate(oldID);
  440.            
  441.             List<ExtendedConnettore> listExtendedConnettore = null; // connettori extended non supportati via API
  442.            
  443.             ApplicativiApiHelper.overrideSAParametersApplicativoServer(env.requestWrapper, env.saHelper, newSa, false);
  444.             env.requestWrapper.overrideParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO, env.tipo_protocollo);
  445.            
  446.             if (! env.saHelper.servizioApplicativoCheckData(
  447.                     TipoOperazione.CHANGE,
  448.                     null,
  449.                     oldSa.getIdSoggetto(),
  450.                     newSa.getTipologiaFruizione(),
  451.                     newSa.getTipologiaErogazione(),
  452.                     listExtendedConnettore, newSa,
  453.                     new StringBuilder()
  454.                 )) {
  455.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  456.             }
  457.            
  458.             // eseguo l'aggiornamento
  459.             List<Object> listOggettiDaAggiornare = ServiziApplicativiUtilities.getOggettiDaAggiornare(env.saCore, oldID, newSa);
  460.             env.saCore.performUpdateOperation(env.userLogin, false, listOggettiDaAggiornare.toArray());
  461.        
  462.             context.getLogger().info("Invocazione completata con successo");
  463.        
  464.      
  465.         }
  466.         catch(javax.ws.rs.WebApplicationException e) {
  467.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  468.             throw e;
  469.         }
  470.         catch(Throwable e) {
  471.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  472.             throw FaultCode.ERRORE_INTERNO.toException(e);
  473.         }
  474.     }
  475.    
  476. }