/*
 * Creado el 19-nov-03
 *
 * Para cambiar la plantilla para este archivo generado vaya a
 * Ventana&gt;Preferencias&gt;Java&gt;Generación de código&gt;Código y comentarios
 */
package es.ejie.frmk.conectores;

import java.util.HashMap;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import es.ejie.frmk.Q70Factoria;
import es.ejie.frmk.control.arranque.Q70Arrancable;
import es.ejie.frmk.control.excepciones.Q70FrameworkException;
import es.ejie.frmk.infraestructura.traza.Q70TraceLevel;
import es.ejie.frmk.infraestructura.traza.Q70TrazaInterface;

/**
 * @author UFRM006
 *
 * Para cambiar la plantilla para este comentario de tipo generado vaya a
 * Ventana&gt;Preferencias&gt;Java&gt;Generación de código&gt;Código y comentarios
 */
public abstract class Q70ConectorBase implements Q70Arrancable
{
	protected Context contexto;
	protected HashMap contextos;

	protected String fileNameConfiguracion;

	private static final String ID_COMPONENTE = "CONECTOR";

	public abstract void beforeDestroy();
	public abstract void reConfigure() throws Q70FrameworkException;
	protected abstract void configure() throws Q70FrameworkException;
	
	public void afterCreate(String xml) throws Q70FrameworkException
	{
		try {
			fileNameConfiguracion = xml;
			configure();
		} catch (Exception e) {
			Q70TrazaInterface traza = Q70Factoria.getTraza();
			if (traza.isTraceActive()){
				traza.trace(ID_COMPONENTE, Q70TraceLevel.ERROR, "Se ha producido un error en el método afterCreate de la clase Q70ConectorBase");
			}
			throw new Q70FrameworkException(ID_COMPONENTE,this.getClass().toString(),"afterCreate","Se ha producido un error en el método afterCreate.",e);
		}
	}

	protected Context getContexto(String initialContextName) throws NamingException
	{
		if (initialContextName == null)
		{
			return new InitialContext();
		}

		if (contextos == null)
		{
			throw new NamingException("Contexto inicial '" + initialContextName + "' no existente en la configuracion de:" + getClass().toString());
		}
		Object objEntornoContexto = contextos.get(initialContextName);
		if (objEntornoContexto == null)
		{
			throw new NamingException("Contexto inicial '" + initialContextName + "' no existente en la configuracion de:" + getClass().toString());
		}

		return new InitialContext((Hashtable) objEntornoContexto);
	}

	protected Context getContexto() throws NamingException
	{
		return getContexto(null);
	}
}