package es.ejie.frmk.infraestructura.traza;

import es.ejie.frmk.infraestructura.logs.base.Q70ConfiguracionLog;
import es.ejie.frmk.infraestructura.logs.base.Q70ConstantesLogs;
import es.ejie.frmk.infraestructura.logs.base.Q70LogInterno;
import es.ejie.frmk.infraestructura.utilidades.configurador.Q70ConfiguradorBase;

public final class Q70ConfiguradorTraza extends Q70ConfiguradorBase
{
	private static final String TRACER_ROOT = "/TRACER";
	private static final int LOGS_ROOT_LENGTH = 7;
	
	private Q70ConfiguracionLog conf = null;
	private String strLogRemotoActivo = Q70ConstantesLogs.NO; 
	
	public Q70ConfiguradorTraza(String ficheroXML, String aplicacionCodigo){
		setFichero(ficheroXML);
		setCodigoAplicacion(aplicacionCodigo);
	}
	
	/**
	 * Obtiene la configuración de trazas
	 * @return un objeto Q70ConfiguracionLog con la configuración de las trazas
	 */
	protected Q70ConfiguracionLog getConfigurationTrazas()
	{
		return conf;
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#beginConfiguration()
	 */
	public void beginConfiguration()
	{
		//utilizar el log interno para ver los valores de los parámetros
		if (Q70LogInterno.isEnabled())
			Q70LogInterno.log("INICIO CONFIGURACION");
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#endConfiguration()
	 */
	public void endConfiguration()
	{
		//utilizar el log interno para ver los valores de los parámetros
		if (Q70LogInterno.isEnabled())
			Q70LogInterno.log("FIN CONFIGURACION");
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#beginList(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginList(String strNombre, String strNivel, String strPath)
	{
		//utilizar el log interno para ver los valores de los parámetros
		if (Q70LogInterno.isEnabled())
			Q70LogInterno.log(
				"Inicio Lista: "
					+ strNombre
					+ "\n  Nivel = "
					+ strNivel
					+ "\n  Path = "
					+ strPath
					+ "\n");

	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#endList(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endList(String strNombre, String strNivel, String strPath)
	{
		//utilizar el log interno para ver los valores de los parámetros
		if (Q70LogInterno.isEnabled())
			Q70LogInterno.log(
				"Fin Lista: "
					+ strNombre
					+ "\n  Nivel = "
					+ strNivel
					+ "\n  Path = "
					+ strPath
					+ "\n");

	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#beginStructure(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginStructure(
		String strNombre,
		String strNivel,
		String strPath)
	{
		//utilizar el log interno para ver los valores de los parámetros
		if (Q70LogInterno.isEnabled())
			Q70LogInterno.log(
				"Inicio Estrutura: "
					+ strNombre
					+ "\n  Nivel = "
					+ strNivel
					+ "\n  Path = "
					+ strPath
					+ "\n");

		if (strPath.substring(0, LOGS_ROOT_LENGTH).equals(TRACER_ROOT))
		{
			conf = new Q70ConfiguracionLog();
			getConfigurationTrazas().setProperty(Q70ConstantesLogs.LOG_REMOTO_ACTIVO, strLogRemotoActivo);
		}
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#endStructure(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endStructure(
		String strNombre,
		String strNivel,
		String strPath)
	{
		//utilizar el log interno para ver los valores de los parámetros
		if (Q70LogInterno.isEnabled())
			Q70LogInterno.log(
				"Fin Estructura: "
					+ strNombre
					+ "\n      Nivel = "
					+ strNivel
					+ "\n      Path = "
					+ strPath);

		if (strPath.substring(0, LOGS_ROOT_LENGTH).equals(TRACER_ROOT))
		{
			if (Q70LogInterno.isEnabled())
				Q70LogInterno.log("Obteniendo el log " + strNombre);

			defaultConfiguration(strNombre);
			

			if (Q70LogInterno.isEnabled())
			{
				Q70LogInterno.log(
					"Parseando condicion: " + getConfigurationTrazas().getProperty("CONDICION"));
				Q70LogInterno.log(
					"     Atributos genéricos: "
						+ getConfigurationTrazas().getProperty("ATRIBUTOS_GENERICOS"));
			}
								
		}

	}
	
	//Establece la configuración por defecto
	private void defaultConfiguration(String name) 
		{
			if (getConfigurationTrazas().getProperty(Q70ConstantesLogs.ATRIBUTOS_GENERICOS) == null) 
				getConfigurationTrazas().setProperty(Q70ConstantesLogs.ATRIBUTOS_GENERICOS,Q70ConstantesLogs.getDefaultGenericColumns(name));
			
			if (getConfigurationTrazas().getProperty(Q70ConstantesLogs.ATRIBUTOS_MENSAJE) == null) 
				getConfigurationTrazas().setProperty(Q70ConstantesLogs.ATRIBUTOS_MENSAJE,Q70ConstantesLogs.getDefaultMessageColumns(name));
		}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#beginProperty(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginProperty(
		String strNombre,
		String strValor,
		String strNivel,
		String strPath)
	{
		//utilizar el log interno para ver los valores de los parámetros
		if (Q70LogInterno.isEnabled())
			Q70LogInterno.log(
				"Inicio Propiedad: "
					+ strNombre
					+ "\n      Valor = "
					+ strValor
					+ "\n      Nivel = "
					+ strNivel
					+ "\n      Path = "
					+ strPath);
		/*
				if (strPath.equals(FACTORIA_LOGS))
				{
					logFactory = (Q70LogFactory) instanciate(strValor);
				}
				else if (strPath.equals(GESTOR_DATOS_COMUNES))
				{
					commonDataManager = (Q70GestorDatosComunes) instanciate(strValor);
				}
		
				else */
		if (strPath.equals(Q70ConstantesLogs.PATH_LOG_REMOTO_ACTIVO)) {
			strLogRemotoActivo = strValor;
		}
		else if (strPath.substring(0, LOGS_ROOT_LENGTH).equals(TRACER_ROOT))
		{
			getConfigurationTrazas().setProperty(strNombre, strValor);
		}

	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#endProperty(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endProperty(String strNombre, String strNivel, String strPath)
	{
		if (Q70LogInterno.isEnabled())
			Q70LogInterno.log(
				"Fin Propiedad: "
					+ strNombre
					+ "\n      Nivel = "
					+ strNivel
					+ "\n      Path = "
					+ strPath);
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70ConfiguradorBase#getConfiguracion()
	 */
	protected Object getConfiguracion() {
		return conf;
	}
}
