/** * 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.repository.external.model; import com.liferay.document.library.kernel.exception.NoSuchFileVersionException; import com.liferay.document.library.kernel.model.DLFileEntryConstants; import com.liferay.document.library.kernel.util.DLUtil; import com.liferay.document.library.repository.external.ExtRepositoryAdapter; import com.liferay.document.library.repository.external.ExtRepositoryFileEntry; import com.liferay.exportimport.kernel.lar.StagedModelType; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; 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.User; import com.liferay.portal.kernel.repository.Repository; import com.liferay.portal.kernel.repository.capabilities.Capability; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.repository.model.FileShortcut; import com.liferay.portal.kernel.repository.model.FileVersion; import com.liferay.portal.kernel.repository.model.Folder; import com.liferay.portal.kernel.repository.model.RepositoryModelOperation; import com.liferay.portal.kernel.security.auth.PrincipalThreadLocal; import com.liferay.portal.kernel.util.MimeTypesUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.workflow.WorkflowConstants; import java.io.InputStream; import java.util.Collections; import java.util.List; /** * @author Iván Zaera * @author Sergio González */ public class ExtRepositoryFileEntryAdapter extends ExtRepositoryObjectAdapter<FileEntry> implements FileEntry { public ExtRepositoryFileEntryAdapter( ExtRepositoryAdapter extRepositoryAdapter, long extRepositoryObjectId, String uuid, ExtRepositoryFileEntry extRepositoryFileEntry) { super( extRepositoryAdapter, extRepositoryObjectId, uuid, extRepositoryFileEntry); _extRepositoryFileEntry = extRepositoryFileEntry; } @Override public void execute(RepositoryModelOperation repositoryModelOperation) throws PortalException { repositoryModelOperation.execute(this); } @Override public InputStream getContentStream() throws PortalException { ExtRepositoryAdapter extRepositoryAdapter = getRepository(); return extRepositoryAdapter.getContentStream(this); } @Override public InputStream getContentStream(String version) throws PortalException { ExtRepositoryAdapter extRepositoryAdapter = getRepository(); FileVersion fileVersion = getFileVersion(version); return extRepositoryAdapter.getContentStream( (ExtRepositoryFileVersionAdapter)fileVersion); } @Override public ExtRepositoryFileEntry getExtRepositoryModel() { return _extRepositoryFileEntry; } @Override public long getFileEntryId() { return getPrimaryKey(); } @Override public String getFileName() { return DLUtil.getSanitizedFileName(getTitle(), getExtension()); } @Override public List<FileShortcut> getFileShortcuts() { return Collections.emptyList(); } @Override public FileVersion getFileVersion() { try { List<ExtRepositoryFileVersionAdapter> extRepositoryFileVersionAdapters = _getExtRepositoryFileVersionAdapters(); return extRepositoryFileVersionAdapters.get(0); } catch (PortalException pe) { throw new SystemException(pe); } } @Override public FileVersion getFileVersion(String version) throws PortalException { List<ExtRepositoryFileVersionAdapter> extRepositoryFileVersionAdapters = _getExtRepositoryFileVersionAdapters(); for (ExtRepositoryFileVersionAdapter extRepositoryFileVersionAdapter : extRepositoryFileVersionAdapters) { String curVersion = extRepositoryFileVersionAdapter.getVersion(); if (curVersion.equals(version)) { return extRepositoryFileVersionAdapter; } } throw new NoSuchFileVersionException( "No file version with {fileEntryId=" + getFileEntryId() + ", version: " + version + "}"); } @Override @SuppressWarnings("rawtypes") public List<FileVersion> getFileVersions(int status) { if ((status == WorkflowConstants.STATUS_ANY) || (status == WorkflowConstants.STATUS_APPROVED)) { try { return (List)_getExtRepositoryFileVersionAdapters(); } catch (PortalException pe) { throw new SystemException(pe); } } else { return Collections.emptyList(); } } @Override public int getFileVersionsCount(int status) { List<FileVersion> fileVersions = getFileVersions(status); return fileVersions.size(); } @Override public Folder getFolder() { Folder parentFolder = null; try { parentFolder = getParentFolder(); } catch (Exception e) { _log.error(e, e); } return parentFolder; } @Override public long getFolderId() { Folder folder = getFolder(); return folder.getFolderId(); } @Override public String getIcon() { return DLUtil.getFileIcon(getExtension()); } @Override public String getIconCssClass() { return DLUtil.getFileIconCssClass(getExtension()); } @Override @SuppressWarnings("unused") public FileVersion getLatestFileVersion() throws PortalException { return getFileVersion(); } @Override @SuppressWarnings("unused") public FileVersion getLatestFileVersion(boolean trusted) throws PortalException { return getFileVersion(); } @Override public Lock getLock() { if (!isCheckedOut()) { return null; } String checkedOutBy = _extRepositoryFileEntry.getCheckedOutBy(); User user = getUser(checkedOutBy); long userId = 0; String userName = null; if (user != null) { userId = user.getUserId(); userName = user.getFullName(); } return LockManagerUtil.createLock(0, getCompanyId(), userId, userName); } @Override public String getMimeType() { String mimeType = _extRepositoryFileEntry.getMimeType(); if (Validator.isNull(mimeType)) { mimeType = MimeTypesUtil.getContentType(getTitle()); } return mimeType; } @Override public String getMimeType(String version) { FileVersion fileVersion = null; try { fileVersion = getFileVersion(version); } catch (PortalException pe) { if (_log.isWarnEnabled()) { _log.warn( "Unable to obtain version " + version + " for external " + "repository file entry " + getTitle(), pe); } } catch (SystemException se) { if (_log.isWarnEnabled()) { _log.warn( "Unable to obtain version " + version + " for external " + "repository file entry " + getTitle(), se); } } if (fileVersion != null) { String mimeType = fileVersion.getMimeType(); if (Validator.isNotNull(mimeType)) { return mimeType; } } return MimeTypesUtil.getContentType(getTitle()); } @Override public Class<?> getModelClass() { return FileEntry.class; } @Override public String getName() { return getTitle(); } @Override public int getReadCount() { return 0; } @Override public <T extends Capability> T getRepositoryCapability( Class<T> capabilityClass) { Repository repository = getRepository(); return repository.getCapability(capabilityClass); } @Override public StagedModelType getStagedModelType() { return new StagedModelType(DLFileEntryConstants.getClassName()); } @Override public String getTitle() { return _extRepositoryFileEntry.getTitle(); } @Override public String getVersion() { try { List<ExtRepositoryFileVersionAdapter> extRepositoryFileVersionAdapters = _getExtRepositoryFileVersionAdapters(); FileVersion fileVersion = extRepositoryFileVersionAdapters.get(0); return fileVersion.getVersion(); } catch (Exception e) { return null; } } @Override public long getVersionUserId() { return getUserId(); } @Override public String getVersionUserName() { return getUserName(); } @Override public String getVersionUserUuid() { return getUserUuid(); } @Override public boolean hasLock() { if (!isCheckedOut()) { return false; } User checkedOutByUser = getUser( _extRepositoryFileEntry.getCheckedOutBy()); if (checkedOutByUser.getUserId() != PrincipalThreadLocal.getUserId()) { return false; } return true; } @Override public boolean isCheckedOut() { if (Validator.isNull(_extRepositoryFileEntry.getCheckedOutBy())) { return false; } return true; } @Override public boolean isManualCheckInRequired() { return true; } @Override public <T extends Capability> boolean isRepositoryCapabilityProvided( Class<T> capabilityClass) { Repository repository = getRepository(); return repository.isCapabilityProvided(capabilityClass); } @Override public boolean isSupportsLocking() { return true; } private List<ExtRepositoryFileVersionAdapter> _getExtRepositoryFileVersionAdapters() throws PortalException { ExtRepositoryAdapter extRepositoryAdapter = getRepository(); return extRepositoryAdapter.getExtRepositoryFileVersionAdapters(this); } private static final Log _log = LogFactoryUtil.getLog( ExtRepositoryFileEntryAdapter.class); private final ExtRepositoryFileEntry _extRepositoryFileEntry; }