/** * 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.DDLRecordSet; import com.liferay.dynamic.data.lists.model.DDLRecordSetConstants; import com.liferay.dynamic.data.lists.service.DDLRecordSetLocalService; import com.liferay.dynamic.data.lists.util.comparator.DDLRecordSetNameComparator; import com.liferay.dynamic.data.mapping.model.DDMStructure; import com.liferay.dynamic.data.mapping.model.DDMTemplate; import com.liferay.dynamic.data.mapping.service.DDMStructureLocalService; import com.liferay.exportimport.kernel.lar.PortletDataContext; import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil; 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.ExportActionableDynamicQuery; 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.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.HashSet; import java.util.List; import java.util.Set; 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.DDLRecordSet" }, service = { DDLRecordSetStagedModelRepository.class, StagedModelRepository.class } ) public class DDLRecordSetStagedModelRepository extends BaseStagedModelRepository<DDLRecordSet> { @Override public DDLRecordSet addStagedModel( PortletDataContext portletDataContext, DDLRecordSet ddlRecordSet) throws PortalException { long userId = portletDataContext.getUserId(ddlRecordSet.getUserUuid()); ServiceContext serviceContext = portletDataContext.createServiceContext( ddlRecordSet); if (portletDataContext.isDataStrategyMirror()) { serviceContext.setUuid(ddlRecordSet.getUuid()); } else { ddlRecordSet.setRecordSetKey(null); } return _ddlRecordSetLocalService.addRecordSet( userId, ddlRecordSet.getGroupId(), ddlRecordSet.getDDMStructureId(), ddlRecordSet.getRecordSetKey(), ddlRecordSet.getNameMap(), ddlRecordSet.getDescriptionMap(), ddlRecordSet.getMinDisplayRows(), ddlRecordSet.getScope(), serviceContext); } @Override public void deleteStagedModel(DDLRecordSet ddlRecordSet) throws PortalException { _ddlRecordSetLocalService.deleteRecordSet(ddlRecordSet); } @Override public void deleteStagedModel( String uuid, long groupId, String className, String extraData) throws PortalException { DDLRecordSet ddlRecordSet = fetchStagedModelByUuidAndGroupId( uuid, groupId); if (ddlRecordSet != null) { deleteStagedModel(ddlRecordSet); } } @Override public void deleteStagedModels(PortletDataContext portletDataContext) throws PortalException { deleteStagedModels( portletDataContext, DDLRecordSetConstants.SCOPE_DYNAMIC_DATA_LISTS); } public void deleteStagedModels( PortletDataContext portletDataContext, int scope) throws PortalException { Set<Long> recordSetDDMStructureIds = new HashSet<>(); List<DDLRecordSet> recordSets = _ddlRecordSetLocalService.search( portletDataContext.getCompanyId(), portletDataContext.getScopeGroupId(), null, scope, QueryUtil.ALL_POS, QueryUtil.ALL_POS, new DDLRecordSetNameComparator()); for (DDLRecordSet recordSet : recordSets) { recordSetDDMStructureIds.add(recordSet.getDDMStructureId()); _ddlRecordSetLocalService.deleteRecordSet(recordSet); } deleteDDMStructures(recordSetDDMStructureIds); } @Override public DDLRecordSet fetchStagedModelByUuidAndGroupId( String uuid, long groupId) { return _ddlRecordSetLocalService.fetchDDLRecordSetByUuidAndGroupId( uuid, groupId); } @Override public List<DDLRecordSet> fetchStagedModelsByUuidAndCompanyId( String uuid, long companyId) { return _ddlRecordSetLocalService.getDDLRecordSetsByUuidAndCompanyId( uuid, companyId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, new StagedModelModifiedDateComparator<DDLRecordSet>()); } @Override public ExportActionableDynamicQuery getExportActionableDynamicQuery( final PortletDataContext portletDataContext) { return getExportActionableDynamicQuery( portletDataContext, DDLRecordSetConstants.SCOPE_DYNAMIC_DATA_LISTS); } public ExportActionableDynamicQuery getExportActionableDynamicQuery( final PortletDataContext portletDataContext, final int scope) { ExportActionableDynamicQuery exportActionableDynamicQuery = _ddlRecordSetLocalService.getExportActionableDynamicQuery( portletDataContext); final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod = exportActionableDynamicQuery.getAddCriteriaMethod(); exportActionableDynamicQuery.setAddCriteriaMethod( new ActionableDynamicQuery.AddCriteriaMethod() { @Override public void addCriteria(DynamicQuery dynamicQuery) { addCriteriaMethod.addCriteria(dynamicQuery); Property scopeProperty = PropertyFactoryUtil.forName( "scope"); dynamicQuery.add(scopeProperty.eq(scope)); } }); exportActionableDynamicQuery.setPerformActionMethod( new ActionableDynamicQuery.PerformActionMethod<DDLRecordSet>() { @Override public void performAction(DDLRecordSet ddlRecordSet) throws PortalException { StagedModelDataHandlerUtil.exportStagedModel( portletDataContext, ddlRecordSet); DDMStructure ddmStructure = ddlRecordSet.getDDMStructure(); StagedModelDataHandlerUtil.exportStagedModel( portletDataContext, ddmStructure); if (scope == DDLRecordSetConstants.SCOPE_DYNAMIC_DATA_LISTS) { for (DDMTemplate ddmTemplate : ddmStructure.getTemplates()) { StagedModelDataHandlerUtil.exportStagedModel( portletDataContext, ddmTemplate); } } } }); return exportActionableDynamicQuery; } @Override public DDLRecordSet saveStagedModel(DDLRecordSet ddlRecordSet) throws PortalException { return _ddlRecordSetLocalService.updateDDLRecordSet(ddlRecordSet); } @Override public DDLRecordSet updateStagedModel( PortletDataContext portletDataContext, DDLRecordSet ddlRecordSet) throws PortalException { ServiceContext serviceContext = portletDataContext.createServiceContext( ddlRecordSet); return _ddlRecordSetLocalService.updateRecordSet( ddlRecordSet.getRecordSetId(), ddlRecordSet.getDDMStructureId(), ddlRecordSet.getNameMap(), ddlRecordSet.getDescriptionMap(), ddlRecordSet.getMinDisplayRows(), serviceContext); } protected void deleteDDMStructures(Set<Long> ddmStructureIds) throws PortalException { for (Long ddmStructureId : ddmStructureIds) { _ddmStructureLocalService.deleteStructure(ddmStructureId); } } private static final Log _log = LogFactoryUtil.getLog( DDLRecordSetStagedModelRepository.class); @Reference private DDLRecordSetLocalService _ddlRecordSetLocalService; @Reference private DDMStructureLocalService _ddmStructureLocalService; }