コード例 #1
0
  protected void exportPortlet(
      PortletDataContext portletDataContext,
      LayoutCache layoutCache,
      String portletId,
      Layout layout,
      Element parentElement,
      long defaultUserId,
      boolean exportPermissions,
      boolean exportPortletArchivedSetups,
      boolean exportPortletData,
      boolean exportPortletSetup,
      boolean exportPortletUserPreferences,
      boolean exportUserPermissions)
      throws Exception {

    Portlet portlet =
        PortletLocalServiceUtil.getPortletById(portletDataContext.getCompanyId(), portletId);

    if (portlet == null) {
      if (_log.isDebugEnabled()) {
        _log.debug("Do not export portlet " + portletId + " because the portlet does not exist");
      }

      return;
    }

    if ((!portlet.isInstanceable())
        && (!portlet.isPreferencesUniquePerLayout())
        && (portletDataContext.hasNotUniquePerLayout(portletId))) {

      return;
    }

    Document document = SAXReaderUtil.createDocument();

    Element portletElement = document.addElement("portlet");

    portletElement.addAttribute("portlet-id", portletId);
    portletElement.addAttribute("root-portlet-id", PortletConstants.getRootPortletId(portletId));
    portletElement.addAttribute("old-plid", String.valueOf(layout.getPlid()));
    portletElement.addAttribute("scope-layout-type", portletDataContext.getScopeType());
    portletElement.addAttribute("scope-layout-uuid", portletDataContext.getScopeLayoutUuid());

    // Data

    if (exportPortletData) {
      javax.portlet.PortletPreferences jxPreferences =
          PortletPreferencesFactoryUtil.getPortletSetup(layout, portletId, StringPool.BLANK);

      if (!portlet.isPreferencesUniquePerLayout()) {
        StringBundler sb = new StringBundler(5);

        sb.append(portletId);
        sb.append(StringPool.AT);
        sb.append(portletDataContext.getScopeType());
        sb.append(StringPool.AT);
        sb.append(portletDataContext.getScopeLayoutUuid());

        String dataKey = sb.toString();

        if (!portletDataContext.hasNotUniquePerLayout(dataKey)) {
          portletDataContext.putNotUniquePerLayout(dataKey);

          exportPortletData(portletDataContext, portlet, layout, jxPreferences, portletElement);
        }
      } else {
        exportPortletData(portletDataContext, portlet, layout, jxPreferences, portletElement);
      }
    }

    // Portlet preferences

    long plid = PortletKeys.PREFS_OWNER_ID_DEFAULT;

    if (layout != null) {
      plid = layout.getPlid();
    }

    if (exportPortletSetup) {
      exportPortletPreferences(
          portletDataContext,
          PortletKeys.PREFS_OWNER_ID_DEFAULT,
          PortletKeys.PREFS_OWNER_TYPE_LAYOUT,
          false,
          layout,
          plid,
          portletId,
          portletElement);

      exportPortletPreferences(
          portletDataContext,
          portletDataContext.getScopeGroupId(),
          PortletKeys.PREFS_OWNER_TYPE_GROUP,
          false,
          layout,
          plid,
          portletId,
          portletElement);

      exportPortletPreferences(
          portletDataContext,
          portletDataContext.getCompanyId(),
          PortletKeys.PREFS_OWNER_TYPE_COMPANY,
          false,
          layout,
          plid,
          portletId,
          portletElement);
    }

    // Portlet preferences

    if (exportPortletUserPreferences) {
      List<PortletPreferences> portletPreferencesList =
          PortletPreferencesLocalServiceUtil.getPortletPreferences(
              PortletKeys.PREFS_OWNER_TYPE_USER, plid, portletId);

      for (PortletPreferences portletPreferences : portletPreferencesList) {

        boolean defaultUser = false;

        if (portletPreferences.getOwnerId() == PortletKeys.PREFS_OWNER_ID_DEFAULT) {

          defaultUser = true;
        }

        exportPortletPreferences(
            portletDataContext,
            portletPreferences.getOwnerId(),
            PortletKeys.PREFS_OWNER_TYPE_USER,
            defaultUser,
            layout,
            plid,
            portletId,
            portletElement);
      }

      try {
        PortletPreferences groupPortletPreferences =
            PortletPreferencesLocalServiceUtil.getPortletPreferences(
                portletDataContext.getScopeGroupId(),
                PortletKeys.PREFS_OWNER_TYPE_GROUP,
                PortletKeys.PREFS_PLID_SHARED,
                portletId);

        exportPortletPreference(
            portletDataContext,
            portletDataContext.getScopeGroupId(),
            PortletKeys.PREFS_OWNER_TYPE_GROUP,
            false,
            groupPortletPreferences,
            portletId,
            PortletKeys.PREFS_PLID_SHARED,
            portletElement);
      } catch (NoSuchPortletPreferencesException nsppe) {
      }
    }

    // Archived setups

    if (exportPortletArchivedSetups) {
      String rootPortletId = PortletConstants.getRootPortletId(portletId);

      List<PortletItem> portletItems =
          PortletItemLocalServiceUtil.getPortletItems(
              portletDataContext.getGroupId(), rootPortletId, PortletPreferences.class.getName());

      for (PortletItem portletItem : portletItems) {
        exportPortletPreferences(
            portletDataContext,
            portletItem.getPortletItemId(),
            PortletKeys.PREFS_OWNER_TYPE_ARCHIVED,
            false,
            null,
            plid,
            portletItem.getPortletId(),
            portletElement);
      }
    }

    // Permissions

    if (exportPermissions) {
      _permissionExporter.exportPortletPermissions(
          portletDataContext, layoutCache, portletId, layout, portletElement);
    }

    // Zip

    StringBundler sb = new StringBundler(4);

    sb.append(portletDataContext.getPortletPath(portletId));
    sb.append(StringPool.SLASH);
    sb.append(layout.getPlid());
    sb.append("/portlet.xml");

    String path = sb.toString();

    Element element = parentElement.addElement("portlet");

    element.addAttribute("portlet-id", portletId);
    element.addAttribute("layout-id", String.valueOf(layout.getLayoutId()));
    element.addAttribute("path", path);

    if (portletDataContext.isPathNotProcessed(path)) {
      try {
        portletDataContext.addZipEntry(path, document.formattedString());
      } catch (IOException ioe) {
        if (_log.isWarnEnabled()) {
          _log.warn(ioe.getMessage());
        }
      }

      portletDataContext.addPrimaryKey(String.class, path);
    }
  }