/** * 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.model.DLFolder; import com.liferay.document.library.kernel.model.DLFolderConstants; import com.liferay.document.library.kernel.service.DLAppLocalServiceUtil; import com.liferay.document.library.kernel.service.DLFolderLocalServiceUtil; import com.liferay.document.library.repository.cmis.internal.CMISRepository; 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.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.repository.model.Folder; import com.liferay.portal.kernel.repository.model.RepositoryModelOperation; import com.liferay.portal.kernel.security.permission.ActionKeys; import com.liferay.portal.kernel.security.permission.PermissionChecker; import com.liferay.portal.kernel.util.CharPool; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portlet.documentlibrary.service.permission.DLFolderPermission; import java.io.Serializable; import java.util.ArrayList; 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.CmisObject; import org.apache.chemistry.opencmis.client.api.Session; /** * @author Alexander Chow */ public class CMISFolder extends CMISModel implements Folder { public CMISFolder( CMISRepository cmisRepository, String uuid, long folderId, org.apache.chemistry.opencmis.client.api.Folder cmisFolder) { _cmisRepository = cmisRepository; _uuid = uuid; _folderId = folderId; _cmisFolder = cmisFolder; } @Override public Object clone() { CMISFolder cmisFolder = new CMISFolder( _cmisRepository, _uuid, _folderId, _cmisFolder); cmisFolder.setCompanyId(getCompanyId()); cmisFolder.setFolderId(getFolderId()); cmisFolder.setGroupId(getGroupId()); try { cmisFolder.setParentFolder(getParentFolder()); } catch (Exception e) { } cmisFolder.setPrimaryKey(getPrimaryKey()); return cmisFolder; } @Override public boolean containsPermission( PermissionChecker permissionChecker, String actionId) { if (_cmisFolder.isRootFolder() && (actionId.equals(ActionKeys.DELETE) || actionId.equals(ActionKeys.UPDATE))) { try { Folder folder = DLAppLocalServiceUtil.getMountFolder( getRepositoryId()); DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder( folder.getFolderId()); return DLFolderPermission.contains( permissionChecker, dlFolder, actionId); } catch (PortalException pe) { throw new SystemException(pe); } } else { return containsPermission(_cmisFolder, actionId); } } @Override public void execute(RepositoryModelOperation repositoryModelOperation) throws PortalException { repositoryModelOperation.execute(this); } @Override public List<Long> getAncestorFolderIds() throws PortalException { List<Long> folderIds = new ArrayList<>(); Folder folder = this; while (!folder.isRoot()) { folder = folder.getParentFolder(); folderIds.add(folder.getFolderId()); } return folderIds; } @Override public List<Folder> getAncestors() throws PortalException { List<Folder> folders = new ArrayList<>(); Folder folder = this; while (!folder.isRoot()) { folder = folder.getParentFolder(); folders.add(folder); } return folders; } @Override public Map<String, Serializable> getAttributes() { return new HashMap<>(); } @Override public long getCompanyId() { return _cmisRepository.getCompanyId(); } @Override public Date getCreateDate() { Calendar calendar = _cmisFolder.getCreationDate(); if (calendar != null) { return calendar.getTime(); } else { return new Date(); } } @Override public long getFolderId() { return _folderId; } @Override public long getGroupId() { return _cmisRepository.getGroupId(); } @Override public Date getLastPostDate() { return getModifiedDate(); } @Override public Date getLastPublishDate() { return null; } @Override public Object getModel() { return _cmisFolder; } @Override public Class<?> getModelClass() { return CMISFolder.class; } @Override public String getModelClassName() { return CMISFolder.class.getName(); } @Override public Date getModifiedDate() { Calendar calendar = _cmisFolder.getLastModificationDate(); if (calendar != null) { return calendar.getTime(); } else { return new Date(); } } @Override public String getName() { if (_cmisFolder.isRootFolder()) { try { Folder folder = DLAppLocalServiceUtil.getMountFolder( getRepositoryId()); return folder.getName(); } catch (Exception e) { _log.error(e, e); } } return _cmisFolder.getName(); } @Override public Folder getParentFolder() throws PortalException { Folder parentFolder = null; try { parentFolder = super.getParentFolder(); if (parentFolder != null) { return parentFolder; } } catch (Exception e) { } if (_cmisFolder.isRootFolder()) { Folder folder = DLAppLocalServiceUtil.getMountFolder( getRepositoryId()); parentFolder = folder.getParentFolder(); } else { Session session = _cmisRepository.getSession(); String path = _cmisFolder.getPath(); path = path.substring(0, path.lastIndexOf(CharPool.SLASH)); if (path.length() == 0) { path = StringPool.SLASH; } CmisObject parentCmisFolder = session.getObjectByPath(path); parentFolder = _cmisRepository.toFolder( (org.apache.chemistry.opencmis.client.api.Folder) parentCmisFolder); } setParentFolder(parentFolder); return parentFolder; } @Override public long getParentFolderId() { try { Folder parentFolder = getParentFolder(); if (parentFolder != null) { return parentFolder.getFolderId(); } } catch (Exception e) { _log.error(e, e); } return DLFolderConstants.DEFAULT_PARENT_FOLDER_ID; } @Override public long getPrimaryKey() { return _folderId; } @Override public Serializable getPrimaryKeyObj() { return getPrimaryKey(); } @Override public long getRepositoryId() { return _cmisRepository.getRepositoryId(); } @Override public StagedModelType getStagedModelType() { return new StagedModelType(DLFolderConstants.getClassName()); } @Override public long getUserId() { User user = getUser(_cmisFolder.getCreatedBy()); if (user == null) { return 0; } else { return user.getUserId(); } } @Override public String getUserName() { User user = getUser(_cmisFolder.getCreatedBy()); if (user == null) { return StringPool.BLANK; } else { return user.getFullName(); } } @Override public String getUserUuid() { User user = getUser(_cmisFolder.getCreatedBy()); try { return user.getUserUuid(); } catch (Exception e) { } return StringPool.BLANK; } @Override public String getUuid() { return _uuid; } @Override public boolean hasInheritableLock() { return false; } @Override public boolean hasLock() { return false; } @Override public boolean isDefaultRepository() { return false; } @Override public boolean isEscapedModel() { return false; } @Override public boolean isLocked() { return false; } @Override public boolean isMountPoint() { return false; } @Override public boolean isRoot() { if (getParentFolderId() == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) { return true; } else { return false; } } @Override public boolean isSupportsLocking() { return true; } @Override public boolean isSupportsMetadata() { return false; } @Override public boolean isSupportsMultipleUpload() { return false; } @Override public boolean isSupportsShortcuts() { return false; } @Override public boolean isSupportsSocial() { return false; } @Override public boolean isSupportsSubscribing() { return false; } @Override public void setCompanyId(long companyId) { _cmisRepository.setCompanyId(companyId); } @Override public void setCreateDate(Date createDate) { } public void setFolderId(long folderId) { _folderId = folderId; } @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) { setFolderId(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 Folder toEscapedModel() { return this; } @Override public Folder toUnescapedModel() { return this; } @Override protected CMISRepository getCmisRepository() { return _cmisRepository; } private static final Log _log = LogFactoryUtil.getLog(CMISFolder.class); private final org.apache.chemistry.opencmis.client.api.Folder _cmisFolder; private final CMISRepository _cmisRepository; private long _folderId; private final String _uuid; }