Costanti.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.controllo_traffico.constants;

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

import org.openspcoop2.core.controllo_traffico.driver.PolicyGroupByActiveThreadsType;
import org.openspcoop2.utils.Map;
import org.openspcoop2.utils.MapKey;

/**
 * Costanti 
 *
 * @author Andrea Poli (poli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */
public class Costanti {

	public static final MapKey<String> PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE = Map.newMapKey("controlloTrafficoViolazione");
	
	public static final String PDD_CONTEXT_VALUE_CONNECTION_TIMEOUT = "controlloTrafficoConnectionTimeout";
	public static final String PDD_CONTEXT_VALUE_REQUEST_READ_TIMEOUT = "controlloTrafficoRequestReadTimeout";
	public static final String PDD_CONTEXT_VALUE_RESPONSE_READ_TIMEOUT = "controlloTrafficoResponseReadTimeout";
	public static final String PDD_CONTEXT_VALUE_READ_TIMEOUT = "controlloTrafficoReadTimeout";
	
	
	public static final String SEPARATORE_IDPOLICY_RAGGRUPPAMENTO = " - ";
	
	private static String controlloTrafficoImagePrefix = "image";
	private static String controlloTrafficoEventiImagePrefix = "imageEventi";
	private static String controlloTrafficoImageExt = ".bin";
	
	public static String getControlloTrafficoImage(String CT_policyType) {
		return getEngineControlloTrafficoImagePrefix(CT_policyType, controlloTrafficoImagePrefix);
	}
	public static String getControlloTrafficoEventiImage(String CT_policyType) {
		return getEngineControlloTrafficoImagePrefix(CT_policyType, controlloTrafficoEventiImagePrefix);
	}
	private static String getEngineControlloTrafficoImagePrefix(String CT_policyType, String prefix) {
		StringBuilder sb = new StringBuilder(prefix);
		if(CT_policyType!=null && !"LOCAL".equals(CT_policyType)) {
			sb.append("-").append(CT_policyType);
		}
		sb.append(controlloTrafficoImageExt);
		return sb.toString();
	}
	
	public static final String POLICY_GLOBALE = "Globale";
	public static final String POLICY_API = "API";
	
	
	public static final String GESTORE = "ctGestore";
	public static final String GESTORE_HAZELCAST_MAP_BACKWARD_COMPATIBILITY = "HAZELCAST";
	
	public static final String GESTORE_CONFIG_DATE = "ctGestoreConfigDate";
	
	public static final String MODALITA_SINCRONIZZAZIONE = "ctSyncMode";
	
	public static final String VALUE_MODALITA_SINCRONIZZAZIONE_DEFAULT = "default";
	public static final String VALUE_MODALITA_SINCRONIZZAZIONE_LOCALE = "locale";
	public static final String VALUE_MODALITA_SINCRONIZZAZIONE_LOCALE_SUDDIVISA_TRA_NODI = "localePiuNodi";
	public static final String VALUE_MODALITA_SINCRONIZZAZIONE_DISTRIBUITA = "distribuita";
	public static final List<String> getVALUES_MODALITA_SINCRONIZZAZIONE(List<PolicyGroupByActiveThreadsType> tipiSupportati){
		return getEngineMODALITA_SINCRONIZZAZIONE(tipiSupportati, true);
	}
	
	public static final String LABEL_MODALITA_SINCRONIZZAZIONE = "Sincronizzazione";	
	public static final String LABEL_MODALITA_SINCRONIZZAZIONE_DEFAULT = "Default";
	public static final String LABEL_MODALITA_SINCRONIZZAZIONE_LOCALE = "Locale";
	public static final String LABEL_MODALITA_SINCRONIZZAZIONE_LOCALE_SUDDIVISA_TRA_NODI = "Locale - Quota divisa sui nodi";
	public static final String LABEL_MODALITA_SINCRONIZZAZIONE_DISTRIBUITA = "Distribuita";
	
	public static final List<String> getLABELS_MODALITA_SINCRONIZZAZIONE(List<PolicyGroupByActiveThreadsType> tipiSupportati){
		return getEngineMODALITA_SINCRONIZZAZIONE(tipiSupportati, false);
	} 
	
	private static final List<String> getEngineMODALITA_SINCRONIZZAZIONE(List<PolicyGroupByActiveThreadsType> tipiSupportati, boolean values){
		boolean locale = false;
		boolean localeNodi = false;
		boolean distribuita = false;
		for (PolicyGroupByActiveThreadsType tipo : tipiSupportati) {
			if(PolicyGroupByActiveThreadsType.LOCAL.equals(tipo)) {
				locale = true;
			}
			else if(PolicyGroupByActiveThreadsType.LOCAL_DIVIDED_BY_NODES.equals(tipo)) {
				localeNodi = true;
			}
			else {
				distribuita = true;
			}
		}
		List<String> l = new ArrayList<>();
		l.add(values ? VALUE_MODALITA_SINCRONIZZAZIONE_DEFAULT : LABEL_MODALITA_SINCRONIZZAZIONE_DEFAULT);
		if(locale) {
			l.add(values ? VALUE_MODALITA_SINCRONIZZAZIONE_LOCALE : LABEL_MODALITA_SINCRONIZZAZIONE_LOCALE);
		}
		if(localeNodi) {
			l.add(values ? VALUE_MODALITA_SINCRONIZZAZIONE_LOCALE_SUDDIVISA_TRA_NODI : LABEL_MODALITA_SINCRONIZZAZIONE_LOCALE_SUDDIVISA_TRA_NODI);
		}
		if(distribuita) {
			l.add(values ? VALUE_MODALITA_SINCRONIZZAZIONE_DISTRIBUITA : LABEL_MODALITA_SINCRONIZZAZIONE_DISTRIBUITA);
		}
		return l;
	}
	
	
	public static final String MODALITA_IMPLEMENTAZIONE = "ctImpl";
	
	public static final String VALUE_MODALITA_IMPLEMENTAZIONE_DATABASE = "database";
	public static final String VALUE_MODALITA_IMPLEMENTAZIONE_HAZELCAST = "hazelcast";
	public static final String VALUE_MODALITA_IMPLEMENTAZIONE_REDIS = "redis";
	public static final List<String> getVALUES_MODALITA_IMPLEMENTAZIONE(List<PolicyGroupByActiveThreadsType> tipiSupportati){
		return getEngineMODALITA_IMPLEMENTAZIONE(tipiSupportati, true);
	}
	
	public static final String LABEL_MODALITA_IMPLEMENTAZIONE = "Implementazione";
	
	public static final String LABEL_MODALITA_IMPLEMENTAZIONE_DATABASE = "embedded";
	public static final String LABEL_MODALITA_IMPLEMENTAZIONE_HAZELCAST = "hazelcast";
	public static final String LABEL_MODALITA_IMPLEMENTAZIONE_REDIS = "redis";	
	public static final List<String> getLABELS_MODALITA_IMPLEMENTAZIONE(List<PolicyGroupByActiveThreadsType> tipiSupportati){
		return getEngineMODALITA_IMPLEMENTAZIONE(tipiSupportati, false);
	}
	
	private static final List<String> getEngineMODALITA_IMPLEMENTAZIONE(List<PolicyGroupByActiveThreadsType> tipiSupportati, boolean values){
		boolean database = false;
		boolean hazelcast = false;
		boolean redis = false;
		for (PolicyGroupByActiveThreadsType tipo : tipiSupportati) {
			if(PolicyGroupByActiveThreadsType.DATABASE.equals(tipo)) {
				database = true;
			}
			else if(tipo.isHazelcast()) {
				hazelcast = true;
			}
			else if(tipo.isRedis()) {
				redis = true;
			}
		}
		List<String> l = new ArrayList<>();
		if(hazelcast) {
			l.add(values ? VALUE_MODALITA_IMPLEMENTAZIONE_HAZELCAST : LABEL_MODALITA_IMPLEMENTAZIONE_HAZELCAST);
		}
		if(redis) {
			l.add(values ? VALUE_MODALITA_IMPLEMENTAZIONE_REDIS : LABEL_MODALITA_IMPLEMENTAZIONE_REDIS);
		}
		if(database) {
			l.add(values ? VALUE_MODALITA_IMPLEMENTAZIONE_DATABASE : LABEL_MODALITA_IMPLEMENTAZIONE_DATABASE);
		}
		return l;
	}
	
	
	
	public static final String MODALITA_CONTATORI = "ctCount";
	
	public static final String VALUE_MODALITA_CONTATORI_EXACT = "exact";
	public static final String VALUE_MODALITA_CONTATORI_APPROXIMATED = "approximated";
	public static final String VALUE_MODALITA_CONTATORI_INCONSISTENT = "inconsistent";
	public static final List<String> getVALUES_MODALITA_CONTATORI(List<PolicyGroupByActiveThreadsType> tipiSupportati, String impl){
		return getEngineMODALITA_CONTATORI(tipiSupportati, impl, true);
	}
	
	public static final String LABEL_MODALITA_CONTATORI = "Misurazione";
	
	public static final String LABEL_MODALITA_CONTATORI_EXACT = "esatta";
	public static final String LABEL_MODALITA_CONTATORI_APPROXIMATED = "approssimata";
	public static final String LABEL_MODALITA_CONTATORI_INCONSISTENT = "inconsistente";
	public static final List<String> getLABELS_MODALITA_CONTATORI(List<PolicyGroupByActiveThreadsType> tipiSupportati, String impl){
		return getEngineMODALITA_CONTATORI(tipiSupportati, impl, false);
	}
	
	private static final List<String> getEngineMODALITA_CONTATORI(List<PolicyGroupByActiveThreadsType> tipiSupportati, String impl, boolean values){
		boolean exact = false;
		boolean approximated = false;
		boolean inconsistent = false;
		if(VALUE_MODALITA_IMPLEMENTAZIONE_HAZELCAST.equals(impl)) {
			for (PolicyGroupByActiveThreadsType tipo : tipiSupportati) {
				if(!tipo.isHazelcast()) {
					continue;
				}
				
				if(tipo.isExact()) {
					exact = true;
				}
				else if(tipo.isApproximated()) {
					approximated = true;
				}
				else if(tipo.isInconsistent()) {
					inconsistent = true;
				}
			}
		}
		else if(VALUE_MODALITA_IMPLEMENTAZIONE_REDIS.equals(impl)) {
			for (PolicyGroupByActiveThreadsType tipo : tipiSupportati) {
				if(!tipo.isRedis()) {
					continue;
				}
				
				if(tipo.isExact()) {
					exact = true;
				}
				else if(tipo.isApproximated()) {
					approximated = true;
				}
				else if(tipo.isInconsistent()) {
					inconsistent = true;
				}
			}
		}
		List<String> l = new ArrayList<>();
		if(exact) {
			l.add(values ? VALUE_MODALITA_CONTATORI_EXACT : LABEL_MODALITA_CONTATORI_EXACT);
		}
		if(approximated) {
			l.add(values ? VALUE_MODALITA_CONTATORI_APPROXIMATED : LABEL_MODALITA_CONTATORI_APPROXIMATED);
		}
		if(inconsistent) {
			l.add(values ? VALUE_MODALITA_CONTATORI_INCONSISTENT : LABEL_MODALITA_CONTATORI_INCONSISTENT);
		}
		return l;
	}
	
	
	
	
	public static final String MODALITA_TIPOLOGIA = "ctEngineType";
	
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_FULL_SYNC = "full-sync";
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_NEAR_CACHE = "near-cache";
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_LOCAL_CACHE = "local-cache";
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_REMOTE_SYNC = "remote-sync";
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_REMOTE_ASYNC = "remote-async";
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_REPLICATED_MAP = "replicated-map";
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_ATOMIC_LONG = "atomic-long-counters";
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_ATOMIC_LONG_ASYNC = "atomic-long-async-counters";
	public static final String VALUE_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_PNCOUNTER = "pn-counters";	
	
	public static final String VALUE_MODALITA_TIPOLOGIA_REDIS_REDDISSON_MAP = "redisson-map";
	public static final String VALUE_MODALITA_TIPOLOGIA_REDIS_CONTATORI_ATOMIC_LONG = "atomic-long-counters";
	public static final String VALUE_MODALITA_TIPOLOGIA_REDIS_CONTATORI_LONGADDER = "longadder-counters";
	
	public static final List<String> getVALUES_MODALITA_TIPOLOGIA(List<PolicyGroupByActiveThreadsType> tipiSupportati, String impl, String counter){
		return getEngineMODALITA_TIPOLOGIA(tipiSupportati, impl, counter, true);
	}
	
	public static final String LABEL_MODALITA_TIPOLOGIA = "Algoritmo";
	
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_FULL_SYNC = "map";
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_NEAR_CACHE = "near-cache";
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_LOCAL_CACHE = "local-cache";
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_REMOTE_SYNC = "remote-sync";
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_REMOTE_ASYNC = "remote-async";
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_REPLICATED_MAP = "replicated-map";
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_ATOMIC_LONG = "atomic-long-counters";
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_ATOMIC_LONG_ASYNC = "atomic-long-async-counters";
	public static final String LABEL_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_PNCOUNTER = "pn-counters";
	
	public static final String LABEL_MODALITA_TIPOLOGIA_REDIS_REDDISSON = "map";
	public static final String LABEL_MODALITA_TIPOLOGIA_REDIS_CONTATORI_ATOMIC_LONG = "atomic-long-counters";
	public static final String LABEL_MODALITA_TIPOLOGIA_REDIS_CONTATORI_LONGADDER = "longadder-counters";


	public static final List<String> getLABELS_MODALITA_TIPOLOGIA(List<PolicyGroupByActiveThreadsType> tipiSupportati, String impl, String counter){
		return getEngineMODALITA_TIPOLOGIA(tipiSupportati, impl, counter, false);
	}
	
	private static final List<String> getEngineMODALITA_TIPOLOGIA(List<PolicyGroupByActiveThreadsType> tipiSupportati, String impl, String counter, boolean values){
		List<String> l = new ArrayList<>();
		if(VALUE_MODALITA_IMPLEMENTAZIONE_HAZELCAST.equals(impl)) {
			for (PolicyGroupByActiveThreadsType tipo : tipiSupportati) {
				if(VALUE_MODALITA_CONTATORI_EXACT.equals(counter)) {
					if(PolicyGroupByActiveThreadsType.HAZELCAST_ATOMIC_LONG.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_ATOMIC_LONG: LABEL_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_ATOMIC_LONG);
					}
					else if(PolicyGroupByActiveThreadsType.HAZELCAST_MAP.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_FULL_SYNC : LABEL_MODALITA_TIPOLOGIA_HAZELCAST_FULL_SYNC);
					} 
				}
				else if(VALUE_MODALITA_CONTATORI_APPROXIMATED.equals(counter)) {
					if(PolicyGroupByActiveThreadsType.HAZELCAST_PNCOUNTER.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_PNCOUNTER: LABEL_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_PNCOUNTER);
					}
					else if(PolicyGroupByActiveThreadsType.HAZELCAST_ATOMIC_LONG_ASYNC.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_ATOMIC_LONG_ASYNC: LABEL_MODALITA_TIPOLOGIA_HAZELCAST_CONTATORI_ATOMIC_LONG_ASYNC);
					}
					else if(PolicyGroupByActiveThreadsType.HAZELCAST_NEAR_CACHE.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_NEAR_CACHE : LABEL_MODALITA_TIPOLOGIA_HAZELCAST_NEAR_CACHE);
					}
					else if(PolicyGroupByActiveThreadsType.HAZELCAST_LOCAL_CACHE.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_LOCAL_CACHE : LABEL_MODALITA_TIPOLOGIA_HAZELCAST_LOCAL_CACHE);
					}
				}
				else if(VALUE_MODALITA_CONTATORI_INCONSISTENT.equals(counter)) {
					if(PolicyGroupByActiveThreadsType.HAZELCAST_NEAR_CACHE_UNSAFE_SYNC_MAP.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_REMOTE_SYNC : LABEL_MODALITA_TIPOLOGIA_HAZELCAST_REMOTE_SYNC);
					}
					else if(PolicyGroupByActiveThreadsType.HAZELCAST_NEAR_CACHE_UNSAFE_ASYNC_MAP.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_REMOTE_ASYNC : LABEL_MODALITA_TIPOLOGIA_HAZELCAST_REMOTE_ASYNC);
					}
					else if(PolicyGroupByActiveThreadsType.HAZELCAST_REPLICATED_MAP.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_HAZELCAST_REPLICATED_MAP : LABEL_MODALITA_TIPOLOGIA_HAZELCAST_REPLICATED_MAP);
					}
				}
			}
		}
		else if(VALUE_MODALITA_IMPLEMENTAZIONE_REDIS.equals(impl)) {
			for (PolicyGroupByActiveThreadsType tipo : tipiSupportati) {
				if(VALUE_MODALITA_CONTATORI_EXACT.equals(counter)) {
					if(PolicyGroupByActiveThreadsType.REDISSON_ATOMIC_LONG.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_REDIS_CONTATORI_ATOMIC_LONG : LABEL_MODALITA_TIPOLOGIA_REDIS_CONTATORI_ATOMIC_LONG);
					}
					else if(PolicyGroupByActiveThreadsType.REDISSON_MAP.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_REDIS_REDDISSON_MAP : LABEL_MODALITA_TIPOLOGIA_REDIS_REDDISSON);
					}
				}
				else if(VALUE_MODALITA_CONTATORI_INCONSISTENT.equals(counter)) {
					/*
					 * Si potrebbe pensare che debba finire in approximatedModes come per il PNCounter 
					 * Non è così poichè per il PNCounter abbiamo le versioni incrementAndGet e addAndGet e in questo caso invece no, si fa prima l'increment e poi si ottiene il valore tramite sum(). 
					 * Una volta che lo si recupera tramite la 'sum()' potrebbero essere tornati anche risultati derivanti da altre richieste in corso.
					 **/
					if(PolicyGroupByActiveThreadsType.REDISSON_LONGADDER.equals(tipo)) {
						l.add(values ? VALUE_MODALITA_TIPOLOGIA_REDIS_CONTATORI_LONGADDER: LABEL_MODALITA_TIPOLOGIA_REDIS_CONTATORI_LONGADDER);
					}
				}
			}
		}
		return l;
	}
	

	
	
	
	// HTTP HEADERS
	
	public static final String VALUE_HTTP_HEADER_DEFAULT = "default";
	public static final String VALUE_HTTP_HEADER_DISABILITATO = "disabilitato";
	public static final String VALUE_HTTP_HEADER_ABILITATO = "abilitato";
	public static final String VALUE_HTTP_HEADER_ABILITATO_NO_WINDOWS = "noWindows";
	public static final String VALUE_HTTP_HEADER_ABILITATO_WINDOWS = "windows";
	public static final String VALUE_HTTP_HEADER_ABILITATO_NO_BACKOFF = "noBackoff";
	public static final String VALUE_HTTP_HEADER_ABILITATO_BACKOFF = "backoff";
	public static final String VALUE_HTTP_HEADER_RIDEFINITO = "ridefinito";
	
	public static final String LABEL_HTTP_HEADER_DEFAULT = "Default";
	public static final String LABEL_HTTP_HEADER_DISABILITATO = "Disabilitato";
	public static final String LABEL_HTTP_HEADER_ABILITATO = "Abilitato";
	public static final String LABEL_HTTP_HEADER_ABILITATO_NO_WINDOWS = "Abilitato (senza finestra temporale)";
	public static final String LABEL_HTTP_HEADER_ABILITATO_WINDOWS = "Abilitato (con finestra temporale)";
	public static final String LABEL_HTTP_HEADER_ABILITATO_NO_BACKOFF = "Abilitato (senza backoff)";
	public static final String LABEL_HTTP_HEADER_ABILITATO_BACKOFF = "Abilitato (con backoff)";
	public static final String LABEL_HTTP_HEADER_RIDEFINITO = "Ridefinito";
	
	
	public static final String MODALITA_GENERAZIONE_HEADER_HTTP = "ctHttpMode";	
	public static final List<String> VALUES_MODALITA_GENERAZIONE_HEADER_HTTP = new ArrayList<>();
	static {
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP.add(VALUE_HTTP_HEADER_DEFAULT);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP.add(VALUE_HTTP_HEADER_DISABILITATO);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP.add(VALUE_HTTP_HEADER_RIDEFINITO);
	}
	
	public static final String LABEL_MODALITA_GENERAZIONE_HEADER_HTTP = "HTTP Headers";	
	public static final List<String> LABELS_MODALITA_GENERAZIONE_HEADER_HTTP = new ArrayList<>();
	static {
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP.add(LABEL_HTTP_HEADER_DEFAULT);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP.add(LABEL_HTTP_HEADER_DISABILITATO);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP.add(LABEL_HTTP_HEADER_RIDEFINITO);
	}
	
	
	public static final String MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT = "ctHttpQuota";	
	public static final List<String> VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT = new ArrayList<>();
	static {
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT.add(VALUE_HTTP_HEADER_DEFAULT);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT.add(VALUE_HTTP_HEADER_ABILITATO_NO_WINDOWS);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT.add(VALUE_HTTP_HEADER_ABILITATO_WINDOWS);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT.add(VALUE_HTTP_HEADER_DISABILITATO);
	}
	
	public static final String LABEL_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT = "Limiti di Quota";	
	public static final List<String> LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT = new ArrayList<>();
	static {
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT.add(LABEL_HTTP_HEADER_DEFAULT);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT.add(LABEL_HTTP_HEADER_ABILITATO_NO_WINDOWS);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT.add(LABEL_HTTP_HEADER_ABILITATO_WINDOWS);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_LIMIT.add(LABEL_HTTP_HEADER_DISABILITATO);
	}
	

	public static final String MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING = "ctHttpRemaining";	
	public static final List<String> VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING = new ArrayList<>();
	static {
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING.add(VALUE_HTTP_HEADER_DEFAULT);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING.add(VALUE_HTTP_HEADER_ABILITATO);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING.add(VALUE_HTTP_HEADER_DISABILITATO);
	}
	
	public static final String LABEL_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING = "Rimanenza della Quota";	
	public static final List<String> LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING = new ArrayList<>();
	static {
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING.add(LABEL_HTTP_HEADER_DEFAULT);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING.add(LABEL_HTTP_HEADER_ABILITATO);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_REMAINING.add(LABEL_HTTP_HEADER_DISABILITATO);
	}
	
	
	public static final String MODALITA_GENERAZIONE_HEADER_HTTP_RESET = "ctHttpReset";	
	public static final List<String> VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RESET = new ArrayList<>();
	static {
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RESET.add(VALUE_HTTP_HEADER_DEFAULT);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RESET.add(VALUE_HTTP_HEADER_ABILITATO);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RESET.add(VALUE_HTTP_HEADER_DISABILITATO);
	}
	
	public static final String LABEL_MODALITA_GENERAZIONE_HEADER_HTTP_RESET = "Reset della Quota (secondi)";	
	public static final List<String> LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RESET = new ArrayList<>();
	static {
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RESET.add(LABEL_HTTP_HEADER_DEFAULT);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RESET.add(LABEL_HTTP_HEADER_ABILITATO);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RESET.add(LABEL_HTTP_HEADER_DISABILITATO);
	}
	
	
	public static final String MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER = "ctHttpRetryAfter";	
	public static final List<String> VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER = new ArrayList<>();
	static {
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER.add(VALUE_HTTP_HEADER_DEFAULT);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER.add(VALUE_HTTP_HEADER_ABILITATO_NO_BACKOFF);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER.add(VALUE_HTTP_HEADER_ABILITATO_BACKOFF);
		VALUES_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER.add(VALUE_HTTP_HEADER_DISABILITATO);
	}
	
	public static final String LABEL_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER = "Retry-After";	
	public static final List<String> LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER = new ArrayList<>();
	static {
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER.add(LABEL_HTTP_HEADER_DEFAULT);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER.add(LABEL_HTTP_HEADER_ABILITATO_NO_BACKOFF);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER.add(LABEL_HTTP_HEADER_ABILITATO_BACKOFF);
		LABELS_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER.add(LABEL_HTTP_HEADER_DISABILITATO);
	}
	
	public static final String MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER_BACKOFF_SECONDS = "ctHttpRetryAfterBackoff";	
	
	public static final String LABEL_MODALITA_GENERAZIONE_HEADER_HTTP_RETRY_AFTER_BACKOFF_SECONDS = "Backoff (secondi)";	
}