package es.ejie.frmk.control.apilamiento;

import java.io.InputStream;

import es.ejie.frmk.Q70Factoria;
import es.ejie.frmk.control.arranque.Q70GestorArranqueConfiguracion;
import es.ejie.frmk.control.excepciones.Q70FrameworkException;
import es.ejie.frmk.infraestructura.traza.Q70TraceLevel;
import es.ejie.frmk.infraestructura.traza.Q70TrazaInterface;
import es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable;
import es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurador;

/**
 * Esta clase permite configurar el componente de Gestor de Apilamiento
 * a partir de su fichero xml de configuración.
 * La clase implementa el interface Q70Configurable para autoconfigurarse 
 * a partir de un fichero xml
 * 
 * @version 1.0
 * Fecha: 12-feb-04
 */
public class Q70ConfiguradorApilamiento implements Q70Configurable {

	private String fichero = null;
	
	private static final String DATA_SOURCE = "dataSource";
	private static final String NOMBRE_TABLA = "tabla";
	private static final String COMPONENTE = "GESTOR_APILAMIENTO";
	
	/**
	 * Constructor del <code>Q70ConfiguradorApilamiento</code>.
	 * 
	 * @param ficheroXML Nombre del fichero XML de configuración
	 */
	public Q70ConfiguradorApilamiento (String ficheroXML)
	{
		this.fichero=ficheroXML;
	}

	/**
	 * Método que genera la configuración del componente 
	 */
	public void lanzarConfigurador () throws Q70FrameworkException{
		InputStream fis = Q70GestorArranqueConfiguracion.getResourceAsStream(fichero);
		Q70Configurador conf =	new Q70Configurador(this, fis);
		try
		{
			conf.generateConfiguration();
		}
		catch (Exception e)
		{
			Q70TrazaInterface traza = Q70Factoria.getTraza();
			if (traza.isTraceActive()){
				traza.trace(COMPONENTE, Q70TraceLevel.ERROR, "Se ha producido un error en el método lanzarConfigurador de la clase Q70ConfiguradorApilamiento");
			}
			throw new Q70FrameworkException(COMPONENTE,this.getClass().toString(),"lanzarConfigurador","Se ha producido un error en el método lanzarConfigurador.",e);
		}
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioConfiguracion()
	 */
	public void beginConfiguration() {
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finConfiguracion()
	 */
	public void endConfiguration() {
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioLista(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginList(String strNombre, String strNivel, String strPath) {
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finLista(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endList(String strNombre, String strNivel, String strPath) {
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioEstructura(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginStructure(String strNombre, String strNivel,	String strPath) {
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finEstructura(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endStructure(String strNombre,	String strNivel, String strPath) {
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioPropiedad(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginProperty(String strNombre, String strValor, String strNivel,	String strPath) {
		if (strNivel.equals("/propiedad")){
			if (strNombre.equals(DATA_SOURCE)){
				Q70GestorDeApilamiento.getSingleton().setDataSource(strValor);
			}
			else
				if (strNombre.equals(NOMBRE_TABLA)){
					Q70GestorDeApilamiento.getSingleton().setTable(strValor);
				}
		}
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finPropiedad(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endProperty(String strNombre, String strNivel, String strPath) {
	}

}
