ConfigurazioneTracciamentoUtils.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.pdd.logger.transazioni;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.openspcoop2.core.commons.CoreException;
import org.openspcoop2.pdd.core.connettori.ConnettoreUtils;
import org.openspcoop2.protocol.sdk.Context;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.builder.EsitoTransazione;
import org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName;
import org.openspcoop2.protocol.utils.EsitiProperties;
import org.slf4j.Logger;

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

	private ConfigurazioneTracciamentoUtils() {}
	
	
	
	public static boolean isConsegnaMultipla(Context context) {
		int connettoriMultipli = getNumeroConnettoriMultipli(context);
		return isConsegnaMultipla(connettoriMultipli);
	}
	public static boolean isConsegnaMultipla(int connettoriMultipli) {
		boolean consegnaMultipla = false;
		if(connettoriMultipli>0) {
			consegnaMultipla = true;
		}
		return consegnaMultipla;
	}
	public static int getNumeroConnettoriMultipli(Context context) {
		int connettoriMultipli = -1;
		if(context.containsKey(org.openspcoop2.core.constants.Costanti.CONSEGNA_MULTIPLA_CONNETTORI)) {
			Object oConnettori = context.getObject(org.openspcoop2.core.constants.Costanti.CONSEGNA_MULTIPLA_CONNETTORI );
			if (oConnettori instanceof Integer){
				connettoriMultipli = (Integer) oConnettori;
			}
		}
		return connettoriMultipli;
	}
	public static String getConnettoriMultipli(Context context) {
		return ConnettoreUtils.getNomeConnettori(context);
	}
	
	
	
	public static boolean isEsitoDaRegistrare(Logger log, IProtocolFactory<?> protocolFactory, Context context, 
			List<String> esitiDaRegistrare, EsitoTransazione esitoTransazione) throws ProtocolException {
		// EsitiProperties
		EsitiProperties esitiProperties = EsitiProperties.getInstance(log, protocolFactory);
				
		int code = esitoTransazione.getCode();
		
		// ** Consegna Multipla **
		// NOTA: l'esito deve essere compreso solo dopo aver capito se le notifiche devono essere consegna o meno poichè le notifiche stesse si basano sullo stato di come è terminata la transazione sincrona
		boolean consegnaMultipla = isConsegnaMultipla(context);
		if(consegnaMultipla) {
			code = esitiProperties.convertoToCode(EsitoTransazioneName.CONSEGNA_MULTIPLA);
		}
		
		String codeAsString = code+"";
		return esitiDaRegistrare.contains(codeAsString);
	}
	public static String getEsitoTransazionDetail(Logger log, IProtocolFactory<?> protocolFactory,
			EsitoTransazione esitoTransazione) throws ProtocolException {
		EsitiProperties esitiProperties = EsitiProperties.getInstance(log, protocolFactory);
		int code = esitoTransazione.getCode();
		String codeAsString = code+"";
		return "esito [name:"+esitiProperties.getEsitoName(esitoTransazione.getCode())+" code:"+codeAsString+"]";
	}
	public static boolean isEsitoOk(Logger log, IProtocolFactory<?> protocolFactory,
			EsitoTransazione esitoTransazione) throws ProtocolException {
		List<String> esitiOk = getEsitiOk(log, protocolFactory);
		int code = esitoTransazione.getCode();
		String codeAsString = code+"";
		return esitiOk.contains(codeAsString);
	}
	private static List<String> getEsitiOk(Logger log, IProtocolFactory<?> protocolFactory) throws ProtocolException{
		EsitiProperties esitiProperties = EsitiProperties.getInstance(log, protocolFactory);
		List<Integer> tmpEsitiOk = esitiProperties.getEsitiCodeOk();
		List<String> esitiOk = new ArrayList<>();
		if(tmpEsitiOk!=null && !tmpEsitiOk.isEmpty()){
			for (Integer esito : tmpEsitiOk) {
				esitiOk.add(esito+"");
			}
		}
		return esitiOk;
	}
	
	public static String getPrefixFile(File f, boolean expectedDir) {
		return (expectedDir ? "Dir ":"")+"["+f.getAbsolutePath()+"] ";
	}
	public static CoreException newCoreExceptionNotFile(File f, boolean expectedDir){
		return new CoreException(getPrefixFile(f, expectedDir)+"isn't file");
	}
	public static CoreException newCoreExceptionCannotRead(File f, boolean expectedDir){
		return new CoreException(getPrefixFile(f, expectedDir)+"cannot read");
	}
	public static CoreException newCoreExceptionNotExists(File f, boolean expectedDir){
		return new CoreException(getPrefixFile(f, expectedDir)+"not exists");
	}
}