/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library 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 library 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. */ package com.liferay.wiki.web.exportimport.data.handler; import com.liferay.exportimport.kernel.lar.BasePortletDataHandler; import com.liferay.exportimport.kernel.lar.PortletDataContext; import com.liferay.exportimport.kernel.lar.PortletDataException; import com.liferay.exportimport.kernel.lar.PortletDataHandler; import com.liferay.exportimport.kernel.lar.PortletDataHandlerBoolean; import com.liferay.exportimport.kernel.lar.PortletDataHandlerControl; import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil; import com.liferay.exportimport.kernel.lar.StagedModelType; import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery; import com.liferay.portal.kernel.module.framework.ModuleServiceLifecycle; import com.liferay.portal.kernel.xml.Element; import com.liferay.wiki.constants.WikiConstants; import com.liferay.wiki.constants.WikiPortletKeys; import com.liferay.wiki.model.WikiNode; import com.liferay.wiki.model.WikiPage; import com.liferay.wiki.service.WikiNodeLocalService; import com.liferay.wiki.service.WikiPageLocalService; import com.liferay.wiki.service.permission.WikiResourcePermissionChecker; import com.liferay.wiki.util.WikiCacheHelper; import com.liferay.wiki.util.WikiCacheThreadLocal; import java.util.List; import java.util.Map; import javax.portlet.PortletPreferences; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Bruno Farache * @author Jorge Ferrer * @author Marcellus Tavares * @author Juan Fernández * @author Zsolt Berentey * @author Mate Thurzo */ @Component( immediate = true, property = { "javax.portlet.name=" + WikiPortletKeys.WIKI, "javax.portlet.name=" + WikiPortletKeys.WIKI_ADMIN }, service = PortletDataHandler.class ) public class WikiPortletDataHandler extends BasePortletDataHandler { public static final String NAMESPACE = "wiki"; public static final String SCHEMA_VERSION = "1.0.0"; @Override public String getSchemaVersion() { return SCHEMA_VERSION; } @Override public String getServiceName() { return WikiConstants.SERVICE_NAME; } @Override public PortletPreferences importData( PortletDataContext portletDataContext, String portletId, PortletPreferences portletPreferences, String data) throws PortletDataException { WikiCacheThreadLocal.setClearCache(false); try { return super.importData( portletDataContext, portletId, portletPreferences, data); } finally { WikiCacheThreadLocal.setClearCache(true); } } @Activate protected void activate() { setDataPortletPreferences("hiddenNodes, visibleNodes"); setDeletionSystemEventStagedModelTypes( new StagedModelType(WikiNode.class), new StagedModelType(WikiPage.class)); setExportControls( new PortletDataHandlerBoolean( NAMESPACE, "wiki-pages", true, false, new PortletDataHandlerControl[] { new PortletDataHandlerBoolean( NAMESPACE, "referenced-content") }, WikiPage.class.getName())); setImportControls(getExportControls()); } @Override protected PortletPreferences doDeleteData( PortletDataContext portletDataContext, String portletId, PortletPreferences portletPreferences) throws Exception { if (portletDataContext.addPrimaryKey( WikiPortletDataHandler.class, "deleteData")) { return portletPreferences; } _wikiNodeLocalService.deleteNodes(portletDataContext.getScopeGroupId()); return portletPreferences; } @Override protected String doExportData( final PortletDataContext portletDataContext, String portletId, PortletPreferences portletPreferences) throws Exception { Element rootElement = addExportDataRootElement(portletDataContext); if (!portletDataContext.getBooleanParameter(NAMESPACE, "wiki-pages")) { return getExportDataRootElementString(rootElement); } portletDataContext.addPortletPermissions( WikiResourcePermissionChecker.RESOURCE_NAME); rootElement.addAttribute( "group-id", String.valueOf(portletDataContext.getScopeGroupId())); ActionableDynamicQuery nodeActionableDynamicQuery = _wikiNodeLocalService.getExportActionableDynamicQuery( portletDataContext); nodeActionableDynamicQuery.performActions(); ActionableDynamicQuery pageActionableDynamicQuery = _wikiPageLocalService.getExportActionableDynamicQuery( portletDataContext); pageActionableDynamicQuery.performActions(); return getExportDataRootElementString(rootElement); } @Override protected PortletPreferences doImportData( PortletDataContext portletDataContext, String portletId, PortletPreferences portletPreferences, String data) throws Exception { if (!portletDataContext.getBooleanParameter(NAMESPACE, "wiki-pages")) { return null; } portletDataContext.importPortletPermissions( WikiResourcePermissionChecker.RESOURCE_NAME); Element nodesElement = portletDataContext.getImportDataGroupElement( WikiNode.class); List<Element> nodeElements = nodesElement.elements(); for (Element nodeElement : nodeElements) { StagedModelDataHandlerUtil.importStagedModel( portletDataContext, nodeElement); } Element pagesElement = portletDataContext.getImportDataGroupElement( WikiPage.class); List<Element> pageElements = pagesElement.elements(); for (Element pageElement : pageElements) { StagedModelDataHandlerUtil.importStagedModel( portletDataContext, pageElement); } Map<Long, Long> nodeIds = (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap( WikiNode.class); for (long nodeId : nodeIds.values()) { _wikiCacheHelper.clearCache(nodeId); } return null; } @Override protected void doPrepareManifestSummary( PortletDataContext portletDataContext, PortletPreferences portletPreferences) throws Exception { ActionableDynamicQuery nodeActionableDynamicQuery = _wikiNodeLocalService.getExportActionableDynamicQuery( portletDataContext); nodeActionableDynamicQuery.performCount(); ActionableDynamicQuery pageExportActionableDynamicQuery = _wikiPageLocalService.getExportActionableDynamicQuery( portletDataContext); pageExportActionableDynamicQuery.performCount(); } @Reference(target = ModuleServiceLifecycle.PORTAL_INITIALIZED, unbind = "-") protected void setModuleServiceLifecycle( ModuleServiceLifecycle moduleServiceLifecycle) { } @Reference(unbind = "-") protected void setWikiCacheHelper(WikiCacheHelper wikiCacheHelper) { _wikiCacheHelper = wikiCacheHelper; } @Reference(unbind = "-") protected void setWikiNodeLocalService( WikiNodeLocalService wikiNodeLocalService) { _wikiNodeLocalService = wikiNodeLocalService; } @Reference(unbind = "-") protected void setWikiPageLocalService( WikiPageLocalService wikiPageLocalService) { _wikiPageLocalService = wikiPageLocalService; } private WikiCacheHelper _wikiCacheHelper; private WikiNodeLocalService _wikiNodeLocalService; private WikiPageLocalService _wikiPageLocalService; }