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); } }