/** * 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.documentlibrary.model.impl; import com.liferay.document.library.kernel.model.DLFileEntry; import com.liferay.document.library.kernel.model.DLFileEntryConstants; import com.liferay.document.library.kernel.model.DLFileEntryMetadata; import com.liferay.document.library.kernel.model.DLFileEntryType; import com.liferay.document.library.kernel.model.DLFileShortcut; import com.liferay.document.library.kernel.model.DLFileVersion; import com.liferay.document.library.kernel.model.DLFolder; import com.liferay.document.library.kernel.model.DLFolderConstants; import com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalServiceUtil; import com.liferay.document.library.kernel.service.DLFileEntryServiceUtil; import com.liferay.document.library.kernel.service.DLFileEntryTypeLocalServiceUtil; import com.liferay.document.library.kernel.service.DLFileShortcutLocalServiceUtil; import com.liferay.document.library.kernel.service.DLFileVersionLocalServiceUtil; import com.liferay.document.library.kernel.service.DLFileVersionServiceUtil; import com.liferay.document.library.kernel.service.DLFolderLocalServiceUtil; import com.liferay.document.library.kernel.util.DLUtil; import com.liferay.dynamic.data.mapping.kernel.DDMFormValues; import com.liferay.dynamic.data.mapping.kernel.DDMStructure; import com.liferay.dynamic.data.mapping.kernel.StorageEngineManagerUtil; import com.liferay.expando.kernel.model.ExpandoBridge; import com.liferay.exportimport.kernel.lar.StagedModelType; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.lock.Lock; import com.liferay.portal.kernel.lock.LockManagerUtil; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.model.Repository; import com.liferay.portal.kernel.security.auth.PrincipalThreadLocal; import com.liferay.portal.kernel.service.RepositoryLocalServiceUtil; import com.liferay.portal.kernel.util.FileUtil; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.UnicodeProperties; import com.liferay.portal.kernel.workflow.WorkflowConstants; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Brian Wing Shun Chan * @author Alexander Chow */ public class DLFileEntryImpl extends DLFileEntryBaseImpl { @Override public String buildTreePath() throws PortalException { if (getFolderId() == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) { return StringPool.SLASH; } DLFolder dlFolder = getFolder(); return dlFolder.buildTreePath(); } @Override public InputStream getContentStream() throws PortalException { return getContentStream(getVersion()); } @Override public InputStream getContentStream(String version) throws PortalException { return DLFileEntryServiceUtil.getFileAsStream( getFileEntryId(), version); } @Override public long getDataRepositoryId() { return DLFolderConstants.getDataRepositoryId( getGroupId(), getFolderId()); } @Override public Map<String, DDMFormValues> getDDMFormValuesMap(long fileVersionId) throws PortalException { Map<String, DDMFormValues> ddmFormValuesMap = new HashMap<>(); DLFileVersion dlFileVersion = DLFileVersionLocalServiceUtil.getFileVersion(fileVersionId); long fileEntryTypeId = dlFileVersion.getFileEntryTypeId(); if (fileEntryTypeId <= 0) { return ddmFormValuesMap; } DLFileEntryType dlFileEntryType = getDLFileEntryType(); List<DDMStructure> ddmStructures = dlFileEntryType.getDDMStructures(); for (DDMStructure ddmStructure : ddmStructures) { DLFileEntryMetadata dlFileEntryMetadata = DLFileEntryMetadataLocalServiceUtil.fetchFileEntryMetadata( ddmStructure.getStructureId(), fileVersionId); if (dlFileEntryMetadata != null) { DDMFormValues ddmFormValues = StorageEngineManagerUtil.getDDMFormValues( dlFileEntryMetadata.getDDMStorageId()); ddmFormValuesMap.put( ddmStructure.getStructureKey(), ddmFormValues); } } return ddmFormValuesMap; } @Override public DLFileEntryType getDLFileEntryType() throws PortalException { return DLFileEntryTypeLocalServiceUtil.getDLFileEntryType( getFileEntryTypeId()); } @Override public ExpandoBridge getExpandoBridge() { try { DLFileVersion dlFileVersion = getFileVersion(); return dlFileVersion.getExpandoBridge(); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return null; } @Override public String getExtraSettings() { if (_extraSettingsProperties == null) { return super.getExtraSettings(); } else { return _extraSettingsProperties.toString(); } } @Override public UnicodeProperties getExtraSettingsProperties() { if (_extraSettingsProperties == null) { _extraSettingsProperties = new UnicodeProperties(true); try { _extraSettingsProperties.load(super.getExtraSettings()); } catch (IOException ioe) { _log.error(ioe, ioe); } } return _extraSettingsProperties; } @Override public List<DLFileShortcut> getFileShortcuts() { return DLFileShortcutLocalServiceUtil.getFileShortcuts( getFileEntryId()); } @Override public DLFileVersion getFileVersion() throws PortalException { return getFileVersion(getVersion()); } @Override public DLFileVersion getFileVersion(String version) throws PortalException { return DLFileVersionLocalServiceUtil.getFileVersion( getFileEntryId(), version); } @Override public List<DLFileVersion> getFileVersions(int status) { return DLFileVersionLocalServiceUtil.getFileVersions( getFileEntryId(), status); } @Override public int getFileVersionsCount(int status) { return DLFileVersionLocalServiceUtil.getFileVersionsCount( getFileEntryId(), status); } @Override public DLFolder getFolder() throws PortalException { if (getFolderId() <= 0) { return new DLFolderImpl(); } return DLFolderLocalServiceUtil.getFolder(getFolderId()); } @Override public String getIcon() { return DLUtil.getFileIcon(getExtension()); } @Override public String getIconCssClass() { return DLUtil.getFileIconCssClass(getExtension()); } @Override public DLFileVersion getLatestFileVersion(boolean trusted) throws PortalException { if (trusted) { return DLFileVersionLocalServiceUtil.getLatestFileVersion( getFileEntryId(), false); } else { return DLFileVersionServiceUtil.getLatestFileVersion( getFileEntryId()); } } @Override public Lock getLock() { try { return LockManagerUtil.getLock( DLFileEntry.class.getName(), getFileEntryId()); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return null; } @Override public String getLuceneProperties() { UnicodeProperties extraSettingsProps = getExtraSettingsProperties(); StringBundler sb = new StringBundler( extraSettingsProps.entrySet().size() + 4); sb.append(FileUtil.stripExtension(getTitle())); sb.append(StringPool.SPACE); sb.append(getDescription()); sb.append(StringPool.SPACE); for (Map.Entry<String, String> entry : extraSettingsProps.entrySet()) { String value = GetterUtil.getString(entry.getValue()); sb.append(value); } return sb.toString(); } @Override public StagedModelType getStagedModelType() { return new StagedModelType(DLFileEntryConstants.getClassName()); } @Override public int getStatus() { try { DLFileVersion dlFileVersion = getFileVersion(); return dlFileVersion.getStatus(); } catch (Exception e) { return WorkflowConstants.STATUS_APPROVED; } } @Override public boolean hasLock() { try { long folderId = getFolderId(); boolean hasLock = LockManagerUtil.hasLock( PrincipalThreadLocal.getUserId(), DLFileEntry.class.getName(), getFileEntryId()); if (!hasLock && (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)) { hasLock = DLFolderLocalServiceUtil.hasInheritableLock(folderId); } return hasLock; } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return false; } @Override public boolean isCheckedOut() { try { return DLFileEntryServiceUtil.isFileEntryCheckedOut( getFileEntryId()); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return false; } @Override public boolean isInHiddenFolder() { try { long repositoryId = getRepositoryId(); Repository repository = RepositoryLocalServiceUtil.getRepository( repositoryId); long dlFolderId = repository.getDlFolderId(); DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(dlFolderId); return dlFolder.isHidden(); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn(e, e); } } return false; } @Override public boolean isInTrash() { if (getStatus() == WorkflowConstants.STATUS_IN_TRASH) { return true; } else { return false; } } @Override public void setExtraSettings(String extraSettings) { _extraSettingsProperties = null; super.setExtraSettings(extraSettings); } @Override public void setExtraSettingsProperties( UnicodeProperties extraSettingsProperties) { _extraSettingsProperties = extraSettingsProperties; super.setExtraSettings(_extraSettingsProperties.toString()); } private static final Log _log = LogFactoryUtil.getLog( DLFileEntryImpl.class); private UnicodeProperties _extraSettingsProperties; }