Package com.cosmo.ui.widgets.providers

Source Code of com.cosmo.ui.widgets.providers.CosmoStaticMenuProvider

package com.cosmo.ui.widgets.providers;

import com.cosmo.Workspace;
import com.cosmo.WorkspaceProperties;
import com.cosmo.orm.apps.OrmApplication;
import com.cosmo.ui.widgets.MenuWidget;
import com.cosmo.ui.widgets.MenuWidget.MenuTypes;
import com.cosmo.ui.widgets.MenuItem;
import com.cosmo.util.DataTypeException;
import com.cosmo.util.IOUtils;
import com.cosmo.util.StringUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
* Implementa un proveedor de men� que coge las opciones de men� del archivo de configuraci�n de Cosmo.
*
* @author Gerard Llort
*/
public class CosmoStaticMenuProvider extends MenuProvider
{
   private static final String XML_NODE_MENU = "menu";
   private static final String XML_NODE_MENUITEM = "menuitem";
   private static final String XML_ATT_ID = "id";
   private static final String XML_ATT_NAME = "name";
   private static final String XML_ATT_HREF = "href";
   private static final String XML_ATT_ICON = "icon";
   private static final String XML_ATT_PARENT = "parent";
   private static final String XML_ATT_TYPE = "type";
   private static final String XML_NODE_MENUSECTION = "menusection";
   private static final String XML_ATT_SOURCE = "source";


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

   /**
    * Obtiene los elementos de men� del workspace.
    *
    * @param workspace Una instancia de {@link Workspace} que representa el workspace para el que se desea obtener el men�.
    * @param type Un elemento de {@link MenuTypes} que indica qu� tipo de men� se desea obtener.
    * @return Una lista de instancias de {@link MenuItem} que representan los elementos de men�.
    *
    * @throws MenuProviderException
    */
   @Override
   public ArrayList<MenuItem> loadMenu(Workspace workspace, MenuTypes type) throws MenuProviderException
   {
      String fileName;
      InputStream is = null;
      MenuTypes mtype;
      Node nNode;
      Node menuNode;
      Element eElement;
      Element menuElement;
      NodeList menuList;
      NodeList nList;
      MenuItem menuitem;
      ArrayList<MenuItem> menuItems = new ArrayList<MenuItem>();

      try
      {
         fileName = File.separator + "WEB-INF" + File.separator + WorkspaceProperties.PROPERTIES_FILENAME;
         is = new FileInputStream(workspace.getServerContext().getRealPath(fileName));

         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
         DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
         Document doc = dBuilder.parse(is);
         doc.getDocumentElement().normalize();

         // Obtiene los elementos de men�
         menuList = doc.getElementsByTagName(CosmoStaticMenuProvider.XML_NODE_MENU);
         for (int menuId = 0; menuId < menuList.getLength(); menuId++)
         {
            menuNode = menuList.item(menuId);
            if (menuNode.getNodeType() == Node.ELEMENT_NODE)
            {
               menuElement = (Element) menuNode;
               if (MenuWidget.convertToMenuType(menuElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_TYPE)) == type)
               {
                  mtype = MenuWidget.convertToMenuType(menuElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_TYPE));
                  if (mtype == type)
                  {
                     // Obtiene los elementos de men� est�ticos
                     nList = menuElement.getElementsByTagName(CosmoStaticMenuProvider.XML_NODE_MENUITEM);
                     for (int temp = 0; temp < nList.getLength(); temp++)
                     {
                        nNode = nList.item(temp);
                        if (nNode.getNodeType() == Node.ELEMENT_NODE)
                        {
                           eElement = (Element) nNode;
                           menuitem = new MenuItem(eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_ID),
                                                   eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_NAME),
                                                   eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_HREF),
                                                   eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_PARENT));

                           // Si existe icono especificado, lo agrega
                           if (eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_ICON) != null)
                           {
                              menuitem.setIcon(eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_ICON));
                           }

                           menuItems.add(menuitem);
                        }
                     }

                     // Obtiene las secciones din�micas
                     String source;
                     nList = menuElement.getElementsByTagName(CosmoStaticMenuProvider.XML_NODE_MENUSECTION);
                     for (int temp = 0; temp < nList.getLength(); temp++)
                     {
                        nNode = nList.item(temp);
                        if (nNode.getNodeType() == Node.ELEMENT_NODE)
                        {
                           eElement = (Element) nNode;
                           source = eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_SOURCE);

                           if (!StringUtils.isNullOrEmptyTrim(source))
                           {
                              if (source.equalsIgnoreCase("corm-apps"))
                              {
                                 for (OrmApplication app : workspace.getProperties().getOrmProperties().getOrmApplications())
                                 {
                                    menuitem = new MenuItem(app.getId(),
                                                            app.getTitle(),
                                                            app.getApplicationUrl(workspace),
                                                            "");

                                    // Si existe icono especificado, lo agrega
                                    if (!StringUtils.isNullOrEmptyTrim(eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_ICON)))
                                    {
                                       menuitem.setIcon(eElement.getAttribute(CosmoStaticMenuProvider.XML_ATT_ICON));
                                    }

                                    menuItems.add(menuitem);
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }

         return menuItems;
      }
      catch (FileNotFoundException ex)
      {
         throw new MenuProviderException(ex.getMessage(), ex);
      }
      catch (IOException ex)
      {
         throw new MenuProviderException(ex.getMessage(), ex);
      }
      catch (ParserConfigurationException ex)
      {
         throw new MenuProviderException(ex.getMessage(), ex);
      }
      catch (SAXException ex)
      {
         throw new MenuProviderException(ex.getMessage(), ex);
      }
      catch (DataTypeException ex)
      {
         throw new MenuProviderException(ex.getMessage(), ex);
      }
      finally
      {
         IOUtils.closeStream(is);
      }
   }
}
TOP

Related Classes of com.cosmo.ui.widgets.providers.CosmoStaticMenuProvider

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.