package es.ejie.frmk.infraestructura.mail;

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

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;

/**
 * Clase pasarela que asigna la configuración del servidor de correo por defecto
 * y del modo de envió de las direcciones de email en caso de error de una de
 * ellas. También gestiona el componente de email.
 * @version 2.0 Fecha: 22-mar-06
 */
public class Q70MBeanGestorMail extends Q70MBeanBase implements Q70MBeanGestorMailMBean {

	public Q70MBeanGestorMail() {
		super();
	}

	/**
	 * @return identificador de Gestor de Mail
	 */
	private String getTipoComponente() {
		return Q70FactoriaConstantes.ID_GESTOR_MAIL;

	}

	/**
	 * Añadir el componente al pool de componentes
	 */
	public void anadirComponenteFactoria() {
		Q70Factoria.setGestorMail(getClaseComponente());
	}

	/**
	 * Asigna los valores por defecto del fichero de configuracion.xml
	 * @param configuracion
	 */
	public void doConfiguracionComponente(Object configuracion) throws Q70FrameworkException{
		try {
			((Q70GestorMailServidorInterface) getClaseComponente()).setSMTP(((String) ((HashMap) configuracion).get(Q70Constantes.HOST_SMTP)));
			((Q70GestorMailServidorInterface) getClaseComponente()).setSendPartial(((String) ((HashMap) configuracion).get(Q70Constantes.SENDPARTIAL)));
		} 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 Q70MBeanGestorMail");
			}
			throw new Q70FrameworkException(Q70Constantes.ID_COMPONENTE,this.getClass().toString(),"doConfiguracionComponente","Se ha producido un error en el método doConfiguracionComponente.",e);
		}
	}

	/**
	 * @param claseComponente
	 */
	public void setComponenteAplicacion(Q70Administrable claseComponente) {
		Q70GestorMail.getSingleton().setComponenteDelegado((Q70GestorMailServidorInterface) claseComponente);
	}

	/**
	 * @return ObjectName (Nombre del Bean)
	 * @exception MailformedObjectNameException
	 */
	public ObjectName getNombreMBean() throws MalformedObjectNameException {
		Hashtable atributos = doMapaAtributos(getTipoComponente(), this.getClass().getName(), getAplicacion());
		return new ObjectName(getDominioMBean(), atributos);
	}
}
