Package com.cosmo.ui.widgets

Source Code of com.cosmo.ui.widgets.MenuWidget

package com.cosmo.ui.widgets;

import com.cosmo.Workspace;
import com.cosmo.ui.controls.Control;
import com.cosmo.ui.templates.Template;
import com.cosmo.ui.templates.TemplateControl;
import com.cosmo.ui.templates.TemplateUnavailableException;
import com.cosmo.ui.widgets.providers.MenuProvider;
import com.cosmo.ui.widgets.providers.MenuProviderException;
import com.cosmo.util.DataTypeException;
import java.util.ArrayList;

/**
* Representa un men� de aplicaci�n Cosmo.
*
* @author Gerard Llort
*/
public class MenuWidget extends Widget
{
   /** Identificador �nico del tipo de widget */
   private static final String WIDGET_ID = "CosmoUiWdgtMenu";

   private static final String WPART_HEADER = "menu-header";
   private static final String WPART_ITEM = "menu-item";
   private static final String WPART_FOOTER = "menu-footer";

   private static final String TAG_MENU_NAME = "MNAME";
   private static final String TAG_ITEM_HREF = "IHREF";
   private static final String TAG_ITEM_CAPTION = "ICAPTION";
   private static final String TAG_ITEM_ICON = "ICON";

   private MenuTypes type;
   private MenuProvider provider;

   /**
    * Enumera los distintos tipos de men� soportados por Cosmo
    */
   public enum MenuTypes
   {
      Top,
      Lateral,
      Footer
   }


   //==============================================
   // Constructor
   //==============================================

   /**
    * Constructor de la clase {@link MenuWidget}.
    *
    * @param workspace Una instancia de {@link Workspace} que representa el espacio de aplicaci�n actual.
    * @param type Un valor de {@link MenuTypes} que indica el tipo de men�.
    *
    * @throws MenuProviderException
    */
   public MenuWidget(Workspace workspace, MenuTypes type) throws MenuProviderException
   {
      super(workspace);

      this.type = type;
      this.provider = MenuProvider.getInstance(workspace);
   }


   //==============================================
   // Properties
   //==============================================

   /**
    * Devuelve un identificador �nico del tipo de widget.
    */
   @Override
   public String getWidgetTypeId()
   {
      return MenuWidget.WIDGET_ID;
   }


   //==============================================
   // Methods
   //==============================================

   /**
    * TODO: Limpia la marca de elemento activo en todos los elementos del men�.
    */
   public void clearCurrentItem()
   {
     
   }

   /**
    * Renderiza el widget y genera el c�digo XHTML de representaci�n.
    *
    * @return Devuelve una cadena en formato XHTML que representa el widget.
    */
   @Override
   public String render() throws TemplateUnavailableException
   {
      String xhtml;
      String xitem;
      ArrayList<MenuItem> menu;
      TemplateControl ctrl;
      Template template;

      try
      {
         // Carga el men� a renderizar
         menu = this.provider.loadMenu(this.getWorkspace(), type);

         // Obtiene la plantilla y la parte del widget
         template = this.getWorkspace().getTemplate();
         ctrl = template.getControl(WIDGET_ID);

         // Renderiza el control
         xhtml = "";
         xhtml += ctrl.getElement(WPART_HEADER);
         for (MenuItem item : menu)
         {
            xitem = ctrl.getElement(WPART_ITEM);
            xitem = xitem.replace(Widget.getTag(TAG_ITEM_HREF), item.getHref());
            xitem = xitem.replace(Widget.getTag(TAG_ITEM_CAPTION), item.getTitle());
            xitem = Control.replaceTag(xitem, TAG_ITEM_ICON, item.getIcon());

            xhtml += xitem;
         }
         xhtml += ctrl.getElement(WPART_FOOTER);

         // Reemplaza los TAGs comunes a todo el widget
         xhtml = xhtml.replace(Widget.getTag(TAG_MENU_NAME), "Opciones");

         return xhtml;
      }
      catch (MenuProviderException ex)
      {
         return "<!-- Widget failed -->";
      }
   }


   //==============================================
   // Static members
   //==============================================

   /**
    * Convierte una cadena de texto a un elemento de MenuTypes.
    *
    * @param strType Una cadena que contiene un texto que corresponde a un elemento de MenuTypes.
    * @return Un elemento de MenuTypes.
    *
    * @throws DataTypeException
    */
   public static MenuTypes convertToMenuType(String strType) throws DataTypeException
   {
      strType = strType.trim().toLowerCase();

      if (strType.equals(MenuTypes.Lateral.toString().toLowerCase()))
      {
         return MenuTypes.Lateral;
      }
      else if (strType.equals(MenuTypes.Top.toString().toLowerCase()))
      {
         return MenuTypes.Top;
      }
      else if (strType.equals(MenuTypes.Footer.toString().toLowerCase()))
      {
         return MenuTypes.Footer;
      }

      throw new DataTypeException(strType + " can't be converted to a MenuTypes enum element");
   }
}
TOP

Related Classes of com.cosmo.ui.widgets.MenuWidget

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.