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