package es.ejie.frmk.infraestructura.tablas;

import java.util.Hashtable;
import java.util.List;

import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;

import es.ejie.frmk.Q70Factoria;
import es.ejie.frmk.Q70FactoriaConstantes;
import es.ejie.frmk.control.arranque.Q70MBeanBase;
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.Q70Administrable;


/**
 * @version 2.0   Fecha: 20-feb-2006
 */
public class Q70MBeanGestorTablasCodigos extends Q70MBeanBase implements Q70MBeanGestorTablasCodigosMBean{

	public Q70MBeanGestorTablasCodigos() {
		super();
	}
	
	/**
	 * @see es.ejie.frmk.control.arranque.Q70MBeanBase#doConfiguracionComponente(java.lang.Object)
	 */
	protected void doConfiguracionComponente(Object configuracion) throws Q70FrameworkException{		
		try {
			((Q70GestorTablasCodigosServidorInterface)getClaseComponente()).setCatalog((Q70Catalogo)configuracion);
		}catch (Exception e) {
			Q70TrazaInterface traza = Q70Factoria.getTraza();
			if (traza.isTraceActive()){
				traza.trace(Q70Constantes.ID_COMPONENTE, Q70TraceLevel.ERROR, "Se ha producido un error en el método doConfiguracionComponente de la clase Q70MBeanGestorCache");
			}
			throw new Q70FrameworkException(Q70Constantes.ID_COMPONENTE,this.getClass().toString(),"doConfiguracionComponente","Se ha producido un error en el método doConfiguracionComponente.",e);
		}
	}

	/**
	 * @see es.ejie.frmk.control.arranque.Q70MBeanBase#anadirComponenteFactoria()
	 */
	protected void anadirComponenteFactoria() {
		Q70Factoria.setGestorTablasCodigos(getClaseComponente());
	}

	/**
	 * @see es.ejie.frmk.control.arranque.Q70MBeanBase#setComponenteAplicacion(es.ejie.frmk.infraestructura.utilidades.configurador.Q70Administrable)
	 */
	protected void setComponenteAplicacion(Q70Administrable claseComponente) {
		Q70GestorTablasCodigos.getSingleton().setComponenteAplicacion((Q70GestorTablasCodigosServidorInterface)claseComponente);	
	}
	
//Monitorización del Gestor de Tablas y Códigos
	/**
	 * @see es.ejie.frmk.infraestructura.tablas.Q70MBeanGestorTablasCodigosMBean#getLoadedTables()
	 */
	public List getLoadedTables() {
		return ((Q70GestorTablasCodigosServidorInterface) getClaseComponente()).getLoadedTables();
	}

	/**
	 * @see es.ejie.frmk.infraestructura.tablas.Q70MBeanGestorTablasCodigosMBean#reloadTable(java.lang.String)
	 */
	public void reloadTable(String table) {
		((Q70GestorTablasCodigosServidorInterface) getClaseComponente()).reload(table);
	}

	/**
	 * @return el ID del componente Gestor Tablas Codigos
	 */
	private String getTipoComponente() {
		return Q70FactoriaConstantes.ID_GESTOR_TABLASCODIGOS;
	}

	/** 
	 * @see es.ejie.frmk.control.arranque.Q70MBeanInterface#getNombreMBean()
	 */
	public ObjectName getNombreMBean() throws MalformedObjectNameException {
		Hashtable atributos = doMapaAtributos(getTipoComponente(), this.getClass().getName(), getAplicacion());
		return new ObjectName(getDominioMBean(),atributos);
	}

}