/**
* 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.dynamic.data.lists.exportimport.staged.model.repository;
import com.liferay.dynamic.data.lists.model.DDLRecord;
import com.liferay.dynamic.data.lists.model.DDLRecordSet;
import com.liferay.dynamic.data.lists.model.DDLRecordSetConstants;
import com.liferay.dynamic.data.lists.model.DDLRecordVersion;
import com.liferay.dynamic.data.lists.service.DDLRecordLocalService;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandler;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerRegistryUtil;
import com.liferay.exportimport.kernel.lar.StagedModelModifiedDateComparator;
import com.liferay.exportimport.staged.model.repository.StagedModelRepository;
import com.liferay.exportimport.staged.model.repository.base.BaseStagedModelRepository;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.ExportActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.service.ServiceContext;
import java.util.List;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Tamas Molnar
*/
@Component(
immediate = true,
property = {
"model.class.name=com.liferay.dynamic.data.lists.model.DDLRecord"
},
service = {
DDLRecordStagedModelRepository.class, StagedModelRepository.class
}
)
public class DDLRecordStagedModelRepository
extends BaseStagedModelRepository<DDLRecord> {
@Override
public DDLRecord addStagedModel(
PortletDataContext portletDataContext, DDLRecord ddlRecord)
throws PortalException {
throw new UnsupportedOperationException();
}
public DDLRecord addStagedModel(
PortletDataContext portletDataContext, DDLRecord ddlRecord,
DDMFormValues ddmFormValues)
throws PortalException {
long userId = portletDataContext.getUserId(ddlRecord.getUserUuid());
ServiceContext serviceContext = portletDataContext.createServiceContext(
ddlRecord);
if (portletDataContext.isDataStrategyMirror()) {
serviceContext.setUuid(ddlRecord.getUuid());
}
return _ddlRecordLocalService.addRecord(
userId, ddlRecord.getGroupId(), ddlRecord.getRecordSetId(),
ddlRecord.getDisplayIndex(), ddmFormValues, serviceContext);
}
@Override
public void deleteStagedModel(DDLRecord ddlRecord) throws PortalException {
_ddlRecordLocalService.deleteRecord(ddlRecord);
}
@Override
public void deleteStagedModel(
String uuid, long groupId, String className, String extraData)
throws PortalException {
DDLRecord ddlRrecord = fetchStagedModelByUuidAndGroupId(uuid, groupId);
if (ddlRrecord != null) {
deleteStagedModel(ddlRrecord);
}
}
@Override
public void deleteStagedModels(PortletDataContext portletDataContext)
throws PortalException {
}
@Override
public DDLRecord fetchStagedModelByUuidAndGroupId(
String uuid, long groupId) {
return _ddlRecordLocalService.fetchDDLRecordByUuidAndGroupId(
uuid, groupId);
}
@Override
public List<DDLRecord> fetchStagedModelsByUuidAndCompanyId(
String uuid, long companyId) {
return _ddlRecordLocalService.getDDLRecordsByUuidAndCompanyId(
uuid, companyId, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
new StagedModelModifiedDateComparator<DDLRecord>());
}
@Override
public ExportActionableDynamicQuery getExportActionableDynamicQuery(
PortletDataContext portletDataContext) {
return getExportActionableDynamicQuery(
portletDataContext, DDLRecordSetConstants.SCOPE_DYNAMIC_DATA_LISTS);
}
public ExportActionableDynamicQuery getExportActionableDynamicQuery(
PortletDataContext portletDataContext, final int scope) {
ExportActionableDynamicQuery exportActionableDynamicQuery =
_ddlRecordLocalService.getExportActionableDynamicQuery(
portletDataContext);
final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod =
exportActionableDynamicQuery.getAddCriteriaMethod();
exportActionableDynamicQuery.setAddCriteriaMethod(
new ActionableDynamicQuery.AddCriteriaMethod() {
@Override
public void addCriteria(DynamicQuery dynamicQuery) {
addCriteriaMethod.addCriteria(dynamicQuery);
Property recordIdProperty = PropertyFactoryUtil.forName(
"recordId");
DynamicQuery recordVersionDynamicQuery =
getRecordVersionDynamicQuery();
dynamicQuery.add(
recordIdProperty.in(recordVersionDynamicQuery));
Property recordSetIdProperty = PropertyFactoryUtil.forName(
"recordSetId");
DynamicQuery recordSetDynamicQuery =
getRecordSetDynamicQuery(scope);
dynamicQuery.add(
recordSetIdProperty.in(recordSetDynamicQuery));
}
});
return exportActionableDynamicQuery;
}
@Override
public DDLRecord saveStagedModel(DDLRecord ddlRecord)
throws PortalException {
return _ddlRecordLocalService.updateDDLRecord(ddlRecord);
}
@Override
public DDLRecord updateStagedModel(
PortletDataContext portletDataContext, DDLRecord ddlRecord)
throws PortalException {
throw new UnsupportedOperationException();
}
public DDLRecord updateStagedModel(
PortletDataContext portletDataContext, DDLRecord ddlRecord,
DDMFormValues ddmFormValues)
throws PortalException {
long userId = portletDataContext.getUserId(ddlRecord.getUserUuid());
ServiceContext serviceContext = portletDataContext.createServiceContext(
ddlRecord);
return _ddlRecordLocalService.updateRecord(
userId, ddlRecord.getRecordId(), false, ddlRecord.getDisplayIndex(),
ddmFormValues, serviceContext);
}
protected DynamicQuery getRecordSetDynamicQuery(int scope) {
StagedModelDataHandler<?> stagedModelDataHandler =
StagedModelDataHandlerRegistryUtil.getStagedModelDataHandler(
DDLRecord.class.getName());
Class<?> clazz = stagedModelDataHandler.getClass();
DynamicQuery recordSetDynamicQuery = DynamicQueryFactoryUtil.forClass(
DDLRecordSet.class, "recordSet", clazz.getClassLoader());
recordSetDynamicQuery.setProjection(
ProjectionFactoryUtil.property("recordSetId"));
recordSetDynamicQuery.add(
RestrictionsFactoryUtil.eqProperty(
"recordSet.recordSetId", "recordSetId"));
Property scopeProperty = PropertyFactoryUtil.forName("scope");
recordSetDynamicQuery.add(scopeProperty.eq(scope));
return recordSetDynamicQuery;
}
protected DynamicQuery getRecordVersionDynamicQuery() {
StagedModelDataHandler<?> stagedModelDataHandler =
StagedModelDataHandlerRegistryUtil.getStagedModelDataHandler(
DDLRecord.class.getName());
Class<?> clazz = stagedModelDataHandler.getClass();
DynamicQuery recordVersionDynamicQuery =
DynamicQueryFactoryUtil.forClass(
DDLRecordVersion.class, "recordVersion",
clazz.getClassLoader());
recordVersionDynamicQuery.setProjection(
ProjectionFactoryUtil.property("recordId"));
Property statusProperty = PropertyFactoryUtil.forName("status");
recordVersionDynamicQuery.add(
statusProperty.in(stagedModelDataHandler.getExportableStatuses()));
recordVersionDynamicQuery.add(
RestrictionsFactoryUtil.eqProperty(
"recordVersion.version", "version"));
recordVersionDynamicQuery.add(
RestrictionsFactoryUtil.eqProperty(
"recordVersion.recordId", "recordId"));
return recordVersionDynamicQuery;
}
private static final Log _log = LogFactoryUtil.getLog(
DDLRecordStagedModelRepository.class);
@Reference
private DDLRecordLocalService _ddlRecordLocalService;
}