001
014
015 package com.liferay.portal.repository.cmis.model;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.repository.model.Folder;
022 import com.liferay.portal.kernel.util.CharPool;
023 import com.liferay.portal.kernel.util.StringPool;
024 import com.liferay.portal.model.User;
025 import com.liferay.portal.repository.cmis.CMISRepository;
026 import com.liferay.portal.security.permission.ActionKeys;
027 import com.liferay.portal.security.permission.PermissionChecker;
028 import com.liferay.portal.service.CMISRepositoryLocalServiceUtil;
029 import com.liferay.portlet.documentlibrary.model.DLFolder;
030 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
031 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
032 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
033 import com.liferay.portlet.documentlibrary.service.permission.DLFolderPermission;
034
035 import java.io.Serializable;
036
037 import java.util.ArrayList;
038 import java.util.Calendar;
039 import java.util.Date;
040 import java.util.HashMap;
041 import java.util.List;
042 import java.util.Map;
043
044 import org.apache.chemistry.opencmis.client.api.CmisObject;
045 import org.apache.chemistry.opencmis.client.api.Session;
046
047
050 public class CMISFolder extends CMISModel implements Folder {
051
052 public CMISFolder(
053 CMISRepository cmisRepository, String uuid, long folderId,
054 org.apache.chemistry.opencmis.client.api.Folder cmisFolder) {
055
056 _cmisRepository = cmisRepository;
057 _uuid = uuid;
058 _folderId = folderId;
059 _cmisFolder = cmisFolder;
060 }
061
062 @Override
063 public boolean containsPermission(
064 PermissionChecker permissionChecker, String actionId)
065 throws SystemException {
066
067 if (_cmisFolder.isRootFolder() &&
068 (actionId.equals(ActionKeys.DELETE) ||
069 actionId.equals(ActionKeys.UPDATE))) {
070
071 try {
072 Folder folder = DLAppLocalServiceUtil.getMountFolder(
073 getRepositoryId());
074
075 DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(
076 folder.getFolderId());
077
078 return DLFolderPermission.contains(
079 permissionChecker, dlFolder, actionId);
080 }
081 catch (PortalException pe) {
082 throw new SystemException(pe);
083 }
084 }
085 else {
086 return containsPermission(_cmisFolder, actionId);
087 }
088 }
089
090 @Override
091 public List<Folder> getAncestors() throws PortalException, SystemException {
092 List<Folder> folders = new ArrayList<Folder>();
093
094 Folder folder = this;
095
096 while (!folder.isRoot()) {
097 folder = folder.getParentFolder();
098
099 folders.add(folder);
100 }
101
102 return folders;
103 }
104
105 @Override
106 public Map<String, Serializable> getAttributes() {
107 return new HashMap<String, Serializable>();
108 }
109
110 @Override
111 public long getCompanyId() {
112 return _cmisRepository.getCompanyId();
113 }
114
115 @Override
116 public Date getCreateDate() {
117 Calendar calendar = _cmisFolder.getCreationDate();
118
119 if (calendar != null) {
120 return calendar.getTime();
121 }
122 else {
123 return new Date();
124 }
125 }
126
127 @Override
128 public long getFolderId() {
129 return _folderId;
130 }
131
132 @Override
133 public long getGroupId() {
134 return _cmisRepository.getGroupId();
135 }
136
137 @Override
138 public Date getLastPostDate() {
139 return getModifiedDate();
140 }
141
142 @Override
143 public Object getModel() {
144 return _cmisFolder;
145 }
146
147 @Override
148 public Class<?> getModelClass() {
149 return DLFolder.class;
150 }
151
152 @Override
153 public String getModelClassName() {
154 return DLFolder.class.getName();
155 }
156
157 @Override
158 public Date getModifiedDate() {
159 Calendar calendar = _cmisFolder.getLastModificationDate();
160
161 if (calendar != null) {
162 return calendar.getTime();
163 }
164 else {
165 return new Date();
166 }
167 }
168
169 @Override
170 public String getName() {
171 if (_cmisFolder.isRootFolder()) {
172 try {
173 Folder folder = DLAppLocalServiceUtil.getMountFolder(
174 getRepositoryId());
175
176 return folder.getName();
177 }
178 catch (Exception e) {
179 _log.error(e, e);
180 }
181 }
182
183 return _cmisFolder.getName();
184 }
185
186 @Override
187 public Folder getParentFolder() throws PortalException, SystemException {
188 Folder parentFolder = null;
189
190 try {
191 parentFolder = super.getParentFolder();
192
193 if (parentFolder != null) {
194 return parentFolder;
195 }
196 }
197 catch (Exception e) {
198 }
199
200 if (_cmisFolder.isRootFolder()) {
201 Folder folder = DLAppLocalServiceUtil.getMountFolder(
202 getRepositoryId());
203
204 parentFolder = folder.getParentFolder();
205 }
206 else {
207 String path = _cmisFolder.getPath();
208
209 path = path.substring(0, path.lastIndexOf(CharPool.SLASH));
210
211 if (path.length() == 0) {
212 path = StringPool.SLASH;
213 }
214
215 Session session =
216 (Session)CMISRepositoryLocalServiceUtil.getSession(
217 getRepositoryId());
218
219 CmisObject parentCmisFolder = session.getObjectByPath(path);
220
221 parentFolder = CMISRepositoryLocalServiceUtil.toFolder(
222 getRepositoryId(), parentCmisFolder);
223 }
224
225 setParentFolder(parentFolder);
226
227 return parentFolder;
228 }
229
230 @Override
231 public long getParentFolderId() {
232 try {
233 Folder parentFolder = getParentFolder();
234
235 if (parentFolder != null) {
236 return parentFolder.getFolderId();
237 }
238 }
239 catch (Exception e) {
240 _log.error(e, e);
241 }
242
243 return DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
244 }
245
246 @Override
247 public long getPrimaryKey() {
248 return _folderId;
249 }
250
251 @Override
252 public Serializable getPrimaryKeyObj() {
253 return getPrimaryKey();
254 }
255
256 @Override
257 public long getRepositoryId() {
258 return _cmisRepository.getRepositoryId();
259 }
260
261 @Override
262 public long getUserId() {
263 User user = getUser(_cmisFolder.getCreatedBy());
264
265 if (user == null) {
266 return 0;
267 }
268 else {
269 return user.getUserId();
270 }
271 }
272
273 @Override
274 public String getUserName() {
275 User user = getUser(_cmisFolder.getCreatedBy());
276
277 if (user == null) {
278 return StringPool.BLANK;
279 }
280 else {
281 return user.getFullName();
282 }
283 }
284
285 @Override
286 public String getUserUuid() {
287 User user = getUser(_cmisFolder.getCreatedBy());
288
289 try {
290 return user.getUserUuid();
291 }
292 catch (Exception e) {
293 }
294
295 return StringPool.BLANK;
296 }
297
298 @Override
299 public String getUuid() {
300 return _uuid;
301 }
302
303 @Override
304 public boolean hasInheritableLock() {
305 return false;
306 }
307
308 @Override
309 public boolean hasLock() {
310 return false;
311 }
312
313 @Override
314 public boolean isDefaultRepository() {
315 return false;
316 }
317
318 @Override
319 public boolean isEscapedModel() {
320 return false;
321 }
322
323 @Override
324 public boolean isLocked() {
325 return false;
326 }
327
328 @Override
329 public boolean isMountPoint() {
330 return false;
331 }
332
333 @Override
334 public boolean isRoot() {
335 if (getParentFolderId() == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
336 return true;
337 }
338 else {
339 return false;
340 }
341 }
342
343 @Override
344 public boolean isSupportsLocking() {
345 return true;
346 }
347
348 @Override
349 public boolean isSupportsMetadata() {
350 return false;
351 }
352
353 @Override
354 public boolean isSupportsMultipleUpload() {
355 return false;
356 }
357
358 @Override
359 public boolean isSupportsShortcuts() {
360 return false;
361 }
362
363 @Override
364 public boolean isSupportsSocial() {
365 return false;
366 }
367
368 @Override
369 public void setCompanyId(long companyId) {
370 _cmisRepository.setCompanyId(companyId);
371 }
372
373 @Override
374 public void setCreateDate(Date date) {
375 }
376
377 public void setFolderId(long folderId) {
378 _folderId = folderId;
379 }
380
381 @Override
382 public void setGroupId(long groupId) {
383 _cmisRepository.setGroupId(groupId);
384 }
385
386 @Override
387 public void setModifiedDate(Date date) {
388 }
389
390 public void setPrimaryKey(long primaryKey) {
391 setFolderId(primaryKey);
392 }
393
394 @Override
395 public void setPrimaryKeyObj(Serializable primaryKeyObj) {
396 setPrimaryKey(((Long)primaryKeyObj).longValue());
397 }
398
399 @Override
400 public void setUserId(long userId) {
401 }
402
403 @Override
404 public void setUserName(String userName) {
405 }
406
407 @Override
408 public void setUserUuid(String userUuid) {
409 }
410
411 @Override
412 public Folder toEscapedModel() {
413 return this;
414 }
415
416 @Override
417 public Folder toUnescapedModel() {
418 return this;
419 }
420
421 @Override
422 protected CMISRepository getCmisRepository() {
423 return _cmisRepository;
424 }
425
426 private static Log _log = LogFactoryUtil.getLog(CMISFolder.class);
427
428 private org.apache.chemistry.opencmis.client.api.Folder _cmisFolder;
429 private CMISRepository _cmisRepository;
430 private long _folderId;
431 private String _uuid;
432
433 }