DriverConfigurazioneDBLib.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.core.config.driver.db;


import java.sql.Connection;
import java.text.MessageFormat;
import java.util.List;

import org.openspcoop2.core.byok.IDriverBYOK;
import org.openspcoop2.core.config.ProtocolProperty;
import org.openspcoop2.core.config.constants.AlgoritmoCache;
import org.openspcoop2.core.config.constants.CorrelazioneApplicativaGestioneIdentificazioneFallita;
import org.openspcoop2.core.config.constants.CorrelazioneApplicativaRichiestaIdentificazione;
import org.openspcoop2.core.config.constants.CorrelazioneApplicativaRispostaIdentificazione;
import org.openspcoop2.core.config.constants.CostantiConfigurazione;
import org.openspcoop2.core.config.constants.CredenzialeTipo;
import org.openspcoop2.core.config.constants.FaultIntegrazioneTipo;
import org.openspcoop2.core.config.constants.GestioneErroreComportamento;
import org.openspcoop2.core.config.constants.InvocazioneServizioTipoAutenticazione;
import org.openspcoop2.core.config.constants.MTOMProcessorType;
import org.openspcoop2.core.config.constants.PluginSorgenteArchivio;
import org.openspcoop2.core.config.constants.PortaApplicativaSoggettiFruitori;
import org.openspcoop2.core.config.constants.PortaDelegataSoggettiErogatori;
import org.openspcoop2.core.config.constants.ProprietaProtocolloValore;
import org.openspcoop2.core.config.constants.RuoloContesto;
import org.openspcoop2.core.config.constants.ServiceBinding;
import org.openspcoop2.core.config.constants.Severita;
import org.openspcoop2.core.config.constants.StatoFunzionalita;
import org.openspcoop2.core.config.constants.StatoFunzionalitaBloccante;
import org.openspcoop2.core.config.constants.StatoFunzionalitaCacheDigestQueryParameter;
import org.openspcoop2.core.config.constants.StatoFunzionalitaConPersonalizzazione;
import org.openspcoop2.core.config.constants.StatoFunzionalitaConWarning;
import org.openspcoop2.core.config.constants.TipoConnessioneRisposte;
import org.openspcoop2.core.config.constants.TipoGestioneCORS;
import org.openspcoop2.core.config.constants.TrasformazioneIdentificazioneRisorsaFallita;
import org.openspcoop2.core.config.constants.TrasformazioneRegolaParametroTipoAzione;
import org.openspcoop2.core.config.constants.ValidazioneBusteTipoControllo;
import org.openspcoop2.core.config.constants.ValidazioneContenutiApplicativiTipo;
import org.openspcoop2.core.config.constants.VersioneSOAP;
import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
import org.openspcoop2.core.constants.CostantiDB;
import org.openspcoop2.core.mapping.DBProtocolPropertiesUtils;
import org.openspcoop2.generic_project.exception.NotFoundException;
import org.openspcoop2.utils.LoggerWrapperFactory;
import org.slf4j.Logger;

/**
 * Libreria contenente i metodi di accesso al db e metodi di utilita'
 * 
 * @author Stefano Corallo - corallo@link.it
 * @author $Author$
 * @version $Rev$, $Date$
 */

public class DriverConfigurazioneDBLib {
	
	private DriverConfigurazioneDBLib() {}

	/** Logger utilizzato per debug. */
	protected static org.slf4j.Logger log = LoggerWrapperFactory.getLogger(CostantiConfigurazione.DRIVER_DB_LOGGER);
	public static void logDebug(String msg) {
		if(log!=null) {
			log.debug(msg);
		}
	}
	public static void logDebug(String msg, Throwable e) {
		if(log!=null) {
			log.debug(msg, e);
		}
	}
	public static void logError(String msg, Throwable e) {
		if(log!=null) {
			log.error(msg, e);
		}
	}

	// Tipo database e tabella Soggetto PDD ereditato da DriverConfigurazioneDB
	static String tipoDB = null;
	static String tabellaSoggetti = CostantiDB.SOGGETTI;

	/** Log ereditato da DriverRegistroServiziDB
	 */
	private static boolean initialize = false;
	public static void initStaticLogger(Logger aLog){
		if(!DriverConfigurazioneDBLib.initialize){
			if(aLog!=null){
				DriverConfigurazioneDBLib.log = aLog;
			}
			DriverConfigurazioneDBLib.initialize = true;
		}
	}
	public static boolean isStaticLoggerInitialized(){
		return DriverConfigurazioneDBLib.initialize;
	}

	// Setto il tipoDB
	public static void setTipoDB(String tipoDatabase) {
		DriverConfigurazioneDBLib.tipoDB = tipoDatabase;
	}
	public static void setTabellaSoggetti(String tab) {
		DriverConfigurazioneDBLib.tabellaSoggetti = tab;
	}

	public static String getValue(StatoFunzionalita funzionalita){
		if(funzionalita==null){
			return null;
		}
		else{
			return funzionalita.getValue();
		}
	}
	public static String getValue(StatoFunzionalitaConWarning funzionalita){
		if(funzionalita==null){
			return null;
		}
		else{
			return funzionalita.getValue();
		}
	}
	public static String getValue(StatoFunzionalitaConPersonalizzazione funzionalita){
		if(funzionalita==null){
			return null;
		}
		else{
			return funzionalita.getValue();
		}
	}
	public static String getValue(StatoFunzionalitaBloccante funzionalita){
		if(funzionalita==null){
			return null;
		}
		else{
			return funzionalita.getValue();
		}
	}
	public static String getValue(MTOMProcessorType tipo){
		if(tipo==null){
			return null;
		}
		else{
			return tipo.getValue();
		}
	}
	public static String getValue(ValidazioneContenutiApplicativiTipo tipo){
		if(tipo==null){
			return null;
		}
		else{
			return tipo.getValue();
		}
	}
	public static String getValue(CorrelazioneApplicativaRichiestaIdentificazione identificazione){
		if(identificazione==null){
			return null;
		}
		else{
			return identificazione.getValue();
		}
	}
	public static String getValue(CorrelazioneApplicativaRispostaIdentificazione identificazione){
		if(identificazione==null){
			return null;
		}
		else{
			return identificazione.getValue();
		}
	}
	public static String getValue(CorrelazioneApplicativaGestioneIdentificazioneFallita identificazione){
		if(identificazione==null){
			return null;
		}
		else{
			return identificazione.getValue();
		}
	}
	public static String getValue(InvocazioneServizioTipoAutenticazione tipo){
		if(tipo==null){
			return null;
		}
		else{
			return tipo.getValue();
		}
	}
	public static String getValue(FaultIntegrazioneTipo tipo){
		if(tipo==null){
			return null;
		}
		else{
			return tipo.getValue();
		}
	}
	public static String getValue(CredenzialeTipo tipo){
		if(tipo==null){
			return null;
		}
		else{
			return tipo.getValue();
		}
	}
	public static String getValue(ProprietaProtocolloValore valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(Severita valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(ValidazioneBusteTipoControllo valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(AlgoritmoCache valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(GestioneErroreComportamento valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(TipoConnessioneRisposte valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(PortaApplicativaSoggettiFruitori valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(PortaDelegataSoggettiErogatori valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(TipoGestioneCORS valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(VersioneSOAP valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(TrasformazioneRegolaParametroTipoAzione valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(StatoFunzionalitaCacheDigestQueryParameter valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(RuoloContesto valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(ServiceBinding valore){
		if(valore==null){
			return null;
		}
		else{
			return valore.getValue();
		}
	}
	public static String getValue(TrasformazioneIdentificazioneRisorsaFallita identificazione){
		if(identificazione==null){
			return null;
		}
		else{
			return identificazione.getValue();
		}
	}
	public static String getValue(PluginSorgenteArchivio sorgente){
		if(sorgente==null){
			return null;
		}
		else{
			return sorgente.getValue();
		}
	}
	
	
	public static StatoFunzionalita getEnumStatoFunzionalita(String value){
		if(value==null){
			return null;
		}
		else{
			return StatoFunzionalita.toEnumConstant(value);
		}
	}
	public static StatoFunzionalitaConWarning getEnumStatoFunzionalitaConWarning(String value){
		if(value==null){
			return null;
		}
		else{
			return StatoFunzionalitaConWarning.toEnumConstant(value);
		}
	}
	public static StatoFunzionalitaConPersonalizzazione getEnumStatoFunzionalitaConPersonalizzazione(String value){
		if(value==null){
			return null;
		}
		else{
			return StatoFunzionalitaConPersonalizzazione.toEnumConstant(value);
		}
	}
	public static StatoFunzionalitaBloccante getEnumStatoFunzionalitaBloccante(String value){
		if(value==null){
			return null;
		}
		else{
			return StatoFunzionalitaBloccante.toEnumConstant(value);
		}
	}
	public static MTOMProcessorType getEnumMTOMProcessorType(String value){
		if(value==null){
			return null;
		}
		else{
			return MTOMProcessorType.toEnumConstant(value);
		}
	}
	public static ValidazioneContenutiApplicativiTipo getEnumValidazioneContenutiApplicativiTipo(String value){
		if(value==null){
			return null;
		}
		else{
			return ValidazioneContenutiApplicativiTipo.toEnumConstant(value);
		}
	}
	public static CorrelazioneApplicativaRichiestaIdentificazione getEnumCorrelazioneApplicativaRichiestaIdentificazione(String value){
		if(value==null){
			return null;
		}
		else{
			return CorrelazioneApplicativaRichiestaIdentificazione.toEnumConstant(value);
		}
	}
	public static CorrelazioneApplicativaRispostaIdentificazione getEnumCorrelazioneApplicativaRispostaIdentificazione(String value){
		if(value==null){
			return null;
		}
		else{
			return CorrelazioneApplicativaRispostaIdentificazione.toEnumConstant(value);
		}
	}
	public static CorrelazioneApplicativaGestioneIdentificazioneFallita getEnumCorrelazioneApplicativaGestioneIdentificazioneFallita(String value){
		if(value==null){
			return null;
		}
		else{
			return CorrelazioneApplicativaGestioneIdentificazioneFallita.toEnumConstant(value);
		}
	}
	public static InvocazioneServizioTipoAutenticazione getEnumInvocazioneServizioTipoAutenticazione(String value){
		if(value==null){
			return null;
		}
		else{
			return InvocazioneServizioTipoAutenticazione.toEnumConstant(value);
		}
	}
	public static FaultIntegrazioneTipo getEnumFaultIntegrazioneTipo(String value){
		if(value==null){
			return null;
		}
		else{
			return FaultIntegrazioneTipo.toEnumConstant(value);
		}
	}
	public static CredenzialeTipo getEnumCredenzialeTipo(String value){
		if(value==null){
			return null;
		}
		else{
			return CredenzialeTipo.toEnumConstant(value);
		}
	}
	public static ProprietaProtocolloValore getEnumProprietaProtocolloValore(String value){
		if(value==null){
			return null;
		}
		else{
			return ProprietaProtocolloValore.toEnumConstant(value);
		}
	}
	public static Severita getEnumSeverita(String value){
		if(value==null){
			return null;
		}
		else{
			return Severita.toEnumConstant(value);
		}
	}
	public static ValidazioneBusteTipoControllo getEnumValidazioneBusteTipoControllo(String value){
		if(value==null){
			return null;
		}
		else{
			return ValidazioneBusteTipoControllo.toEnumConstant(value);
		}
	}
	public static AlgoritmoCache getEnumAlgoritmoCache(String value){
		if(value==null){
			return null;
		}
		else{
			return AlgoritmoCache.toEnumConstant(value);
		}
	}
	public static GestioneErroreComportamento getEnumGestioneErroreComportamento(String value){
		if(value==null){
			return null;
		}
		else{
			return GestioneErroreComportamento.toEnumConstant(value);
		}
	}
	public static TipoConnessioneRisposte getEnumTipoConnessioneRisposte(String value){
		if(value==null){
			return null;
		}
		else{
			return TipoConnessioneRisposte.toEnumConstant(value);
		}
	}
	public static PortaApplicativaSoggettiFruitori getEnumPortaApplicativaSoggettiFruitori(String value){
		if(value==null){
			return null;
		}
		else{
			return PortaApplicativaSoggettiFruitori.toEnumConstant(value);
		}
	}
	public static PortaDelegataSoggettiErogatori getEnumPortaDelegataSoggettiErogatori(String value){
		if(value==null){
			return null;
		}
		else{
			return PortaDelegataSoggettiErogatori.toEnumConstant(value);
		}
	}
	public static TipoGestioneCORS getEnumTipoGestioneCORS(String value){
		if(value==null){
			return null;
		}
		else{
			return TipoGestioneCORS.toEnumConstant(value);
		}
	}
	public static VersioneSOAP getEnumVersioneSOAP(String value){
		if(value==null){
			return null;
		}
		else{
			return VersioneSOAP.toEnumConstant(value);
		}
	}
	public static TrasformazioneRegolaParametroTipoAzione getEnumTrasformazioneRegolaParametroTipoAzione(String value){
		if(value==null){
			return null;
		}
		else{
			return TrasformazioneRegolaParametroTipoAzione.toEnumConstant(value);
		}
	}
	public static StatoFunzionalitaCacheDigestQueryParameter getEnumStatoFunzionalitaCacheDigestQueryParameter(String value){
		if(value==null){
			return null;
		}
		else{
			return StatoFunzionalitaCacheDigestQueryParameter.toEnumConstant(value);
		}
	}
	public static RuoloContesto getEnumRuoloContesto(String value){
		if(value==null){
			return null;
		}
		else{
			return RuoloContesto.toEnumConstant(value);
		}
	}
	public static ServiceBinding getEnumServiceBinding(String value){
		if(value==null){
			return null;
		}
		else{
			return ServiceBinding.toEnumConstant(value);
		}
	}
	public static TrasformazioneIdentificazioneRisorsaFallita getEnumTrasformazioneIdentificazioneRisorsaFallita(String value){
		if(value==null){
			return null;
		}
		else{
			return TrasformazioneIdentificazioneRisorsaFallita.toEnumConstant(value);
		}
	}
	public static PluginSorgenteArchivio getEnumPluginSorgenteArchivio(String value){
		if(value==null){
			return null;
		}
		else{
			return PluginSorgenteArchivio.toEnumConstant(value);
		}
	}
	
	
	
	
	public static String formatSQLString(String sql, Object... params) {
		String res = sql;

		for (int i = 0; i < params.length; i++) {
			res = res.replaceFirst("\\?", "{" + i + "}");
		}

		return MessageFormat.format(res, params);

	}
	
	

	
	public static void crudProtocolProperty(int type, List<ProtocolProperty> listPP, long idProprietario,
			org.openspcoop2.core.constants.ProprietariProtocolProperty tipologiaProprietarioProtocolProperty, Connection connection,
			String tipoDatabase, IDriverBYOK driverBYOK) throws DriverConfigurazioneException {
		try {
			DBProtocolPropertiesUtils.crudConfigProtocolProperty(log, type, listPP, idProprietario, tipologiaProprietarioProtocolProperty, connection, tipoDatabase, driverBYOK);
		}catch(Exception e) {
			throw new DriverConfigurazioneException(e.getMessage(),e);
		}
	}
	
	
	public static List<ProtocolProperty> getListaProtocolProperty(long idProprietario, org.openspcoop2.core.constants.ProprietariProtocolProperty tipologiaProprietario, 
			Connection connection,
			String tipoDatabase, IDriverBYOK driverBYOK) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
		try {
			return DBProtocolPropertiesUtils.getListaProtocolPropertyConfig(idProprietario,tipologiaProprietario,connection,tipoDatabase, driverBYOK);
		}
		catch(NotFoundException e) {
			throw new DriverConfigurazioneNotFound(e.getMessage(),e);
		}
		catch(Exception e) {
			throw new DriverConfigurazioneException(e.getMessage(),e);
		}
	}
	
	public static ProtocolProperty getProtocolProperty(long id, Connection connection, String tipoDatabase, IDriverBYOK driverBYOK) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
		try {
			return DBProtocolPropertiesUtils.getProtocolPropertyConfig(id, connection, tipoDatabase, driverBYOK);
		}
		catch(NotFoundException e) {
			throw new DriverConfigurazioneNotFound(e.getMessage(),e);
		}
		catch(Exception e) {
			throw new DriverConfigurazioneException(e.getMessage(),e);
		}
	}
}