ErogazioniGruppiApiServiceImpl.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.erogazioni.gruppi;

  21. import java.util.ArrayList;
  22. import java.util.Arrays;
  23. import java.util.List;

  24. import org.apache.commons.lang.StringEscapeUtils;
  25. import org.apache.commons.lang3.StringUtils;
  26. import org.openspcoop2.core.commons.Filtri;
  27. import org.openspcoop2.core.commons.Liste;
  28. import org.openspcoop2.core.config.PortaApplicativa;
  29. import org.openspcoop2.core.config.constants.TipoAutenticazionePrincipal;
  30. import org.openspcoop2.core.config.rs.server.api.ErogazioniGruppiApi;
  31. import org.openspcoop2.core.config.rs.server.api.impl.Enums;
  32. import org.openspcoop2.core.config.rs.server.api.impl.Helper;
  33. import org.openspcoop2.core.config.rs.server.api.impl.IdServizio;
  34. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniApiHelper;
  35. import org.openspcoop2.core.config.rs.server.api.impl.erogazioni.ErogazioniEnv;
  36. import org.openspcoop2.core.config.rs.server.config.ServerProperties;
  37. import org.openspcoop2.core.config.rs.server.model.ApiDescrizione;
  38. import org.openspcoop2.core.config.rs.server.model.Gruppo;
  39. import org.openspcoop2.core.config.rs.server.model.GruppoAzioni;
  40. import org.openspcoop2.core.config.rs.server.model.GruppoEreditaConfigurazione;
  41. import org.openspcoop2.core.config.rs.server.model.GruppoItem;
  42. import org.openspcoop2.core.config.rs.server.model.GruppoNome;
  43. import org.openspcoop2.core.config.rs.server.model.GruppoNuovaConfigurazione;
  44. import org.openspcoop2.core.config.rs.server.model.ListaGruppi;
  45. import org.openspcoop2.core.config.rs.server.model.ModalitaConfigurazioneGruppoEnum;
  46. import org.openspcoop2.core.id.IDPortaApplicativa;
  47. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  48. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  49. import org.openspcoop2.utils.BooleanNullable;
  50. import org.openspcoop2.utils.service.BaseImpl;
  51. import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
  52. import org.openspcoop2.utils.service.authorization.AuthorizationManager;
  53. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  54. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  55. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  56. import org.openspcoop2.utils.service.context.IContext;
  57. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  58. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  59. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  60. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaPorteApplicativeMappingInfo;
  61. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaUtilities;
  62. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  63. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeUtilities;
  64. import org.openspcoop2.web.lib.mvc.ServletUtils;
  65. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  66. /**
  67.  * ErogazioniGruppiApiServiceImpl
  68.  *
  69.  * @author $Author$
  70.  * @version $Rev$, $Date$
  71.  *
  72.  */
  73. public class ErogazioniGruppiApiServiceImpl extends BaseImpl implements ErogazioniGruppiApi {

  74.     public ErogazioniGruppiApiServiceImpl(){
  75.         super(org.slf4j.LoggerFactory.getLogger(ErogazioniGruppiApiServiceImpl.class));
  76.     }

  77.     private AuthorizationConfig getAuthorizationConfig() throws Exception{
  78.         return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
  79.     }

  80.     /**
  81.      * Aggiunta di azioni o risorse dell'API al gruppo
  82.      *
  83.      * Questa operazione consente di aggiungere azioni o risorse dell'API al gruppo
  84.      *
  85.      */
  86.     @Override
  87.     public void addErogazioneGruppoAzioni(GruppoAzioni body, String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  88.         IContext context = this.getContext();
  89.         try {

  90.             context.getLogger().info("Invocazione in corso ...");
  91.            
  92.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  93.             context.getLogger().debug("Autorizzazione completata con successo");
  94.            
  95.             BaseHelper.throwIfNull(body);
  96.            
  97.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  98.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  99.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  100.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPA(nomeGruppo, idAsps, env.apsCore), "Gruppo per l'erogazione scelta");
  101.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPa);
  102.                        
  103.             List<String> azioniOccupate = ErogazioniApiHelper.getAzioniOccupateErogazione(idAsps, env.apsCore, env.paCore);
  104.                    
  105.             ErogazioniApiHelper.checkAzioniAdd(
  106.                     body.getAzioni(),
  107.                     azioniOccupate,
  108.                     env.apcCore.getAzioni(asps, env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo()), false, false, null)
  109.                 );
  110.            
  111.             env.requestWrapper.overrideParameterValues(CostantiControlStation.PARAMETRO_AZIONI, body.getAzioni().toArray(new String[0]));
  112.        
  113.             List<MappingErogazionePortaApplicativa> listaMappingErogazione = env.apsCore.mappingServiziPorteAppList(idAsps,asps.getId(), null);
  114.             if (!env.paHelper.porteAppAzioneCheckData(TipoOperazione.ADD,azioniOccupate,listaMappingErogazione)) {
  115.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  116.             }
  117.            
  118.             // aggiungo azione nel db
  119.             for(String azione: body.getAzioni()) {
  120.                 pa.getAzione().addAzioneDelegata(azione);
  121.             }

  122.             env.paCore.performUpdateOperation(env.userLogin, false, pa);

  123.             context.getLogger().info("Invocazione completata con successo");        
  124.      
  125.             // Bug Fix: altrimenti viene generato 204
  126.             context.getServletResponse().setStatus(201);
  127.         }
  128.         catch(javax.ws.rs.WebApplicationException e) {
  129.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  130.             throw e;
  131.         }
  132.         catch(Throwable e) {
  133.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  134.             throw FaultCode.ERRORE_INTERNO.toException(e);
  135.         }
  136.     }
  137.    
  138.     /**
  139.      * Creazione di un gruppo di azioni o risorse dell'API erogata
  140.      *
  141.      * Questa operazione consente di creare un gruppo di azioni o risorse dell'API erogata
  142.      *
  143.      */
  144.     @Override
  145.     public void createErogazioneGruppo(Gruppo body, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  146.         IContext context = this.getContext();
  147.         try {
  148.             context.getLogger().info("Invocazione in corso ...");    

  149.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  150.             context.getLogger().debug("Autorizzazione completata con successo");    
  151.            
  152.             BaseHelper.throwIfNull(body);

  153.            
  154.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  155.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  156.             IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  157.    
  158.             String mappingPadre = null;
  159.             String erogazioneAutenticazione = null;
  160.             String erogazioneAutenticazioneOpzionale = null;
  161.             TipoAutenticazionePrincipal erogazioneAutenticazionePrincipal = null;
  162.             List<String> erogazioneAutenticazioneParametroList = null;
  163.            
  164.             if ( body.getConfigurazione().getModalita() == ModalitaConfigurazioneGruppoEnum.NUOVA ) {
  165.                
  166.                 final GruppoNuovaConfigurazione confNuova = ErogazioniApiHelper.deserializeModalitaConfGruppo(body.getConfigurazione().getModalita(), body.getConfigurazione());
  167.                
  168.                 if(confNuova.getAutenticazione()!=null) {
  169.                     erogazioneAutenticazione = Enums.toTipoAutenticazione(confNuova.getAutenticazione().getTipo()).toString();
  170.                     BooleanNullable autenticazioneOpzionaleNullable = ErogazioniApiHelper.getAutenticazioneOpzionale(confNuova.getAutenticazione()); // gestisce authn se null
  171.                     erogazioneAutenticazioneOpzionale = ServletUtils.boolToCheckBoxStatus(autenticazioneOpzionaleNullable!=null ? autenticazioneOpzionaleNullable.getValue() : null);
  172.                     erogazioneAutenticazionePrincipal = ErogazioniApiHelper.getTipoAutenticazionePrincipal(confNuova.getAutenticazione());
  173.                     erogazioneAutenticazioneParametroList = ErogazioniApiHelper.getAutenticazioneParametroList(env, confNuova.getAutenticazione().getTipo(), confNuova.getAutenticazione());
  174.                 }
  175.             }
  176.            
  177.             else if ( body.getConfigurazione().getModalita() == ModalitaConfigurazioneGruppoEnum.EREDITA ) {
  178.                
  179.                 GruppoEreditaConfigurazione confEredita = ErogazioniApiHelper.deserializeModalitaConfGruppo(body.getConfigurazione().getModalita(), body.getConfigurazione());
  180.                 List<MappingErogazionePortaApplicativa> mappings = ErogazioniApiHelper.getMappingGruppiPA( confEredita.getNome(), idAsps, env.apsCore);
  181.                 if ( mappings.isEmpty() ) {
  182.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il gruppo " + confEredita.getNome() + " da cui ereditare è inesistente");
  183.                 }
  184.                 mappingPadre = mappings.get(0).getNome();      
  185.             }
  186.                        
  187.             final AccordiServizioParteSpecificaPorteApplicativeMappingInfo mappingInfo = AccordiServizioParteSpecificaUtilities.getMappingInfo(mappingPadre, asps, env.apsCore);
  188.             final MappingErogazionePortaApplicativa mappingSelezionato = mappingInfo.getMappingSelezionato();
  189.             final MappingErogazionePortaApplicativa mappingDefault = mappingInfo.getMappingDefault();
  190.             final List<String> azioniOccupate = mappingInfo.getAzioniOccupate();
  191.            
  192.             if ( mappingDefault == null )
  193.                 throw FaultCode.NOT_FOUND.toException("Nessuna erogazione trovata");
  194.            
  195.             if ( mappingSelezionato == null )
  196.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Gruppo scelto non trovato");
  197.                        
  198.             ErogazioniApiHelper.checkAzioniAdd(
  199.                     body.getAzioni(),
  200.                     azioniOccupate,
  201.                     env.apcCore.getAzioni(asps, env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo()), false, false, null)
  202.                 );
  203.            
  204.             if (!env.apsHelper.configurazioneErogazioneCheckData(
  205.                     TipoOperazione.ADD,
  206.                     mappingInfo.getNomeNuovaConfigurazione(),                  
  207.                     body.getNome(),
  208.                     body.getAzioni().toArray(new String[0]),
  209.                     asps,
  210.                     azioniOccupate,
  211.                     body.getConfigurazione().getModalita().toString(),                  // modeCreazione
  212.                     null,                                           // Come da codice console,
  213.                     env.isSupportatoAutenticazioneSoggetti,
  214.                     mappingInfo
  215.                 )) {
  216.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  217.             }
  218.            
  219.            
  220.             AccordiServizioParteSpecificaUtilities.addAccordoServizioParteSpecificaPorteApplicative(
  221.                     mappingDefault,
  222.                     mappingSelezionato,
  223.                     mappingInfo.getNomeNuovaConfigurazione(),
  224.                     body.getNome(),             // nomeGruppo
  225.                     body.getAzioni().toArray(new String[0]),    // azioni
  226.                     body.getConfigurazione().getModalita().toString(),              // modeCreazione
  227.                     body.getConfigurazione().getModalita().toString(),              // modeCreazioneConnettore Forse c'è un bug nella console, qui viene passato "eredita", nella console viene trattato come una checkbox
  228.                     null,                           // endpointtype,
  229.                     null,                           // tipoconn,
  230.                     null,                           // autenticazioneHttp,  // RECHECK
  231.                     null,                           // connettoreDebug,
  232.                     null,                           // url,
  233.                     null,                           // nomeCodaJms,
  234.                     null,                           // tipoJms,
  235.                     null,                           // initcont,
  236.                     null,                           // urlpgk,
  237.                     null,                           // provurl,
  238.                     null,                           // connfact,
  239.                     null,                           // tipoSendas,
  240.                     null,                           // user,    RECHECK
  241.                     null,                           // password, RECHECK
  242.                     null,                           // httpsurl,
  243.                     null,                           // httpstipologia,
  244.                     false,                          // httpshostverify,
  245.                     ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TRUST_VERIFY_CERTS, // httpsTrustVerifyCert
  246.                     null,                           // httpspath,
  247.                     null,                           // httpstipo,
  248.                     null,                           // httpspwd,
  249.                     null,                           // httpsalgoritmo,
  250.                     false,                          // httpsstato,
  251.                     null,                           // httpskeystore,
  252.                     null,                           // httpspwdprivatekeytrust,
  253.                     null,                           // httpspathkey,
  254.                     null,                           // httpstipokey,
  255.                     null,                           // httpspwdkey,
  256.                     null,                           // httpspwdprivatekey,
  257.                     null,                           // httpsalgoritmokey,
  258.                     null,                           // httpsKeyAlias
  259.                     null,                           // httpsTrustStoreCRLs
  260.                     null,                           // httpsTrustStoreOCSPPolicy
  261.                     null,                           // httpsKeyStoreBYOKPolicy
  262.                     null,                           // proxy_enabled,
  263.                     null,                           // proxy_hostname,
  264.                     null,                           // proxy_port,
  265.                     null,                           // proxy_username,
  266.                     null,                           // proxy_password,
  267.                     null,                           // tempiRisposta_enabled,
  268.                     null,                           // tempiRisposta_connectionTimeout,
  269.                     null,                           // tempiRisposta_readTimeout,
  270.                     null,                           // tempiRisposta_tempoMedioRisposta,
  271.                     "no",                           // opzioniAvanzate,
  272.                     null,                           // transfer_mode,
  273.                     null,                           // transfer_mode_chunk_size,
  274.                     null,                           // redirect_mode,
  275.                     null,                           // redirect_max_hop,
  276.                     null,                           // requestOutputFileName,
  277.                     null,                           // requestOutputFileName_permissions,
  278.                     null,                           // requestOutputFileNameHeaders,
  279.                     null,                           // requestOutputFileNameHeaders_permissions,
  280.                     null,                           // requestOutputParentDirCreateIfNotExists,
  281.                     null,                           // requestOutputOverwriteIfExists,
  282.                     null,                           // responseInputMode,
  283.                     null,                           // responseInputFileName,
  284.                     null,                           // responseInputFileNameHeaders,
  285.                     null,                           // responseInputDeleteAfterRead,
  286.                     null,                           // responseInputWaitTime,
  287.                     false,                          // autenticazioneToken,
  288.                     null,                           // tokenPolicy,
  289.                     null,                           // listExtendedConnettore
  290.                     erogazioneAutenticazione,
  291.                     erogazioneAutenticazioneOpzionale,
  292.                     erogazioneAutenticazionePrincipal,
  293.                     erogazioneAutenticazioneParametroList,
  294.                     "disabilitato",                 // erogazioneAutorizzazione
  295.                     null,                           // erogazioneAutorizzazioneAutenticati,
  296.                     null,                           // erogazioneAutorizzazioneRuoli,
  297.                     null,                           // erogazioneAutorizzazioneRuoliTipologia,
  298.                     null,                           // erogazioneAutorizzazioneRuoliMatch,
  299.                     null,                           // nomeSA,
  300.                     null,                           // erogazioneRuolo,
  301.                     null,                           // erogazioneSoggettoAutenticato,
  302.                     null,                           //  autorizzazioneAutenticatiToken,
  303.                     null,                           //  autorizzazioneRuoliToken,
  304.                     null,                           //  autorizzazioneRuoliTipologiaToken,
  305.                     null,                           //  autorizzazioneRuoliMatchToken,
  306.                     null,                           // autorizzazione_tokenOptions,
  307.                     null,                           // autorizzazioneScope,
  308.                     null,                           // scope,
  309.                     null,                           // autorizzazioneScopeMatch,
  310.                     null,                           // allegatoXacmlPolicy,
  311.                     "disabilitato",                 // gestioneToken
  312.                     null,                           // gestioneTokenPolicy,  
  313.                     null,                           // gestioneTokenOpzionale,  
  314.                     null,                           // gestioneTokenValidazioneInput,
  315.                     null,                           // gestioneTokenIntrospection,
  316.                     null,                           // gestioneTokenUserInfo,
  317.                     null,                           // gestioneTokenTokenForward,
  318.                     null,                           // autenticazioneTokenIssuer,
  319.                     null,                           // autenticazioneTokenClientId,
  320.                     null,                           // autenticazioneTokenSubject,
  321.                     null,                           // autenticazioneTokenUsername,
  322.                     null,                           // autenticazioneTokenEMail,
  323.                     asps,
  324.                     env.tipo_protocollo,
  325.                     env.userLogin,
  326.                     env.apsCore,
  327.                     env.apsHelper,
  328.                     null, // nomeSAServer
  329.                     null, // identificazioneAttributiStato
  330.                     null, //String [] attributeAuthoritySelezionate
  331.                     null, // attributeAuthorityAttributi
  332.                     null, // apiKeyHeader
  333.                     null, // apiKey,
  334.                     null, // appIdHeader,
  335.                     null, // appId,
  336.                     null // connettoreStatusParams
  337.                 );

  338.                
  339.             context.getLogger().info("Invocazione completata con successo");
  340.        
  341.      
  342.             // Bug Fix: altrimenti viene generato 204
  343.             context.getServletResponse().setStatus(201);
  344.         }
  345.         catch(javax.ws.rs.WebApplicationException e) {
  346.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  347.             throw e;
  348.         }
  349.         catch(Throwable e) {
  350.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  351.             throw FaultCode.ERRORE_INTERNO.toException(e);
  352.         }
  353.     }
  354.    
  355.     /**
  356.      * Elimina il gruppo identificato dal nome
  357.      *
  358.      * Questa operazione consente di eliminare il gruppo identificato dal nome
  359.      *
  360.      */
  361.     @Override
  362.     public void deleteErogazioneGruppo(String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  363.         IContext context = this.getContext();
  364.         try {
  365.             context.getLogger().info("Invocazione in corso ...");    

  366.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  367.             context.getLogger().debug("Autorizzazione completata con successo");
  368.            
  369.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  370.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  371.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  372.            
  373.             final IDPortaApplicativa idPortaApplicativa = ErogazioniApiHelper.getIDGruppoPA(nomeGruppo, idAsps, env.apsCore);
  374.                
  375.             if (env.delete_404 && idPortaApplicativa == null)
  376.                 throw FaultCode.NOT_FOUND.toException("Gruppo con nome " + nomeGruppo + "non trovato per l'erogazione scelta");

  377.             else if ( idPortaApplicativa != null) {
  378.        
  379.                 StringBuilder inUsoMessage = new StringBuilder();
  380.                 AccordiServizioParteSpecificaUtilities.deleteAccordoServizioParteSpecificaPorteApplicative(idPortaApplicativa, idAsps, env.userLogin, env.apsCore, env.apsHelper, inUsoMessage);
  381.                
  382.                 if (inUsoMessage.length() > 0) {
  383.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
  384.                 }
  385.             }
  386.             context.getLogger().info("Invocazione completata con successo");
  387.      
  388.         }
  389.         catch(javax.ws.rs.WebApplicationException e) {
  390.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  391.             throw e;
  392.         }
  393.         catch(Throwable e) {
  394.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  395.             throw FaultCode.ERRORE_INTERNO.toException(e);
  396.         }
  397.     }
  398.    
  399.     /**
  400.      * Elimina l'azione o la risorsa dell'API associata al gruppo
  401.      *
  402.      * Questa operazione consente di eliminare l'azione o la risorsa dell'API associate al gruppo
  403.      *
  404.      */
  405.     @Override
  406.     public void deleteErogazioneGruppoAzione(String nome, Integer versione, String nomeGruppo, String nomeAzione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  407.         IContext context = this.getContext();
  408.         try {
  409.             context.getLogger().info("Invocazione in corso ...");    

  410.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  411.             context.getLogger().debug("Autorizzazione completata con successo");
  412.            
  413.            
  414.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  415.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  416.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  417.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPA(nomeGruppo, idAsps, env.apsCore), "Gruppo per l'erogazione scelta");
  418.             final PortaApplicativa pa = env.paCore.getPortaApplicativa(idPa);
  419.            
  420.             if ( BaseHelper.findFirst( pa.getAzione().getAzioneDelegataList(), a -> a.equals(nomeAzione)).isPresent() ) {
  421.                 StringBuilder inUsoMessage = new StringBuilder();
  422.                
  423.                 PorteApplicativeUtilities.deletePortaApplicativaAzioni(pa, env.paCore, env.paHelper, inUsoMessage, "\n",
  424.                         new ArrayList<>(Arrays.asList(nomeAzione)), env.userLogin);
  425.                
  426.                 if (inUsoMessage.length() > 0)
  427.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
  428.                
  429.             } else if ( env.delete_404 ) {
  430.                 throw FaultCode.NOT_FOUND.toException("Azione " + nomeAzione + " non presente nel gruppo " + nomeGruppo);
  431.             }
  432.                                            
  433.             context.getLogger().info("Invocazione completata con successo");
  434.        
  435.      
  436.         }
  437.         catch(javax.ws.rs.WebApplicationException e) {
  438.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  439.             throw e;
  440.         }
  441.         catch(Throwable e) {
  442.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  443.             throw FaultCode.ERRORE_INTERNO.toException(e);
  444.         }
  445.     }
  446.    
  447.     /**
  448.      * Ricerca i gruppi in cui sono stati classificate le azioni o le risorse dell'API
  449.      *
  450.      * Elenca i gruppi in cui sono stati classificate le azioni o le risorse dell'API
  451.      *
  452.      */
  453.     @Override
  454.     public ListaGruppi findAllErogazioneGruppi(String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio, Integer limit, Integer offset, String azione) {
  455.         IContext context = this.getContext();
  456.         try {
  457.             context.getLogger().info("Invocazione in corso ...");    

  458.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  459.             context.getLogger().debug("Autorizzazione completata con successo");
  460.            
  461.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  462.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  463.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  464.             final int idLista = Liste.CONFIGURAZIONE_EROGAZIONE;
  465.            
  466.             final ConsoleSearch ricerca = Helper.setupRicercaPaginata(null, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  467.            
  468.             if (!StringUtils.isEmpty(azione))
  469.                 ricerca.addFilter(idLista, Filtri.FILTRO_AZIONE, azione);
  470.            
  471.             List<MappingErogazionePortaApplicativa> mappings = env.apsCore.mappingServiziPorteAppList(idAsps, ricerca);
  472.            
  473.             if ( env.findall_404 && mappings.isEmpty() ) {
  474.                 throw FaultCode.NOT_FOUND.toException("Nessuna porta associata al servizio: " + idAsps.toString());
  475.             }
  476.            
  477.             ListaGruppi ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  478.                     ricerca.getIndexIniziale(idLista),
  479.                     ricerca.getPageSize(idLista),
  480.                     ricerca.getNumEntries(idLista), ListaGruppi.class);
  481.            
  482.             for (MappingErogazionePortaApplicativa m : mappings) {
  483.                 final PortaApplicativa pd = env.paCore.getPortaApplicativa(m.getIdPortaApplicativa());
  484.                
  485.                 GruppoItem g = new GruppoItem();
  486.                 g.setAzioni(pd.getAzione().getAzioneDelegataList());
  487.                 g.setNome(m.getDescrizione());
  488.                 g.setPredefinito(m.isDefault());
  489.                
  490.                 ret.addItemsItem(g);            
  491.             }
  492.                        
  493.        
  494.             context.getLogger().info("Invocazione completata con successo");
  495.             return ret;
  496.      
  497.         }
  498.         catch(javax.ws.rs.WebApplicationException e) {
  499.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  500.             throw e;
  501.         }
  502.         catch(Throwable e) {
  503.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  504.             throw FaultCode.ERRORE_INTERNO.toException(e);
  505.         }
  506.     }
  507.    
  508.     /**
  509.      * Restituisce la descrizione del gruppo
  510.      *
  511.      * Questa operazione consente di ottenere la descrizione del gruppo
  512.      *
  513.      */
  514.     @Override
  515.     public ApiDescrizione getErogazioneDescrizioneGruppo(String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  516.         IContext context = this.getContext();
  517.         try {
  518.             context.getLogger().info("Invocazione in corso ...");    

  519.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  520.             context.getLogger().debug("Autorizzazione completata con successo");    
  521.                        
  522.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  523.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  524.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  525.            
  526.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound(
  527.                     () -> ErogazioniApiHelper.getIDGruppoPA(nomeGruppo, idAsps, env.apsCore)
  528.                     , "Gruppo per l'erogazione scelta"
  529.                 );
  530.            
  531.             final PortaApplicativa pa = BaseHelper.supplyOrNotFound(
  532.                     () -> env.paCore.getPortaApplicativa(idPa)
  533.                     , "Gruppo per l'erogazione scelta"
  534.                 );
  535.            
  536.             ApiDescrizione descr = new ApiDescrizione();
  537.             descr.setDescrizione(pa.getDescrizione());
  538.            
  539.             context.getLogger().info("Invocazione completata con successo");
  540.             return descr;
  541.      
  542.         }
  543.         catch(javax.ws.rs.WebApplicationException e) {
  544.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  545.             throw e;
  546.         }
  547.         catch(Throwable e) {
  548.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  549.             throw FaultCode.ERRORE_INTERNO.toException(e);
  550.         }
  551.     }

  552.     /**
  553.      * Restituisce azioni/risorse associate al gruppo identificato dal nome
  554.      *
  555.      * Questa operazione consente di ottenere le azioni associate al gruppo identificato dal nome
  556.      *
  557.      */
  558.     @Override
  559.     public GruppoAzioni getErogazioneGruppoAzioni(String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  560.         IContext context = this.getContext();
  561.         try {
  562.             context.getLogger().info("Invocazione in corso ...");    

  563.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  564.             context.getLogger().debug("Autorizzazione completata con successo");
  565.            
  566.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  567.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  568.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  569.            
  570.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound(
  571.                     () -> ErogazioniApiHelper.getIDGruppoPA(nomeGruppo, idAsps, env.apsCore)
  572.                     , "Gruppo per l'erogazione scelta"
  573.                 );
  574.            
  575.             final PortaApplicativa pa = BaseHelper.supplyOrNotFound(
  576.                     () -> env.paCore.getPortaApplicativa(idPa)
  577.                     , "Gruppo per l'erogazione scelta"
  578.                 );
  579.            
  580.             GruppoAzioni ret = new GruppoAzioni();
  581.             ret.setAzioni(pa.getAzione().getAzioneDelegataList());
  582.             context.getLogger().info("Invocazione completata con successo");
  583.            
  584.             return ret;
  585.      
  586.         }
  587.         catch(javax.ws.rs.WebApplicationException e) {
  588.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  589.             throw e;
  590.         }
  591.         catch(Throwable e) {
  592.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  593.             throw FaultCode.ERRORE_INTERNO.toException(e);
  594.         }
  595.     }

  596.     /**
  597.      * Consente di modificare la descrizione del gruppo
  598.      *
  599.      * Questa operazione consente di aggiornare la descrizione del gruppo
  600.      *
  601.      */
  602.     @Override
  603.     public void updateErogazioneDescrizioneGruppo(ApiDescrizione body, String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  604.         IContext context = this.getContext();
  605.         try {
  606.             context.getLogger().info("Invocazione in corso ...");    

  607.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  608.             context.getLogger().debug("Autorizzazione completata con successo");    
  609.                        
  610.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  611.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  612.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());
  613.            
  614.             final IDPortaApplicativa idPa = BaseHelper.supplyOrNotFound(
  615.                     () -> ErogazioniApiHelper.getIDGruppoPA(nomeGruppo, idAsps, env.apsCore)
  616.                     , "Gruppo per l'erogazione scelta"
  617.                 );
  618.            
  619.             final PortaApplicativa pa = BaseHelper.supplyOrNotFound(
  620.                     () -> env.paCore.getPortaApplicativa(idPa)
  621.                     , "Gruppo per l'erogazione scelta"
  622.                 );        
  623.            
  624.             pa.setDescrizione(body.getDescrizione());
  625.            
  626.             env.paCore.performUpdateOperation(env.userLogin, false, pa);
  627.            
  628.             context.getLogger().info("Invocazione completata con successo");
  629.        
  630.         }
  631.         catch(javax.ws.rs.WebApplicationException e) {
  632.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  633.             throw e;
  634.         }
  635.         catch(Throwable e) {
  636.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  637.             throw FaultCode.ERRORE_INTERNO.toException(e);
  638.         }
  639.     }
  640.    
  641.     /**
  642.      * Consente di modificare il nome del gruppo
  643.      *
  644.      * Questa operazione consente di aggiornare il nome di un gruppo
  645.      *
  646.      */
  647.     @Override
  648.     public void updateErogazioneGruppoNome(GruppoNome body, String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  649.         IContext context = this.getContext();
  650.         try {
  651.             context.getLogger().info("Invocazione in corso ...");    

  652.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  653.             context.getLogger().debug("Autorizzazione completata con successo");
  654.            
  655.             BaseHelper.throwIfNull(body);
  656.                        
  657.             // PorteApplicativeConfigurazioneChange
  658.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  659.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfErogazione(tipoServizio, nome, versione, env.idSoggetto.toIDSoggetto(), env), "Erogazione");
  660.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  661.             final List<MappingErogazionePortaApplicativa> listaMapping = env.apsCore.mappingServiziPorteAppList(idAsps,idAsps.getId(), null);
  662.             final List<String> mappingUtilizzati = ErogazioniApiHelper.getDescrizioniMappingPA(listaMapping);
  663.            
  664.             BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPA(nomeGruppo, idAsps, env.apsCore), "Gruppo per l'erogazione scelta");
  665.            
  666.             if (mappingUtilizzati.stream().filter( m -> m.equalsIgnoreCase(body.getNome())).findFirst().isPresent()) {
  667.                 throw FaultCode.CONFLITTO.toException(CostantiControlStation.MESSAGGIO_ERRORE_NOME_GRUPPO_GIA_PRESENTE);
  668.             }
  669.            
  670.             if (! env.paHelper.configurazioneCambiaNomeCheck(TipoOperazione.OTHER, body.getNome(), mappingUtilizzati,false)) {
  671.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  672.             }
  673.            
  674.             final MappingErogazionePortaApplicativa mappingErogazionePortaApplicativa = AccordiServizioParteSpecificaUtilities.getMappingPAFilterByDescription(
  675.                      listaMapping,
  676.                      nomeGruppo
  677.                     );
  678.            
  679.             mappingErogazionePortaApplicativa.setDescrizione(body.getNome());
  680.            
  681.             env.paCore.aggiornaDescrizioneMappingErogazionePortaApplicativa( mappingErogazionePortaApplicativa, env.userLogin );
  682.                                
  683.             context.getLogger().info("Invocazione completata con successo");
  684.        
  685.      
  686.         }
  687.         catch(javax.ws.rs.WebApplicationException e) {
  688.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  689.             throw e;
  690.         }
  691.         catch(Throwable e) {
  692.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  693.             throw FaultCode.ERRORE_INTERNO.toException(e);
  694.         }
  695.     }
  696.    
  697. }