/**
* 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;
}