package es.ejie.frmk.infraestructura.logs.base;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;

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.logs.base.interfaces.Q70LogServidorInterface;
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 Q70MBeanGestorLogs extends Q70MBeanBase implements Q70MBeanGestorLogsMBean{

	public Q70MBeanGestorLogs() {
		super();
	}
	
	/**
	 * @see es.ejie.frmk.control.arranque.Q70MBeanBase#doConfiguracionComponente(java.lang.Object)
	 */
	protected void doConfiguracionComponente(Object configuracion) throws Q70FrameworkException{
		try {
			Q70ConfiguracionLogs configAux = (Q70ConfiguracionLogs)configuracion;
			Iterator it = configAux.getLogs();
			while (it.hasNext()) {
				Q70ConfiguracionLog configLogAux = (Q70ConfiguracionLog) configAux.getConfiguracion((String)it.next());
				configLogAux.setProperty(Q70ConstantesLogs.CODIGO_APLICACION, getAplicacion());
			}
			((Q70LogServidorInterface)getClaseComponente()).setConfiguracionLogs(configAux);
		} catch (Throwable e) {
			Q70TrazaInterface traza = Q70Factoria.getTraza();
			if (traza.isTraceActive()){
				traza.trace(Q70ConstantesLogs.LOG, Q70TraceLevel.ERROR, "Se ha producido un error en el método doConfiguracionComponente de la clase Q70MBeanGestorLogs");
			}
			throw new Q70FrameworkException(Q70ConstantesLogs.LOG,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.setGestorLogs(getClaseComponente());
	}

	/**
	 * @see es.ejie.frmk.control.arranque.Q70MBeanBase#setComponenteAplicacion(es.ejie.frmk.infraestructura.utilidades.configurador.Q70Administrable)
	 */
	protected void setComponenteAplicacion(Q70Administrable claseComponente) {
		Q70GestorLogs.getSingleton().setComponenteAplicacion((Q70LogServidorInterface)claseComponente);		
	}
	
	protected Map getAtributosNombreMBean(Map m){
		return null;
	}

	/**
	 * Obtiene el ID del componente Gestor de Logs
	 * @return String con el ID del componente Gestor de Logs
	 */
	private String getTipoComponente() {
		return Q70FactoriaConstantes.ID_GESTOR_LOGS;
	}

	/**
	 * @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);
	}
	
}