package es.ejie.frmk.infraestructura.traza;

import es.ejie.frmk.Q70FactoriaConstantes;
import es.ejie.frmk.infraestructura.utilidades.concurrencia.Q70Lock;


/**
 * La clase permite grabar información del componente o aplicacion: incidencias, navegación, etc...
 * Cuando un componente o una aplicación tenga escribir una incidencia o un fallo, no tiene más que invocar al método 
 * <code>trace</code>: Este metodo, en caso de que la traza este activa, escribirá la incidencia en el fichero 
 * Podremos consultar si las trazas estan activadas o no
 */
public class Q70TrazaAplicacion extends Q70TrazaBase{

	private static Q70TrazaAplicacion instancia = null;

	private Q70TrazaAplicacion() {
		super();
		setLock(new Q70Lock(Q70FactoriaConstantes.ID_GESTOR_TRAZA));
	}
	
	/** 
	 * Método estático que devuelve la única instancia de la clase <code>Q70TrazaAplicacion</code>.
	 * @return Instancia de Q70TrazaAplicacion
	 */
	public static Q70TrazaAplicacion getSingleton() {
		if (instancia == null) {
			instancia = new Q70TrazaAplicacion();
		}
		return instancia;
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.traza.Q70TrazaBase#doDestruir()
	 */
	protected void doDestruir() {
		instancia = null;
	}
	
	public boolean isTraceActive() {
		return super.isTraceActive() || Q70TrazaServidor.getSingleton().isTraceActive();
	}
	
	public void trace(String componente, Q70TraceLevel nivel, String mensaje) {
		if (Q70TrazaServidor.getSingleton().isTraceActive()){
			Q70TrazaServidor.getSingleton().trace(componente, nivel, mensaje);
		}
		if (super.isTraceActive()){
			super.trace(componente, nivel, mensaje);
		}
	}
	
}