package es.ejie.frmk.conectores;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Hashtable;

import es.ejie.frmk.Q70Factoria;
import es.ejie.frmk.control.arranque.Q70GestorArranqueConfiguracionServidor;
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;
/**
 * @version 1.0
 * Fecha: 18-dic-03
 *
 * Esta clase permite configurar el componente de Mensajes JMS
 * a partir de su fichero xml de configuración .
 * La clase implementa el interface Q70Configurable para autoconfigurarse 
 * a partir de un fichero xml
*/	
public abstract class Q70ConfiguradorConector implements Q70Configurable {
	private String nombreVariable, valorVariable;
	private HashMap contextos;
	private Hashtable envContexto;
	private String fichero;	
	private String nombreContexto;
	
	private static final String COMPONENTE = "CONFIGURACION";
	/**
	 * Constructor del <code>ConfiguradorConector</code>.
	 * 
	 * @param <code>String</code> nombre del fichero XML de configuración
	 */
	public Q70ConfiguradorConector() {
	}
		
	public Q70ConfiguradorConector(String ficheroXML) {
		this.fichero=ficheroXML;
	}
	/**
	 * Método que ejecuta la configuración del componente 
	 */	
	public void lanzarConfigurador() throws Q70FrameworkException{
		InputStream fis = Q70GestorArranqueConfiguracionServidor.getResourceAsStream(fichero);
		Q70Configurador cu = new Q70Configurador(this, fis);
		try
		{
			cu.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 Q70ConfiguradorConector");
			}
			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#finConfiguracion()
	 */
	public void endConfiguration() {
	}

	/**
	 * @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) {
		if(strNivel.equals("/lista/estructura"))
			contextos.put(nombreContexto, envContexto);		
		if (strNivel.equals("/lista/estructura/estructura")) {
			envContexto.put(nombreVariable, valorVariable);
			return;
		}
	}
	/**
	 * @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#finPropiedad(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endProperty(String strNombre, String strNivel, String strPath) {
	}
	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioConfiguracion()
	 */
	public void beginConfiguration() {
	}
	/**
	 * @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) {
		if(strNivel.equals("/lista/estructura"))
		{
			envContexto = new Hashtable(10);
			nombreContexto = strNombre;
		}
		if (strNombre.equals("VariableDeEntorno")) {
			nombreVariable = valorVariable = null;
			return;
		}
	}
	/**
	 * @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) {
		if (strNombre.equals("listaContextosIniciales")) {
			contextos = new HashMap();
			return;
		}
	}
	/**
	 * @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 (strNombre.equals("nombreVariable")) {
			nombreVariable = strValor;
			return;
		}
		if (strNombre.equals("valorVariable")) {
			valorVariable = strValor;
			return;
		}
	}
	public HashMap getContextos(){
		return contextos;
	}
	
}
