Package org.exoplatform.portal.webui.util

Source Code of org.exoplatform.portal.webui.util.Util

/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.exoplatform.portal.webui.util;

import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.portal.config.UserPortalConfigService;
import org.exoplatform.portal.config.model.Page;
import org.exoplatform.portal.config.model.PageNode;
import org.exoplatform.portal.webui.application.UIPortlet;
import org.exoplatform.portal.webui.container.UIContainer;
import org.exoplatform.portal.webui.page.UIDesktopPage;
import org.exoplatform.portal.webui.page.UIPage;
import org.exoplatform.portal.webui.portal.UIPortal;
import org.exoplatform.portal.webui.portal.UIPortalComponent;
import org.exoplatform.portal.webui.workspace.UIEditInlineWorkspace;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
import org.exoplatform.portal.webui.workspace.UIPortalToolPanel;
import org.exoplatform.portal.webui.workspace.UIWorkingWorkspace;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.UIComponentDecorator;
import org.exoplatform.webui.event.Event;

import java.util.List;

/**
* Jun 5, 2006
*/
public class Util
{
   static public PortalRequestContext getPortalRequestContext()
   {
      WebuiRequestContext context = WebuiRequestContext.getCurrentInstance();
      if (!(context instanceof PortalRequestContext))
      {
         context = (WebuiRequestContext)context.getParentAppRequestContext();
      }
      return (PortalRequestContext)context;
   }

   static public UIPortalApplication getUIPortalApplication()
   {
      return (UIPortalApplication)getPortalRequestContext().getUIApplication();
   }

   static public UIPortal getUIPortal()
   {
      //return getUIPortalApplication().<UIWorkingWorkspace> getChildById(UIPortalApplication.UI_WORKING_WS_ID)
      //   .findFirstComponentOfType(UIPortal.class);
      return getUIPortalApplication().getShowedUIPortal();
   }

   static public UIPortalToolPanel getUIPortalToolPanel()
   {
      return getUIPortalApplication().findFirstComponentOfType(UIPortalToolPanel.class);
   }

   private static void setShowEditControl(UIComponent uiComponent, Class clazz)
   {
      if (uiComponent == null)
         return;
      if (uiComponent instanceof UIPortalComponent)
      {
         UIPortalComponent uiContainer = (UIPortalComponent)uiComponent;
         if (clazz.isInstance(uiContainer))
         {
            uiContainer.setShowEditControl(true);
         }
         else
         {
            uiContainer.setShowEditControl(false);
         }
      }
      if (uiComponent instanceof org.exoplatform.webui.core.UIContainer)
      {
         List<UIComponent> children = ((org.exoplatform.webui.core.UIContainer)uiComponent).getChildren();
         for (UIComponent comp : children)
            setShowEditControl(comp, clazz);
         return;
      }

      if (uiComponent instanceof UIComponentDecorator)
      {
         UIComponentDecorator uiDecorator = (UIComponentDecorator)uiComponent;
         if (uiDecorator.getUIComponent() == null)
            return;
         setShowEditControl(uiDecorator.getUIComponent(), clazz);
      }
   }

   /**
    * View component on UIWorkspaceWorking
    * $uicomp : current component on UIWorkspaceWorking
    * $clazz : Class of component should show on UIWorkspaceWorking
    */
   static public <T extends UIComponent> T showComponentOnWorking(UIComponent uicomp, Class<T> clazz) throws Exception
   {
      UIPortalApplication uiPortalApp = uicomp.getAncestorOfType(UIPortalApplication.class);
      UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID);
      UIPortalToolPanel uiToolPanel = uiWorkingWS.findFirstComponentOfType(UIPortalToolPanel.class).setRendered(true);
      T uiWork = uiToolPanel.createUIComponent(clazz, null, null);
      uiToolPanel.setUIComponent(uiWork);
      //uiWorkingWS.setRenderedChild(UIPortalToolPanel.class) ;
      return uiWork;
   }

   static public void showPortalComponentLayoutMode(UIPortalApplication uiPortalApp)
   {
      UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID);
      uiWorkingWS.setRenderedChild(UIPortal.class);
      UIPortal uiPortal = uiWorkingWS.findFirstComponentOfType(UIPortal.class);

      UIContainer uiContainer = Util.findUIComponent(uiPortal, UIContainer.class, UIPage.class);
      UIPage uiPage = uiPortal.findFirstComponentOfType(UIPage.class);
      UIPortlet uiPortlet = Util.findUIComponent(uiPortal, UIPortlet.class, UIPage.class);

      String name = "";
      if (uiContainer != null && uiContainer.isShowEditControl())
         name = "'UIContainer'";
      else if (uiPage != null && uiPage.isShowEditControl())
         name = "'UIPage'";
      else if (uiPortlet != null && uiPortlet.isShowEditControl())
         name = "'UIPortlet'";

      getPortalRequestContext().getJavascriptManager().addCustomizedOnLoadScript(
         "eXo.portal.UIPortal.showLayoutModeForPortal(" + name + ");");
   }

   //  public UIPortlet getFirstUIPortlet(UIContainer uiContainer){
   //    return
   //  }

   //  public UIContainer getFirstUIContainer(){
   //    return (UIContainer)Util.findUIComponent(UIContainer uiContainer, UIContainer.class, UIPage.class);
   //  }

   static public void showPageComponentLayoutMode(UIPortalApplication uiPortalApp)
   {
      UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID);
      uiWorkingWS.setRenderedChild(UIPortalToolPanel.class);
      UIPortalToolPanel uiPortalToolPanel = uiWorkingWS.findFirstComponentOfType(UIPortalToolPanel.class);

      UIPage uiPage = uiPortalToolPanel.findFirstComponentOfType(UIPage.class);
      UIContainer uiContainer = uiPage.findFirstComponentOfType(UIContainer.class);
      UIPortlet uiPortlet = uiPage.findFirstComponentOfType(UIPortlet.class);

      String name = "";
      if (uiContainer != null && uiContainer.isShowEditControl())
         name = "UIContainer";
      else if (uiPortlet != null && uiPortlet.isShowEditControl())
         name = "UIPortlet";

      getPortalRequestContext().getJavascriptManager().addCustomizedOnLoadScript(
         "eXo.portal.UIPortal.showLayoutModeForPage('" + name + "');");
   }

   @SuppressWarnings("unchecked")
   static public <T extends UIComponent> T findUIComponent(UIComponent uiComponent, Class<T> clazz, Class ignoreClazz)
   {
      if (clazz.isInstance(uiComponent))
         return (T)uiComponent;
      if (!(uiComponent instanceof UIContainer))
         return null;
      List<UIComponent> children = ((UIContainer)uiComponent).getChildren();
      for (UIComponent child : children)
      {
         if (clazz.isInstance(child))
            return (T)child;
         else if (!ignoreClazz.isInstance(child))
         {
            UIComponent value = findUIComponent(child, clazz, ignoreClazz);
            if (value != null)
               return (T)value;
         }
      }
      return null;
   }

   static public void findUIComponents(UIComponent uiComponent, List<UIComponent> list, Class clazz, Class ignoreClazz)
   {
      if (clazz.isInstance(uiComponent))
         list.add(uiComponent);
      if (!(uiComponent instanceof UIContainer))
         return;
      List<UIComponent> children = ((UIContainer)uiComponent).getChildren();
      for (UIComponent child : children)
      {
         if (clazz.isInstance(child))
         {
            list.add(child);
         }
         else if (!ignoreClazz.isInstance(child))
         {
            findUIComponents(child, list, clazz, ignoreClazz);
         }
      }
   }

   static public UIPage toUIPage(PageNode node, UIComponent uiParent) throws Exception
   {
      UserPortalConfigService configService = uiParent.getApplicationComponent(UserPortalConfigService.class);
      Page page = configService.getPage(node.getPageReference(), getPortalRequestContext().getRemoteUser());
      return toUIPage(page, uiParent);
   }

   static public UIPage toUIPage(Page page, UIComponent uiParent) throws Exception
   {
      UIPage uiPage = Util.getUIPortal().findFirstComponentOfType(UIPage.class);
      if (uiPage != null && uiPage.getId().equals(page.getId()))
         return uiPage;
      WebuiRequestContext context = Util.getPortalRequestContext();
      if (Page.DESKTOP_PAGE.equals(page.getFactoryId()))
      {
         uiPage = uiParent.createUIComponent(context, UIDesktopPage.class, null, null);
      }
      else
      {
         uiPage = uiParent.createUIComponent(context, UIPage.class, null, null);
      }
      PortalDataMapper.toUIPage(uiPage, page);
      return uiPage;
   }

   public static void showComponentLayoutMode(Class clazz) throws Exception
   {
      if (clazz == null)
         return;
      UIPortalApplication portalApp = getUIPortalApplication();
      UIEditInlineWorkspace uiEditWS = portalApp.findFirstComponentOfType(UIEditInlineWorkspace.class);
      UIContainer uiParent = null;

      UIComponent uiComponent = uiEditWS.getUIComponent();
      if (uiComponent instanceof UIPortal)
      {
         UIPortal uiPortal = (UIPortal)uiComponent;
         uiPortal.setMaximizedUIComponent(null);
         uiParent = uiPortal;
      }
      else
      {
         UIPortalToolPanel uiPortalToolPanel = getUIPortalToolPanel();
         UIPage uiPage = uiPortalToolPanel.findFirstComponentOfType(UIPage.class);
         uiParent = uiPage;
      }
      if (uiParent == null)
         return;
      String layoutMode = clazz.getSimpleName();
      setShowEditControl(uiParent, clazz);

      PortalRequestContext context = Util.getPortalRequestContext();
      if (uiParent instanceof UIPortal)
      {
         context.getJavascriptManager().addCustomizedOnLoadScript(
            "eXo.portal.UIPortal.showLayoutModeForPortal('" + layoutMode + "');");
      }
      else
      {
         context.getJavascriptManager().addCustomizedOnLoadScript(
            "eXo.portal.UIPortal.showLayoutModeForPage('" + layoutMode + "');");
      }
   }

   static public void showComponentEditInViewMode(Class clazz) throws Exception
   {
      if (clazz == null)
         return;
      UIPortalApplication portalApp = getUIPortalApplication();
      UIEditInlineWorkspace uiEditWS = portalApp.findFirstComponentOfType(UIEditInlineWorkspace.class);
      UIContainer uiParent = null;

      UIComponent uiComponent = uiEditWS.getUIComponent();
      if (uiComponent instanceof UIPortal)
      {
         UIPortal uiPortal = (UIPortal)uiComponent;
         uiPortal.setMaximizedUIComponent(null);
         uiParent = uiPortal;
      }
      else
      {
         UIPortalToolPanel uiPortalToolPanel = getUIPortalToolPanel();
         UIPage uiPage = uiPortalToolPanel.findFirstComponentOfType(UIPage.class);
         uiParent = uiPage;
      }
      if (uiParent == null)
         return;
      String layoutMode = clazz.getSimpleName();
      setShowEditControl(uiParent, clazz);

      PortalRequestContext context = Util.getPortalRequestContext();
      context.getJavascriptManager().addCustomizedOnLoadScript(
         "eXo.portal.UIPortal.showViewMode('" + layoutMode + "');");
   }

   public static UIWorkingWorkspace updateUIApplication(Event<? extends UIComponent> event)
   {
      PortalRequestContext pcontext = (PortalRequestContext)event.getRequestContext();
      UIPortalApplication uiPortalApp = event.getSource().getAncestorOfType(UIPortalApplication.class);

      UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID);
      pcontext.addUIComponentToUpdateByAjax(uiWorkingWS);
      pcontext.setFullRender(true);
      return uiWorkingWS;
   }

}
TOP

Related Classes of org.exoplatform.portal.webui.util.Util

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.