package es.ejie.frmk.control.serviciocoordinacion;

import java.io.InputStream;
import java.util.HashMap;

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;
/**
 * @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 class Q70Configurador implements Q70Configurable{

	private HashMap configuration;
	private String fichero;	
	
	private static final String COMPONENTE = "CONFIGURACION";
	
	/**
	 * Constructor del <code>Q70Configurador</code>.
	 * 
	 * @param <code>String</code> nombre del fichero XML de configuración
	 */
	
	public Q70Configurador(String ficheroXML) {
		this.fichero=ficheroXML;
	}
	public void lanzarConfigurador() throws Q70FrameworkException{
		InputStream fis = Q70GestorArranqueConfiguracionServidor.getResourceAsStream(fichero);
		es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurador cu = new es.ejie.frmk.infraestructura.utilidades.configurador.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 Q70Configurador");
			}
			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() {
		Q70ServicioCoordinacion.getSingleton().setConfiguration(configuration);		
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioLista(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginList(String nombre, String nivel, String path) {
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finLista(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endList(String nombre, String nivel, String path) {
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioEstructura(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginStructure(String nombre, String nivel, String path) {
		if (nivel.equals("/estructura")) {
			configuration = new HashMap();
		}		
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finEstructura(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endStructure(String nombre, String nivel, String path) {
	}

	/**
	 * @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 nombre, String valor, String nivel, String path) {
		if (nivel.equals("/estructura/propiedad")) {
			configuration.put(nombre, valor);
		}
	}

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