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