/** * 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.exportimport.data.handler.base; import aQute.bnd.annotation.ProviderType; import com.liferay.exportimport.content.processor.ExportImportContentProcessor; import com.liferay.exportimport.content.processor.ExportImportContentProcessorRegistryUtil; import com.liferay.exportimport.kernel.lar.ExportImportDateUtil; import com.liferay.exportimport.kernel.lar.ExportImportProcessCallbackRegistryUtil; 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.PortletDataHandlerKeys; import com.liferay.exportimport.staged.model.repository.StagedModelRepository; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.StagedGroupedModel; import com.liferay.portal.kernel.model.StagedModel; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.ServiceContextThreadLocal; import com.liferay.portal.kernel.util.DateRange; import com.liferay.portal.kernel.util.MapUtil; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; /** * @author Daniel Kocsis */ @ProviderType public abstract class BaseStagedModelDataHandler<T extends StagedModel> extends com.liferay.exportimport.kernel.lar.BaseStagedModelDataHandler<T> { @Override public void deleteStagedModel( String uuid, long groupId, String className, String extraData) throws PortalException { StagedModelRepository<T> stagedModelRepository = getStagedModelRepository(); if (stagedModelRepository == null) { return; } stagedModelRepository.deleteStagedModel( uuid, groupId, className, extraData); } @Override public void deleteStagedModel(T stagedModel) throws PortalException { StagedModelRepository<T> stagedModelRepository = getStagedModelRepository(); if (stagedModelRepository == null) { return; } stagedModelRepository.deleteStagedModel(stagedModel); } @Override public void exportStagedModel( PortletDataContext portletDataContext, T stagedModel) throws PortletDataException { super.exportStagedModel(portletDataContext, stagedModel); boolean updateLastPublishDate = MapUtil.getBoolean( portletDataContext.getParameterMap(), PortletDataHandlerKeys.UPDATE_LAST_PUBLISH_DATE); if (ExportImportThreadLocal.isStagingInProcess() && updateLastPublishDate && (stagedModel instanceof StagedGroupedModel)) { ExportImportProcessCallbackRegistryUtil.registerCallback( portletDataContext.getExportImportProcessId(), new UpdateStagedModelLastPublishDateCallable( stagedModel, portletDataContext.getDateRange())); } } @Override public T fetchMissingReference(String uuid, long groupId) { StagedModelRepository<T> stagedModelRepository = getStagedModelRepository(); if (stagedModelRepository == null) { return super.fetchMissingReference(uuid, groupId); } return stagedModelRepository.fetchMissingReference(uuid, groupId); } @Override public T fetchStagedModelByUuidAndGroupId(String uuid, long groupId) { StagedModelRepository<T> stagedModelRepository = getStagedModelRepository(); if (stagedModelRepository == null) { return super.fetchStagedModelByUuidAndGroupId(uuid, groupId); } return stagedModelRepository.fetchStagedModelByUuidAndGroupId( uuid, groupId); } @Override public List<T> fetchStagedModelsByUuidAndCompanyId( String uuid, long companyId) { StagedModelRepository<T> stagedModelRepository = getStagedModelRepository(); if (stagedModelRepository == null) { return Collections.<T>emptyList(); } return stagedModelRepository.fetchStagedModelsByUuidAndCompanyId( uuid, companyId); } @Override public void restoreStagedModel( PortletDataContext portletDataContext, T stagedModel) throws PortletDataException { StagedModelRepository<T> stagedModelRepository = getStagedModelRepository(); if (stagedModelRepository == null) { super.restoreStagedModel(portletDataContext, stagedModel); return; } stagedModelRepository.restoreStagedModel( portletDataContext, stagedModel); } protected ExportImportContentProcessor getExportImportContentProcessor( Class<T> clazz) { ExportImportContentProcessor exportImportContentProcessor = ExportImportContentProcessorRegistryUtil. getExportImportContentProcessor(clazz.getName()); return exportImportContentProcessor; } protected StagedModelRepository<T> getStagedModelRepository() { return null; } private class UpdateStagedModelLastPublishDateCallable implements Callable<Void> { public UpdateStagedModelLastPublishDateCallable( T stagedModel, DateRange dateRange) { _companyId = stagedModel.getCompanyId(); _dateRange = dateRange; _groupId = ((StagedGroupedModel)stagedModel).getGroupId(); _uuid = stagedModel.getUuid(); } @Override public Void call() throws PortalException { StagedModelRepository<T> stagedModelRepository = getStagedModelRepository(); if (stagedModelRepository == null) { return null; } T stagedModel = stagedModelRepository.fetchStagedModelByUuidAndGroupId( _uuid, _groupId); if (stagedModel == null) { return null; } Date endDate = null; if (_dateRange != null) { endDate = _dateRange.getEndDate(); } ExportImportDateUtil.updateLastPublishDate( (StagedGroupedModel)stagedModel, _dateRange, endDate); ServiceContext serviceContext = new ServiceContext(); serviceContext.setModifiedDate(stagedModel.getModifiedDate()); ServiceContextThreadLocal.pushServiceContext(serviceContext); try { stagedModelRepository.saveStagedModel(stagedModel); } finally { ServiceContextThreadLocal.popServiceContext(); } return null; } private final long _companyId; private final DateRange _dateRange; private final long _groupId; private final String _uuid; } }