Filtri.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.commons;

import java.util.ArrayList;
import java.util.List;


/**
 * Filtri
 * 
 * @author Stefano Corallo - corallo@link.it
 * @author $Author$
 * @version $Rev$, $Date$
 */

public final class Filtri
{
	private Filtri() {}

	
	public static final String FILTRO_PROTOCOLLO = "filtroProtocollo";
	public static final String FILTRO_PROTOCOLLI = "filtroProtocolli";
	
	public static final String FILTRO_SOGGETTO_DEFAULT = "filtroSoggettoDefault";
	
	public static final String FILTRO_DOMINIO = "filtroDominio";
	
	public static final String FILTRO_STATO_ACCORDO = "filtroStatoAccordo";
		
	public static final String FILTRO_SERVICE_BINDING = "filtroServiceBinding";
	
	public static final String FILTRO_HTTP_METHOD = "filtroHttpMethod";
	
	public static final String FILTRO_SOGGETTO = "filtroSoggetto";
	
	public static final String FILTRO_SOGGETTO_EROGATORE_CONTAINS = "filtroSoggettoErogatoreContains";
	
	public static final String FILTRO_RUOLO_SERVIZIO_APPLICATIVO = "filtroRuoloSA";
	public static final String VALUE_FILTRO_RUOLO_SERVIZIO_APPLICATIVO_EROGATORE = "Erogatore";
	public static final String VALUE_FILTRO_RUOLO_SERVIZIO_APPLICATIVO_FRUITORE = "Fruitore";
	
	public static final String FILTRO_TIPO_SERVIZIO_APPLICATIVO = "filtroTipoSA";
	
	public static final String FILTRO_TIPO_SOGGETTO = "filtroTipoSoggetto";
	
	public static final String FILTRO_TIPO_CREDENZIALI = "filtroTipoCredenziali";
	public static final String FILTRO_CREDENZIALE = "filtroCredenziale";
	public static final String FILTRO_CREDENZIALE_ISSUER = "filtroCredenzialeIssuer";
	public static final String FILTRO_CREDENZIALE_TOKEN_POLICY = "filtroCredenzialeTokenPolicy";
	
	public static final String FILTRO_RUOLO_TIPOLOGIA = "filtroRuoloTipologia";
	public static final String FILTRO_RUOLO_CONTESTO = "filtroRuoloContesto";
	
	public static final String FILTRO_SCOPE_TIPOLOGIA = "filtroScopeTipologia";
	public static final String FILTRO_SCOPE_CONTESTO = "filtroScopeContesto";
	
	public static final String FILTRO_API_CONTESTO = "filtroApiContesto";
	public static final String FILTRO_API_CONTESTO_VALUE_EROGAZIONE_FRUIZIONE = "ErogazioneFruizione";
	public static final String FILTRO_API_CONTESTO_VALUE_APPLICATIVI = "Applicativi";
	public static final String FILTRO_API_CONTESTO_VALUE_SOGGETTI = "Soggetti";
	public static final String FILTRO_API_IMPLEMENTAZIONE = "filtroApiImpl";
	
	public static final String FILTRO_SERVIZIO_APPLICATIVO = "filtroSA";
	
	public static final String FILTRO_UTENTE = "filtroUtente";
	
	public static final String FILTRO_AZIONE = "filtroAzione";
	
	public static final String FILTRO_RUOLO = "filtroRuolo";
	public static final String FILTRO_RUOLO_NOME = "Ruolo";
	public static final String FILTRO_RUOLO_VALORE_ENTRAMBI = "Qualsiasi";
	public static final String FILTRO_RUOLO_VALORE_FRUIZIONE = "Fruizione";
	public static final String FILTRO_RUOLO_VALORE_EROGAZIONE = "Erogazione";
	
	public static final String FILTRO_APPLICABILITA = "filtroRuolo";
	public static final String FILTRO_APPLICABILITA_NOME = "Applicabilita";
	public static final String FILTRO_APPLICABILITA_VALORE_QUALSIASI = "Qualsiasi";
	public static final String FILTRO_APPLICABILITA_VALORE_FRUIZIONE = "Fruizione";
	public static final String FILTRO_APPLICABILITA_VALORE_EROGAZIONE = "Erogazione";
	public static final String FILTRO_APPLICABILITA_VALORE_IMPLEMENTAZIONE_API = "ImplementazioneApi";
	public static final String FILTRO_APPLICABILITA_VALORE_CONFIGURAZIONE = "Configurazione";
	
	public static final String FILTRO_STATO = "filtroStato";
	public static final String FILTRO_STATO_NOME = "Stato";
	public static final String FILTRO_STATO_VALORE_QUALSIASI = "Qualsiasi";
	public static final String FILTRO_STATO_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_STATO_VALORE_DISABILITATO = "Disabilitato";
	public static final String FILTRO_STATO_VALORE_OK = "Ok";
	public static final String FILTRO_STATO_VALORE_WARNING = "Warning";
	public static final String FILTRO_STATO_VALORE_ERROR = "Error";
	
	public static final String FILTRO_TIPO_POLICY = "filtroTipoPolicy";
	public static final String FILTRO_TIPO_POLICY_BUILT_IN = "built-in";
	public static final String FILTRO_TIPO_POLICY_UTENTE = "utente";
	
	public static final String FILTRO_TIPO_RISORSA_POLICY = "filtroTipoRisorsaPolicy";
	
	public static final String FILTRO_TIPO_TOKEN_POLICY = "filtroTipoTokenPolicy";
	
	public static final String FILTRO_GRUPPO_SERVICE_BINDING = "filtroGruppoServiceBinding";
	
	public static final String FILTRO_GRUPPO = "filtroGruppo";
	
	public static final String FILTRO_API = "filtroApi";
	
	public static final String FILTRO_CANALE = "filtroCanale";
	public static final String PREFIX_VALUE_CANALE_DEFAULT = "__DEFAULT__ ";

	public static final String FILTRO_TIPO_PLUGIN_CLASSI = "filtroTipoPluginClassi";
	
	public static final String FILTRO_PROP_PLUGIN_CLASSI = "filtroPropPluginClassi";
	
	public static final String FILTRO_AUTENTICAZIONE_TOKEN_TIPO = "filtroAutenticazioneTokenTipo";
	
	public static final String FILTRO_AUTENTICAZIONE_TRASPORTO_TIPO = "filtroAutenticazioneTrasportoTipo";
	public static final String FILTRO_AUTENTICAZIONE_TRASPORTO_TIPO_PLUGIN = "filtroAutenticazioneTrasportoTipoPlugin";
	
	public static final String FILTRO_CONFIGURAZIONE_TRANSAZIONI = "filtroConfigurazioneTransazioni";
	public static final String FILTRO_CONFIGURAZIONE_TRANSAZIONI_VALORE_DEFAULT = "Default";
	public static final String FILTRO_CONFIGURAZIONE_TRANSAZIONI_VALORE_RIDEFINITO_ABILITATO_DATABASE_O_FILETRACE = "Ridefinito (abilitato database o filetrace)";
	public static final String FILTRO_CONFIGURAZIONE_TRANSAZIONI_VALORE_RIDEFINITO_ABILITATO_SOLO_DATABASE = "Ridefinito (abilitato solo database)";
	public static final String FILTRO_CONFIGURAZIONE_TRANSAZIONI_VALORE_RIDEFINITO_ABILITATO_SOLO_FILETRACE = "Ridefinito (abilitato solo filetrace)";
	public static final String FILTRO_CONFIGURAZIONE_TRANSAZIONI_VALORE_RIDEFINITO_ABILITATO_DATABASE_E_FILETRACE = "Ridefinito (abilitato sia database che filetrace)";
	public static final String FILTRO_CONFIGURAZIONE_TRANSAZIONI_VALORE_RIDEFINITO_DISABILITATO = "Ridefinito (disabilitato)";
	
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO = "filtroConfigurazioneDumpTipo";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_DEFAULT = "Default";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO = "Ridefinito (abilitato)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_SOLO_HEADER = "Ridefinito (solo header)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_RICHIESTA = "Ridefinito (abilitato sulla richiesta)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_SOLO_HEADER_RICHIESTA = "Ridefinito (solo header della richiesta)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_RISPOSTA = "Ridefinito (abilitato sulla risposta)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_SOLO_HEADER_RISPOSTA = "Ridefinito (solo header della risposta)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_RICHIESTA_USCITA = "Ridefinito (abilitato sulla richiesta in uscita)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_SOLO_HEADER_RICHIESTA_USCITA = "Ridefinito (solo header della richiesta in uscita)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_RISPOSTA_USCITA = "Ridefinito (abilitato sulla risposta in uscita)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_SOLO_HEADER_RISPOSTA_USCITA = "Ridefinito (solo header della risposta in uscita)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_RICHIESTA_INGRESSO = "Ridefinito (abilitato sulla richiesta in ingresso)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_SOLO_HEADER_RICHIESTA_INGRESSO = "Ridefinito (solo header della richiesta in ingresso)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_RISPOSTA_INGRESSO = "Ridefinito (abilitato sulla risposta in ingresso)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_ABILITATO_SOLO_HEADER_RISPOSTA_INGRESSO = "Ridefinito (solo header della risposta in ingresso)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_DISABILITATO = "Ridefinito (disabilitato)"; // and su richiesta e risposta
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_DISABILITATO_RICHIESTA = "Ridefinito (disabilitato sulla richiesta)";
	public static final String FILTRO_CONFIGURAZIONE_DUMP_TIPO_VALORE_RIDEFINITO_DISABILITATO_RISPOSTA = "Ridefinito (disabilitato sulla risposta)";
	
	public static final String FILTRO_CONFIGURAZIONE_STATO = "filtroConfigurazioneStato";
	public static final String FILTRO_CONFIGURAZIONE_STATO_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONFIGURAZIONE_STATO_VALORE_DISABILITATO = "Disabilitato";
		
	public static final String FILTRO_CONFIGURAZIONE_RATE_LIMITING_STATO = "filtroConfigurazioneRateLimitingStato";
	public static final String FILTRO_CONFIGURAZIONE_RATE_LIMITING_STATO_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONFIGURAZIONE_RATE_LIMITING_STATO_VALORE_DISABILITATO = "Disabilitato";
	
	public static final String FILTRO_CONFIGURAZIONE_VALIDAZIONE_STATO = "filtroConfigurazioneValidazioneStato";
	public static final String FILTRO_CONFIGURAZIONE_VALIDAZIONE_STATO_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONFIGURAZIONE_VALIDAZIONE_STATO_VALORE_DISABILITATO = "Disabilitato";
	
	public static final String FILTRO_CONFIGURAZIONE_CACHE_RISPOSTA_STATO = "filtroConfigurazioneCacheRispostaStato";
	public static final String FILTRO_CONFIGURAZIONE_CACHE_RISPOSTA_STATO_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONFIGURAZIONE_CACHE_RISPOSTA_STATO_VALORE_DISABILITATO = "Disabilitato";
	
	public static final String FILTRO_CONFIGURAZIONE_MESSAGE_SECURITY_STATO = "filtroConfigurazioneMessageSecurityStato";
	public static final String FILTRO_CONFIGURAZIONE_MESSAGE_SECURITY_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONFIGURAZIONE_MESSAGE_SECURITY_STATO_VALORE_ABILITATO_RICHIESTA = "Abilitato sulla richiesta";
	public static final String FILTRO_CONFIGURAZIONE_MESSAGE_SECURITY_STATO_VALORE_ABILITATO_RISPOSTA = "Abilitato sulla risposta";
	public static final String FILTRO_CONFIGURAZIONE_MESSAGE_SECURITY_VALORE_DISABILITATO = "Disabilitato";
	
	public static final String FILTRO_CONFIGURAZIONE_MTOM_STATO = "filtroConfigurazioneMTOMStato";
	public static final String FILTRO_CONFIGURAZIONE_MTOM_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONFIGURAZIONE_MTOM_STATO_VALORE_ABILITATO_RICHIESTA = "Abilitato sulla richiesta";
	public static final String FILTRO_CONFIGURAZIONE_MTOM_STATO_VALORE_ABILITATO_RISPOSTA = "Abilitato sulla risposta";
	public static final String FILTRO_CONFIGURAZIONE_MTOM_VALORE_DISABILITATO = "Disabilitato";
	
	public static final String FILTRO_CONFIGURAZIONE_TRASFORMAZIONE_STATO = "filtroConfigurazioneTrasformazione";
	public static final String FILTRO_CONFIGURAZIONE_TRASFORMAZIONE_STATO_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONFIGURAZIONE_TRASFORMAZIONE_STATO_VALORE_DISABILITATO = "Disabilitato";
	
	public static final String FILTRO_CONFIGURAZIONE_CORRELAZIONE_APPLICATIVA_STATO = "filtroConfigurazioneCorrelazioneApplicativaStato";
	public static final String FILTRO_CONFIGURAZIONE_CORRELAZIONE_APPLICATIVA_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONFIGURAZIONE_CORRELAZIONE_APPLICATIVA_STATO_VALORE_ABILITATO_RICHIESTA = "Abilitato sulla richiesta";
	public static final String FILTRO_CONFIGURAZIONE_CORRELAZIONE_APPLICATIVA_STATO_VALORE_ABILITATO_RISPOSTA = "Abilitato sulla risposta";
	public static final String FILTRO_CONFIGURAZIONE_CORRELAZIONE_APPLICATIVA_VALORE_DISABILITATO = "Disabilitato";
	
	public static final String FILTRO_CONFIGURAZIONE_CORS_TIPO = "filtroConfigurazioneCorsTipo";
	public static final String FILTRO_CONFIGURAZIONE_CORS_TIPO_VALORE_DEFAULT = "Default";
	public static final String FILTRO_CONFIGURAZIONE_CORS_TIPO_VALORE_RIDEFINITO_ABILITATO = "Ridefinito (abilitato)";
	public static final String FILTRO_CONFIGURAZIONE_CORS_TIPO_VALORE_RIDEFINITO_DISABILITATO = "Ridefinito (disabilitato)"; 
	
	public static final String FILTRO_CONFIGURAZIONE_CORS_ORIGIN = "filtroConfigurazioneCorsOrigin";
	
	public static final String FILTRO_CONNETTORE_TIPO = "filtroConnettoreTipo";
	public static final String FILTRO_CONNETTORE_TIPO_VALORE_IM = "IM";
	public static final String FILTRO_CONNETTORE_TIPO_PLUGIN = "filtroConnettoreTipoPlugin";
	public static final String FILTRO_CONNETTORE_TOKEN_POLICY = "filtroConnettoreTokenPolicy";
	public static final String FILTRO_CONNETTORE_ENDPOINT = "filtroConnettoreEndpoint";
	public static final String FILTRO_CONNETTORE_KEYSTORE = "filtroConnettoreKeystore";
	
	public static final String FILTRO_CONNETTORE_DEBUG = "filtroConnettoreDebug";
	public static final String FILTRO_CONNETTORE_DEBUG_VALORE_ABILITATO = "Abilitato";
	public static final String FILTRO_CONNETTORE_DEBUG_VALORE_DISABILITATO = "Disabilitato";
	
	public static final String FILTRO_CONNETTORE_MULTIPLO_NOME = "filtroConnettoreMulNome";
	public static final String FILTRO_CONNETTORE_MULTIPLO_FILTRO = "filtroConnettoreMulFiltro";
	
	public static final String FILTRO_MODI_SICUREZZA_CANALE = "filtroModiSicCanale";
	public static final String FILTRO_MODI_SICUREZZA_MESSAGGIO = "filtroModiSicMessaggio";
	public static final String FILTRO_MODI_SORGENTE_TOKEN = "filtroModiGenToken";
	public static final String FILTRO_MODI_KEYSTORE_PATH = "filtroModiKeystorePath";
	public static final String FILTRO_MODI_KEYSTORE_SUBJECT = "filtroModiKeystoreSubject";
	public static final String FILTRO_MODI_KEYSTORE_ISSUER = "filtroModiKeystoreIssuer";
	public static final String FILTRO_MODI_SICUREZZA_TOKEN = "filtroModiTokenStato";
	public static final String FILTRO_MODI_SICUREZZA_TOKEN_POLICY = "filtroModiTokenPolicy";
	public static final String FILTRO_MODI_SICUREZZA_TOKEN_CLIENT_ID = "filtroModiTokenClientId";
	public static final String FILTRO_MODI_AUDIENCE = "filtroModiAudience";
	public static final String FILTRO_MODI_DIGEST_RICHIESTA = "filtroModiDigestRich";
	public static final String FILTRO_MODI_INFORMAZIONI_UTENTE = "filtroModiInfoUtente";
	
	public static final String FILTRO_PROPRIETA_NOME = "filtroPropNome";
	public static final String FILTRO_PROPRIETA_VALORE = "filtroPropValore";
	
	public static final String FILTRO_REMOTE_STORE_ID = "filtroRemoteStoreId";
	public static final String FILTRO_REMOTE_STORE_KEY_KID = "filtroRemoteStoreKeyKid";
	public static final String FILTRO_REMOTE_STORE_KEY_CLIENT_ID = "filtroRemoteStoreKeyClientId";
	public static final String FILTRO_REMOTE_STORE_KEY_ORGANIZZAZIONE = "filtroRemoteStoreKeyOrganizzazione";
	
	public static List<String> convertToTipiSoggetti(String filterProtocollo, String filterProtocolli) throws CoreException {
		List<String> tipoSoggettiProtocollo = null;
		if(filterProtocollo!=null && !"".equals(filterProtocollo)) {
			try {
				tipoSoggettiProtocollo = ProtocolFactoryReflectionUtils.getOrganizationTypes(filterProtocollo);
			}catch(Exception e) {
				throw new CoreException(e.getMessage(),e);
			}
		}
		else if(filterProtocolli!=null && !"".equals(filterProtocolli)) {
			tipoSoggettiProtocollo = convertToTipiSoggetti(filterProtocolli);
		}
		return tipoSoggettiProtocollo;
	}
	private static List<String> convertToTipiSoggetti(String filterProtocolli) throws CoreException {
		List<String> tipoSoggettiProtocollo = null;
		List<String> protocolli = Filtri.convertToList(filterProtocolli);
		if(protocolli!=null && !protocolli.isEmpty()) {
			tipoSoggettiProtocollo = new ArrayList<>();
			for (String protocollo : protocolli) {
				try {
					List<String> tipi = ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo);
					if(tipi!=null && !tipi.isEmpty()) {
						tipoSoggettiProtocollo.addAll(tipi);
					}
				}catch(Exception e) {
					throw new CoreException(e.getMessage(),e);
				}
			}
			if(tipoSoggettiProtocollo.isEmpty()) {
				tipoSoggettiProtocollo = null;
			}
		}
		return tipoSoggettiProtocollo;
	}
	
	public static List<String> convertToTipiServizi(String filterProtocollo, String filterProtocolli) throws CoreException {
		List<String> tipoServiziProtocollo = null;
		if(filterProtocollo!=null && !"".equals(filterProtocollo)) {
			try {
				tipoServiziProtocollo = ProtocolFactoryReflectionUtils.getServiceTypes(filterProtocollo);
			}catch(Exception e) {
				throw new CoreException(e.getMessage(),e);
			}
		}
		else if(filterProtocolli!=null && !"".equals(filterProtocolli)) {
			tipoServiziProtocollo = convertToTipiServizi(filterProtocolli);
		}
		return tipoServiziProtocollo;
	}
	private static List<String> convertToTipiServizi(String filterProtocolli) throws CoreException {
		List<String> tipoServiziProtocollo = null;
		List<String> protocolli = Filtri.convertToList(filterProtocolli);
		if(protocolli!=null && !protocolli.isEmpty()) {
			tipoServiziProtocollo = new ArrayList<>();
			for (String protocollo : protocolli) {
				try {
					List<String> tipi = ProtocolFactoryReflectionUtils.getServiceTypes(protocollo);
					if(tipi!=null && !tipi.isEmpty()) {
						tipoServiziProtocollo.addAll(tipi);
					}
				}catch(Exception e) {
					throw new CoreException(e.getMessage(),e);
				}
			}
			if(tipoServiziProtocollo.isEmpty()) {
				tipoServiziProtocollo = null;
			}
		}
		return tipoServiziProtocollo;
	}
	
	
	
	public static String convertToString(List<String> listSrc) {
		if(listSrc==null || listSrc.isEmpty()) {
			return null;
		}
		StringBuilder bf = new StringBuilder();
		for (String src : listSrc) {
			if(bf.length()>0) {
				bf.append(",");
			}
			bf.append(src);
		}
		return bf.toString();
	}
	public static List<String> convertToList(String src) {
		List<String> l = null;
		if(src==null) {
			return l;
		}
		l = new ArrayList<>();
		if(src.contains(",")) {
			String [] tmp = src.split(",");
			for (int i = 0; i < tmp.length; i++) {
				l.add(tmp[i].trim());
			}
		}
		else {
			l.add(src);
		}
		return l;
	}
	
}