/**
   * The central area is called the WorkingWorkspace. It is composed of: 1) A UIPortal child which
   * is filled with portal data using the PortalDataMapper helper tool 2) A UIPortalToolPanel which
   * is not rendered by default A UIMaskWorkspace is also added to provide powerfull focus only
   * popups
   *
   * @throws Exception
   */
  private void addWorkingWorkspace() throws Exception {
    UIWorkingWorkspace uiWorkingWorkspace =
        addChild(UIWorkingWorkspace.class, UIPortalApplication.UI_WORKING_WS_ID, null);
    UIComponentDecorator uiViewWS =
        uiWorkingWorkspace.addChild(UIComponentDecorator.class, null, UI_VIEWING_WS_ID);

    DataStorage dataStorage = getApplicationComponent(DataStorage.class);
    Container container = dataStorage.getSharedLayout();
    UIPortal uiPortal = createUIComponent(UIPortal.class, null, null);
    PortalDataMapper.toUIPortal(uiPortal, userPortalConfig_);
    //    uiWorkingWorkspace.addChild(UIEditInlineWorkspace.class, null,
    // UI_EDITTING_WS_ID).setRendered(false);
    if (container != null) {
      org.exoplatform.portal.webui.container.UIContainer uiContainer =
          createUIComponent(org.exoplatform.portal.webui.container.UIContainer.class, null, null);
      PortalDataMapper.toUIContainer(uiContainer, container);
      UISiteBody uiSiteBody = uiContainer.findFirstComponentOfType(UISiteBody.class);
      uiSiteBody.setUIComponent(uiPortal);
      uiContainer.setRendered(true);
      uiViewWS.setUIComponent(uiContainer);
    } else {
      uiViewWS.setUIComponent(uiPortal);
    }
    uiWorkingWorkspace.addChild(UIPortalToolPanel.class, null, null).setRendered(false);
    addChild(UIMaskWorkspace.class, UIPortalApplication.UI_MASK_WS_ID, null);
  }
  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;

      UIComponentFactory<? extends UIContainer> factory =
          UIComponentFactory.getInstance(UIContainer.class);
      UIContainer uiTempContainer = factory.createUIComponent(container.getFactoryId(), context);

      if (uiTempContainer == null) {
        log.warn(
            "Can't find container factory for: {}. Default container is used",
            container.getFactoryId());
        uiTempContainer = uiContainer.createUIComponent(context, UIContainer.class, null, null);
      }

      toUIContainer(uiTempContainer, (Container) model, dashboard);
      uiComponent = uiTempContainer;
    }
    uiContainer.addChild(uiComponent);
  }
  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 if (UIColumnContainer.COLUMN_CONTAINER.equals(container.getFactoryId())) {
        uiTempContainer =
            uiContainer.createUIComponent(context, UIColumnContainer.class, null, null);
      } else {
        uiTempContainer = uiContainer.createUIComponent(context, UIContainer.class, null, null);
      }

      toUIContainer(uiTempContainer, (Container) model, dashboard);
      uiComponent = uiTempContainer;
    }
    uiContainer.addChild(uiComponent);
  }