MonitoraggioEnv.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.monitor.rs.server.api.impl.utils;

  21. import java.sql.Connection;
  22. import java.util.HashMap;
  23. import java.util.List;

  24. import org.openspcoop2.core.commons.Filtri;
  25. import org.openspcoop2.core.commons.Liste;
  26. import org.openspcoop2.core.commons.Search;
  27. import org.openspcoop2.core.id.IDSoggetto;
  28. import org.openspcoop2.core.monitor.rs.server.config.DBManager;
  29. import org.openspcoop2.core.monitor.rs.server.config.LoggerProperties;
  30. import org.openspcoop2.core.monitor.rs.server.config.ServerProperties;
  31. import org.openspcoop2.core.monitor.rs.server.config.SoggettiConfig;
  32. import org.openspcoop2.core.registry.constants.PddTipologia;
  33. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  34. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  35. import org.openspcoop2.protocol.sdk.ProtocolException;
  36. import org.openspcoop2.utils.UtilsException;
  37. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  38. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  39. import org.openspcoop2.utils.service.beans.utils.ProfiloUtils;
  40. import org.openspcoop2.utils.service.context.IContext;
  41. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  42. import org.slf4j.Logger;

  43. /**
  44.  * MonitoraggioEnv
  45.  *
  46.  * @author $Author$
  47.  * @version $Rev$, $Date$
  48.  *
  49.  */
  50. public class MonitoraggioEnv {
  51.    
  52.     public final IContext context;
  53.     public final ProfiloEnum profilo;
  54.     public final String tipoSoggetto;
  55.     public final String nomeSoggettoLocale;
  56.     public final Logger log;
  57.     public final String tipo_protocollo;
  58.     public final ProtocolFactoryManager protocolFactoryMgr;

  59.     public final boolean supportatoSoggettoReferenteAPI;
  60.     public IDSoggetto soggettoReferenteAPIDefault;
  61.    
  62.     public MonitoraggioEnv(IContext context, ProfiloEnum profilo, String nome_soggetto, Logger log) throws UtilsException, ProtocolException {
  63.         this.context = context;
  64.        
  65.         if (profilo == null) {
  66.             this.profilo = ProfiloUtils.getMapProtocolloToProfilo().get(ServerProperties.getInstance().getProtocolloDefault());
  67.         } else {
  68.             this.profilo = profilo;
  69.         }
  70.        
  71.         String protocollo = Converter.toProtocollo(profilo);
  72.        
  73.         this.tipoSoggetto = ProtocolFactoryManager.getInstance().getDefaultOrganizationTypes().get(protocollo);
  74.        
  75.         ServerProperties serverProperties = ServerProperties.getInstance();
  76.                
  77.         this.supportatoSoggettoReferenteAPI = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo).createProtocolConfiguration().isSupportoSoggettoReferenteAccordiParteComune();
  78.         if(!this.supportatoSoggettoReferenteAPI) {
  79.             this.soggettoReferenteAPIDefault = getSoggettoOperativoDefault(protocollo);
  80.         }
  81.        
  82.         if (nome_soggetto == null) {
  83.             if(serverProperties.useSoggettoDefault()) {
  84.                 nome_soggetto = serverProperties.getSoggettoDefaultIfEnabled(ProfiloUtils.toProtocollo(this.profilo));
  85.             }
  86.         }
  87.                
  88.         if (nome_soggetto != null) {
  89.             this.nomeSoggettoLocale = nome_soggetto;
  90.             if(!SoggettiConfig.existsIdentificativoPorta(this.tipoSoggetto, this.nomeSoggettoLocale)) {
  91.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il soggetto '"+this.nomeSoggettoLocale+"' indicato non esiste");
  92.             }
  93.         }
  94.         else {
  95.             this.nomeSoggettoLocale = null; // non verra' attuato alcun filtro sul soggetto locale.
  96.         }
  97.        
  98.         this.log = log;
  99.        
  100.         this.tipo_protocollo = BaseHelper.tipoProtocolloFromProfilo.get(this.profilo);
  101.         this.protocolFactoryMgr = ProtocolFactoryManager.getInstance();
  102.     }
  103.    
  104.     private static HashMap<String, IDSoggetto> map = new HashMap<String, IDSoggetto>();
  105.     private static IDSoggetto getSoggettoOperativoDefault(String protocollo) {
  106.         if(map.containsKey(protocollo)) {
  107.             return map.get(protocollo);
  108.         }
  109.         return _getSoggettoOperativoDefault(protocollo);
  110.     }
  111.     private static synchronized IDSoggetto _getSoggettoOperativoDefault(String protocollo) {
  112.        
  113.         if(map.containsKey(protocollo)) {
  114.             return map.get(protocollo);
  115.         }
  116.        
  117.         Search s = new Search();
  118.         s.setPageSize(Liste.SOGGETTI, 1); // serve solo per il count
  119.         s.addFilter(Liste.SOGGETTI, Filtri.FILTRO_PROTOCOLLO, protocollo); // imposto protocollo
  120.         s.addFilter(Liste.SOGGETTI, Filtri.FILTRO_DOMINIO, PddTipologia.OPERATIVO.toString()); // imposto dominio
  121.         s.addFilter(Liste.SOGGETTI, Filtri.FILTRO_SOGGETTO_DEFAULT, "true"); // imposto indicazione di volere il soggetto operativo di default
  122.         List<org.openspcoop2.core.registry.Soggetto> lista = null;
  123.         DBManager dbManager = DBManager.getInstance();
  124.         Connection con = null;
  125.         try {
  126.             con = dbManager.getConnectionConfig();
  127.             DriverRegistroServiziDB driver = new DriverRegistroServiziDB(con, LoggerProperties.getLoggerCore(), dbManager.getServiceManagerPropertiesConfig().getDatabaseType());
  128.             lista = driver.soggettiRegistroList(null, s);
  129.         }
  130.         catch(Exception e) {
  131.             LoggerProperties.getLoggerCore().error("getSoggettoOperativoDefault("+protocollo+"): "+e.getMessage(),e);
  132.         }
  133.         finally {
  134.             dbManager.releaseConnectionConfig(con);
  135.         }
  136.         if(lista!=null && lista.size()>0) {
  137.             IDSoggetto id = new IDSoggetto(lista.get(0).getTipo(), lista.get(0).getNome());
  138.             map.put(protocollo, id);
  139.             return id;
  140.         }
  141.         else {
  142.             return null;
  143.         }
  144.     }

  145. }