/**
* 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.knowledge.base.web.internal.exportimport.data.handler;
import com.liferay.exportimport.kernel.lar.BasePortletDataHandler;
import com.liferay.exportimport.kernel.lar.DataLevel;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.kernel.lar.PortletDataHandler;
import com.liferay.exportimport.kernel.lar.PortletDataHandlerBoolean;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil;
import com.liferay.exportimport.kernel.lar.StagedModelType;
import com.liferay.exportimport.kernel.xstream.XStreamAliasRegistryUtil;
import com.liferay.knowledge.base.constants.KBPortletKeys;
import com.liferay.knowledge.base.model.KBArticle;
import com.liferay.knowledge.base.model.KBComment;
import com.liferay.knowledge.base.model.KBTemplate;
import com.liferay.knowledge.base.model.impl.KBArticleImpl;
import com.liferay.knowledge.base.model.impl.KBCommentImpl;
import com.liferay.knowledge.base.model.impl.KBTemplateImpl;
import com.liferay.knowledge.base.service.KBArticleLocalService;
import com.liferay.knowledge.base.service.KBCommentLocalService;
import com.liferay.knowledge.base.service.KBFolderLocalService;
import com.liferay.knowledge.base.service.KBTemplateLocalService;
import com.liferay.knowledge.base.service.permission.AdminPermission;
import com.liferay.knowledge.base.util.comparator.KBArticleVersionComparator;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.ExportActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.OrderFactoryUtil;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.xml.Element;
import java.util.List;
import javax.portlet.PortletPreferences;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Peter Shin
* @author Brian Wing Shun Chan
*/
@Component(
property = {"javax.portlet.name=" + KBPortletKeys.KNOWLEDGE_BASE_ADMIN},
service = PortletDataHandler.class
)
public class AdminPortletDataHandler extends BasePortletDataHandler {
public static final String NAMESPACE = "knowledge_base";
public static final String SCHEMA_VERSION = "2.0.0";
public AdminPortletDataHandler() {
setDataLevel(DataLevel.SITE);
setDeletionSystemEventStagedModelTypes(
new StagedModelType(KBArticle.class),
new StagedModelType(KBComment.class),
new StagedModelType(KBTemplate.class));
setExportControls(
new PortletDataHandlerBoolean(
NAMESPACE, "kb-articles", true, true, null,
KBArticle.class.getName()),
new PortletDataHandlerBoolean(
NAMESPACE, "kb-templates", true, true, null,
KBTemplate.class.getName()),
new PortletDataHandlerBoolean(
NAMESPACE, "kb-comments", true, true, null,
KBComment.class.getName()));
XStreamAliasRegistryUtil.register(KBArticleImpl.class, "KBArticle");
XStreamAliasRegistryUtil.register(KBCommentImpl.class, "KBComment");
XStreamAliasRegistryUtil.register(KBTemplateImpl.class, "KBTemplate");
}
@Override
public String getSchemaVersion() {
return SCHEMA_VERSION;
}
@Override
protected PortletPreferences doDeleteData(
PortletDataContext portletDataContext, String portletId,
PortletPreferences portletPreferences)
throws Exception {
if (portletDataContext.addPrimaryKey(
AdminPortletDataHandler.class, "deleteData")) {
return portletPreferences;
}
_kbArticleLocalService.deleteGroupKBArticles(
portletDataContext.getScopeGroupId());
_kbFolderLocalService.deleteKBFolders(
portletDataContext.getScopeGroupId());
_kbTemplateLocalService.deleteGroupKBTemplates(
portletDataContext.getScopeGroupId());
return portletPreferences;
}
@Override
protected String doExportData(
PortletDataContext portletDataContext, String portletId,
PortletPreferences portletPreferences)
throws Exception {
portletDataContext.addPortletPermissions(AdminPermission.RESOURCE_NAME);
Element rootElement = addExportDataRootElement(portletDataContext);
rootElement.addAttribute(
"group-id", String.valueOf(portletDataContext.getScopeGroupId()));
ActionableDynamicQuery kbArticleActionableDynamicQuery =
getKBArticleActionableDynamicQuery(portletDataContext);
kbArticleActionableDynamicQuery.performActions();
ActionableDynamicQuery kbTemplateActionableDynamicQuery =
_kbTemplateLocalService.getExportActionableDynamicQuery(
portletDataContext);
kbTemplateActionableDynamicQuery.performActions();
ActionableDynamicQuery kbCommentActionableDynamicQuery =
getKBCommentActionableDynamicQuery(portletDataContext);
kbCommentActionableDynamicQuery.performActions();
return getExportDataRootElementString(rootElement);
}
@Override
protected PortletPreferences doImportData(
PortletDataContext portletDataContext, String portletId,
PortletPreferences portletPreferences, String data)
throws Exception {
portletDataContext.importPortletPermissions(
AdminPermission.RESOURCE_NAME);
Element kbArticlesElement =
portletDataContext.getImportDataGroupElement(KBArticle.class);
List<Element> kbArticleElements = kbArticlesElement.elements();
for (Element kbArticleElement : kbArticleElements) {
StagedModelDataHandlerUtil.importStagedModel(
portletDataContext, kbArticleElement);
}
Element kbTemplatesElement =
portletDataContext.getImportDataGroupElement(KBTemplate.class);
List<Element> kbTemplateElements = kbTemplatesElement.elements();
for (Element kbTemplateElement : kbTemplateElements) {
StagedModelDataHandlerUtil.importStagedModel(
portletDataContext, kbTemplateElement);
}
Element kbCommentsElement =
portletDataContext.getImportDataGroupElement(KBComment.class);
List<Element> kbCommentElements = kbCommentsElement.elements();
for (Element kbCommentElement : kbCommentElements) {
StagedModelDataHandlerUtil.importStagedModel(
portletDataContext, kbCommentElement);
}
return null;
}
@Override
protected void doPrepareManifestSummary(
PortletDataContext portletDataContext,
PortletPreferences portletPreferences)
throws Exception {
ActionableDynamicQuery kbArticleActionableDynamicQuery =
_kbArticleLocalService.getExportActionableDynamicQuery(
portletDataContext);
kbArticleActionableDynamicQuery.performCount();
ActionableDynamicQuery kbTemplateActionableDynamicQuery =
_kbTemplateLocalService.getExportActionableDynamicQuery(
portletDataContext);
kbTemplateActionableDynamicQuery.performCount();
ActionableDynamicQuery kbCommentActionableDynamicQuery =
getKBCommentActionableDynamicQuery(portletDataContext);
kbCommentActionableDynamicQuery.performCount();
}
protected ActionableDynamicQuery getKBArticleActionableDynamicQuery(
final PortletDataContext portletDataContext)
throws Exception {
ExportActionableDynamicQuery exportActionableDynamicQuery =
_kbArticleLocalService.getExportActionableDynamicQuery(
portletDataContext);
final ActionableDynamicQuery.AddOrderCriteriaMethod
addOrderCriteriaMethod =
exportActionableDynamicQuery.getAddOrderCriteriaMethod();
exportActionableDynamicQuery.setAddOrderCriteriaMethod(
new ActionableDynamicQuery.AddOrderCriteriaMethod() {
@Override
public void addOrderCriteria(DynamicQuery dynamicQuery) {
if (addOrderCriteriaMethod != null) {
addOrderCriteriaMethod.addOrderCriteria(dynamicQuery);
}
OrderFactoryUtil.addOrderByComparator(
dynamicQuery, new KBArticleVersionComparator(true));
}
});
return exportActionableDynamicQuery;
}
protected ActionableDynamicQuery getKBCommentActionableDynamicQuery(
PortletDataContext portletDataContext)
throws Exception {
ExportActionableDynamicQuery exportActionableDynamicQuery =
_kbCommentLocalService.getExportActionableDynamicQuery(
portletDataContext);
exportActionableDynamicQuery.setStagedModelType(
new StagedModelType(
_portal.getClassNameId(KBComment.class),
StagedModelType.REFERRER_CLASS_NAME_ID_ALL));
return exportActionableDynamicQuery;
}
@Reference(unbind = "-")
protected void setKBArticleLocalService(
KBArticleLocalService kbArticleLocalService) {
_kbArticleLocalService = kbArticleLocalService;
}
@Reference(unbind = "-")
protected void setKBCommentLocalService(
KBCommentLocalService kbCommentLocalService) {
_kbCommentLocalService = kbCommentLocalService;
}
@Reference(unbind = "-")
protected void setKBFolderLocalService(
KBFolderLocalService kbFolderLocalService) {
_kbFolderLocalService = kbFolderLocalService;
}
@Reference(unbind = "-")
protected void setKBTemplateLocalService(
KBTemplateLocalService kbTemplateLocalService) {
_kbTemplateLocalService = kbTemplateLocalService;
}
@Reference(unbind = "-")
protected void setPortal(Portal portal) {
_portal = portal;
}
private KBArticleLocalService _kbArticleLocalService;
private KBCommentLocalService _kbCommentLocalService;
private KBFolderLocalService _kbFolderLocalService;
private KBTemplateLocalService _kbTemplateLocalService;
private Portal _portal;
}