FruizioniGruppiApiServiceImpl.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.fruizioni.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.PortaDelegata;
  29. import org.openspcoop2.core.config.constants.TipoAutenticazionePrincipal;
  30. import org.openspcoop2.core.config.rs.server.api.FruizioniGruppiApi;
  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.IDPortaDelegata;
  47. import org.openspcoop2.core.id.IDSoggetto;
  48. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  49. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  50. import org.openspcoop2.utils.BooleanNullable;
  51. import org.openspcoop2.utils.service.BaseImpl;
  52. import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
  53. import org.openspcoop2.utils.service.authorization.AuthorizationManager;
  54. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  55. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  56. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  57. import org.openspcoop2.utils.service.context.IContext;
  58. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  59. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  60. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  61. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaFruitoriPorteDelegateMappingInfo;
  62. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaUtilities;
  63. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  64. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateUtilities;
  65. import org.openspcoop2.web.lib.mvc.ServletUtils;
  66. import org.openspcoop2.web.lib.mvc.TipoOperazione;

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

  75.     public FruizioniGruppiApiServiceImpl(){
  76.         super(org.slf4j.LoggerFactory.getLogger(FruizioniGruppiApiServiceImpl.class));
  77.     }

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

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

  93.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  94.             context.getLogger().debug("Autorizzazione completata con successo");
  95.            
  96.             BaseHelper.throwIfNull(body);
  97.            
  98.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);

  99.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  100.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env), "Fruizione");
  101.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());

  102.             final IDPortaDelegata idPd = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPD(nomeGruppo, env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore), "Gruppo per la fruizione scelta");
  103.             final PortaDelegata pd = env.pdCore.getPortaDelegata(idPd);
  104.                        
  105.             List<String> azioniOccupate = ErogazioniApiHelper.getAzioniOccupateFruizione(idAsps, env.idSoggetto.toIDSoggetto(), env.apsCore, env.pdCore);
  106.            
  107.             ErogazioniApiHelper.checkAzioniAdd(
  108.                     body.getAzioni(),
  109.                     azioniOccupate,
  110.                     env.apcCore.getAzioni(asps, env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo()), false, false, null)
  111.                 );
  112.            
  113.            
  114.             env.requestWrapper.overrideParameterValues(CostantiControlStation.PARAMETRO_AZIONI, body.getAzioni().toArray(new String[0]));
  115.        
  116.             long idFruizione = env.apsCore.getIdFruizioneAccordoServizioParteSpecifica(env.idSoggetto.toIDSoggetto(), idAsps);
  117.             List<MappingFruizionePortaDelegata> listaMappingFruizione = env.apsCore.serviziFruitoriMappingList(idFruizione, env.idSoggetto.toIDSoggetto(), idAsps, null);
  118.             if (!env.paHelper.porteDelAzioneCheckData(TipoOperazione.ADD,azioniOccupate,listaMappingFruizione)) {
  119.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  120.             }
  121.            
  122.             // aggiungo azione nel db
  123.             for(String azione: body.getAzioni()) {
  124.                 pd.getAzione().addAzioneDelegata(azione);
  125.             }

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

  155.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  156.             context.getLogger().debug("Autorizzazione completata con successo");
  157.            
  158.             ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  159.            
  160.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  161.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(),  env), "Fruizione");
  162.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps), asps.getId());

  163.        
  164.             String mappingPadre = null;
  165.             String fruizioneAutenticazione = null;
  166.             String fruizioneAutenticazioneOpzionale = null;            
  167.             TipoAutenticazionePrincipal fruizioneAutenticazionePrincipal = null;
  168.             List<String> fruizioneAutenticazioneParametroList = null;
  169.            
  170.             if ( body.getConfigurazione().getModalita() == ModalitaConfigurazioneGruppoEnum.NUOVA ) {
  171.                
  172.                 final GruppoNuovaConfigurazione confNuova = ErogazioniApiHelper.deserializeModalitaConfGruppo(body.getConfigurazione().getModalita(), body.getConfigurazione());
  173.                 if(confNuova.getAutenticazione()!=null) {
  174.                     fruizioneAutenticazione = Enums.toTipoAutenticazione(confNuova.getAutenticazione().getTipo()).toString();
  175.                     BooleanNullable autenticazioneOpzionaleNullable = ErogazioniApiHelper.getAutenticazioneOpzionale(confNuova.getAutenticazione()); // gestisce authn se null
  176.                     fruizioneAutenticazioneOpzionale = ServletUtils.boolToCheckBoxStatus(autenticazioneOpzionaleNullable!=null ? autenticazioneOpzionaleNullable.getValue() : null);
  177.                     fruizioneAutenticazionePrincipal = ErogazioniApiHelper.getTipoAutenticazionePrincipal(confNuova.getAutenticazione());
  178.                     fruizioneAutenticazioneParametroList = ErogazioniApiHelper.getAutenticazioneParametroList(env, confNuova.getAutenticazione().getTipo(), confNuova.getAutenticazione());
  179.                 }
  180.             }
  181.            
  182.             else if ( body.getConfigurazione().getModalita() == ModalitaConfigurazioneGruppoEnum.EREDITA ) {    
  183.                 GruppoEreditaConfigurazione confEredita = ErogazioniApiHelper.deserializeModalitaConfGruppo(body.getConfigurazione().getModalita(), body.getConfigurazione());
  184.                 List<MappingFruizionePortaDelegata> mappings = ErogazioniApiHelper.getMappingGruppiPD( confEredita.getNome(), env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore);
  185.                 if ( mappings.isEmpty() ) {
  186.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il gruppo " + confEredita.getNome() + " da cui ereditare è inesistente");
  187.                 }
  188.                 mappingPadre = mappings.get(0).getNome();          
  189.             }
  190.            
  191.             AccordiServizioParteSpecificaFruitoriPorteDelegateMappingInfo mappingInfo = AccordiServizioParteSpecificaUtilities.getMappingInfo(mappingPadre, env.idSoggetto.toIDSoggetto(), asps, env.apsCore);
  192.             MappingFruizionePortaDelegata mappingSelezionato = mappingInfo.getMappingSelezionato();
  193.             MappingFruizionePortaDelegata mappingDefault = mappingInfo.getMappingDefault();
  194.            
  195.             if ( mappingDefault == null )
  196.                 throw FaultCode.NOT_FOUND.toException("Nessuna fruizione trovata");
  197.             if ( mappingSelezionato == null )
  198.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Gruppo con nome  non trovato");
  199.            
  200.             List<String> azioniOccupate = mappingInfo.getAzioniOccupate();
  201.            
  202.             ErogazioniApiHelper.checkAzioniAdd(
  203.                     body.getAzioni(),
  204.                     azioniOccupate,
  205.                     env.apcCore.getAzioni(asps, env.apcCore.getAccordoServizioSintetico(asps.getIdAccordo()), false, false, null)
  206.                 );
  207.            
  208.             if (!env.apsHelper.configurazioneFruizioneCheckData(
  209.                     TipoOperazione.ADD,
  210.                     mappingInfo.getNomeNuovaConfigurazione(),
  211.                     body.getNome(),
  212.                     body.getAzioni().toArray(new String[0]),
  213.                     asps,
  214.                     azioniOccupate,
  215.                     body.getConfigurazione().getModalita().toString(),
  216.                     null,
  217.                     env.isSupportatoAutenticazioneSoggetti,
  218.                     mappingInfo)) {
  219.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  220.             }
  221.            
  222.             AccordiServizioParteSpecificaUtilities.addAccordoServizioParteSpecificaPorteDelegate(
  223.                     mappingDefault,
  224.                     mappingSelezionato,
  225.                     mappingInfo.getNomeNuovaConfigurazione(),
  226.                     body.getNome(),
  227.                     body.getAzioni().toArray(new String[0]),
  228.                     body.getConfigurazione().getModalita().toString(),
  229.                     body.getConfigurazione().getModalita().toString(),
  230.                     null,                           // endpointtype,
  231.                     null,                           // tipoconn,
  232.                     null,                           // autenticazioneHttp,  // RECHECK
  233.                     null,                           // connettoreDebug,
  234.                     null,                           // url,
  235.                     null,                           // nomeCodaJms,
  236.                     null,                           // tipoJms,
  237.                     null,                           // initcont,
  238.                     null,                           // urlpgk,
  239.                     null,                           // provurl,
  240.                     null,                           // connfact,
  241.                     null,                           // tipoSendas,
  242.                     null,                           // user,    RECHECK
  243.                     null,                           // password, RECHECK
  244.                     null,                           // httpsurl,
  245.                     null,                           // httpstipologia,
  246.                     false,                          // httpshostverify,
  247.                     ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TRUST_VERIFY_CERTS, // httpsTrustVerifyCert
  248.                     null,                           // httpspath,
  249.                     null,                           // httpstipo,
  250.                     null,                           // httpspwd,
  251.                     null,                           // httpsalgoritmo,
  252.                     false,                          // httpsstato,
  253.                     null,                           // httpskeystore,
  254.                     null,                           // httpspwdprivatekeytrust,
  255.                     null,                           // httpspathkey,
  256.                     null,                           // httpstipokey,
  257.                     null,                           // httpspwdkey,
  258.                     null,                           // httpspwdprivatekey,
  259.                     null,                           // httpsalgoritmokey,
  260.                     null,                           // httpsKeyAlias
  261.                     null,                           // httpsTrustStoreCRLs
  262.                     null,                           // httpsTrustStoreOCSPPolicy
  263.                     null,                           // httpsKeyStoreBYOKPolicy
  264.                     null,                           // proxy_enabled,
  265.                     null,                           // proxy_hostname,
  266.                     null,                           // proxy_port,
  267.                     null,                           // proxy_username,
  268.                     null,                           // proxy_password,
  269.                     null,                           // tempiRisposta_enabled,
  270.                     null,                           // tempiRisposta_connectionTimeout,
  271.                     null,                           // tempiRisposta_readTimeout,
  272.                     null,                           // tempiRisposta_tempoMedioRisposta,
  273.                     "no",                           // opzioniAvanzate,
  274.                     null,                           // transfer_mode,
  275.                     null,                           // transfer_mode_chunk_size,
  276.                     null,                           // redirect_mode,
  277.                     null,                           // redirect_max_hop,
  278.                     null,                           // requestOutputFileName,
  279.                     null,                           // requestOutputFileName_permissions,
  280.                     null,                           // requestOutputFileNameHeaders,
  281.                     null,                           // requestOutputFileNameHeaders_permissions,
  282.                     null,                           // requestOutputParentDirCreateIfNotExists,
  283.                     null,                           // requestOutputOverwriteIfExists,
  284.                     null,                           // responseInputMode,
  285.                     null,                           // responseInputFileName,
  286.                     null,                           // responseInputFileNameHeaders,
  287.                     null,                           // responseInputDeleteAfterRead,
  288.                     null,                           // responseInputWaitTime,
  289.                     false,                          // autenticazioneToken,
  290.                     null,                           // tokenPolicy,
  291.                     null,                           // listExtendedConnettore,
  292.                     fruizioneAutenticazione,
  293.                     fruizioneAutenticazioneOpzionale,
  294.                     fruizioneAutenticazionePrincipal,
  295.                     fruizioneAutenticazioneParametroList,
  296.                     "disabilitato",                 // erogazioneAutorizzazione, Come da debug.
  297.                     null,                           // erogazioneAutorizzazioneAutenticati,
  298.                     null,                           // erogazioneAutorizzazioneRuoli,
  299.                     null,                           // erogazioneAutorizzazioneRuoliTipologia,
  300.                     null,                           // erogazioneAutorizzazioneRuoliMatch,
  301.                     null,                           // nomeSA,
  302.                     null,                           // erogazioneRuolo,
  303.                     null,                           //  autorizzazioneAutenticatiToken,
  304.                     null,                           //  autorizzazioneRuoliToken,
  305.                     null,                           //  autorizzazioneRuoliTipologiaToken,
  306.                     null,                           //  autorizzazioneRuoliMatchToken,
  307.                     null,                           // autorizzazione_tokenOptions,
  308.                     null,                           // autorizzazioneScope,
  309.                     null,                           // scope,
  310.                     null,                           // autorizzazioneScopeMatch,
  311.                     null,                           // allegatoXacmlPolicy,
  312.                     "disabilitato",                 // gestioneToken, Come da debug.
  313.                     null,                           // gestioneTokenPolicy,  
  314.                     null,                           // gestioneTokenOpzionale,  
  315.                     null,                           // gestioneTokenValidazioneInput,
  316.                     null,                           // gestioneTokenIntrospection,
  317.                     null,                           // gestioneTokenUserInfo,
  318.                     null,                           // gestioneTokenTokenForward,
  319.                     null,                           // autenticazioneTokenIssuer,
  320.                     null,                           // autenticazioneTokenClientId,
  321.                     null,                           // autenticazioneTokenSubject,
  322.                     null,                           // autenticazioneTokenUsername,
  323.                     null,                           // autenticazioneTokenEMail,
  324.                     env.idSoggetto.toIDSoggetto(),
  325.                     asps,
  326.                     env.userLogin,
  327.                     env.apsCore,
  328.                     env.apsHelper,
  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.             context.getLogger().info("Invocazione completata con successo");
  339.        
  340.             // Bug Fix: altrimenti viene generato 204
  341.             context.getServletResponse().setStatus(201);
  342.      
  343.         }
  344.         catch(javax.ws.rs.WebApplicationException e) {
  345.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  346.             throw e;
  347.         }
  348.         catch(Throwable e) {
  349.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  350.             throw FaultCode.ERRORE_INTERNO.toException(e);
  351.         }
  352.     }
  353.    
  354.     /**
  355.      * Elimina il gruppo identificato dal nome
  356.      *
  357.      * Questa operazione consente di eliminare il gruppo identificato dal nome
  358.      *
  359.      */
  360.     @Override
  361.     public void deleteFruizioneGruppo(String erogatore, String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  362.         IContext context = this.getContext();
  363.         try {
  364.             context.getLogger().info("Invocazione in corso ...");    

  365.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  366.             context.getLogger().debug("Autorizzazione completata con successo");    
  367.                        
  368.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  369.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  370.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env), "Fruizione");
  371.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  372.            
  373.             // ricevo come parametro l'id della pa associata al mapping da cancellare
  374.             final IDPortaDelegata idPortaDelegata = ErogazioniApiHelper.getIDGruppoPD(nomeGruppo, env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore);
  375.            
  376.             if ( idPortaDelegata != null ) {
  377.            
  378.                 StringBuilder inUsoMessage = new StringBuilder();
  379.                 AccordiServizioParteSpecificaUtilities.deleteAccordoServizioParteSpecificaFruitoriPorteDelegate(
  380.                         new ArrayList<IDPortaDelegata>(Arrays.asList(idPortaDelegata)),
  381.                         asps, env.idSoggetto.toIDSoggetto(),
  382.                         env.userLogin,
  383.                         env.apsCore,
  384.                         env.apsHelper,
  385.                         inUsoMessage
  386.                     );
  387.                
  388.                 if (inUsoMessage.length() > 0)
  389.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
  390.             } else if ( env.delete_404 ) {
  391.                 throw FaultCode.NOT_FOUND.toException("Gruppo " + nomeGruppo + " non associato alla fruizione");
  392.             }
  393.             context.getLogger().info("Invocazione completata con successo");
  394.        
  395.      
  396.         }
  397.         catch(javax.ws.rs.WebApplicationException e) {
  398.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  399.             throw e;
  400.         }
  401.         catch(Throwable e) {
  402.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  403.             throw FaultCode.ERRORE_INTERNO.toException(e);
  404.         }
  405.     }
  406.    
  407.     /**
  408.      * Elimina l'azione o la risorsa dell'API associatia al gruppo
  409.      *
  410.      * Questa operazione consente di eliminare l'azione o la risorsa dell'API associata al gruppo
  411.      *
  412.      */
  413.     @Override
  414.     public void deleteFruizioneGruppoAzione(String erogatore, String nome, Integer versione, String nomeGruppo, String nomeAzione, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  415.         IContext context = this.getContext();
  416.         try {
  417.             context.getLogger().info("Invocazione in corso ...");    

  418.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  419.             context.getLogger().debug("Autorizzazione completata con successo");
  420.            
  421.            
  422.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  423.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  424.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env), "Fruizione");
  425.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  426.             final IDPortaDelegata idPd = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPD(nomeGruppo, env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore), "Gruppo per la fruizione scelta");
  427.             final PortaDelegata pd = env.pdCore.getPortaDelegata(idPd);
  428.            
  429.             if ( BaseHelper.findFirst( pd.getAzione().getAzioneDelegataList(), a -> a.equals(nomeAzione)).isPresent() ) {
  430.                        
  431.                 StringBuilder inUsoMessage = new StringBuilder();
  432.                
  433.                 PorteDelegateUtilities.deletePortaDelegataAzioni(pd, asps, env.pdCore, env.pdHelper, inUsoMessage, new ArrayList<>(Arrays.asList(nomeAzione)), env.userLogin);
  434.                
  435.                 if (inUsoMessage.length() > 0)
  436.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
  437.             } else if ( env.delete_404 ) {
  438.                 throw FaultCode.NOT_FOUND.toException("Azione " + nomeAzione + " non associata al gruppo " + nomeGruppo );
  439.             }
  440.            
  441.             context.getLogger().info("Invocazione completata con successo");
  442.        
  443.      
  444.         }
  445.         catch(javax.ws.rs.WebApplicationException e) {
  446.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  447.             throw e;
  448.         }
  449.         catch(Throwable e) {
  450.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  451.             throw FaultCode.ERRORE_INTERNO.toException(e);
  452.         }
  453.     }
  454.    
  455.     /**
  456.      * Ricerca i gruppi in cui sono stati classificate le azioni o le risorse dell'API
  457.      *
  458.      * Elenca i gruppi in cui sono stati classificate le azioni o le risorse dell'API
  459.      *
  460.      */
  461.     @Override
  462.     public ListaGruppi findAllFruizioneGruppi(String erogatore, String nome, Integer versione, ProfiloEnum profilo, String soggetto, String tipoServizio, Integer limit, Integer offset, String azione) {
  463.         IContext context = this.getContext();
  464.         try {
  465.             context.getLogger().info("Invocazione in corso ...");    

  466.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  467.             context.getLogger().debug("Autorizzazione completata con successo");
  468.            
  469.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  470.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  471.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env), "Fruizione");
  472.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  473.            
  474.             final int idLista = Liste.CONFIGURAZIONE_FRUIZIONE;
  475.             final ConsoleSearch ricerca = Helper.setupRicercaPaginata(null, limit, offset, idLista, env.idSoggetto.toIDSoggetto(), env.tipo_protocollo);
  476.            
  477.             if (!StringUtils.isEmpty(azione))
  478.                 ricerca.addFilter(idLista, Filtri.FILTRO_AZIONE, azione);
  479.            
  480.             List<MappingFruizionePortaDelegata> mappings = env.apsCore.serviziFruitoriMappingList(env.idSoggetto.toIDSoggetto(), idAsps, ricerca);
  481.            
  482.             if ( env.findall_404 && mappings.isEmpty() ) {
  483.                 throw FaultCode.NOT_FOUND.toException("Nessun gruppo associato alla fruizione");
  484.             }
  485.            
  486.             ListaGruppi ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  487.                     ricerca.getIndexIniziale(idLista),
  488.                     ricerca.getPageSize(idLista),
  489.                     ricerca.getNumEntries(idLista), ListaGruppi.class);
  490.            
  491.             for (MappingFruizionePortaDelegata m : mappings) {
  492.                 final PortaDelegata pd = env.pdCore.getPortaDelegata(m.getIdPortaDelegata());
  493.                
  494.                 GruppoItem g = new GruppoItem();
  495.                 g.setAzioni(pd.getAzione().getAzioneDelegataList());
  496.                 g.setNome(m.getDescrizione());
  497.                 g.setPredefinito(m.isDefault());
  498.                
  499.                 ret.addItemsItem(g);            
  500.             }
  501.            
  502.             context.getLogger().info("Invocazione completata con successo");
  503.             return ret;
  504.      
  505.         }
  506.         catch(javax.ws.rs.WebApplicationException e) {
  507.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  508.             throw e;
  509.         }
  510.         catch(Throwable e) {
  511.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  512.             throw FaultCode.ERRORE_INTERNO.toException(e);
  513.         }
  514.     }

  515.     /**
  516.      * Restituisce la descrizione del gruppo
  517.      *
  518.      * Questa operazione consente di ottenere la descrizione del gruppo
  519.      *
  520.      */
  521.     @Override
  522.     public ApiDescrizione getFruizioneDescrizioneGruppo(String erogatore, String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  523.         IContext context = this.getContext();
  524.         try {
  525.             context.getLogger().info("Invocazione in corso ...");    

  526.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  527.             context.getLogger().debug("Autorizzazione completata con successo");    
  528.                        
  529.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  530.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  531.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env), "Fruizione");
  532.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  533.            
  534.             // ricevo come parametro l'id della pa associata al mapping da cancellare
  535.             final IDPortaDelegata idPortaDelegata = BaseHelper.supplyOrNotFound(
  536.                     () -> ErogazioniApiHelper.getIDGruppoPD(nomeGruppo, env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore)
  537.                     , "Gruppo per la fruizione scelta"
  538.                 );
  539.             final PortaDelegata pd = BaseHelper.supplyOrNotFound(
  540.                     () -> env.pdCore.getPortaDelegata(idPortaDelegata)
  541.                     , "Gruppo per la fruizione scelta"
  542.                 );  
  543.            
  544.             ApiDescrizione descr = new ApiDescrizione();
  545.             descr.setDescrizione(pd.getDescrizione());
  546.            
  547.             context.getLogger().info("Invocazione completata con successo");
  548.             return descr;
  549.      
  550.         }
  551.         catch(javax.ws.rs.WebApplicationException e) {
  552.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  553.             throw e;
  554.         }
  555.         catch(Throwable e) {
  556.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  557.             throw FaultCode.ERRORE_INTERNO.toException(e);
  558.         }
  559.     }
  560.    
  561.     /**
  562.      * Restituisce azioni/risorse associate al gruppo identificato dal nome
  563.      *
  564.      * Questa operazione consente di ottenere le azioni associate al gruppo identificato dal nome
  565.      *
  566.      */
  567.     @Override
  568.     public GruppoAzioni getFruizioneGruppoAzioni(String erogatore, String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  569.         IContext context = this.getContext();
  570.         try {
  571.             context.getLogger().info("Invocazione in corso ...");    

  572.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  573.             context.getLogger().debug("Autorizzazione completata con successo");
  574.            
  575.            
  576.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  577.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  578.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env), "Fruizione");
  579.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  580.            
  581.             // ricevo come parametro l'id della pa associata al mapping da cancellare
  582.             final IDPortaDelegata idPortaDelegata = BaseHelper.supplyOrNotFound(
  583.                     () -> ErogazioniApiHelper.getIDGruppoPD(nomeGruppo, env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore)
  584.                     , "Gruppo per la fruizione scelta"
  585.                 );
  586.             final PortaDelegata pd = BaseHelper.supplyOrNotFound(
  587.                     () -> env.pdCore.getPortaDelegata(idPortaDelegata)
  588.                     , "Gruppo per la fruizione scelta"
  589.                 );
  590.            
  591.            
  592.             GruppoAzioni ret = new GruppoAzioni();
  593.             ret.setAzioni(pd.getAzione().getAzioneDelegataList());
  594.             context.getLogger().info("Invocazione completata con successo");
  595.            
  596.             return ret;
  597.      
  598.         }
  599.         catch(javax.ws.rs.WebApplicationException e) {
  600.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  601.             throw e;
  602.         }
  603.         catch(Throwable e) {
  604.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  605.             throw FaultCode.ERRORE_INTERNO.toException(e);
  606.         }
  607.     }

  608.     /**
  609.      * Consente di modificare la descrizione del gruppo
  610.      *
  611.      * Questa operazione consente di aggiornare la descrizione del gruppo
  612.      *
  613.      */
  614.     @Override
  615.     public void updateFruizioneDescrizioneGruppo(ApiDescrizione body, String erogatore, String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  616.         IContext context = this.getContext();
  617.         try {
  618.             context.getLogger().info("Invocazione in corso ...");    

  619.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  620.             context.getLogger().debug("Autorizzazione completata con successo");    
  621.                        
  622.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  623.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  624.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env), "Fruizione");
  625.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  626.            
  627.             // ricevo come parametro l'id della pa associata al mapping da cancellare
  628.             final IDPortaDelegata idPortaDelegata = BaseHelper.supplyOrNotFound(
  629.                     () -> ErogazioniApiHelper.getIDGruppoPD(nomeGruppo, env.idSoggetto.toIDSoggetto(), idAsps, env.apsCore)
  630.                     , "Gruppo per la fruizione scelta"
  631.                 );
  632.             final PortaDelegata pd = BaseHelper.supplyOrNotFound(
  633.                     () -> env.pdCore.getPortaDelegata(idPortaDelegata)
  634.                     , "Gruppo per la fruizione scelta"
  635.                 );  
  636.        
  637.             pd.setDescrizione(body.getDescrizione());

  638.             env.pdCore.performUpdateOperation(env.userLogin, false, pd);
  639.            
  640.             context.getLogger().info("Invocazione completata con successo");
  641.        
  642.         }
  643.         catch(javax.ws.rs.WebApplicationException e) {
  644.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  645.             throw e;
  646.         }
  647.         catch(Throwable e) {
  648.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  649.             throw FaultCode.ERRORE_INTERNO.toException(e);
  650.         }
  651.     }
  652.    
  653.     /**
  654.      * Consente di modificare il nome del gruppo
  655.      *
  656.      * Questa operazione consente di aggiornare il nome di un gruppo
  657.      *
  658.      */
  659.     @Override
  660.     public void updateFruizioneGruppoNome(GruppoNome body, String erogatore, String nome, Integer versione, String nomeGruppo, ProfiloEnum profilo, String soggetto, String tipoServizio) {
  661.         IContext context = this.getContext();
  662.         try {
  663.             context.getLogger().info("Invocazione in corso ...");    

  664.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  665.             context.getLogger().debug("Autorizzazione completata con successo");
  666.            
  667.              
  668.             final ErogazioniEnv env = new ErogazioniEnv(context.getServletRequest(), profilo, soggetto, context);
  669.             final IDSoggetto idErogatore = new IDSoggetto(env.tipo_soggetto, erogatore);
  670.             final AccordoServizioParteSpecifica asps = BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getServizioIfFruizione(tipoServizio, nome, versione, idErogatore, env.idSoggetto.toIDSoggetto(), env), "Fruizione");
  671.             final IdServizio idAsps = new IdServizio(env.idServizioFactory.getIDServizioFromAccordo(asps),asps.getId());
  672.             final List<MappingFruizionePortaDelegata> listaMapping = env.apsCore.serviziFruitoriMappingList(env.idSoggetto.toIDSoggetto(), idAsps, null);

  673.             final List<String> mappingUtilizzati = ErogazioniApiHelper.getDescrizioniMappingPD(listaMapping);
  674.            
  675.             BaseHelper.supplyOrNotFound( () -> ErogazioniApiHelper.getIDGruppoPD(nomeGruppo, env.idSoggetto.toIDSoggetto(),  idAsps, env.apsCore), "Gruppo per la fruizione scelta");
  676.            
  677.             if (mappingUtilizzati.stream().filter( m -> m.equalsIgnoreCase(body.getNome())).findFirst().isPresent()) {
  678.                 throw FaultCode.CONFLITTO.toException(CostantiControlStation.MESSAGGIO_ERRORE_NOME_GRUPPO_GIA_PRESENTE);
  679.             }
  680.            
  681.             if (! env.paHelper.configurazioneCambiaNomeCheck(TipoOperazione.OTHER, body.getNome(), mappingUtilizzati,true)) {
  682.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
  683.             }
  684.            
  685.             final MappingFruizionePortaDelegata mapping= AccordiServizioParteSpecificaUtilities.getMappingPDFilterByDescription(
  686.                      listaMapping,
  687.                      nomeGruppo
  688.                     );
  689.            
  690.             mapping.setDescrizione(body.getNome());
  691.            
  692.             env.pdCore.aggiornaDescrizioneMappingFruizionePortaDelegata( mapping, env.userLogin );
  693.                                    
  694.        
  695.             context.getLogger().info("Invocazione completata con successo");
  696.        
  697.      
  698.         }
  699.         catch(javax.ws.rs.WebApplicationException e) {
  700.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  701.             throw e;
  702.         }
  703.         catch(Throwable e) {
  704.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  705.             throw FaultCode.ERRORE_INTERNO.toException(e);
  706.         }
  707.     }
  708.    
  709. }