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