Package org.exoplatform.portal.webui.util

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

/**
* 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.config.UserPortalConfig;
import org.exoplatform.portal.config.model.Application;
import org.exoplatform.portal.config.model.ApplicationType;
import org.exoplatform.portal.config.model.Container;
import org.exoplatform.portal.config.model.Dashboard;
import org.exoplatform.portal.config.model.ModelObject;
import org.exoplatform.portal.config.model.Page;
import org.exoplatform.portal.config.model.PageBody;
import org.exoplatform.portal.config.model.PortalConfig;
import org.exoplatform.portal.config.model.SiteBody;
import org.exoplatform.portal.pom.spi.gadget.Gadget;
import org.exoplatform.portal.webui.application.PortletState;
import org.exoplatform.portal.webui.application.UIGadget;
import org.exoplatform.portal.webui.application.UIPortlet;
import org.exoplatform.portal.webui.container.UIContainer;
import org.exoplatform.portal.webui.container.UITabContainer;
import org.exoplatform.portal.webui.page.UIPage;
import org.exoplatform.portal.webui.page.UIPageBody;
import org.exoplatform.portal.webui.page.UISiteBody;
import org.exoplatform.portal.webui.portal.UIPortal;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.core.UIComponent;
import org.gatein.common.net.media.MediaType;
import org.gatein.pc.api.Portlet;
import org.gatein.pc.api.info.ModeInfo;
import org.gatein.pc.api.info.PortletInfo;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
* Created by The eXo Platform SAS May 4, 2007 TODO: Rename this to
* PortalDataModelMapper
*/
public class PortalDataMapper
{

   protected static final Log log = ExoLogger.getLogger("portal:PortalDataMapper");

   @SuppressWarnings("unchecked")
   public static ModelObject buildModelObject(UIComponent uiComponent)
   {
      ModelObject model = null;
      if (uiComponent instanceof UIPortal)
      {
         model = toPortal((UIPortal)uiComponent);
      }
      else if (uiComponent instanceof UIPageBody)
      {
         model = new PageBody(((UIPageBody)uiComponent).getStorageId());
      }
      else if (uiComponent instanceof UIPage)
      {
         model = toPageModel((UIPage)uiComponent);
      }
      else if (uiComponent instanceof UIPortlet)
      {
         model = toPortletModel((UIPortlet)uiComponent);
      }
      else if (uiComponent instanceof UIContainer)
      {
         model = toContainer((UIContainer)uiComponent);
      }
      else if (uiComponent instanceof UIGadget)
      {
         model = toGadget((UIGadget)uiComponent);
      }
      return model;
   }

   private static Application<Gadget> toGadget(UIGadget uiGadget)
   {
      Application<Gadget> app = Application.createGadgetApplication(uiGadget.getStorageId());
      app.setState(uiGadget.getState());
      app.setProperties(uiGadget.getProperties());
      app.setStorageName(uiGadget.getStorageName());
      return app;
   }

   public static void toContainer(Container model, UIContainer uiContainer)
   {
      model.setId(uiContainer.getId());
      model.setName(uiContainer.getName());
      model.setTitle(uiContainer.getTitle());
      model.setIcon(uiContainer.getIcon());
      model.setDescription(uiContainer.getDescription());
      model.setHeight(uiContainer.getHeight());
      model.setWidth(uiContainer.getWidth());
      model.setTemplate(uiContainer.getTemplate());
      model.setFactoryId(uiContainer.getFactoryId());
      model.setAccessPermissions(uiContainer.getAccessPermissions());

      List<UIComponent> uiChildren = uiContainer.getChildren();
      if (uiChildren == null)
         return;
      ArrayList<ModelObject> children = new ArrayList<ModelObject>();
      for (UIComponent child : uiChildren)
      {
         ModelObject component = buildModelObject(child);
         if (component != null)
            children.add(component);
      }
      model.setChildren(children);
   }

   private static <S> Application<S> toPortletModel(UIPortlet<S, ?> uiPortlet)
   {
      Application<S> model;
      PortletState<S> state = uiPortlet.getState();
      ApplicationType<S> type = state.getApplicationType();
      if (type == ApplicationType.PORTLET)
      {
         model = (Application<S>)Application.createPortletApplication(uiPortlet.getStorageId());
      }
      else if (type == ApplicationType.GADGET)
      {
         model = (Application<S>)Application.createGadgetApplication(uiPortlet.getStorageId());
      }
      else if (type == ApplicationType.WSRP_PORTLET)
      {
         model = (Application<S>)Application.createWSRPApplication(uiPortlet.getStorageId());
      }
      else
      {
         throw new AssertionError();
      }

      //
      model.setStorageName(uiPortlet.getStorageName());
      model.setState(state.getApplicationState());
      model.setTitle(uiPortlet.getTitle());
      model.setWidth(uiPortlet.getWidth());
      model.setHeight(uiPortlet.getHeight());
      model.setDescription(uiPortlet.getDescription());
      model.setShowInfoBar(uiPortlet.getShowInfoBar());
      model.setShowApplicationState(uiPortlet.getShowWindowState());
      model.setShowApplicationMode(uiPortlet.getShowPortletMode());
      model.setDescription(uiPortlet.getDescription());
      model.setIcon(uiPortlet.getIcon());
      model.setProperties(uiPortlet.getProperties());
      model.setTheme(uiPortlet.getTheme());
      model.setAccessPermissions(uiPortlet.getAccessPermissions());
      model.setModifiable(uiPortlet.isModifiable());
      return model;
   }

   private static Container toContainer(UIContainer uiContainer)
   {
      Container model = new Container(uiContainer.getStorageId());
      toContainer(model, uiContainer);
      return model;
   }

   static public Page toPageModel(UIPage uiPage)
   {
      Page model = new Page(uiPage.getStorageId());
      toContainer(model, uiPage);
      model.setOwnerId(uiPage.getOwnerId());
      model.setOwnerType(uiPage.getOwnerType());
      model.setIcon(uiPage.getIcon());
      model.setPageId(uiPage.getPageId());
      model.setTitle(uiPage.getTitle());
      model.setAccessPermissions(uiPage.getAccessPermissions());
      model.setEditPermission(uiPage.getEditPermission());
      model.setFactoryId(uiPage.getFactoryId());
      model.setShowMaxWindow(uiPage.isShowMaxWindow());
      model.setModifiable(uiPage.isModifiable());
      return model;
   }

   static private PortalConfig toPortal(UIPortal uiPortal)
   {
      PortalConfig model = new PortalConfig(uiPortal.getOwnerType(), uiPortal.getName(), uiPortal.getStorageId());
      model.setAccessPermissions(uiPortal.getAccessPermissions());
      model.setEditPermission(uiPortal.getEditPermission());
      model.setLocale(uiPortal.getLocale());
      model.setSkin(uiPortal.getSkin());
      model.setModifiable(uiPortal.isModifiable());
      model.setProperties(uiPortal.getProperties());

      model.setPortalLayout(new Container());

      List<UIComponent> children = uiPortal.getChildren();
      if (children == null)
         return model;
      ArrayList<ModelObject> newChildren = new ArrayList<ModelObject>();
      for (UIComponent child : children)
      {
         ModelObject component = buildModelObject(child);
         if (component != null)
            newChildren.add(component);
      }
      model.getPortalLayout().setChildren(newChildren);
      return model;
   }

   static public void toUIGadget(UIGadget uiGadget, Application<Gadget> model) throws Exception
   {
      uiGadget.setProperties(model.getProperties());
      uiGadget.setState(model.getState());
   }

   /**
    * Fill the UI component with both information from the persistent model and
    * some coming from the portlet.xml defined by the JSR 286 specification
    */
   private static <S> void toUIPortlet(UIPortlet<S, ?> uiPortlet, Application<S> model) throws Exception
   {

      //
      PortletState<S> portletState = new PortletState<S>(model.getState(), model.getType());

      /*
       * Fill UI component object with info from the XML file that persist portlet
       * information
       */
      uiPortlet.setWidth(model.getWidth());
      uiPortlet.setHeight(model.getHeight());
      uiPortlet.setState(portletState);
      uiPortlet.setTitle(model.getTitle());
      uiPortlet.setIcon(model.getIcon());
      uiPortlet.setDescription(model.getDescription());
      uiPortlet.setShowInfoBar(model.getShowInfoBar());
      uiPortlet.setShowWindowState(model.getShowApplicationState());
      uiPortlet.setShowPortletMode(model.getShowApplicationMode());
      uiPortlet.setProperties(model.getProperties());
      uiPortlet.setTheme(model.getTheme());
      if (model.getAccessPermissions() != null)
         uiPortlet.setAccessPermissions(model.getAccessPermissions());
      uiPortlet.setModifiable(model.isModifiable());

      Portlet portlet = uiPortlet.getProducedOfferedPortlet();
      if (portlet == null || portlet.getInfo() == null)
         return;

      PortletInfo portletInfo = portlet.getInfo();

      /*
       * Define which portlet modes the portlet supports and hence should be shown
       * in the portlet info bar
       */
      Set<ModeInfo> modes = portletInfo.getCapabilities().getModes(MediaType.create("text/html"));
      List<String> supportModes = new ArrayList<String>();
      for (ModeInfo modeInfo : modes)
      {
         String modeName = modeInfo.getModeName().toLowerCase();
         if ("config".equals(modeInfo.getModeName()))
         {
            supportModes.add(modeName);
         }
         else
         {
            supportModes.add(modeName);
         }
      }

      if (supportModes.size() > 1)
         supportModes.remove("view");
      uiPortlet.setSupportModes(supportModes);
   }

   public static void toUIContainer(UIContainer uiContainer, Container model) throws Exception
   {
      toUIContainer(uiContainer, model, model instanceof Dashboard);
   }

   private static void toUIContainer(UIContainer uiContainer, Container model, boolean dashboard) throws Exception
   {
      uiContainer.setStorageId(model.getStorageId());
      uiContainer.setId(model.getId());
      uiContainer.setWidth(model.getWidth());
      uiContainer.setHeight(model.getHeight());
      uiContainer.setTitle(model.getTitle());
      uiContainer.setIcon(model.getIcon());
      uiContainer.setDescription(model.getDescription());
      uiContainer.setFactoryId(model.getFactoryId());
      uiContainer.setName(model.getName());
      uiContainer.setTemplate(model.getTemplate());
      if (model.getAccessPermissions() != null)
         uiContainer.setAccessPermissions(model.getAccessPermissions());

      List<ModelObject> children = model.getChildren();
      if (children == null)
         return;
      for (Object child : children)
      {
         buildUIContainer(uiContainer, child, dashboard);
      }
   }

   static public void toUIPage(UIPage uiPage, Page model) throws Exception
   {
      toUIContainer(uiPage, model);
      uiPage.setOwnerId(model.getOwnerId());
      uiPage.setOwnerType(model.getOwnerType());
      uiPage.setIcon(model.getIcon());
      uiPage.setAccessPermissions(model.getAccessPermissions());
      uiPage.setEditPermission(model.getEditPermission());
      uiPage.setFactoryId(model.getFactoryId());
      uiPage.setPageId(model.getPageId());
      uiPage.setTitle(model.getTitle());
      uiPage.setShowMaxWindow(model.isShowMaxWindow());
      uiPage.setModifiable(model.isModifiable());

      List<UIPortlet> portlets = new ArrayList<UIPortlet>();
      uiPage.findComponentOfType(portlets, UIPortlet.class);
      for (UIPortlet portlet : portlets)
      {
         portlet.setPortletInPortal(false);
      }
   }

   static public void toUIPortal(UIPortal uiPortal, UserPortalConfig userPortalConfig) throws Exception
   {
      PortalConfig model = userPortalConfig.getPortalConfig();

      uiPortal.setOwnerType(model.getType());
      uiPortal.setStorageId(model.getStorageId());
      uiPortal.setName(model.getName());
      uiPortal.setId("UIPortal");
      // uiPortal.setFactoryId(model.getFactoryId());
      uiPortal.setOwner(model.getName());
      uiPortal.setModifiable(model.isModifiable());

      uiPortal.setLocale(model.getLocale());
      uiPortal.setSkin(model.getSkin());
      uiPortal.setAccessPermissions(model.getAccessPermissions());
      uiPortal.setEditPermission(model.getEditPermission());
      uiPortal.setProperties(model.getProperties());

      List<ModelObject> children = model.getPortalLayout().getChildren();
      if (children != null)
      {
         for (Object child : children)
         {
            buildUIContainer(uiPortal, child, false);
         }
      }
      //uiPortal.setNavigation(userPortalConfig.getNavigations());
      uiPortal.setNavigation(userPortalConfig.getSelectedNavigation());
   }

   private static void buildUIContainer(UIContainer uiContainer, Object model, boolean dashboard) throws Exception
   {
      UIComponent uiComponent = null;
      WebuiRequestContext context = Util.getPortalRequestContext();

      if (model instanceof SiteBody)
      {
         UISiteBody uiSiteBody = uiContainer.createUIComponent(context, UISiteBody.class, null, null);
         uiSiteBody.setStorageId(((SiteBody)model).getStorageId());
         uiComponent = uiSiteBody;
      }
      else if (model instanceof PageBody)
      {
         UIPageBody uiPageBody = uiContainer.createUIComponent(context, UIPageBody.class, null, null);
         uiPageBody.setStorageId(((PageBody)model).getStorageId());
         uiComponent = uiPageBody;
      }
      else if (model instanceof Application)
      {
         Application application = (Application)model;

         if (dashboard && application.getType() == ApplicationType.GADGET)
         {
            Application<Gadget> ga = (Application<Gadget>)application;
            UIGadget uiGadget = uiContainer.createUIComponent(context, UIGadget.class, null, null);
            uiGadget.setStorageId(application.getStorageId());
            toUIGadget(uiGadget, ga);
            uiComponent = uiGadget;
         }
         else
         {
            UIPortlet uiPortlet = uiContainer.createUIComponent(context, UIPortlet.class, null, null);
            uiPortlet.setStorageId(application.getStorageId());
            if(application.getStorageName()!=null) {
              uiPortlet.setStorageName(application.getStorageName());
            }
            toUIPortlet(uiPortlet, application);
            uiComponent = uiPortlet;
         }
      }
      else if (model instanceof Container)
      {
         Container container = (Container)model;
         UIContainer uiTempContainer ;
         if(UITabContainer.TAB_CONTAINER.equals(container.getFactoryId()))
         {
            uiTempContainer = uiContainer.createUIComponent(context, UITabContainer.class, null, null);
         }
         else
         {
            uiTempContainer = uiContainer.createUIComponent(context, UIContainer.class, null, null);
         }
        
         toUIContainer(uiTempContainer, (Container)model, dashboard);
         uiComponent = uiTempContainer;
      }
      uiContainer.addChild(uiComponent);
   }
  
}
TOP

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

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.