/**
* 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.internal.exportimport.portlet.preferences.processor;
import com.liferay.exportimport.kernel.lar.ExportImportThreadLocal;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.kernel.lar.PortletDataException;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil;
import com.liferay.exportimport.portlet.preferences.processor.Capability;
import com.liferay.exportimport.portlet.preferences.processor.ExportImportPortletPreferencesProcessor;
import com.liferay.exportimport.portlet.preferences.processor.capability.ReferencedStagedModelImporterCapability;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.service.GroupLocalService;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portlet.display.template.exportimport.portlet.preferences.processor.PortletDisplayTemplateExportCapability;
import com.liferay.portlet.display.template.exportimport.portlet.preferences.processor.PortletDisplayTemplateImportCapability;
import com.liferay.wiki.constants.WikiPortletKeys;
import com.liferay.wiki.model.WikiNode;
import com.liferay.wiki.service.WikiNodeLocalService;
import java.util.List;
import javax.portlet.PortletPreferences;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Mate Thurzo
*/
@Component(
immediate = true, property = {"javax.portlet.name=" + WikiPortletKeys.WIKI},
service = ExportImportPortletPreferencesProcessor.class
)
public class WikiExportImportPortletPreferencesProcessor
implements ExportImportPortletPreferencesProcessor {
@Override
public List<Capability> getExportCapabilities() {
return ListUtil.toList(
new Capability[] {_portletDisplayTemplateExportCapability});
}
@Override
public List<Capability> getImportCapabilities() {
return ListUtil.toList(
new Capability[] {
_portletDisplayTemplateImportCapability,
_referencedStagedModelImporterCapability
});
}
@Override
public PortletPreferences processExportPortletPreferences(
PortletDataContext portletDataContext,
PortletPreferences portletPreferences)
throws PortletDataException {
Group group = _groupLocalService.fetchGroup(
portletDataContext.getGroupId());
String hiddenNodeNames = portletPreferences.getValue(
"hiddenNodes", null);
for (String hiddenNodeName : StringUtil.split(hiddenNodeNames)) {
exportNode(portletDataContext, group, hiddenNodeName);
}
String visibleNodeNames = portletPreferences.getValue(
"visibleNodes", null);
for (String visibleNodeName : StringUtil.split(visibleNodeNames)) {
exportNode(portletDataContext, group, visibleNodeName);
}
return portletPreferences;
}
@Override
public PortletPreferences processImportPortletPreferences(
PortletDataContext portletDataContext,
PortletPreferences portletPreferences)
throws PortletDataException {
return portletPreferences;
}
protected void exportNode(
PortletDataContext portletDataContext, Group group, String nodeName)
throws PortletDataException {
if (ExportImportThreadLocal.isStagingInProcess() &&
!group.isStagedPortlet(portletDataContext.getPortletId())) {
return;
}
WikiNode node = _wikiNodeLocalService.fetchNode(
portletDataContext.getScopeGroupId(), nodeName);
if (node == null) {
if (_log.isWarnEnabled()) {
_log.warn("Unable to export referenced wiki node " + nodeName);
}
return;
}
String portletId = portletDataContext.getPortletId();
StagedModelDataHandlerUtil.exportReferenceStagedModel(
portletDataContext, portletId, node);
}
@Reference(unbind = "-")
protected void setGroupLocalService(GroupLocalService groupLocalService) {
_groupLocalService = groupLocalService;
}
@Reference(unbind = "-")
protected void setPortletDisplayTemplateExportCapability(
PortletDisplayTemplateExportCapability
portletDisplayTemplateExportCapability) {
_portletDisplayTemplateExportCapability =
portletDisplayTemplateExportCapability;
}
@Reference(unbind = "-")
protected void setPortletDisplayTemplateImportCapability(
PortletDisplayTemplateImportCapability
portletDisplayTemplateImportCapability) {
_portletDisplayTemplateImportCapability =
portletDisplayTemplateImportCapability;
}
@Reference(unbind = "-")
protected void setReferencedStagedModelImporterCapability(
ReferencedStagedModelImporterCapability
referencedStagedModelImporterCapability) {
_referencedStagedModelImporterCapability =
referencedStagedModelImporterCapability;
}
@Reference(unbind = "-")
protected void setWikiNodeLocalService(
WikiNodeLocalService wikiNodeLocalService) {
_wikiNodeLocalService = wikiNodeLocalService;
}
private static final Log _log = LogFactoryUtil.getLog(
WikiExportImportPortletPreferencesProcessor.class);
private GroupLocalService _groupLocalService;
private PortletDisplayTemplateExportCapability
_portletDisplayTemplateExportCapability;
private PortletDisplayTemplateImportCapability
_portletDisplayTemplateImportCapability;
private ReferencedStagedModelImporterCapability
_referencedStagedModelImporterCapability;
private WikiNodeLocalService _wikiNodeLocalService;
}