ServiziApplicativiUtilities.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.web.ctrlstat.servlet.sa;

  21. import java.util.ArrayList;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;

  25. import org.openspcoop2.core.commons.ErrorsHandlerCostant;
  26. import org.openspcoop2.core.commons.Liste;
  27. import org.openspcoop2.core.config.Connettore;
  28. import org.openspcoop2.core.config.InvocazioneServizio;
  29. import org.openspcoop2.core.config.ServizioApplicativo;
  30. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  31. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  32. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  33. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  34. import org.openspcoop2.core.constants.TipiConnettore;
  35. import org.openspcoop2.core.id.IDServizioApplicativo;
  36. import org.openspcoop2.core.id.IDSoggetto;
  37. import org.openspcoop2.core.registry.Soggetto;
  38. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  39. import org.openspcoop2.protocol.engine.utils.DBOggettiInUsoUtils;
  40. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  41. import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
  42. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  43. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;

  44. /**
  45.  * ServiziApplicativiUtilities
  46.  *
  47.  * @author Andrea Poli (apoli@link.it)
  48.  * @author $Author$
  49.  * @version $Rev$, $Date$
  50.  *
  51.  */
  52. public class ServiziApplicativiUtilities {
  53.    
  54.     public static List<Object> getOggettiDaAggiornare(ServiziApplicativiCore saCore,
  55.             IDServizioApplicativo oldIdServizioApplicativo,
  56.             ServizioApplicativo sa) throws Exception{
  57.        
  58.         // Oggetti da modificare (per riflettere la modifica sul connettore)
  59.         ServiziApplicativiUpdateUtilities saUpdateUtilities =
  60.                 new ServiziApplicativiUpdateUtilities(saCore, oldIdServizioApplicativo, sa);
  61.        
  62.         // ServizioApplicativo
  63.         // aggiungo il sa da aggiornare
  64.         saUpdateUtilities.addServizioApplicativo();
  65.        
  66.         // RateLimiting
  67.         saUpdateUtilities.checkRateLimiting();
  68.        
  69.         return saUpdateUtilities.getOggettiDaAggiornare();
  70.     }
  71.    
  72.    
  73.     public static boolean deleteServizioApplicativo(ServizioApplicativo sa, String userLogin, ServiziApplicativiCore saCore, ServiziApplicativiHelper saHelper, StringBuilder inUsoMessage, String newLine) throws Exception {
  74.        
  75.         IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  76.         idServizioApplicativo.setNome(sa.getNome());
  77.         idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
  78.        
  79.         // Controllo che il sil non sia in uso
  80.         Map<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  81.         boolean normalizeObjectIds = !saHelper.isModalitaCompleta();
  82.         boolean verificaRuoli = false;
  83.         boolean saInUso  = saCore.isServizioApplicativoInUso(idServizioApplicativo, whereIsInUso, saCore.isRegistroServiziLocale(), normalizeObjectIds, verificaRuoli);
  84.        
  85.         if (saInUso) {
  86.            
  87.             inUsoMessage.append(DBOggettiInUsoUtils.toString(idServizioApplicativo, whereIsInUso, true, newLine,normalizeObjectIds));
  88.             inUsoMessage.append(newLine);

  89.         } else {

  90.             // Elimino il sil
  91.             saCore.performDeleteOperation(userLogin, saHelper.smista(), sa);
  92.            
  93.             return true;
  94.         }
  95.        
  96.         return false;
  97.        
  98.     }
  99.    
  100.     public static ServiziApplicativiGeneralInfo getGeneralInfo(boolean useIdSogg, String provider, List<String> listaTipiProtocollo,
  101.             ServiziApplicativiCore saCore, ServiziApplicativiHelper saHelper, String superUser, boolean singlePdD,
  102.             String soggettoMultitenantSelezionato, String dominio) throws Exception {
  103.        
  104.         SoggettiCore soggettiCore = new SoggettiCore(saCore);
  105.         PddCore pddCore = new PddCore(saCore);
  106.        
  107.         String[] soggettiList = null;
  108.         String[] soggettiListLabel = null;
  109.        
  110.         String tipoProtocollo = null;
  111.         String tipoENomeSoggetto = "";
  112.         IDSoggetto idSoggetto = null;
  113.         if(useIdSogg) {
  114.             org.openspcoop2.core.config.Soggetto soggetto = soggettiCore.getSoggetto(Long.parseLong(provider));
  115.             if(tipoProtocollo == null){
  116.                 tipoProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(soggetto.getTipo());
  117.             }
  118.             tipoENomeSoggetto = saHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome());
  119.             idSoggetto = new IDSoggetto(soggetto.getTipo() , soggetto.getNome());
  120.            
  121.             soggettiList = new String[1];
  122.             soggettiList[0] = soggetto.getId().toString();
  123.             soggettiListLabel = new String[1];
  124.             soggettiListLabel[0] =saHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome());
  125.         }
  126.         else {
  127.            
  128.             long idProvider = -1;
  129.             try {
  130.                 if(provider!=null) {
  131.                     idProvider = Long.parseLong(provider);
  132.                 }
  133.             }catch(Exception e) {
  134.                 // ignore
  135.             }
  136.            
  137.             tipoProtocollo = saHelper.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO);
  138.             if(tipoProtocollo == null){
  139.                 tipoProtocollo = saCore.getProtocolloDefault(saHelper.getRequest(), saHelper.getSession(), listaTipiProtocollo);
  140.             }
  141.        
  142.             boolean filtraSoggettiEsterni = false;
  143.             boolean isSupportatoAutenticazioneApplicativiEsterni = saCore.isSupportatoAutenticazioneApplicativiEsterniErogazione(tipoProtocollo);
  144.             if(isSupportatoAutenticazioneApplicativiEsterni) {
  145.                 filtraSoggettiEsterni = SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE.equals(dominio);
  146.             }
  147.                
  148.             List<String> tipiSoggettiCompatibiliGestitiProtocollo = soggettiCore.getTipiSoggettiGestitiProtocollo(tipoProtocollo);
  149.             long providerTmp = -1;
  150.            
  151.             ConsoleSearch searchSoggetti = new ConsoleSearch(true);
  152.             saHelper.setFilterSelectedProtocol(searchSoggetti, Liste.SOGGETTI);
  153.            
  154.             if(saCore.isRegistroServiziLocale()){
  155.                 List<Soggetto> list = null;
  156.                 if(!filtraSoggettiEsterni && soggettoMultitenantSelezionato!=null && !"".equals(soggettoMultitenantSelezionato)) {
  157.                     IDSoggetto idSoggettoSelezionato = soggettiCore.convertSoggettoSelezionatoToID(soggettoMultitenantSelezionato);
  158.                     list = new ArrayList<>();
  159.                     try {
  160.                         list.add(soggettiCore.getSoggettoRegistro(idSoggettoSelezionato));
  161.                     }catch(DriverRegistroServiziNotFound notFound) {}
  162.                 }
  163.                 else {
  164.                     if(saCore.isVisioneOggettiGlobale(superUser)){
  165.                         list = soggettiCore.soggettiRegistroList(null,searchSoggetti);
  166.                     }else{
  167.                         list = soggettiCore.soggettiRegistroList(superUser,searchSoggetti);
  168.                     }
  169.                 }
  170.                
  171.                 // Filtro per pdd esterne
  172.                 if(singlePdD){
  173.                     List<Soggetto> listFiltrata = new ArrayList<Soggetto>();
  174.                     for (Soggetto soggetto : list) {
  175.                         boolean pddEsterna = pddCore.isPddEsterna(soggetto.getPortaDominio());
  176.                         if(filtraSoggettiEsterni) {
  177.                             if(pddEsterna){
  178.                                 listFiltrata.add(soggetto);
  179.                                 if(soggetto.getId().longValue()==idProvider) {
  180.                                     providerTmp = idProvider;
  181.                                 }
  182.                             }
  183.                         }
  184.                         else {
  185.                             if(!pddEsterna){
  186.                                 listFiltrata.add(soggetto);
  187.                                 if(soggetto.getId().longValue()==idProvider) {
  188.                                     providerTmp = idProvider;
  189.                                 }
  190.                             }
  191.                         }
  192.                     }
  193.                     list = listFiltrata;
  194.                 }
  195.                 if (list.size() > 0) {
  196.                     List<Soggetto> listFiltrataCompatibileProtocollo =  new ArrayList<Soggetto>();
  197.                     for (Soggetto soggetto : list) {
  198.                         if(tipiSoggettiCompatibiliGestitiProtocollo.contains(soggetto.getTipo())){
  199.                             listFiltrataCompatibileProtocollo.add(soggetto);
  200.                             if(providerTmp < 0 || providerTmp == soggetto.getId().longValue()) {
  201.                                 providerTmp = soggetto.getId();
  202.                                 idSoggetto = new IDSoggetto(soggetto.getTipo() , soggetto.getNome());
  203.                             }
  204.                         }
  205.                     }
  206.                     if (listFiltrataCompatibileProtocollo.size() > 0) {
  207.                         soggettiList = new String[listFiltrataCompatibileProtocollo.size()];
  208.                         soggettiListLabel = new String[listFiltrataCompatibileProtocollo.size()];
  209.                         int i = 0;
  210.                         for (Soggetto soggetto : listFiltrataCompatibileProtocollo) {
  211.                             soggettiList[i] = soggetto.getId().toString();
  212.                             soggettiListLabel[i] =saHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome());
  213.                             i++;
  214.                         }
  215.                     }
  216.                 }
  217.             }
  218.             else{
  219.                 List<org.openspcoop2.core.config.Soggetto> list = null;
  220.                 if(soggettoMultitenantSelezionato!=null && !"".equals(soggettoMultitenantSelezionato)) {
  221.                     IDSoggetto idSoggettoSelezionato = soggettiCore.convertSoggettoSelezionatoToID(soggettoMultitenantSelezionato);
  222.                     list = new ArrayList<>();
  223.                     try {
  224.                         list.add(soggettiCore.getSoggetto(idSoggettoSelezionato));
  225.                     }catch(DriverConfigurazioneNotFound notFound) {}
  226.                 }
  227.                 else {
  228.                     if(saCore.isVisioneOggettiGlobale(superUser)){
  229.                         list = soggettiCore.soggettiList(null,searchSoggetti);
  230.                     }else{
  231.                         list = soggettiCore.soggettiList(superUser,searchSoggetti);
  232.                     }
  233.                 }
  234.                
  235.                 List<org.openspcoop2.core.config.Soggetto> listFiltrataCompatibileProtocollo =  new ArrayList<org.openspcoop2.core.config.Soggetto>();
  236.                 for (org.openspcoop2.core.config.Soggetto soggetto : list) {
  237.                     if(tipiSoggettiCompatibiliGestitiProtocollo.contains(soggetto.getTipo())){
  238.                         listFiltrataCompatibileProtocollo.add(soggetto);
  239.                         if(providerTmp < 0) {
  240.                             providerTmp = soggetto.getId();
  241.                             idSoggetto = new IDSoggetto(soggetto.getTipo() , soggetto.getNome());
  242.                         }
  243.                     }
  244.                 }
  245.                
  246.                 if (listFiltrataCompatibileProtocollo.size() > 0) {
  247.                     soggettiList = new String[listFiltrataCompatibileProtocollo.size()];
  248.                     soggettiListLabel = new String[listFiltrataCompatibileProtocollo.size()];
  249.                     int i = 0;
  250.                     for (org.openspcoop2.core.config.Soggetto soggetto : listFiltrataCompatibileProtocollo) {
  251.                         soggettiList[i] = soggetto.getId().toString();
  252.                         soggettiListLabel[i] =saHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome());
  253.                         i++;
  254.                     }
  255.                 }
  256.             }
  257.            
  258.             if(provider == null){
  259.                 provider = providerTmp +"";
  260.             }
  261.         }
  262.        
  263.         ServiziApplicativiGeneralInfo saGeneralInfo = new ServiziApplicativiGeneralInfo();
  264.         saGeneralInfo.setSoggettiList(soggettiList);
  265.         saGeneralInfo.setSoggettiListLabel(soggettiListLabel);
  266.         saGeneralInfo.setTipoENomeSoggetto(tipoENomeSoggetto);
  267.         saGeneralInfo.setTipoProtocollo(tipoProtocollo);
  268.         saGeneralInfo.setProvider(provider);
  269.         saGeneralInfo.setIdSoggetto(idSoggetto);
  270.         return saGeneralInfo;
  271.     }
  272.    
  273.     public static void checkStatoConnettore(ServiziApplicativiCore saCore, ServizioApplicativo sa, Connettore connis, StringBuilder inUsoMessage, String newLine) throws DriverConfigurazioneException {
  274.         InvocazioneServizio invServizio = sa.getInvocazioneServizio();
  275.         StatoFunzionalita getMessage = invServizio != null ? invServizio.getGetMessage() : null;
  276.         if (TipiConnettore.DISABILITATO.getNome().equals(connis.getTipo()) && CostantiConfigurazione.DISABILITATO.equals(getMessage)) {
  277.             Map<ErrorsHandlerCostant, String> whereIsInUso = new HashMap<ErrorsHandlerCostant, String>();
  278.             if (saCore.isServizioApplicativoInUsoComeErogatore(sa, whereIsInUso)) {

  279.                 // se in uso in porte applicative allora impossibile
  280.                 // disabilitare connettore o getmessage
  281.                 if (whereIsInUso.containsKey(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE)) {
  282.                     inUsoMessage.append("Impossibile disabilitare il GetMessage o il Connettore in quanto il Servizio Applicativo [" +
  283.                             sa.getNome() + "]"+ newLine + " รจ in uso in Porta Applicative " + whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE));
  284.                     return;
  285.                 }

  286.             }
  287.         }
  288.     }
  289. }