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

import es.ejie.frmk.Q70FactoriaConstantes;
import es.ejie.frmk.infraestructura.logs.accesos.Q70LogAccesos;
import es.ejie.frmk.infraestructura.logs.base.interfaces.Q70Log;
import es.ejie.frmk.infraestructura.logs.conectores.Q70LogConectores;
import es.ejie.frmk.infraestructura.logs.incidencias.Q70LogIncidencias;
import es.ejie.frmk.infraestructura.logs.navegacion.Q70LogNavegacion;
import es.ejie.frmk.infraestructura.logs.transacciones.Q70LogTransacciones;
import es.ejie.frmk.infraestructura.utilidades.concurrencia.Q70Lock;

/**
 * Esta clase es la encargada de crear una nueva instancia, a nivel de componente o aplicacion, en caso de que no 
 * exista, o retornar la que usamos.
 * Además no devuelve una instancia al tipo de log (navegacion, conector, transaccion o incidencia) que estamos
 * preguntando 
 * @version 1.0   Fecha: 22-feb-06
 */
public class Q70GestorLogsAplicacion extends Q70GestorLogsBase{

	private static Q70GestorLogsAplicacion instancia = null;

	private Q70GestorLogsAplicacion() {
		super();
		setLock (new Q70Lock(Q70FactoriaConstantes.ID_GESTOR_LOGS));
	}
	
	/** 
	 * Método estático que devuelve la única instancia de la clase <code>Q70GestorLogsAplicacion</code>.
	 * @return Instancia de Q70GestorLogsAplicacion
	 */
	public static Q70GestorLogsAplicacion getSingleton() {
		if (instancia == null) {
			instancia = new Q70GestorLogsAplicacion();
		}
		return instancia;
	}

	/**
	 *  @see es.ejie.frmk.infraestructura.logs.base.Q70GestorLogsBase#doDestruir()
	 */
	protected void doDestruir() {
		instancia = null;
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.logs.base.Q70GestorLogsBase#getTipoLog(java.lang.String, es.ejie.frmk.infraestructura.logs.base.interfaces.Q70Log)
	 */
	protected Object getTipoLog(String logNameConfiguracion, Q70Log log)
	{
		if (logNameConfiguracion.equals(Q70ConstantesLogs.LOG_ACCESOS)){
			Q70LogAccesos.getSingleton().setLog(log);
			return Q70LogAccesos.getSingleton();
		}else if (logNameConfiguracion.equals(Q70ConstantesLogs.LOG_CONECTORES)){
			Q70LogConectores.getSingleton().setLog(log);
			return Q70LogConectores.getSingleton();
		}else if (logNameConfiguracion.equals(Q70ConstantesLogs.LOG_INCIDENCIAS)){
			Q70LogIncidencias.getSingleton().setLog(log);
			return Q70LogIncidencias.getSingleton();
		}else if (logNameConfiguracion.equals(Q70ConstantesLogs.LOG_NAVEGACION)){
			Q70LogNavegacion.getSingleton().setLog(log);
			return Q70LogNavegacion.getSingleton();
		}else if (logNameConfiguracion.equals(Q70ConstantesLogs.LOG_TRANSACCIONES)){
			Q70LogTransacciones.getSingleton().setLog(log);
			return Q70LogTransacciones.getSingleton();
		}
		return log;
	}
}