EsitoTransazioneName.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.protocol.sdk.constants;

import java.io.Serializable;

import org.openspcoop2.utils.Map;
import org.openspcoop2.utils.MapKey;


/**
 * Contiene i possibili esiti
 *
 * @author apoli@link.it
 * @author $Author$
 * @version $Rev$, $Date$
 */

public enum EsitoTransazioneName implements Serializable{

	OK,
	OK_PRESENZA_ANOMALIE,
	MESSAGGI_NON_PRESENTI,
	CONTROLLO_TRAFFICO_POLICY_VIOLATA_WARNING_ONLY,
	CONTROLLO_TRAFFICO_MAX_THREADS_WARNING_ONLY,
	HTTP_3xx,
	CONSEGNA_MULTIPLA,
	CONSEGNA_MULTIPLA_IN_CORSO,
	CONSEGNA_MULTIPLA_COMPLETATA,
	
	ERRORE_APPLICATIVO,
	
	ERRORE_PROTOCOLLO,
	ERRORE_CONNESSIONE_CLIENT_NON_DISPONIBILE,
	ERRORE_PROCESSAMENTO_PDD_4XX,
	ERRORE_PROCESSAMENTO_PDD_5XX,
	AUTENTICAZIONE_FALLITA,
	AUTORIZZAZIONE_FALLITA,
	MESSAGGIO_NON_TROVATO,
	ERRORE_INVOCAZIONE,
	ERRORE_SERVER,
	CONTENUTO_RICHIESTA_NON_RICONOSCIUTO,
	CONTENUTO_RISPOSTA_NON_RICONOSCIUTO,
	TOKEN_NON_PRESENTE,
	ERRORE_AUTENTICAZIONE_TOKEN,
	ERRORE_TOKEN,
	ERRORE_AUTENTICAZIONE,
	ERRORE_AUTORIZZAZIONE,
	CONTROLLO_TRAFFICO_POLICY_VIOLATA,
	CONTROLLO_TRAFFICO_MAX_THREADS,
	ERRORE_SICUREZZA_MESSAGGIO_RICHIESTA,
	ERRORE_SICUREZZA_MESSAGGIO_RISPOSTA,
	ERRORE_ALLEGATI_MESSAGGIO_RICHIESTA,
	ERRORE_ALLEGATI_MESSAGGIO_RISPOSTA,
	ERRORE_CORRELAZIONE_APPLICATIVA_RICHIESTA,
	ERRORE_CORRELAZIONE_APPLICATIVA_RISPOSTA,
	HTTP_4xx,
	HTTP_5xx,
	ERRORE_VALIDAZIONE_RICHIESTA,
	ERRORE_VALIDAZIONE_RISPOSTA,
	ERRORE_SOSPENSIONE,
	CORS_PREFLIGHT_REQUEST_VIA_GATEWAY,
	CORS_PREFLIGHT_REQUEST_TRASPARENTE,
	ERRORE_TRASFORMAZIONE_RICHIESTA,
	ERRORE_TRASFORMAZIONE_RISPOSTA,
	CONSEGNA_MULTIPLA_FALLITA,
	API_NON_INDIVIDUATA,
	OPERAZIONE_NON_INDIVIDUATA,
	RICHIESTA_DUPLICATA,
	RISPOSTA_DUPLICATA,
	MESSAGE_BOX,
	ERRORE_RESPONSE_TIMEOUT,
	ERRORE_REQUEST_TIMEOUT,
	ERRORE_CONNECTION_TIMEOUT,
	ERRORE_NEGOZIAZIONE_TOKEN,
	ERRORE_TRACCIAMENTO,
	
	CUSTOM;

	private MapKey<String> mapKey;
	
	EsitoTransazioneName()
	{
		this.mapKey = Map.newMapKey("EsitoTransazioneName."+this.name());
	}
	
	public MapKey<String> getMapKey() {
		return this.mapKey;
	}
	
	public static boolean isPddSpecific(EsitoTransazioneName esitoTransactionName){
		if(!EsitoTransazioneName.OK.equals(esitoTransactionName) 
				&&
				!isIntegrationManagerSpecific(esitoTransactionName)
				){
			return true;
		}
		return false;
	}
	public static  boolean isIntegrationManagerSpecific(EsitoTransazioneName esitoTransactionName){
		if(EsitoTransazioneName.MESSAGGI_NON_PRESENTI.equals(esitoTransactionName) || 
				EsitoTransazioneName.MESSAGGIO_NON_TROVATO.equals(esitoTransactionName) ||
				EsitoTransazioneName.AUTENTICAZIONE_FALLITA.equals(esitoTransactionName) ||
				EsitoTransazioneName.AUTORIZZAZIONE_FALLITA.equals(esitoTransactionName) 
				){
			return true;
		}
		return false;
	}
	public static  boolean isStatiConsegnaMultipla(EsitoTransazioneName esitoTransactionName){
		// Stati successivi al primo stato
		if(EsitoTransazioneName.CONSEGNA_MULTIPLA_IN_CORSO.equals(esitoTransactionName) || 
				EsitoTransazioneName.CONSEGNA_MULTIPLA_COMPLETATA.equals(esitoTransactionName) || 
				EsitoTransazioneName.CONSEGNA_MULTIPLA_FALLITA.equals(esitoTransactionName) 
				){
			return true;
		}
		return false;
	}
	public static boolean isConsegnaMultipla(EsitoTransazioneName esitoTransactionName){
		if(EsitoTransazioneName.CONSEGNA_MULTIPLA.equals(esitoTransactionName) || 
				EsitoTransazioneName.CONSEGNA_MULTIPLA_IN_CORSO.equals(esitoTransactionName) || 
				EsitoTransazioneName.CONSEGNA_MULTIPLA_COMPLETATA.equals(esitoTransactionName) || 
				EsitoTransazioneName.CONSEGNA_MULTIPLA_FALLITA.equals(esitoTransactionName) 
				){
			return true;
		}
		return false;
	}
	
	public static boolean isErroreRisposta(EsitoTransazioneName esitoTransactionName){
		// Vedi anche gruppo in esiti.properties
		if(EsitoTransazioneName.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO.equals(esitoTransactionName) || 
				EsitoTransazioneName.ERRORE_ALLEGATI_MESSAGGIO_RISPOSTA.equals(esitoTransactionName) || 
				EsitoTransazioneName.ERRORE_CORRELAZIONE_APPLICATIVA_RISPOSTA.equals(esitoTransactionName) || 
				EsitoTransazioneName.ERRORE_SICUREZZA_MESSAGGIO_RISPOSTA.equals(esitoTransactionName) || 
				EsitoTransazioneName.ERRORE_VALIDAZIONE_RISPOSTA.equals(esitoTransactionName) ||
				EsitoTransazioneName.ERRORE_TRASFORMAZIONE_RISPOSTA.equals(esitoTransactionName) ||
				EsitoTransazioneName.RISPOSTA_DUPLICATA.equals(esitoTransactionName)
				){
			return true;
		}
		return false;
	}
	
	public static boolean isSavedInMessageBox(EsitoTransazioneName esitoTransactionName){
		if(EsitoTransazioneName.MESSAGE_BOX.equals(esitoTransactionName)){
			return true;
		}
		return false;
	}

	public static EsitoTransazioneName convertoTo(String name){
		EsitoTransazioneName esitoTransactionName = null;
		try{
			esitoTransactionName = EsitoTransazioneName.valueOf(name);
		}catch(Exception e){
			// ignore
		}
		if(esitoTransactionName==null){
			esitoTransactionName = EsitoTransazioneName.CUSTOM;
		}
		return esitoTransactionName;
	}
	
	public static String[] toEnumNameArray(){
		String[] res = new String[EsitoTransazioneName.values().length];
		int i=0;
		for (EsitoTransazioneName tmp : EsitoTransazioneName.values()) {
			res[i]=tmp.name();
			i++;
		}
		return res;
	}

	
	@Override
	public String toString(){
		return this.name();
	}


}