ServiziApplicativiUtilities.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 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;
}
}
}
}
}