/** * 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.cmis.internal.model; import com.liferay.document.library.kernel.exception.NoSuchFileEntryException; import com.liferay.document.library.kernel.service.DLAppHelperLocalServiceUtil; import com.liferay.document.library.kernel.util.DLUtil; import com.liferay.document.library.repository.cmis.internal.CMISRepository; 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.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.repository.model.FileVersion; import com.liferay.portal.kernel.repository.model.RepositoryModelOperation; import com.liferay.portal.kernel.security.auth.PrincipalThreadLocal; import com.liferay.portal.kernel.service.UserLocalServiceUtil; import com.liferay.portal.kernel.util.FileUtil; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.MimeTypesUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; import java.io.InputStream; import java.io.Serializable; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.chemistry.opencmis.client.api.Document; import org.apache.chemistry.opencmis.commons.data.ContentStream; import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException; /** * @author Alexander Chow */ public class CMISFileVersion extends CMISModel implements FileVersion { public CMISFileVersion( CMISRepository cmisRepository, FileEntry fileEntry, String uuid, long fileVersionId, Document document) { _cmisRepository = cmisRepository; _fileEntry = fileEntry; _uuid = uuid; _fileVersionId = fileVersionId; _document = document; } @Override public Object clone() { CMISFileVersion cmisFileVersion = new CMISFileVersion( _cmisRepository, _fileEntry, _uuid, _fileVersionId, _document); cmisFileVersion.setCompanyId(getCompanyId()); cmisFileVersion.setFileVersionId(getFileVersionId()); cmisFileVersion.setGroupId(getGroupId()); try { cmisFileVersion.setParentFolder(getParentFolder()); } catch (Exception e) { } cmisFileVersion.setPrimaryKey(getPrimaryKey()); return cmisFileVersion; } @Override public void execute(RepositoryModelOperation repositoryModelOperation) throws PortalException { repositoryModelOperation.execute(this); } @Override public Map<String, Serializable> getAttributes() { return new HashMap<>(); } @Override public String getChangeLog() { return _document.getCheckinComment(); } @Override public long getCompanyId() { return _cmisRepository.getCompanyId(); } @Override public InputStream getContentStream(boolean incrementCounter) { ContentStream contentStream = _document.getContentStream(); try { DLAppHelperLocalServiceUtil.getFileAsStream( PrincipalThreadLocal.getUserId(), getFileEntry(), incrementCounter); } catch (Exception e) { _log.error(e); } return contentStream.getStream(); } @Override public Date getCreateDate() { Calendar creationDate = _document.getCreationDate(); return creationDate.getTime(); } @Override public ExpandoBridge getExpandoBridge() { return null; } @Override public String getExtension() { return FileUtil.getExtension(getTitle()); } @Override public String getExtraSettings() { return null; } @Override public FileEntry getFileEntry() throws PortalException { if (_fileEntry != null) { return _fileEntry; } Document document = null; try { List<Document> allVersions = _document.getAllVersions(); if (allVersions.isEmpty()) { document = _document; } else { document = allVersions.get(0); } } catch (CmisObjectNotFoundException confe) { throw new NoSuchFileEntryException(confe); } _fileEntry = _cmisRepository.toFileEntry(document); return _fileEntry; } @Override public long getFileEntryId() { try { return getFileEntry().getFileEntryId(); } catch (NoSuchFileEntryException nsfee) { if (_log.isDebugEnabled()) { _log.debug(nsfee, nsfee); } } catch (Exception e) { _log.error(e, e); } return 0; } @Override public String getFileName() { return DLUtil.getSanitizedFileName(getTitle(), getExtension()); } @Override public long getFileVersionId() { return _fileVersionId; } @Override public long getGroupId() { return _cmisRepository.getGroupId(); } @Override public String getIcon() { return DLUtil.getFileIcon(getExtension()); } @Override public Date getLastPublishDate() { return null; } @Override public String getMimeType() { String mimeType = _document.getContentStreamMimeType(); if (Validator.isNotNull(mimeType)) { return mimeType; } return MimeTypesUtil.getContentType(getTitle()); } @Override public Object getModel() { return _document; } @Override public Class<?> getModelClass() { return CMISFileVersion.class; } @Override public String getModelClassName() { return CMISFileVersion.class.getName(); } @Override public Date getModifiedDate() { Calendar modificationDate = _document.getLastModificationDate(); return modificationDate.getTime(); } @Override public long getPrimaryKey() { return _fileVersionId; } @Override public Serializable getPrimaryKeyObj() { return getPrimaryKey(); } @Override public long getRepositoryId() { return _cmisRepository.getRepositoryId(); } @Override public long getSize() { return _document.getContentStreamLength(); } @Override public StagedModelType getStagedModelType() { return new StagedModelType(FileVersion.class); } @Override public int getStatus() { return 0; } @Override public long getStatusByUserId() { return 0; } @Override public String getStatusByUserName() { return null; } @Override public String getStatusByUserUuid() { return null; } @Override public Date getStatusDate() { return getModifiedDate(); } @Override public String getTitle() { return _document.getName(); } @Override public long getUserId() { try { return UserLocalServiceUtil.getDefaultUserId(getCompanyId()); } catch (Exception e) { return 0; } } @Override public String getUserName() { return _document.getCreatedBy(); } @Override public String getUserUuid() { try { User user = UserLocalServiceUtil.getDefaultUser(getCompanyId()); return user.getUserUuid(); } catch (Exception e) { return StringPool.BLANK; } } @Override public String getUuid() { return _uuid; } @Override public String getVersion() { return GetterUtil.getString(_document.getVersionLabel()); } @Override public boolean isApproved() { return false; } @Override public boolean isDefaultRepository() { return false; } @Override public boolean isDraft() { return false; } @Override public boolean isEscapedModel() { return false; } @Override public boolean isExpired() { return false; } @Override public boolean isPending() { return false; } @Override public void setCompanyId(long companyId) { _cmisRepository.setCompanyId(companyId); } @Override public void setCreateDate(Date createDate) { } public void setFileVersionId(long fileVersionId) { _fileVersionId = fileVersionId; } @Override public void setGroupId(long groupId) { _cmisRepository.setGroupId(groupId); } @Override public void setLastPublishDate(Date lastPublishDate) { } @Override public void setModifiedDate(Date modifiedDate) { } public void setPrimaryKey(long primaryKey) { setFileVersionId(primaryKey); } @Override public void setPrimaryKeyObj(Serializable primaryKeyObj) { setPrimaryKey(((Long)primaryKeyObj).longValue()); } @Override public void setUserId(long userId) { } @Override public void setUserName(String userName) { } @Override public void setUserUuid(String userUuid) { } @Override public void setUuid(String uuid) { } @Override public FileVersion toEscapedModel() { return this; } @Override public FileVersion toUnescapedModel() { return this; } @Override protected CMISRepository getCmisRepository() { return _cmisRepository; } private static final Log _log = LogFactoryUtil.getLog( CMISFileVersion.class); private final CMISRepository _cmisRepository; private final Document _document; private FileEntry _fileEntry; private long _fileVersionId; private final String _uuid; }