/*
 * Q70MenuComponent.java
 *
 * Created on January 28, 2001, 8:10 PM
 * 
 * @author  Scott Sayles
 */
package es.ejie.frmk.presentacion.iu.taglib.html.menu.base;

import java.util.List;

import es.ejie.frmk.control.excepciones.Q70FrameworkException;
import es.ejie.frmk.infraestructura.traza.Q70TraceLevel;
import es.ejie.frmk.infraestructura.traza.Q70Traza;


/**
 * Clase componente de menu. Esta clase componente de menu  instancia componentes de submenu del mismo arbol
 * de menu.
 * @version 1.0   Fecha: 28-ene-2001
 */
public abstract class Q70MenuComponent extends Q70MenuBase {
    //~ Static fields/initializers =============================================

    private static Q70MenuComponentEstatico[] _menuComponent = new Q70MenuComponentEstatico[0];

    private Q70MenuComponent parentMenu = null;
    private String clase;

    //~ Constructors ===========================================================

    /** Creates new Q70MenuComponent */
    public Q70MenuComponent() {
        super();
    }

    /**
     * Metodo que las clases hijas deben sobreescriir (metodo hook) para realizar la funcionalidad
     * de menus dinamicos. Cada clase hija debe manejar como va a devolver los menus. 
     * 
     * @return Lista de submenus de la clase
     * @throws Exception
     */
    protected abstract List doGetMenuComponents() throws Exception;

	/**
	 * Añade un Q70MenuComponent al arbol de menus
	 * @param menuComponent
	 */
    public void addMenuComponent(Q70MenuComponent menuComponent) {
    }
    
    /**
     * Devuelve los componentes del menu instanciados
     * 
     * @return array de componentes menu/submenu
     * @throws Q70FrameworkException
     */
    public Q70MenuComponent[] getMenuComponents() throws Q70FrameworkException {
    	
    	Q70MenuComponent[] menus=null;
    	Q70Traza tr = Q70Traza.getSingleton();
    	
    	try{
    		menus =(Q70MenuComponent[]) doGetMenuComponents().toArray(_menuComponent);
    	}catch(Exception e){
    		if (tr.isTraceActive())
    		{
    			tr.trace(COMPONENTE, Q70TraceLevel.ERROR, "Error en la obtención de los menus. Q70TabbedMenuDisplayer");
    		}
    		throw new Q70FrameworkException(COMPONENTE,this.getClass().toString(),"getMenuComponents","Ha ocurrido un error en la obtencion de Menus",e);
    	}
        return menus;
    }

	/**
     * Convenience method for Velocity templates
     */
    public List getComponents() throws Exception {
        return doGetMenuComponents();
    }
   
    /**
     * @param parentMenu
     */
    public void setParent(Q70MenuComponent parentMenu) {
        this.parentMenu = parentMenu;
    }

    /**
     * Devuelve el componente de Menu correspondiente al padre.
     * 
     * @return Componente de Menu correspondiente al padre.
     */
    public Q70MenuComponent getParentMenu() { 
        return parentMenu;
    }
    
    /** 
     * Getter for property clase.
     * @return Value of property clase.
     */
    public String getClase() {
        return clase;
    }

    /** 
     * Setter for property clase.
     * @param clase New value of property clase.
     */
    public void setClase(String clase) {
        this.clase = clase;
    }
}
