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.DLFileShortcutConstants;
032 import com.liferay.portlet.documentlibrary.model.DLFolder;
033 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
034 import com.liferay.portlet.documentlibrary.service.base.DLFileShortcutLocalServiceBaseImpl;
035
036 import java.util.Date;
037 import java.util.List;
038
039
042 public class DLFileShortcutLocalServiceImpl
043 extends DLFileShortcutLocalServiceBaseImpl {
044
045 @Override
046 public DLFileShortcut addFileShortcut(
047 long userId, long groupId, long repositoryId, long folderId,
048 long toFileEntryId, ServiceContext serviceContext)
049 throws PortalException {
050
051
052
053 User user = userPersistence.findByPrimaryKey(userId);
054 folderId = getFolderId(user.getCompanyId(), folderId);
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.setRepositoryId(repositoryId);
069 fileShortcut.setFolderId(folderId);
070 fileShortcut.setToFileEntryId(toFileEntryId);
071 fileShortcut.setTreePath(fileShortcut.buildTreePath());
072 fileShortcut.setActive(true);
073 fileShortcut.setStatus(WorkflowConstants.STATUS_APPROVED);
074 fileShortcut.setStatusByUserId(userId);
075 fileShortcut.setStatusByUserName(user.getFullName());
076 fileShortcut.setStatusDate(new Date());
077
078 dlFileShortcutPersistence.update(fileShortcut);
079
080
081
082 if (serviceContext.isAddGroupPermissions() ||
083 serviceContext.isAddGuestPermissions()) {
084
085 addFileShortcutResources(
086 fileShortcut, serviceContext.isAddGroupPermissions(),
087 serviceContext.isAddGuestPermissions());
088 }
089 else {
090 addFileShortcutResources(
091 fileShortcut, serviceContext.getGroupPermissions(),
092 serviceContext.getGuestPermissions());
093 }
094
095
096
097 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
098 dlFolderLocalService.updateLastPostDate(
099 folderId, fileShortcut.getModifiedDate());
100 }
101
102
103
104 FileEntry fileEntry = dlAppLocalService.getFileEntry(toFileEntryId);
105
106 copyAssetTags(fileEntry, serviceContext);
107
108 updateAsset(
109 userId, fileShortcut, serviceContext.getAssetCategoryIds(),
110 serviceContext.getAssetTagNames());
111
112 return fileShortcut;
113 }
114
115 @Override
116 public void addFileShortcutResources(
117 DLFileShortcut fileShortcut, boolean addGroupPermissions,
118 boolean addGuestPermissions)
119 throws PortalException {
120
121 resourceLocalService.addResources(
122 fileShortcut.getCompanyId(), fileShortcut.getGroupId(),
123 fileShortcut.getUserId(), DLFileShortcutConstants.getClassName(),
124 fileShortcut.getFileShortcutId(), false, addGroupPermissions,
125 addGuestPermissions);
126 }
127
128 @Override
129 public void addFileShortcutResources(
130 DLFileShortcut fileShortcut, String[] groupPermissions,
131 String[] guestPermissions)
132 throws PortalException {
133
134 resourceLocalService.addModelResources(
135 fileShortcut.getCompanyId(), fileShortcut.getGroupId(),
136 fileShortcut.getUserId(), DLFileShortcutConstants.getClassName(),
137 fileShortcut.getFileShortcutId(), groupPermissions,
138 guestPermissions);
139 }
140
141 @Override
142 public void addFileShortcutResources(
143 long fileShortcutId, boolean addGroupPermissions,
144 boolean addGuestPermissions)
145 throws PortalException {
146
147 DLFileShortcut fileShortcut =
148 dlFileShortcutPersistence.findByPrimaryKey(fileShortcutId);
149
150 addFileShortcutResources(
151 fileShortcut, addGroupPermissions, addGuestPermissions);
152 }
153
154 @Override
155 public void addFileShortcutResources(
156 long fileShortcutId, String[] groupPermissions,
157 String[] guestPermissions)
158 throws PortalException {
159
160 DLFileShortcut fileShortcut =
161 dlFileShortcutPersistence.findByPrimaryKey(fileShortcutId);
162
163 addFileShortcutResources(
164 fileShortcut, groupPermissions, guestPermissions);
165 }
166
167 @Override
168 @SystemEvent(type = SystemEventConstants.TYPE_DELETE)
169 public void deleteFileShortcut(DLFileShortcut fileShortcut)
170 throws PortalException {
171
172
173
174 dlFileShortcutPersistence.remove(fileShortcut);
175
176
177
178 resourceLocalService.deleteResource(
179 fileShortcut.getCompanyId(), DLFileShortcutConstants.getClassName(),
180 ResourceConstants.SCOPE_INDIVIDUAL,
181 fileShortcut.getFileShortcutId());
182
183
184
185 assetEntryLocalService.deleteEntry(
186 DLFileShortcutConstants.getClassName(),
187 fileShortcut.getFileShortcutId());
188
189
190
191 if (fileShortcut.isInTrashExplicitly()) {
192 trashEntryLocalService.deleteEntry(
193 DLFileShortcutConstants.getClassName(),
194 fileShortcut.getFileShortcutId());
195 }
196 else {
197 trashVersionLocalService.deleteTrashVersion(
198 DLFileShortcutConstants.getClassName(),
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(long toFileEntryId) {
276 return dlFileShortcutPersistence.findByToFileEntryId(toFileEntryId);
277 }
278
279 @Override
280 public List<DLFileShortcut> getFileShortcuts(
281 long groupId, long folderId, boolean active, int status, int start,
282 int end) {
283
284 return dlFileShortcutPersistence.findByG_F_A_S(
285 groupId, folderId, active, status, start, end);
286 }
287
288 @Override
289 public int getFileShortcutsCount(
290 long groupId, long folderId, boolean active, int status) {
291
292 return dlFileShortcutPersistence.countByG_F_A_S(
293 groupId, folderId, active, status);
294 }
295
296 @Override
297 public void rebuildTree(long companyId) throws PortalException {
298 dlFolderLocalService.rebuildTree(companyId);
299 }
300
301 @Override
302 public void setTreePaths(final long folderId, final String treePath)
303 throws PortalException {
304
305 ActionableDynamicQuery actionableDynamicQuery =
306 getActionableDynamicQuery();
307
308 actionableDynamicQuery.setAddCriteriaMethod(
309 new ActionableDynamicQuery.AddCriteriaMethod() {
310
311 @Override
312 public void addCriteria(DynamicQuery dynamicQuery) {
313 Property folderIdProperty = PropertyFactoryUtil.forName(
314 "folderId");
315
316 dynamicQuery.add(folderIdProperty.eq(folderId));
317
318 Property treePathProperty = PropertyFactoryUtil.forName(
319 "treePath");
320
321 dynamicQuery.add(treePathProperty.ne(treePath));
322 }
323
324 });
325
326 actionableDynamicQuery.setPerformActionMethod(
327 new ActionableDynamicQuery.PerformActionMethod() {
328
329 @Override
330 public void performAction(Object object) {
331 DLFileShortcut dlFileShortcut = (DLFileShortcut)object;
332
333 dlFileShortcut.setTreePath(treePath);
334
335 updateDLFileShortcut(dlFileShortcut);
336 }
337
338 });
339
340 actionableDynamicQuery.performActions();
341 }
342
343 @Override
344 public void updateAsset(
345 long userId, DLFileShortcut fileShortcut, long[] assetCategoryIds,
346 String[] assetTagNames)
347 throws PortalException {
348
349 FileEntry fileEntry = dlAppLocalService.getFileEntry(
350 fileShortcut.getToFileEntryId());
351
352 assetEntryLocalService.updateEntry(
353 userId, fileShortcut.getGroupId(), fileShortcut.getCreateDate(),
354 fileShortcut.getModifiedDate(),
355 DLFileShortcutConstants.getClassName(),
356 fileShortcut.getFileShortcutId(), fileShortcut.getUuid(), 0,
357 assetCategoryIds, assetTagNames, false, null, null, null,
358 fileEntry.getMimeType(), fileEntry.getTitle(),
359 fileEntry.getDescription(), null, null, null, 0, 0, null);
360 }
361
362 @Override
363 public DLFileShortcut updateFileShortcut(
364 long userId, long fileShortcutId, long repositoryId, long folderId,
365 long toFileEntryId, ServiceContext serviceContext)
366 throws PortalException {
367
368
369
370 User user = userPersistence.findByPrimaryKey(userId);
371
372 DLFileShortcut fileShortcut =
373 dlFileShortcutPersistence.findByPrimaryKey(fileShortcutId);
374
375 validate(user, toFileEntryId);
376
377 fileShortcut.setFolderId(folderId);
378 fileShortcut.setToFileEntryId(toFileEntryId);
379 fileShortcut.setTreePath(fileShortcut.buildTreePath());
380
381 dlFileShortcutPersistence.update(fileShortcut);
382
383
384
385 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
386 dlFolderLocalService.updateLastPostDate(
387 folderId, fileShortcut.getModifiedDate());
388 }
389
390
391
392 FileEntry fileEntry = dlAppLocalService.getFileEntry(toFileEntryId);
393
394 copyAssetTags(fileEntry, serviceContext);
395
396 updateAsset(
397 userId, fileShortcut, serviceContext.getAssetCategoryIds(),
398 serviceContext.getAssetTagNames());
399
400 return fileShortcut;
401 }
402
403 @Override
404 public void updateFileShortcuts(
405 long oldToFileEntryId, long newToFileEntryId) {
406
407 List<DLFileShortcut> fileShortcuts =
408 dlFileShortcutPersistence.findByToFileEntryId(oldToFileEntryId);
409
410 for (DLFileShortcut fileShortcut : fileShortcuts) {
411 fileShortcut.setToFileEntryId(newToFileEntryId);
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 }