/** * 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.document.library.internal.exportimport.data.handler; import com.liferay.document.library.kernel.model.DLFileShortcut; import com.liferay.document.library.kernel.model.DLFileShortcutConstants; import com.liferay.document.library.kernel.model.DLFolderConstants; import com.liferay.document.library.kernel.service.DLAppLocalService; import com.liferay.document.library.kernel.service.DLFileShortcutLocalService; import com.liferay.exportimport.data.handler.base.BaseStagedModelDataHandler; import com.liferay.exportimport.kernel.lar.ExportImportPathUtil; import com.liferay.exportimport.kernel.lar.PortletDataContext; import com.liferay.exportimport.kernel.lar.StagedModelDataHandler; import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil; import com.liferay.exportimport.kernel.lar.StagedModelModifiedDateComparator; 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.repository.model.FileEntry; import com.liferay.portal.kernel.repository.model.FileShortcut; import com.liferay.portal.kernel.repository.model.Folder; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.trash.TrashHandler; import com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil; import com.liferay.portal.kernel.util.MapUtil; import com.liferay.portal.kernel.xml.Element; import com.liferay.portal.repository.liferayrepository.model.LiferayFileShortcut; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Mate Thurzo */ @Component(immediate = true, service = StagedModelDataHandler.class) public class FileShortcutStagedModelDataHandler extends BaseStagedModelDataHandler<FileShortcut> { public static final String[] CLASS_NAMES = { DLFileShortcutConstants.getClassName(), FileShortcut.class.getName(), LiferayFileShortcut.class.getName() }; @Override public void deleteStagedModel(FileShortcut fileShortcut) throws PortalException { _dlFileShortcutLocalService.deleteFileShortcut( fileShortcut.getFileShortcutId()); } @Override public void deleteStagedModel( String uuid, long groupId, String className, String extraData) throws PortalException { FileShortcut fileShortcut = fetchStagedModelByUuidAndGroupId( uuid, groupId); if (fileShortcut != null) { deleteStagedModel(fileShortcut); } } @Override public FileShortcut fetchStagedModelByUuidAndGroupId( String uuid, long groupId) { try { DLFileShortcut dlFileShortcut = _dlFileShortcutLocalService.getDLFileShortcutByUuidAndGroupId( uuid, groupId); return new LiferayFileShortcut(dlFileShortcut); } catch (PortalException pe) { if (_log.isDebugEnabled()) { _log.debug(pe, pe); } return null; } } @Override public List<FileShortcut> fetchStagedModelsByUuidAndCompanyId( String uuid, long companyId) { List<DLFileShortcut> dlFileShortcuts = _dlFileShortcutLocalService.getDLFileShortcutsByUuidAndCompanyId( uuid, companyId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, new StagedModelModifiedDateComparator<DLFileShortcut>()); List<FileShortcut> fileShortcuts = new ArrayList<>(); for (DLFileShortcut dlFileShortcut : dlFileShortcuts) { fileShortcuts.add(new LiferayFileShortcut(dlFileShortcut)); } return fileShortcuts; } @Override public String[] getClassNames() { return CLASS_NAMES; } @Override public String getDisplayName(FileShortcut fileShortcut) { return fileShortcut.getUuid(); } @Override protected void doExportStagedModel( PortletDataContext portletDataContext, FileShortcut fileShortcut) throws Exception { if (fileShortcut.getFolderId() != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) { StagedModelDataHandlerUtil.exportReferenceStagedModel( portletDataContext, fileShortcut, fileShortcut.getFolder(), PortletDataContext.REFERENCE_TYPE_PARENT); } FileEntry fileEntry = _dlAppLocalService.getFileEntry( fileShortcut.getToFileEntryId()); StagedModelDataHandlerUtil.exportReferenceStagedModel( portletDataContext, fileShortcut, fileEntry, PortletDataContext.REFERENCE_TYPE_STRONG); Element fileShortcutElement = portletDataContext.getExportDataElement( fileShortcut); portletDataContext.addClassedModel( fileShortcutElement, ExportImportPathUtil.getModelPath(fileShortcut), fileShortcut); } @Override protected void doImportStagedModel( PortletDataContext portletDataContext, FileShortcut fileShortcut) throws Exception { long userId = portletDataContext.getUserId(fileShortcut.getUserUuid()); Map<Long, Long> folderIds = (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap( Folder.class); long folderId = MapUtil.getLong( folderIds, fileShortcut.getFolderId(), fileShortcut.getFolderId()); long groupId = portletDataContext.getScopeGroupId(); if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) { Folder folder = FolderUtil.findByPrimaryKey(folderId); groupId = folder.getRepositoryId(); } Map<Long, Long> fileEntryIds = (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap( FileEntry.class); long fileEntryId = MapUtil.getLong( fileEntryIds, fileShortcut.getToFileEntryId(), fileShortcut.getToFileEntryId()); FileEntry importedFileEntry = null; try { importedFileEntry = _dlAppLocalService.getFileEntry(fileEntryId); } catch (PortalException pe) { if (_log.isWarnEnabled()) { _log.warn("Unable to fetch file entry " + fileEntryId, pe); } return; } ServiceContext serviceContext = portletDataContext.createServiceContext( fileShortcut); FileShortcut importedFileShortcut = null; if (portletDataContext.isDataStrategyMirror()) { FileShortcut existingFileShortcut = fetchStagedModelByUuidAndGroupId( fileShortcut.getUuid(), portletDataContext.getScopeGroupId()); if (existingFileShortcut == null) { serviceContext.setUuid(fileShortcut.getUuid()); importedFileShortcut = _dlAppLocalService.addFileShortcut( userId, groupId, folderId, importedFileEntry.getFileEntryId(), serviceContext); } else { importedFileShortcut = _dlAppLocalService.updateFileShortcut( userId, existingFileShortcut.getFileShortcutId(), folderId, importedFileEntry.getFileEntryId(), serviceContext); } } else { importedFileShortcut = _dlAppLocalService.addFileShortcut( userId, groupId, folderId, importedFileEntry.getFileEntryId(), serviceContext); } portletDataContext.importClassedModel( fileShortcut, importedFileShortcut); } @Override protected void doRestoreStagedModel( PortletDataContext portletDataContext, FileShortcut fileShortcut) throws Exception { long userId = portletDataContext.getUserId(fileShortcut.getUserUuid()); FileShortcut existingFileShortcut = fetchStagedModelByUuidAndGroupId( fileShortcut.getUuid(), portletDataContext.getScopeGroupId()); if ((existingFileShortcut == null) || !(existingFileShortcut.getModel() instanceof DLFileShortcut)) { return; } DLFileShortcut dlFileShortcut = (DLFileShortcut)existingFileShortcut.getModel(); if (!dlFileShortcut.isInTrash()) { return; } TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( DLFileShortcut.class.getName()); if (trashHandler.isRestorable( existingFileShortcut.getFileShortcutId())) { trashHandler.restoreTrashEntry( userId, existingFileShortcut.getFileShortcutId()); } } @Reference(unbind = "-") protected void setDLAppLocalService(DLAppLocalService dlAppLocalService) { _dlAppLocalService = dlAppLocalService; } @Reference(unbind = "-") protected void setDLFileShortcutLocalService( DLFileShortcutLocalService dlFileShortcutLocalService) { _dlFileShortcutLocalService = dlFileShortcutLocalService; } private static final Log _log = LogFactoryUtil.getLog( FileShortcutStagedModelDataHandler.class); private DLAppLocalService _dlAppLocalService; private DLFileShortcutLocalService _dlFileShortcutLocalService; }