package es.ejie.frmk.infraestructura.logs.navegacion;

import java.util.HashMap;

import es.ejie.frmk.infraestructura.logs.base.Q70ConstantesLogs;
import es.ejie.frmk.infraestructura.logs.base.Q70LogInterno;
import es.ejie.frmk.infraestructura.logs.base.Q70Mensaje;
import es.ejie.frmk.infraestructura.logs.base.interfaces.Q70Log;
import es.ejie.frmk.infraestructura.logs.base.interfaces.Q70LogFlushable;

/**
 * Log específico para guardar datos relativos a la Navegación.
 * <p>
 * Previamente ha de ser configurado por el <b>Q70GestorLogs</b>. 
 * Los datos de la configuración
 * se encuentran en un fichero de configuración XML.
 * 
 * @see es.ejie.frmk.infraestructura.logs.base.Q70GestorLogs
 * @author Carlos Rodriguez
 * @version 1.0  fecha: 10-dic-03
 * 
 */
public class Q70LogNavegacionServidor implements Q70LogNavegacionInterface,Q70LogFlushable
{

	//respuesta sobre la navegacion
	public final static String RESPUESTA_OK = "OK";
	public final static String RESPUESTA_ERROR = "ERROR";
	public final static String RESPUESTA_NAVEGACION_ANOMALA = "NAV. ANOMALA";

	//tipos de navegacion
	public final static String TIPO_NAVEGACION_ENTRADA = "ENTRADA";
	public final static String TIPO_NAVEGACION_SALIDA = "SALIDA";

	//Instancia unica del log de navegacion
	private static Q70LogNavegacionServidor logNavegacion;

	private Q70Log log;

	private Q70LogNavegacionServidor() {
	}

	/**
	  * Proporciona acceso al Q70Log de Incidencias
	  * @return Instancia única del Q70Log de Incidencias
	  */
	synchronized public static Q70LogNavegacionServidor getSingleton()
	{
		if (logNavegacion == null)
			logNavegacion = new Q70LogNavegacionServidor();
		return logNavegacion;
	}

	/**
	 * @see es.ejie.frmk.infraestructura.logs.navegacion.Q70LogNavegacionInterface#log(java.lang.String, java.lang.String)
	 */
	public void log(String codigoRespuesta, String tipoSalida)
	{
		HashMap hm = new Q70Mensaje();
		hm.put(Q70ConstantesLogs.COD_RESPUESTA, codigoRespuesta);
		hm.put(Q70ConstantesLogs.TIPO_SALIDA, tipoSalida);
		try
		{
			log.log(hm);
		}
		catch (NullPointerException ex)
		{
			Q70LogInterno.log(hm.toString());
		}
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.logs.navegacion.Q70LogNavegacionInterface#isEnabled()
	 */
	public boolean isEnabled()
	{
		if (log.isEnabled())
			return true;
		return false;
	}
	
	/**
	 * Establece el log de navegacion
	 * @param log
	 */
	public void setLog(Q70Log log)
	{
		this.log = log;
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.logs.base.interfaces.Q70LogFlushable#flush()
	 */
	public void flush(){
		log.flush();
	}

}
