package es.ejie.frmk.control.arranque;

import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;

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

import es.ejie.frmk.control.excepciones.Q70FrameworkException;

public interface Q70MBeanInterface extends Q70Arrancable, Serializable {

	/**
	 * Establece el nombre de un componente
	 * @param nombreComponente
	 * @throws Q70FrameworkException
	 * @throws IllegalArgumentException
	 * @throws SecurityException
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 * @throws ClassNotFoundException
	 */
	public void setNombreComponente(String nombreComponente) throws Q70FrameworkException, IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException;
	
	/**
	 * Establece el nombre de configuración para un componente
	 * @param nombreConfiguracion
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 */
	public void setNombreConfiguracion(String nombreConfiguracion) throws InstantiationException, IllegalAccessException, ClassNotFoundException;
	
	/**
	 * Establece el código de aplicación para un componente
	 * @param aplicacion
	 */
	public void setAplicacion(String aplicacion);
	
	public ObjectName getNombreMBean() throws MalformedObjectNameException;
	
	public void reConfigure(String xmlConfiguracion) throws Q70FrameworkException;
	
	/**
	 * Recupera la configuración de un componente de aplicación.
	 * @return
	 * @throws Q70FrameworkException
	 */
	public Object getConfiguracionComponente() throws Q70FrameworkException;
	
	/**
	 * Recupera la configuración de un componente de aplicación
	 * @return String
	 */
	public String recuperaConfiguracionXML() throws Q70FrameworkException;
	
	/**
	 * Almacena la configuración de un componente de aplicación a partir del xml
	 * @param configuracionComponente la clase recibida depende de como el Componente tiene almacenada la Configuracion
	 * @throws Q70FrameworkException 
	 */
	public void persisteConfiguracionXML(String xmlConfiguracion) throws Q70FrameworkException;

	/**
	 * Incrementa el número de wars desplegados bajo una aplicación determinada.
	 */
	public void incrementarContador();
	
	/**
	 * Decrementa el número de wars desplegados bajo una aplicación determinada.
	 */
	public void decrementarContador();
	
	/**
	 * retorna true si no hay wars desplegados bajo una aplicación determinada.
	 * @return
	 */
	public boolean esContadorCero();
	
}
