ServiziApplicativiUtilities.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.web.ctrlstat.servlet.sa;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.openspcoop2.core.commons.ErrorsHandlerCostant;
- import org.openspcoop2.core.commons.Liste;
- import org.openspcoop2.core.config.Connettore;
- import org.openspcoop2.core.config.InvocazioneServizio;
- import org.openspcoop2.core.config.ServizioApplicativo;
- import org.openspcoop2.core.config.constants.CostantiConfigurazione;
- import org.openspcoop2.core.config.constants.StatoFunzionalita;
- import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
- import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
- import org.openspcoop2.core.constants.TipiConnettore;
- import org.openspcoop2.core.id.IDServizioApplicativo;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.Soggetto;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
- import org.openspcoop2.protocol.engine.utils.DBOggettiInUsoUtils;
- import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
- import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
- import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
- import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;
- /**
- * ServiziApplicativiUtilities
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- *
- */
- public class ServiziApplicativiUtilities {
-
- public static List<Object> getOggettiDaAggiornare(ServiziApplicativiCore saCore,
- IDServizioApplicativo oldIdServizioApplicativo,
- ServizioApplicativo sa) throws Exception{
-
- // Oggetti da modificare (per riflettere la modifica sul connettore)
- ServiziApplicativiUpdateUtilities saUpdateUtilities =
- new ServiziApplicativiUpdateUtilities(saCore, oldIdServizioApplicativo, sa);
-
- // ServizioApplicativo
- // aggiungo il sa da aggiornare
- saUpdateUtilities.addServizioApplicativo();
-
- // RateLimiting
- saUpdateUtilities.checkRateLimiting();
-
- return saUpdateUtilities.getOggettiDaAggiornare();
- }
-
-
- public static boolean deleteServizioApplicativo(ServizioApplicativo sa, String userLogin, ServiziApplicativiCore saCore, ServiziApplicativiHelper saHelper, StringBuilder inUsoMessage, String newLine) throws Exception {
-
- IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
- idServizioApplicativo.setNome(sa.getNome());
- idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()));
-
- // Controllo che il sil non sia in uso
- Map<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
- boolean normalizeObjectIds = !saHelper.isModalitaCompleta();
- boolean verificaRuoli = false;
- boolean saInUso = saCore.isServizioApplicativoInUso(idServizioApplicativo, whereIsInUso, saCore.isRegistroServiziLocale(), normalizeObjectIds, verificaRuoli);
-
- if (saInUso) {
-
- inUsoMessage.append(DBOggettiInUsoUtils.toString(idServizioApplicativo, whereIsInUso, true, newLine,normalizeObjectIds));
- inUsoMessage.append(newLine);
- } else {
- // Elimino il sil
- saCore.performDeleteOperation(userLogin, saHelper.smista(), sa);
-
- return true;
- }
-
- return false;
-
- }
-
- public static ServiziApplicativiGeneralInfo getGeneralInfo(boolean useIdSogg, String provider, List<String> listaTipiProtocollo,
- ServiziApplicativiCore saCore, ServiziApplicativiHelper saHelper, String superUser, boolean singlePdD,
- String soggettoMultitenantSelezionato, String dominio) throws Exception {
-
- SoggettiCore soggettiCore = new SoggettiCore(saCore);
- PddCore pddCore = new PddCore(saCore);
-
- String[] soggettiList = null;
- String[] soggettiListLabel = null;
-
- String tipoProtocollo = null;
- String tipoENomeSoggetto = "";
- IDSoggetto idSoggetto = null;
- if(useIdSogg) {
- org.openspcoop2.core.config.Soggetto soggetto = soggettiCore.getSoggetto(Long.parseLong(provider));
- if(tipoProtocollo == null){
- tipoProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(soggetto.getTipo());
- }
- tipoENomeSoggetto = saHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome());
- idSoggetto = new IDSoggetto(soggetto.getTipo() , soggetto.getNome());
-
- soggettiList = new String[1];
- soggettiList[0] = soggetto.getId().toString();
- soggettiListLabel = new String[1];
- soggettiListLabel[0] =saHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome());
- }
- else {
-
- long idProvider = -1;
- try {
- if(provider!=null) {
- idProvider = Long.parseLong(provider);
- }
- }catch(Exception e) {
- // ignore
- }
-
- tipoProtocollo = saHelper.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROTOCOLLO);
- if(tipoProtocollo == null){
- tipoProtocollo = saCore.getProtocolloDefault(saHelper.getRequest(), saHelper.getSession(), listaTipiProtocollo);
- }
-
- boolean filtraSoggettiEsterni = false;
- boolean isSupportatoAutenticazioneApplicativiEsterni = saCore.isSupportatoAutenticazioneApplicativiEsterniErogazione(tipoProtocollo);
- if(isSupportatoAutenticazioneApplicativiEsterni) {
- filtraSoggettiEsterni = SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE.equals(dominio);
- }
-
- List<String> tipiSoggettiCompatibiliGestitiProtocollo = soggettiCore.getTipiSoggettiGestitiProtocollo(tipoProtocollo);
- long providerTmp = -1;
-
- ConsoleSearch searchSoggetti = new ConsoleSearch(true);
- saHelper.setFilterSelectedProtocol(searchSoggetti, Liste.SOGGETTI);
-
- if(saCore.isRegistroServiziLocale()){
- List<Soggetto> list = null;
- if(!filtraSoggettiEsterni && soggettoMultitenantSelezionato!=null && !"".equals(soggettoMultitenantSelezionato)) {
- IDSoggetto idSoggettoSelezionato = soggettiCore.convertSoggettoSelezionatoToID(soggettoMultitenantSelezionato);
- list = new ArrayList<>();
- try {
- list.add(soggettiCore.getSoggettoRegistro(idSoggettoSelezionato));
- }catch(DriverRegistroServiziNotFound notFound) {}
- }
- else {
- if(saCore.isVisioneOggettiGlobale(superUser)){
- list = soggettiCore.soggettiRegistroList(null,searchSoggetti);
- }else{
- list = soggettiCore.soggettiRegistroList(superUser,searchSoggetti);
- }
- }
-
- // Filtro per pdd esterne
- if(singlePdD){
- List<Soggetto> listFiltrata = new ArrayList<Soggetto>();
- for (Soggetto soggetto : list) {
- boolean pddEsterna = pddCore.isPddEsterna(soggetto.getPortaDominio());
- if(filtraSoggettiEsterni) {
- if(pddEsterna){
- listFiltrata.add(soggetto);
- if(soggetto.getId().longValue()==idProvider) {
- providerTmp = idProvider;
- }
- }
- }
- else {
- if(!pddEsterna){
- listFiltrata.add(soggetto);
- if(soggetto.getId().longValue()==idProvider) {
- providerTmp = idProvider;
- }
- }
- }
- }
- list = listFiltrata;
- }
- if (list.size() > 0) {
- List<Soggetto> listFiltrataCompatibileProtocollo = new ArrayList<Soggetto>();
- for (Soggetto soggetto : list) {
- if(tipiSoggettiCompatibiliGestitiProtocollo.contains(soggetto.getTipo())){
- listFiltrataCompatibileProtocollo.add(soggetto);
- if(providerTmp < 0 || providerTmp == soggetto.getId().longValue()) {
- providerTmp = soggetto.getId();
- idSoggetto = new IDSoggetto(soggetto.getTipo() , soggetto.getNome());
- }
- }
- }
- if (listFiltrataCompatibileProtocollo.size() > 0) {
- soggettiList = new String[listFiltrataCompatibileProtocollo.size()];
- soggettiListLabel = new String[listFiltrataCompatibileProtocollo.size()];
- int i = 0;
- for (Soggetto soggetto : listFiltrataCompatibileProtocollo) {
- soggettiList[i] = soggetto.getId().toString();
- soggettiListLabel[i] =saHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome());
- i++;
- }
- }
- }
- }
- else{
- List<org.openspcoop2.core.config.Soggetto> list = null;
- if(soggettoMultitenantSelezionato!=null && !"".equals(soggettoMultitenantSelezionato)) {
- IDSoggetto idSoggettoSelezionato = soggettiCore.convertSoggettoSelezionatoToID(soggettoMultitenantSelezionato);
- list = new ArrayList<>();
- try {
- list.add(soggettiCore.getSoggetto(idSoggettoSelezionato));
- }catch(DriverConfigurazioneNotFound notFound) {}
- }
- else {
- if(saCore.isVisioneOggettiGlobale(superUser)){
- list = soggettiCore.soggettiList(null,searchSoggetti);
- }else{
- list = soggettiCore.soggettiList(superUser,searchSoggetti);
- }
- }
-
- List<org.openspcoop2.core.config.Soggetto> listFiltrataCompatibileProtocollo = new ArrayList<org.openspcoop2.core.config.Soggetto>();
- for (org.openspcoop2.core.config.Soggetto soggetto : list) {
- if(tipiSoggettiCompatibiliGestitiProtocollo.contains(soggetto.getTipo())){
- listFiltrataCompatibileProtocollo.add(soggetto);
- if(providerTmp < 0) {
- providerTmp = soggetto.getId();
- idSoggetto = new IDSoggetto(soggetto.getTipo() , soggetto.getNome());
- }
- }
- }
-
- if (listFiltrataCompatibileProtocollo.size() > 0) {
- soggettiList = new String[listFiltrataCompatibileProtocollo.size()];
- soggettiListLabel = new String[listFiltrataCompatibileProtocollo.size()];
- int i = 0;
- for (org.openspcoop2.core.config.Soggetto soggetto : listFiltrataCompatibileProtocollo) {
- soggettiList[i] = soggetto.getId().toString();
- soggettiListLabel[i] =saHelper.getLabelNomeSoggetto(tipoProtocollo, soggetto.getTipo() , soggetto.getNome());
- i++;
- }
- }
- }
-
- if(provider == null){
- provider = providerTmp +"";
- }
- }
-
- ServiziApplicativiGeneralInfo saGeneralInfo = new ServiziApplicativiGeneralInfo();
- saGeneralInfo.setSoggettiList(soggettiList);
- saGeneralInfo.setSoggettiListLabel(soggettiListLabel);
- saGeneralInfo.setTipoENomeSoggetto(tipoENomeSoggetto);
- saGeneralInfo.setTipoProtocollo(tipoProtocollo);
- saGeneralInfo.setProvider(provider);
- saGeneralInfo.setIdSoggetto(idSoggetto);
- return saGeneralInfo;
- }
-
- public static void checkStatoConnettore(ServiziApplicativiCore saCore, ServizioApplicativo sa, Connettore connis, StringBuilder inUsoMessage, String newLine) throws DriverConfigurazioneException {
- InvocazioneServizio invServizio = sa.getInvocazioneServizio();
- StatoFunzionalita getMessage = invServizio != null ? invServizio.getGetMessage() : null;
- if (TipiConnettore.DISABILITATO.getNome().equals(connis.getTipo()) && CostantiConfigurazione.DISABILITATO.equals(getMessage)) {
- Map<ErrorsHandlerCostant, String> whereIsInUso = new HashMap<ErrorsHandlerCostant, String>();
- if (saCore.isServizioApplicativoInUsoComeErogatore(sa, whereIsInUso)) {
- // se in uso in porte applicative allora impossibile
- // disabilitare connettore o getmessage
- if (whereIsInUso.containsKey(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE)) {
- inUsoMessage.append("Impossibile disabilitare il GetMessage o il Connettore in quanto il Servizio Applicativo [" +
- sa.getNome() + "]"+ newLine + " รจ in uso in Porta Applicative " + whereIsInUso.get(ErrorsHandlerCostant.IN_USO_IN_PORTE_APPLICATIVE));
- return;
- }
- }
- }
- }
- }