/**
* 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.portlet.display.template.web.internal.exportimport.data.handler;
import com.liferay.dynamic.data.mapping.model.DDMTemplate;
import com.liferay.dynamic.data.mapping.model.DDMTemplateConstants;
import com.liferay.dynamic.data.mapping.service.DDMTemplateLocalService;
import com.liferay.exportimport.kernel.lar.BasePortletDataHandler;
import com.liferay.exportimport.kernel.lar.ManifestSummary;
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.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.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.module.framework.ModuleServiceLifecycle;
import com.liferay.portal.kernel.template.TemplateHandlerRegistryUtil;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.PortletKeys;
import com.liferay.portal.kernel.xml.Element;
import java.util.ArrayList;
import java.util.List;
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 Juan Fernández
*/
@Component(
property = {"javax.portlet.name=" + PortletKeys.PORTLET_DISPLAY_TEMPLATE},
service = PortletDataHandler.class
)
public class PortletDisplayTemplatePortletDataHandler
extends BasePortletDataHandler {
public static final String NAMESPACE = "portlet_display_template";
public static final String SCHEMA_VERSION = "1.0.0";
@Override
public StagedModelType[] getDeletionSystemEventStagedModelTypes() {
return getStagedModelTypes();
}
@Override
public long getExportModelCount(ManifestSummary manifestSummary) {
long totalModelCount = -1;
for (StagedModelType stagedModelType : getStagedModelTypes()) {
long modelCount = manifestSummary.getModelAdditionCount(
stagedModelType);
if (modelCount == -1) {
continue;
}
if (totalModelCount == -1) {
totalModelCount = modelCount;
}
else {
totalModelCount += modelCount;
}
}
return totalModelCount;
}
@Override
public String getSchemaVersion() {
return SCHEMA_VERSION;
}
@Activate
protected void activate() {
setExportControls(
new PortletDataHandlerBoolean(
NAMESPACE, "application-display-templates", true, true));
}
@Override
protected String doExportData(
PortletDataContext portletDataContext, String portletId,
PortletPreferences portletPreferences)
throws Exception {
Element rootElement = addExportDataRootElement(portletDataContext);
long[] classNameIds = TemplateHandlerRegistryUtil.getClassNameIds();
ActionableDynamicQuery actionableDynamicQuery =
getDDMTemplateActionableDynamicQuery(
portletDataContext, ArrayUtil.toArray(classNameIds),
new StagedModelType(
_portal.getClassNameId(DDMTemplate.class),
StagedModelType.REFERRER_CLASS_NAME_ID_ALL));
actionableDynamicQuery.performActions();
return getExportDataRootElementString(rootElement);
}
@Override
protected PortletPreferences doImportData(
PortletDataContext portletDataContext, String portletId,
PortletPreferences portletPreferences, String data)
throws Exception {
Element ddmTemplatesElement =
portletDataContext.getImportDataGroupElement(DDMTemplate.class);
List<Element> ddmTemplateElements = ddmTemplatesElement.elements();
for (Element ddmTemplateElement : ddmTemplateElements) {
StagedModelDataHandlerUtil.importStagedModel(
portletDataContext, ddmTemplateElement);
}
return null;
}
@Override
protected void doPrepareManifestSummary(
PortletDataContext portletDataContext,
PortletPreferences portletPreferences)
throws Exception {
for (StagedModelType stagedModelType : getStagedModelTypes()) {
ActionableDynamicQuery actionableDynamicQuery =
getDDMTemplateActionableDynamicQuery(
portletDataContext,
new Long[] {stagedModelType.getReferrerClassNameId()},
stagedModelType);
actionableDynamicQuery.performCount();
}
}
protected ActionableDynamicQuery getDDMTemplateActionableDynamicQuery(
final PortletDataContext portletDataContext, final Long[] classNameIds,
final StagedModelType stagedModelType) {
ExportActionableDynamicQuery exportActionableDynamicQuery =
_ddmTemplateLocalService.getExportActionableDynamicQuery(
portletDataContext);
final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod =
exportActionableDynamicQuery.getAddCriteriaMethod();
exportActionableDynamicQuery.setAddCriteriaMethod(
new ActionableDynamicQuery.AddCriteriaMethod() {
@Override
public void addCriteria(DynamicQuery dynamicQuery) {
addCriteriaMethod.addCriteria(dynamicQuery);
Property classNameIdProperty = PropertyFactoryUtil.forName(
"classNameId");
dynamicQuery.add(classNameIdProperty.in(classNameIds));
Property classPKProperty = PropertyFactoryUtil.forName(
"classPK");
dynamicQuery.add(classPKProperty.eq(0L));
Property typeProperty = PropertyFactoryUtil.forName("type");
dynamicQuery.add(
typeProperty.eq(
DDMTemplateConstants.TEMPLATE_TYPE_DISPLAY));
}
});
exportActionableDynamicQuery.setStagedModelType(stagedModelType);
return exportActionableDynamicQuery;
}
protected StagedModelType[] getStagedModelTypes() {
if (_stagedModelTypes != null) {
return _stagedModelTypes;
}
List<StagedModelType> stagedModelTypes = new ArrayList<>();
long ddmTemplateClassNameId = _portal.getClassNameId(DDMTemplate.class);
for (long classNameId : TemplateHandlerRegistryUtil.getClassNameIds()) {
stagedModelTypes.add(
new StagedModelType(ddmTemplateClassNameId, classNameId));
}
_stagedModelTypes = stagedModelTypes.toArray(
new StagedModelType[stagedModelTypes.size()]);
return _stagedModelTypes;
}
@Reference(unbind = "-")
protected void setDDMTemplateLocalService(
DDMTemplateLocalService ddmTemplateLocalService) {
_ddmTemplateLocalService = ddmTemplateLocalService;
}
@Reference(target = ModuleServiceLifecycle.PORTAL_INITIALIZED, unbind = "-")
protected void setModuleServiceLifecycle(
ModuleServiceLifecycle moduleServiceLifecycle) {
}
private DDMTemplateLocalService _ddmTemplateLocalService;
@Reference
private Portal _portal;
private StagedModelType[] _stagedModelTypes;
}