001
014
015 package com.liferay.portlet.documentlibrary.service.impl;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
019 import com.liferay.portal.kernel.dao.orm.Property;
020 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
021 import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
022 import com.liferay.portal.kernel.exception.PortalException;
023 import com.liferay.portal.kernel.repository.model.FileEntry;
024 import com.liferay.portal.kernel.systemevent.SystemEvent;
025 import com.liferay.portal.kernel.workflow.WorkflowConstants;
026 import com.liferay.portal.model.ResourceConstants;
027 import com.liferay.portal.model.SystemEventConstants;
028 import com.liferay.portal.model.User;
029 import com.liferay.portal.service.ServiceContext;
030 import com.liferay.portal.service.permission.ModelPermissions;
031 import com.liferay.portlet.documentlibrary.exception.NoSuchFileEntryException;
032 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
033 import com.liferay.portlet.documentlibrary.model.DLFileShortcutConstants;
034 import com.liferay.portlet.documentlibrary.model.DLFolder;
035 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
036 import com.liferay.portlet.documentlibrary.service.base.DLFileShortcutLocalServiceBaseImpl;
037
038 import java.util.Date;
039 import java.util.List;
040
041
044 public class DLFileShortcutLocalServiceImpl
045 extends DLFileShortcutLocalServiceBaseImpl {
046
047 @Override
048 public DLFileShortcut addFileShortcut(
049 long userId, long groupId, long repositoryId, long folderId,
050 long toFileEntryId, ServiceContext serviceContext)
051 throws PortalException {
052
053
054
055 User user = userPersistence.findByPrimaryKey(userId);
056 folderId = getFolderId(user.getCompanyId(), folderId);
057
058 validate(user, toFileEntryId);
059
060 long fileShortcutId = counterLocalService.increment();
061
062 DLFileShortcut fileShortcut = dlFileShortcutPersistence.create(
063 fileShortcutId);
064
065 fileShortcut.setUuid(serviceContext.getUuid());
066 fileShortcut.setGroupId(groupId);
067 fileShortcut.setCompanyId(user.getCompanyId());
068 fileShortcut.setUserId(user.getUserId());
069 fileShortcut.setUserName(user.getFullName());
070 fileShortcut.setRepositoryId(repositoryId);
071 fileShortcut.setFolderId(folderId);
072 fileShortcut.setToFileEntryId(toFileEntryId);
073 fileShortcut.setTreePath(fileShortcut.buildTreePath());
074 fileShortcut.setActive(true);
075 fileShortcut.setStatus(WorkflowConstants.STATUS_APPROVED);
076 fileShortcut.setStatusByUserId(userId);
077 fileShortcut.setStatusByUserName(user.getFullName());
078 fileShortcut.setStatusDate(new Date());
079
080 dlFileShortcutPersistence.update(fileShortcut);
081
082
083
084 if (serviceContext.isAddGroupPermissions() ||
085 serviceContext.isAddGuestPermissions()) {
086
087 addFileShortcutResources(
088 fileShortcut, serviceContext.isAddGroupPermissions(),
089 serviceContext.isAddGuestPermissions());
090 }
091 else {
092 addFileShortcutResources(
093 fileShortcut, serviceContext.getModelPermissions());
094 }
095
096
097
098 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
099 dlFolderLocalService.updateLastPostDate(
100 folderId, fileShortcut.getModifiedDate());
101 }
102
103
104
105 FileEntry fileEntry = dlAppLocalService.getFileEntry(toFileEntryId);
106
107 copyAssetTags(fileEntry, serviceContext);
108
109 updateAsset(
110 userId, fileShortcut, serviceContext.getAssetCategoryIds(),
111 serviceContext.getAssetTagNames());
112
113 return fileShortcut;
114 }
115
116 @Override
117 public void addFileShortcutResources(
118 DLFileShortcut fileShortcut, boolean addGroupPermissions,
119 boolean addGuestPermissions)
120 throws PortalException {
121
122 resourceLocalService.addResources(
123 fileShortcut.getCompanyId(), fileShortcut.getGroupId(),
124 fileShortcut.getUserId(), DLFileShortcutConstants.getClassName(),
125 fileShortcut.getFileShortcutId(), false, addGroupPermissions,
126 addGuestPermissions);
127 }
128
129 @Override
130 public void addFileShortcutResources(
131 DLFileShortcut fileShortcut, ModelPermissions modelPermissions)
132 throws PortalException {
133
134 resourceLocalService.addModelResources(
135 fileShortcut.getCompanyId(), fileShortcut.getGroupId(),
136 fileShortcut.getUserId(), DLFileShortcutConstants.getClassName(),
137 fileShortcut.getFileShortcutId(), modelPermissions);
138 }
139
140 @Override
141 public void addFileShortcutResources(
142 long fileShortcutId, boolean addGroupPermissions,
143 boolean addGuestPermissions)
144 throws PortalException {
145
146 DLFileShortcut fileShortcut =
147 dlFileShortcutPersistence.findByPrimaryKey(fileShortcutId);
148
149 addFileShortcutResources(
150 fileShortcut, addGroupPermissions, addGuestPermissions);
151 }
152
153 @Override
154 public void addFileShortcutResources(
155 long fileShortcutId, ModelPermissions modelPermissions)
156 throws PortalException {
157
158 DLFileShortcut fileShortcut =
159 dlFileShortcutPersistence.findByPrimaryKey(fileShortcutId);
160
161 addFileShortcutResources(fileShortcut, modelPermissions);
162 }
163
164 @Override
165 @SystemEvent(type = SystemEventConstants.TYPE_DELETE)
166 public void deleteFileShortcut(DLFileShortcut fileShortcut)
167 throws PortalException {
168
169
170
171 dlFileShortcutPersistence.remove(fileShortcut);
172
173
174
175 resourceLocalService.deleteResource(
176 fileShortcut.getCompanyId(), DLFileShortcutConstants.getClassName(),
177 ResourceConstants.SCOPE_INDIVIDUAL,
178 fileShortcut.getFileShortcutId());
179
180
181
182 assetEntryLocalService.deleteEntry(
183 DLFileShortcutConstants.getClassName(),
184 fileShortcut.getFileShortcutId());
185
186
187
188 if (fileShortcut.isInTrashExplicitly()) {
189 trashEntryLocalService.deleteEntry(
190 DLFileShortcutConstants.getClassName(),
191 fileShortcut.getFileShortcutId());
192 }
193 else {
194 trashVersionLocalService.deleteTrashVersion(
195 DLFileShortcutConstants.getClassName(),
196 fileShortcut.getFileShortcutId());
197 }
198 }
199
200 @Override
201 public void deleteFileShortcut(long fileShortcutId) throws PortalException {
202 DLFileShortcut fileShortcut =
203 dlFileShortcutLocalService.getDLFileShortcut(fileShortcutId);
204
205 dlFileShortcutLocalService.deleteFileShortcut(fileShortcut);
206 }
207
208 @Override
209 public void deleteFileShortcuts(long toFileEntryId) throws PortalException {
210 List<DLFileShortcut> fileShortcuts =
211 dlFileShortcutPersistence.findByToFileEntryId(toFileEntryId);
212
213 for (DLFileShortcut fileShortcut : fileShortcuts) {
214 dlFileShortcutLocalService.deleteFileShortcut(fileShortcut);
215 }
216 }
217
218 @Override
219 public void deleteFileShortcuts(long groupId, long folderId)
220 throws PortalException {
221
222 deleteFileShortcuts(groupId, folderId, true);
223 }
224
225 @Override
226 public void deleteFileShortcuts(
227 long groupId, long folderId, boolean includeTrashedEntries)
228 throws PortalException {
229
230 List<DLFileShortcut> fileShortcuts =
231 dlFileShortcutPersistence.findByG_F(groupId, folderId);
232
233 for (DLFileShortcut fileShortcut : fileShortcuts) {
234 if (includeTrashedEntries || !fileShortcut.isInTrashExplicitly()) {
235 dlFileShortcutLocalService.deleteFileShortcut(fileShortcut);
236 }
237 }
238 }
239
240 @Override
241 public void disableFileShortcuts(long toFileEntryId) {
242 updateFileShortcutsActive(toFileEntryId, false);
243 }
244
245 @Override
246 public void enableFileShortcuts(long toFileEntryId) {
247 updateFileShortcutsActive(toFileEntryId, true);
248 }
249
250 @Override
251 public DLFileShortcut getFileShortcut(long fileShortcutId)
252 throws PortalException {
253
254 return dlFileShortcutPersistence.findByPrimaryKey(fileShortcutId);
255 }
256
257 @Override
258 public List<DLFileShortcut> getFileShortcuts(long toFileEntryId) {
259 return dlFileShortcutPersistence.findByToFileEntryId(toFileEntryId);
260 }
261
262 @Override
263 public List<DLFileShortcut> getFileShortcuts(
264 long groupId, long folderId, boolean active, int status, int start,
265 int end) {
266
267 return dlFileShortcutPersistence.findByG_F_A_S(
268 groupId, folderId, active, status, start, end);
269 }
270
271 @Override
272 public int getFileShortcutsCount(
273 long groupId, long folderId, boolean active, int status) {
274
275 return dlFileShortcutPersistence.countByG_F_A_S(
276 groupId, folderId, active, status);
277 }
278
279 @Override
280 public void rebuildTree(long companyId) throws PortalException {
281 dlFolderLocalService.rebuildTree(companyId);
282 }
283
284 @Override
285 public void setTreePaths(final long folderId, final String treePath)
286 throws PortalException {
287
288 if (treePath == null) {
289 throw new IllegalArgumentException("Tree path is null");
290 }
291
292 ActionableDynamicQuery actionableDynamicQuery =
293 getActionableDynamicQuery();
294
295 actionableDynamicQuery.setAddCriteriaMethod(
296 new ActionableDynamicQuery.AddCriteriaMethod() {
297
298 @Override
299 public void addCriteria(DynamicQuery dynamicQuery) {
300 Property folderIdProperty = PropertyFactoryUtil.forName(
301 "folderId");
302
303 dynamicQuery.add(folderIdProperty.eq(folderId));
304
305 Property treePathProperty = PropertyFactoryUtil.forName(
306 "treePath");
307
308 dynamicQuery.add(
309 RestrictionsFactoryUtil.or(
310 treePathProperty.isNull(),
311 treePathProperty.ne(treePath)));
312 }
313
314 });
315
316 actionableDynamicQuery.setPerformActionMethod(
317 new ActionableDynamicQuery.PerformActionMethod<DLFileShortcut>() {
318
319 @Override
320 public void performAction(DLFileShortcut dlFileShortcut) {
321 dlFileShortcut.setTreePath(treePath);
322
323 updateDLFileShortcut(dlFileShortcut);
324 }
325
326 });
327
328 actionableDynamicQuery.performActions();
329 }
330
331 @Override
332 public void updateAsset(
333 long userId, DLFileShortcut fileShortcut, long[] assetCategoryIds,
334 String[] assetTagNames)
335 throws PortalException {
336
337 FileEntry fileEntry = dlAppLocalService.getFileEntry(
338 fileShortcut.getToFileEntryId());
339
340 assetEntryLocalService.updateEntry(
341 userId, fileShortcut.getGroupId(), fileShortcut.getCreateDate(),
342 fileShortcut.getModifiedDate(),
343 DLFileShortcutConstants.getClassName(),
344 fileShortcut.getFileShortcutId(), fileShortcut.getUuid(), 0,
345 assetCategoryIds, assetTagNames, false, null, null, null,
346 fileEntry.getMimeType(), fileEntry.getTitle(),
347 fileEntry.getDescription(), null, null, null, 0, 0, null);
348 }
349
350 @Override
351 public DLFileShortcut updateFileShortcut(
352 long userId, long fileShortcutId, long repositoryId, long folderId,
353 long toFileEntryId, ServiceContext serviceContext)
354 throws PortalException {
355
356
357
358 User user = userPersistence.findByPrimaryKey(userId);
359
360 DLFileShortcut fileShortcut =
361 dlFileShortcutPersistence.findByPrimaryKey(fileShortcutId);
362
363 validate(user, toFileEntryId);
364
365 fileShortcut.setFolderId(folderId);
366 fileShortcut.setToFileEntryId(toFileEntryId);
367 fileShortcut.setTreePath(fileShortcut.buildTreePath());
368
369 dlFileShortcutPersistence.update(fileShortcut);
370
371
372
373 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
374 dlFolderLocalService.updateLastPostDate(
375 folderId, fileShortcut.getModifiedDate());
376 }
377
378
379
380 FileEntry fileEntry = dlAppLocalService.getFileEntry(toFileEntryId);
381
382 copyAssetTags(fileEntry, serviceContext);
383
384 updateAsset(
385 userId, fileShortcut, serviceContext.getAssetCategoryIds(),
386 serviceContext.getAssetTagNames());
387
388 return fileShortcut;
389 }
390
391 @Override
392 public void updateFileShortcuts(
393 long oldToFileEntryId, long newToFileEntryId) {
394
395 List<DLFileShortcut> fileShortcuts =
396 dlFileShortcutPersistence.findByToFileEntryId(oldToFileEntryId);
397
398 for (DLFileShortcut fileShortcut : fileShortcuts) {
399 fileShortcut.setToFileEntryId(newToFileEntryId);
400
401 dlFileShortcutPersistence.update(fileShortcut);
402 }
403 }
404
405 @Override
406 public void updateFileShortcutsActive(long toFileEntryId, boolean active) {
407 List<DLFileShortcut> fileShortcuts =
408 dlFileShortcutPersistence.findByToFileEntryId(toFileEntryId);
409
410 for (DLFileShortcut fileShortcut : fileShortcuts) {
411 fileShortcut.setActive(active);
412
413 dlFileShortcutPersistence.update(fileShortcut);
414 }
415 }
416
417 @Override
418 public void updateStatus(
419 long userId, long fileShortcutId, int status,
420 ServiceContext serviceContext)
421 throws PortalException {
422
423 User user = userPersistence.findByPrimaryKey(userId);
424
425 DLFileShortcut fileShortcut =
426 dlFileShortcutPersistence.findByPrimaryKey(fileShortcutId);
427
428 fileShortcut.setStatus(status);
429 fileShortcut.setStatusByUserId(user.getUserId());
430 fileShortcut.setStatusByUserName(user.getFullName());
431 fileShortcut.setStatusDate(serviceContext.getModifiedDate(null));
432
433 dlFileShortcutPersistence.update(fileShortcut);
434 }
435
436 protected void copyAssetTags(
437 FileEntry fileEntry, ServiceContext serviceContext)
438 throws PortalException {
439
440 String[] assetTagNames = assetTagLocalService.getTagNames(
441 FileEntry.class.getName(), fileEntry.getFileEntryId());
442
443 assetTagLocalService.checkTags(
444 serviceContext.getUserId(), serviceContext.getScopeGroupId(),
445 assetTagNames);
446
447 serviceContext.setAssetTagNames(assetTagNames);
448 }
449
450 protected long getFolderId(long companyId, long folderId) {
451 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
452
453
454
455 DLFolder dlFolder = dlFolderPersistence.fetchByPrimaryKey(folderId);
456
457 if ((dlFolder == null) || (companyId != dlFolder.getCompanyId())) {
458 folderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
459 }
460 }
461
462 return folderId;
463 }
464
465 protected void validate(User user, long toFileEntryId)
466 throws PortalException {
467
468 FileEntry fileEntry = dlAppLocalService.getFileEntry(toFileEntryId);
469
470 if (user.getCompanyId() != fileEntry.getCompanyId()) {
471 throw new NoSuchFileEntryException(
472 "{fileEntryId=" + toFileEntryId + "}");
473 }
474 }
475
476 }