@Override public boolean isStagedPortlet(String portletId) { UnicodeProperties typeSettingsProperties = getParentLiveGroupTypeSettingsProperties(); portletId = PortletConstants.getRootPortletId(portletId); String typeSettingsProperty = typeSettingsProperties.getProperty(StagingUtil.getStagedPortletId(portletId)); if (Validator.isNotNull(typeSettingsProperty)) { return GetterUtil.getBoolean(typeSettingsProperty); } try { Portlet portlet = PortletLocalServiceUtil.getPortletById(portletId); PortletDataHandler portletDataHandler = portlet.getPortletDataHandlerInstance(); if (portletDataHandler == null) { return false; } for (Map.Entry<String, String> entry : typeSettingsProperties.entrySet()) { String key = entry.getKey(); if (!key.contains(StagingConstants.STAGED_PORTLET)) { continue; } String stagedPortletId = StringUtil.replace(key, StagingConstants.STAGED_PORTLET, StringPool.BLANK); Portlet stagedPortlet = PortletLocalServiceUtil.getPortletById(stagedPortletId); if (portletDataHandler.equals(stagedPortlet.getPortletDataHandlerInstance())) { return GetterUtil.getBoolean(entry.getValue()); } } } catch (Exception e) { } return true; }
@Test public void testDataSiteLevelPortletsRank() throws Exception { List<Portlet> portlets = ExportImportHelperUtil.getDataSiteLevelPortlets(TestPropsValues.getCompanyId()); Integer previousRank = null; for (Portlet portlet : portlets) { PortletDataHandler portletDataHandler = portlet.getPortletDataHandlerInstance(); int actualRank = portletDataHandler.getRank(); if (previousRank != null) { Assert.assertTrue( "Portlets should be in ascending order by rank", previousRank <= actualRank); } previousRank = actualRank; } }
protected void populateDeletionStagedModelTypes(PortletDataContext portletDataContext) throws Exception { Portlet portlet = PortletLocalServiceUtil.getPortletById( portletDataContext.getCompanyId(), portletDataContext.getPortletId()); if ((portlet == null) || !portlet.isActive() || portlet.isUndeployedPortlet()) { return; } PortletDataHandler portletDataHandler = portlet.getPortletDataHandlerInstance(); if (portletDataHandler == null) { return; } portletDataContext.addDeletionSystemEventStagedModelTypes( portletDataHandler.getDeletionSystemEventStagedModelTypes()); }
protected void importPortletPreferences( PortletDataContext portletDataContext, long companyId, long groupId, Layout layout, Element parentElement, boolean preserveScopeLayoutId, boolean importPortletArchivedSetups, boolean importPortletData, boolean importPortletSetup, boolean importPortletUserPreferences) throws Exception { long plid = LayoutConstants.DEFAULT_PLID; String scopeType = StringPool.BLANK; String scopeLayoutUuid = StringPool.BLANK; if (layout != null) { plid = layout.getPlid(); if (preserveScopeLayoutId) { javax.portlet.PortletPreferences jxPortletPreferences = PortletPreferencesFactoryUtil.getLayoutPortletSetup( layout, portletDataContext.getPortletId()); scopeType = GetterUtil.getString(jxPortletPreferences.getValue("lfrScopeType", null)); scopeLayoutUuid = GetterUtil.getString(jxPortletPreferences.getValue("lfrScopeLayoutUuid", null)); portletDataContext.setScopeType(scopeType); portletDataContext.setScopeLayoutUuid(scopeLayoutUuid); } } List<Element> portletPreferencesElements = parentElement.elements("portlet-preferences"); for (Element portletPreferencesElement : portletPreferencesElements) { String path = portletPreferencesElement.attributeValue("path"); if (portletDataContext.isPathNotProcessed(path)) { String xml = null; Element element = null; try { xml = portletDataContext.getZipEntryAsString(path); Document preferencesDocument = SAXReaderUtil.read(xml); element = preferencesDocument.getRootElement(); } catch (DocumentException de) { throw new SystemException(de); } long ownerId = GetterUtil.getLong(element.attributeValue("owner-id")); int ownerType = GetterUtil.getInteger(element.attributeValue("owner-type")); if ((ownerType == PortletKeys.PREFS_OWNER_TYPE_COMPANY) || !importPortletSetup) { continue; } if ((ownerType == PortletKeys.PREFS_OWNER_TYPE_ARCHIVED) && !importPortletArchivedSetups) { continue; } if ((ownerType == PortletKeys.PREFS_OWNER_TYPE_USER) && (ownerId != PortletKeys.PREFS_OWNER_ID_DEFAULT) && !importPortletUserPreferences) { continue; } long curPlid = plid; String curPortletId = portletDataContext.getPortletId(); if (ownerType == PortletKeys.PREFS_OWNER_TYPE_GROUP) { curPlid = PortletKeys.PREFS_PLID_SHARED; curPortletId = portletDataContext.getRootPortletId(); ownerId = portletDataContext.getScopeGroupId(); } if (ownerType == PortletKeys.PREFS_OWNER_TYPE_ARCHIVED) { String userUuid = element.attributeValue("archive-user-uuid"); long userId = portletDataContext.getUserId(userUuid); String name = element.attributeValue("archive-name"); curPortletId = portletDataContext.getRootPortletId(); PortletItem portletItem = PortletItemLocalServiceUtil.updatePortletItem( userId, groupId, name, curPortletId, PortletPreferences.class.getName()); curPlid = LayoutConstants.DEFAULT_PLID; ownerId = portletItem.getPortletItemId(); } if (ownerType == PortletKeys.PREFS_OWNER_TYPE_USER) { String userUuid = element.attributeValue("user-uuid"); ownerId = portletDataContext.getUserId(userUuid); } boolean defaultUser = GetterUtil.getBoolean(element.attributeValue("default-user")); if (defaultUser) { ownerId = UserLocalServiceUtil.getDefaultUserId(companyId); } javax.portlet.PortletPreferences jxPortletPreferences = PortletPreferencesFactoryUtil.fromXML( companyId, ownerId, ownerType, curPlid, curPortletId, xml); Element importDataRootElement = portletDataContext.getImportDataRootElement(); try { Element preferenceDataElement = portletPreferencesElement.element("preference-data"); if (preferenceDataElement != null) { portletDataContext.setImportDataRootElement(preferenceDataElement); } Portlet portlet = PortletLocalServiceUtil.getPortletById( portletDataContext.getCompanyId(), curPortletId); ExportImportPortletPreferencesProcessor exportImportPortletPreferencesProcessor = ExportImportPortletPreferencesProcessorRegistryUtil .getExportImportPortletPreferencesProcessor(portlet.getRootPortletId()); if (exportImportPortletPreferencesProcessor != null) { List<Capability> importCapabilities = exportImportPortletPreferencesProcessor.getImportCapabilities(); if (ListUtil.isNotEmpty(importCapabilities)) { for (Capability importCapability : importCapabilities) { importCapability.process(portletDataContext, jxPortletPreferences); } } exportImportPortletPreferencesProcessor.processImportPortletPreferences( portletDataContext, jxPortletPreferences); } else { PortletDataHandler portletDataHandler = portlet.getPortletDataHandlerInstance(); jxPortletPreferences = portletDataHandler.processImportPortletPreferences( portletDataContext, curPortletId, jxPortletPreferences); } } finally { portletDataContext.setImportDataRootElement(importDataRootElement); } updatePortletPreferences( portletDataContext, ownerId, ownerType, curPlid, curPortletId, PortletPreferencesFactoryUtil.toXML(jxPortletPreferences), importPortletData); } } if (preserveScopeLayoutId && (layout != null)) { javax.portlet.PortletPreferences jxPortletPreferences = PortletPreferencesFactoryUtil.getLayoutPortletSetup( layout, portletDataContext.getPortletId()); try { jxPortletPreferences.setValue("lfrScopeType", scopeType); jxPortletPreferences.setValue("lfrScopeLayoutUuid", scopeLayoutUuid); jxPortletPreferences.store(); } finally { portletDataContext.setScopeType(scopeType); portletDataContext.setScopeLayoutUuid(scopeLayoutUuid); } } }
protected String deletePortletData( PortletDataContext portletDataContext, PortletPreferences portletPreferences) throws Exception { Group group = GroupLocalServiceUtil.getGroup(portletDataContext.getGroupId()); if (!group.isStagedPortlet(portletDataContext.getPortletId())) { if (_log.isDebugEnabled()) { _log.debug( "Do not delete portlet data for " + portletDataContext.getPortletId() + " because the portlet is not staged"); } return null; } Portlet portlet = PortletLocalServiceUtil.getPortletById( portletDataContext.getCompanyId(), portletDataContext.getPortletId()); if (portlet == null) { if (_log.isDebugEnabled()) { _log.debug( "Do not delete portlet data for " + portletDataContext.getPortletId() + " because the portlet does not exist"); } return null; } PortletDataHandler portletDataHandler = portlet.getPortletDataHandlerInstance(); if (portletDataHandler == null) { if (_log.isDebugEnabled()) { StringBundler sb = new StringBundler(4); sb.append("Do not delete portlet data for "); sb.append(portletDataContext.getPortletId()); sb.append(" because the portlet does not have a "); sb.append("PortletDataHandler"); _log.debug(sb.toString()); } return null; } if (_log.isDebugEnabled()) { _log.debug("Deleting data for " + portletDataContext.getPortletId()); } PortletPreferencesImpl portletPreferencesImpl = (PortletPreferencesImpl) PortletPreferencesFactoryUtil.fromDefaultXML(portletPreferences.getPreferences()); try { portletPreferencesImpl = (PortletPreferencesImpl) portletDataHandler.deleteData( portletDataContext, portletDataContext.getPortletId(), portletPreferencesImpl); } finally { portletDataContext.setGroupId(portletDataContext.getScopeGroupId()); } if (portletPreferencesImpl == null) { return null; } return PortletPreferencesFactoryUtil.toXML(portletPreferencesImpl); }
public String importPortletData( PortletDataContext portletDataContext, PortletPreferences portletPreferences, Element portletDataElement) throws Exception { Portlet portlet = PortletLocalServiceUtil.getPortletById( portletDataContext.getCompanyId(), portletDataContext.getPortletId()); if (portlet == null) { if (_log.isDebugEnabled()) { _log.debug( "Do not import portlet data for " + portletDataContext.getPortletId() + " because the portlet does not exist"); } return null; } PortletDataHandler portletDataHandler = portlet.getPortletDataHandlerInstance(); if ((portletDataHandler == null) || portletDataHandler.isDataPortletInstanceLevel()) { if (_log.isDebugEnabled()) { StringBundler sb = new StringBundler(4); sb.append("Do not import portlet data for "); sb.append(portletDataContext.getPortletId()); sb.append(" because the portlet does not have a portlet data "); sb.append("handler"); _log.debug(sb.toString()); } return null; } if (_log.isDebugEnabled()) { _log.debug("Importing data for " + portletDataContext.getPortletId()); } PortletPreferencesImpl portletPreferencesImpl = null; if (portletPreferences != null) { portletPreferencesImpl = (PortletPreferencesImpl) PortletPreferencesFactoryUtil.fromDefaultXML(portletPreferences.getPreferences()); } String portletData = portletDataContext.getZipEntryAsString(portletDataElement.attributeValue("path")); if (Validator.isNull(portletData)) { return null; } portletPreferencesImpl = (PortletPreferencesImpl) portletDataHandler.importData( portletDataContext, portletDataContext.getPortletId(), portletPreferencesImpl, portletData); if (portletPreferencesImpl == null) { return null; } return PortletPreferencesFactoryUtil.toXML(portletPreferencesImpl); }
protected void validateFile(long companyId, long groupId, String portletId, ZipReader zipReader) throws Exception { // XML String xml = zipReader.getEntryAsString("/manifest.xml"); if (xml == null) { throw new LARFileException("manifest.xml not found in the LAR"); } Element rootElement = null; try { Document document = SAXReaderUtil.read(xml); rootElement = document.getRootElement(); } catch (Exception e) { throw new LARFileException(e); } // Build compatibility int buildNumber = ReleaseInfo.getBuildNumber(); Element headerElement = rootElement.element("header"); int importBuildNumber = GetterUtil.getInteger(headerElement.attributeValue("build-number")); if (buildNumber != importBuildNumber) { throw new LayoutImportException( "LAR build number " + importBuildNumber + " does not match " + "portal build number " + buildNumber); } // Type String larType = headerElement.attributeValue("type"); if (!larType.equals("portlet")) { throw new LARTypeException(larType); } // Portlet compatibility String rootPortletId = headerElement.attributeValue("root-portlet-id"); if (!PortletConstants.getRootPortletId(portletId).equals(rootPortletId)) { throw new PortletIdException("Invalid portlet id " + rootPortletId); } // Available locales Portlet portlet = PortletLocalServiceUtil.getPortletById(companyId, portletId); PortletDataHandler portletDataHandler = portlet.getPortletDataHandlerInstance(); if (portletDataHandler.isDataLocalized()) { List<Locale> sourceAvailableLocales = Arrays.asList( LocaleUtil.fromLanguageIds( StringUtil.split(headerElement.attributeValue("available-locales")))); for (Locale sourceAvailableLocale : sourceAvailableLocales) { if (!LanguageUtil.isAvailableLocale( PortalUtil.getSiteGroupId(groupId), sourceAvailableLocale)) { LocaleException le = new LocaleException( LocaleException.TYPE_EXPORT_IMPORT, "Locale " + sourceAvailableLocale + " is not " + "available in company " + companyId); le.setSourceAvailableLocales(sourceAvailableLocales); le.setTargetAvailableLocales( LanguageUtil.getAvailableLocales(PortalUtil.getSiteGroupId(groupId))); throw le; } } } }
protected void updatePortletPreferences( PortletDataContext portletDataContext, long ownerId, int ownerType, long plid, String portletId, String xml, boolean importData) throws Exception { Portlet portlet = PortletLocalServiceUtil.getPortletById(portletDataContext.getCompanyId(), portletId); if (portlet == null) { if (_log.isDebugEnabled()) { _log.debug( "Do not update portlet preferences for " + portletId + " because the portlet does not exist"); } return; } PortletDataHandler portletDataHandler = portlet.getPortletDataHandlerInstance(); if (importData || !MergeLayoutPrototypesThreadLocal.isInProgress()) { PortletPreferencesLocalServiceUtil.updatePreferences( ownerId, ownerType, plid, portletId, xml); return; } // Portlet preferences to be updated only when importing data String[] dataPortletPreferences = portletDataHandler.getDataPortletPreferences(); // Current portlet preferences javax.portlet.PortletPreferences portletPreferences = PortletPreferencesLocalServiceUtil.getPreferences( portletDataContext.getCompanyId(), ownerId, ownerType, plid, portletId); // New portlet preferences javax.portlet.PortletPreferences jxPortletPreferences = PortletPreferencesFactoryUtil.fromXML( portletDataContext.getCompanyId(), ownerId, ownerType, plid, portletId, xml); Enumeration<String> enu = jxPortletPreferences.getNames(); while (enu.hasMoreElements()) { String name = enu.nextElement(); String scopeLayoutUuid = portletDataContext.getScopeLayoutUuid(); String scopeType = portletDataContext.getScopeType(); if (!ArrayUtil.contains(dataPortletPreferences, name) || (Validator.isNull(scopeLayoutUuid) && scopeType.equals("company"))) { String[] values = jxPortletPreferences.getValues(name, null); portletPreferences.setValues(name, values); } } PortletPreferencesLocalServiceUtil.updatePreferences( ownerId, ownerType, plid, portletId, portletPreferences); }