2 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
\r
4 * This library is free software; you can redistribute it and/or modify it under
\r
5 * the terms of the GNU Lesser General Public License as published by the Free
\r
6 * Software Foundation; either version 2.1 of the License, or (at your option)
\r
9 * This library is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
\r
15 package com.liferay.portlet.documentlibrary.service.impl;
\r
17 import com.liferay.portal.ExpiredLockException;
\r
18 import com.liferay.portal.InvalidLockException;
\r
19 import com.liferay.portal.NoSuchLockException;
\r
20 import com.liferay.portal.NoSuchModelException;
\r
21 import com.liferay.portal.kernel.exception.PortalException;
\r
22 import com.liferay.portal.kernel.exception.SystemException;
\r
23 import com.liferay.portal.kernel.image.ImageBag;
\r
24 import com.liferay.portal.kernel.image.ImageToolUtil;
\r
25 import com.liferay.portal.kernel.log.Log;
\r
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
\r
27 import com.liferay.portal.kernel.search.Indexable;
\r
28 import com.liferay.portal.kernel.search.IndexableType;
\r
29 import com.liferay.portal.kernel.search.Indexer;
\r
30 import com.liferay.portal.kernel.search.IndexerRegistryUtil;
\r
31 import com.liferay.portal.kernel.search.SearchException;
\r
32 import com.liferay.portal.kernel.util.GetterUtil;
\r
33 import com.liferay.portal.kernel.util.OrderByComparator;
\r
34 import com.liferay.portal.kernel.util.ParamUtil;
\r
35 import com.liferay.portal.kernel.util.PropsKeys;
\r
36 import com.liferay.portal.kernel.util.StringBundler;
\r
37 import com.liferay.portal.kernel.util.StringPool;
\r
38 import com.liferay.portal.kernel.util.StringUtil;
\r
39 import com.liferay.portal.kernel.util.UnicodeProperties;
\r
40 import com.liferay.portal.kernel.util.Validator;
\r
41 import com.liferay.portal.kernel.workflow.WorkflowConstants;
\r
42 import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil;
\r
43 import com.liferay.portal.model.Image;
\r
44 import com.liferay.portal.model.Lock;
\r
45 import com.liferay.portal.model.ResourceConstants;
\r
46 import com.liferay.portal.model.User;
\r
47 import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
\r
48 import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
\r
49 import com.liferay.portal.security.auth.PrincipalThreadLocal;
\r
50 import com.liferay.portal.service.ServiceContext;
\r
51 import com.liferay.portal.util.PortalUtil;
\r
52 import com.liferay.portal.util.PrefsPropsUtil;
\r
53 import com.liferay.portal.util.PropsValues;
\r
54 import com.liferay.portlet.documentlibrary.DuplicateFileException;
\r
55 import com.liferay.portlet.documentlibrary.DuplicateFolderNameException;
\r
56 import com.liferay.portlet.documentlibrary.FileNameException;
\r
57 import com.liferay.portlet.documentlibrary.ImageSizeException;
\r
58 import com.liferay.portlet.documentlibrary.InvalidFileEntryTypeException;
\r
59 import com.liferay.portlet.documentlibrary.InvalidFileVersionException;
\r
60 import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
\r
61 import com.liferay.portlet.documentlibrary.NoSuchFileEntryMetadataException;
\r
62 import com.liferay.portlet.documentlibrary.NoSuchFileVersionException;
\r
63 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
\r
64 import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
\r
65 import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
\r
66 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
\r
67 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
\r
68 import com.liferay.portlet.documentlibrary.model.DLFolder;
\r
69 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
\r
70 import com.liferay.portlet.documentlibrary.model.DLSyncConstants;
\r
71 import com.liferay.portlet.documentlibrary.model.impl.DLFileEntryImpl;
\r
72 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
\r
73 import com.liferay.portlet.documentlibrary.service.base.DLFileEntryLocalServiceBaseImpl;
\r
74 import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
\r
75 import com.liferay.portlet.documentlibrary.util.DLAppUtil;
\r
76 import com.liferay.portlet.documentlibrary.util.DLUtil;
\r
77 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelModifiedDateComparator;
\r
78 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
\r
79 import com.liferay.portlet.dynamicdatamapping.storage.Fields;
\r
80 import com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil;
\r
81 import com.liferay.portlet.expando.model.ExpandoBridge;
\r
82 import com.liferay.portlet.expando.model.ExpandoColumnConstants;
\r
83 import com.pentila.entSavoie.cartable.model.DlLink;
\r
84 import com.pentila.entSavoie.cartable.service.DlLinkLocalServiceUtil;
\r
85 import com.pentila.entSavoie.service.DiskUsageUserLocalServiceUtil;
\r
86 import com.pentila.entSavoie.utils.DLEntryUtil;
\r
88 import java.awt.image.RenderedImage;
\r
89 import java.io.File;
\r
90 import java.io.IOException;
\r
91 import java.io.InputStream;
\r
92 import java.io.Serializable;
\r
93 import java.util.Date;
\r
94 import java.util.HashMap;
\r
95 import java.util.List;
\r
96 import java.util.Map;
\r
99 * The document library file entry local service.
\r
102 * Due to legacy code, the names of some file entry properties are not
\r
103 * intuitive. Each file entry has both a name and title. The <code>name</code>
\r
104 * is a unique identifier for a given file and is generally numeric, whereas the
\r
105 * <code>title</code> is the actual name specified by the user (such as
\r
106 * "Budget.xls").
\r
109 * @author Brian Wing Shun Chan
\r
110 * @author Harry Mark
\r
111 * @author Alexander Chow
\r
113 public class DLFileEntryLocalServiceImpl
\r
114 extends DLFileEntryLocalServiceBaseImpl {
\r
116 public DLFileEntry addFileEntry(
\r
117 long userId, long groupId, long repositoryId, long folderId,
\r
118 String sourceFileName, String mimeType, String title,
\r
119 String description, String changeLog, long fileEntryTypeId,
\r
120 Map<String, Fields> fieldsMap, File file, InputStream is, long size,
\r
121 ServiceContext serviceContext)
\r
122 throws PortalException, SystemException {
\r
124 if (Validator.isNull(title)) {
\r
126 throw new FileNameException();
\r
129 title = sourceFileName;
\r
135 User user = userPersistence.findByPrimaryKey(userId);
\r
136 folderId = dlFolderLocalService.getFolderId(
\r
137 user.getCompanyId(), folderId);
\r
138 String name = String.valueOf(
\r
139 counterLocalService.increment(DLFileEntry.class.getName()));
\r
140 String extension = DLAppUtil.getExtension(title, sourceFileName);
\r
141 fileEntryTypeId = getFileEntryTypeId(
\r
142 DLUtil.getGroupIds(groupId), folderId, fileEntryTypeId);
\r
143 Date now = new Date();
\r
146 groupId, folderId, 0, title, extension, sourceFileName, file, is);
\r
148 long fileEntryId = counterLocalService.increment();
\r
150 DLFileEntry dlFileEntry = dlFileEntryPersistence.create(fileEntryId);
\r
152 dlFileEntry.setUuid(serviceContext.getUuid());
\r
153 dlFileEntry.setGroupId(groupId);
\r
154 dlFileEntry.setCompanyId(user.getCompanyId());
\r
155 dlFileEntry.setUserId(user.getUserId());
\r
156 dlFileEntry.setUserName(user.getFullName());
\r
157 dlFileEntry.setVersionUserId(user.getUserId());
\r
158 dlFileEntry.setVersionUserName(user.getFullName());
\r
159 dlFileEntry.setCreateDate(serviceContext.getCreateDate(now));
\r
160 dlFileEntry.setModifiedDate(serviceContext.getModifiedDate(now));
\r
161 dlFileEntry.setRepositoryId(repositoryId);
\r
162 dlFileEntry.setFolderId(folderId);
\r
163 dlFileEntry.setName(name);
\r
164 dlFileEntry.setExtension(extension);
\r
165 dlFileEntry.setMimeType(mimeType);
\r
166 dlFileEntry.setTitle(title);
\r
167 dlFileEntry.setDescription(description);
\r
168 dlFileEntry.setFileEntryTypeId(fileEntryTypeId);
\r
169 dlFileEntry.setVersion(DLFileEntryConstants.VERSION_DEFAULT);
\r
170 dlFileEntry.setSize(size);
\r
171 dlFileEntry.setReadCount(DLFileEntryConstants.DEFAULT_READ_COUNT);
\r
173 dlFileEntryPersistence.update(dlFileEntry, false);
\r
177 DLFileVersion dlFileVersion = addFileVersion(
\r
178 user, dlFileEntry, serviceContext.getModifiedDate(now), extension,
\r
179 mimeType, title, description, null, StringPool.BLANK,
\r
180 fileEntryTypeId, fieldsMap, DLFileEntryConstants.VERSION_DEFAULT,
\r
181 size, WorkflowConstants.STATUS_DRAFT, serviceContext);
\r
183 dlFileEntry.setFileVersion(dlFileVersion);
\r
187 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
\r
188 dlFolderLocalService.updateLastPostDate(
\r
189 dlFileEntry.getFolderId(), dlFileEntry.getModifiedDate());
\r
194 if (file != null) {
\r
195 DLStoreUtil.addFile(
\r
196 user.getCompanyId(), dlFileEntry.getDataRepositoryId(), name,
\r
200 DLStoreUtil.addFile(
\r
201 user.getCompanyId(), dlFileEntry.getDataRepositoryId(), name,
\r
205 return dlFileEntry;
\r
208 public void addFileEntryResources(
\r
209 DLFileEntry dlFileEntry, boolean addGroupPermissions,
\r
210 boolean addGuestPermissions)
\r
211 throws PortalException, SystemException {
\r
213 resourceLocalService.addResources(
\r
214 dlFileEntry.getCompanyId(), dlFileEntry.getGroupId(),
\r
215 dlFileEntry.getUserId(), DLFileEntry.class.getName(),
\r
216 dlFileEntry.getFileEntryId(), false, addGroupPermissions,
\r
217 addGuestPermissions);
\r
220 public void addFileEntryResources(
\r
221 DLFileEntry dlFileEntry, String[] groupPermissions,
\r
222 String[] guestPermissions)
\r
223 throws PortalException, SystemException {
\r
225 resourceLocalService.addModelResources(
\r
226 dlFileEntry.getCompanyId(), dlFileEntry.getGroupId(),
\r
227 dlFileEntry.getUserId(), DLFileEntry.class.getName(),
\r
228 dlFileEntry.getFileEntryId(), groupPermissions, guestPermissions);
\r
231 public DLFileVersion cancelCheckOut(long userId, long fileEntryId)
\r
232 throws PortalException, SystemException {
\r
234 if (!isFileEntryCheckedOut(fileEntryId)) {
\r
238 if (!hasFileEntryLock(userId, fileEntryId)) {
\r
239 lockFileEntry(userId, fileEntryId);
\r
242 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
245 DLFileVersion dlFileVersion =
\r
246 dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);
\r
248 dlFileVersionPersistence.remove(dlFileVersion);
\r
251 DLStoreUtil.deleteFile(
\r
252 dlFileEntry.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
253 dlFileEntry.getName(),
\r
254 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION);
\r
256 catch (NoSuchModelException nsme) {
\r
259 lockLocalService.unlock(DLFileEntry.class.getName(), fileEntryId);
\r
261 return dlFileVersion;
\r
264 public void checkInFileEntry(
\r
265 long userId, long fileEntryId, boolean majorVersion,
\r
266 String changeLog, ServiceContext serviceContext)
\r
267 throws PortalException, SystemException {
\r
269 if (!isFileEntryCheckedOut(fileEntryId)) {
\r
273 if (!hasFileEntryLock(userId, fileEntryId)) {
\r
274 lockFileEntry(userId, fileEntryId);
\r
277 User user = userPersistence.findByPrimaryKey(userId);
\r
278 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
281 String version = getNextVersion(
\r
282 dlFileEntry, majorVersion, serviceContext.getWorkflowAction());
\r
284 DLFileVersion dlFileVersion =
\r
285 dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);
\r
287 dlFileVersion.setVersion(version);
\r
288 dlFileVersion.setChangeLog(changeLog);
\r
290 dlFileVersionPersistence.update(dlFileVersion, false);
\r
294 if (dlFileEntry.getFolderId() !=
\r
295 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
\r
297 dlFolderLocalService.updateLastPostDate(
\r
298 dlFileEntry.getFolderId(), dlFileEntry.getModifiedDate());
\r
303 // MIGRATION MODIFICATION
\r
305 DLStoreUtil.updateFileVersion(
\r
306 user.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
307 dlFileEntry.getName(),
\r
308 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION, version);
\r
310 catch (DuplicateFileException dfe) {
\r
311 // Suppression de la version existante
\r
312 DLStoreUtil.deleteFile(user.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
313 dlFileEntry.getName(), version);
\r
315 // Maj de la version courante
\r
316 DLStoreUtil.updateFileVersion(
\r
317 user.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
318 dlFileEntry.getName(),
\r
319 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION, version);
\r
322 if (serviceContext.getWorkflowAction() ==
\r
323 WorkflowConstants.ACTION_PUBLISH) {
\r
325 startWorkflowInstance(
\r
326 userId, serviceContext, dlFileVersion,
\r
327 DLSyncConstants.EVENT_UPDATE);
\r
330 lockLocalService.unlock(DLFileEntry.class.getName(), fileEntryId);
\r
333 public void checkInFileEntry(long userId, long fileEntryId, String lockUuid)
\r
334 throws PortalException, SystemException {
\r
336 if (Validator.isNotNull(lockUuid)) {
\r
338 Lock lock = lockLocalService.getLock(
\r
339 DLFileEntry.class.getName(), fileEntryId);
\r
341 if (!lock.getUuid().equals(lockUuid)) {
\r
342 throw new InvalidLockException("UUIDs do not match");
\r
345 catch (PortalException pe) {
\r
346 if ((pe instanceof ExpiredLockException) ||
\r
347 (pe instanceof NoSuchLockException)) {
\r
356 userId, fileEntryId, false, StringPool.BLANK, new ServiceContext());
\r
360 * @deprecated {@link #checkOutFileEntry(long, long, ServiceContext)}
\r
362 public DLFileEntry checkOutFileEntry(long userId, long fileEntryId)
\r
363 throws PortalException, SystemException {
\r
365 return checkOutFileEntry(userId, fileEntryId, new ServiceContext());
\r
368 public DLFileEntry checkOutFileEntry(
\r
369 long userId, long fileEntryId, ServiceContext serviceContext)
\r
370 throws PortalException, SystemException {
\r
372 return checkOutFileEntry(
\r
373 userId, fileEntryId, StringPool.BLANK,
\r
374 DLFileEntryImpl.LOCK_EXPIRATION_TIME, serviceContext);
\r
378 * @deprecated {@link #checkOutFileEntry(long, long, String, long,
\r
381 public DLFileEntry checkOutFileEntry(
\r
382 long userId, long fileEntryId, String owner, long expirationTime)
\r
383 throws PortalException, SystemException {
\r
385 return checkOutFileEntry(
\r
386 userId, fileEntryId, owner, expirationTime, new ServiceContext());
\r
389 public DLFileEntry checkOutFileEntry(
\r
390 long userId, long fileEntryId, String owner, long expirationTime,
\r
391 ServiceContext serviceContext)
\r
392 throws PortalException, SystemException {
\r
394 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
397 boolean hasLock = hasFileEntryLock(userId, fileEntryId);
\r
400 if ((expirationTime <= 0) ||
\r
401 (expirationTime > DLFileEntryImpl.LOCK_EXPIRATION_TIME)) {
\r
403 expirationTime = DLFileEntryImpl.LOCK_EXPIRATION_TIME;
\r
406 lockLocalService.lock(
\r
407 userId, DLFileEntry.class.getName(), fileEntryId, owner, false,
\r
411 User user = userPersistence.findByPrimaryKey(userId);
\r
413 serviceContext.setCompanyId(user.getCompanyId());
\r
414 serviceContext.setUserId(userId);
\r
416 dlFileEntryPersistence.update(dlFileEntry, false);
\r
418 DLFileVersion dlFileVersion =
\r
419 dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);
\r
421 long dlFileVersionId = dlFileVersion.getFileVersionId();
\r
423 String version = dlFileVersion.getVersion();
\r
425 if (!version.equals(
\r
426 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {
\r
428 long existingDLFileVersionId = ParamUtil.getLong(
\r
429 serviceContext, "existingDLFileVersionId");
\r
431 if (existingDLFileVersionId > 0) {
\r
432 DLFileVersion existingDLFileVersion =
\r
433 dlFileVersionPersistence.findByPrimaryKey(
\r
434 existingDLFileVersionId);
\r
436 dlFileVersion = updateFileVersion(
\r
437 user, existingDLFileVersion, null,
\r
438 existingDLFileVersion.getExtension(),
\r
439 existingDLFileVersion.getMimeType(),
\r
440 existingDLFileVersion.getTitle(),
\r
441 existingDLFileVersion.getDescription(),
\r
442 existingDLFileVersion.getChangeLog(),
\r
443 existingDLFileVersion.getExtraSettings(),
\r
444 existingDLFileVersion.getFileEntryTypeId(), null,
\r
445 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION,
\r
446 existingDLFileVersion.getSize(),
\r
447 WorkflowConstants.STATUS_DRAFT, new Date(), serviceContext);
\r
450 dlFileVersion = addFileVersion(
\r
451 user, dlFileEntry, new Date(), dlFileVersion.getExtension(),
\r
452 dlFileVersion.getMimeType(), dlFileVersion.getTitle(),
\r
453 dlFileVersion.getDescription(),
\r
454 dlFileVersion.getChangeLog(),
\r
455 dlFileVersion.getExtraSettings(),
\r
456 dlFileVersion.getFileEntryTypeId(), null,
\r
457 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION,
\r
458 dlFileVersion.getSize(), WorkflowConstants.STATUS_DRAFT,
\r
463 DLStoreUtil.deleteFile(
\r
464 dlFileEntry.getCompanyId(),
\r
465 dlFileEntry.getDataRepositoryId(), dlFileEntry.getName(),
\r
466 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION);
\r
468 catch (NoSuchModelException nsme) {
\r
471 DLStoreUtil.copyFileVersion(
\r
472 user.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
473 dlFileEntry.getName(), version,
\r
474 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION);
\r
476 copyFileEntryMetadata(
\r
477 dlFileEntry.getCompanyId(), dlFileVersion.getFileEntryTypeId(),
\r
478 fileEntryId, dlFileVersionId, dlFileVersion.getFileVersionId(),
\r
482 return dlFileEntry;
\r
485 public void convertExtraSettings(String[] keys)
\r
486 throws PortalException, SystemException {
\r
488 int count = dlFileEntryFinder.countByExtraSettings();
\r
490 int pages = count / Indexer.DEFAULT_INTERVAL;
\r
492 for (int i = 0; i <= pages; i++) {
\r
493 int start = (i * Indexer.DEFAULT_INTERVAL);
\r
494 int end = start + Indexer.DEFAULT_INTERVAL;
\r
496 List<DLFileEntry> dlFileEntries =
\r
497 dlFileEntryFinder.findByExtraSettings(start, end);
\r
499 for (DLFileEntry dlFileEntry : dlFileEntries) {
\r
500 convertExtraSettings(dlFileEntry, keys);
\r
505 public void copyFileEntryMetadata(
\r
506 long companyId, long fileEntryTypeId, long fileEntryId,
\r
507 long fromFileVersionId, long toFileVersionId,
\r
508 ServiceContext serviceContext)
\r
509 throws PortalException, SystemException {
\r
511 Map<String, Fields> fieldsMap = new HashMap<String, Fields>();
\r
513 List<DDMStructure> ddmStructures = null;
\r
515 if (fileEntryTypeId > 0) {
\r
516 DLFileEntryType dlFileEntryType =
\r
517 dlFileEntryTypeLocalService.getFileEntryType(fileEntryTypeId);
\r
519 ddmStructures = dlFileEntryType.getDDMStructures();
\r
521 for (DDMStructure ddmStructure : ddmStructures) {
\r
523 DLFileEntryMetadata dlFileEntryMetadata =
\r
524 dlFileEntryMetadataLocalService.getFileEntryMetadata(
\r
525 ddmStructure.getStructureId(), fromFileVersionId);
\r
527 Fields fields = StorageEngineUtil.getFields(
\r
528 dlFileEntryMetadata.getDDMStorageId());
\r
530 fieldsMap.put(ddmStructure.getStructureKey(), fields);
\r
532 catch (NoSuchFileEntryMetadataException nsfeme) {
\r
536 dlFileEntryMetadataLocalService.updateFileEntryMetadata(
\r
537 companyId, ddmStructures, fileEntryTypeId, fileEntryId,
\r
538 toFileVersionId, fieldsMap, serviceContext);
\r
541 long classNameId = PortalUtil.getClassNameId(DLFileEntry.class);
\r
543 ddmStructures = ddmStructureLocalService.getClassStructures(
\r
546 for (DDMStructure ddmStructure : ddmStructures) {
\r
548 DLFileEntryMetadata fileEntryMetadata =
\r
549 dlFileEntryMetadataLocalService.getFileEntryMetadata(
\r
550 ddmStructure.getStructureId(), fromFileVersionId);
\r
552 Fields fields = StorageEngineUtil.getFields(
\r
553 fileEntryMetadata.getDDMStorageId());
\r
555 fieldsMap.put(ddmStructure.getStructureKey(), fields);
\r
557 catch (NoSuchFileEntryMetadataException nsfeme) {
\r
561 dlFileEntryMetadataLocalService.updateFileEntryMetadata(
\r
562 companyId, ddmStructures, fileEntryTypeId, fileEntryId,
\r
563 toFileVersionId, fieldsMap, serviceContext);
\r
566 public void deleteFileEntries(long groupId, long folderId)
\r
567 throws PortalException, SystemException {
\r
569 int count = dlFileEntryPersistence.countByG_F(groupId, folderId);
\r
571 int pages = count / _DELETE_INTERVAL;
\r
573 for (int i = 0; i <= pages; i++) {
\r
574 int start = (i * _DELETE_INTERVAL);
\r
575 int end = start + _DELETE_INTERVAL;
\r
577 List<DLFileEntry> dlFileEntries = dlFileEntryPersistence.findByG_F(
\r
578 groupId, folderId, start, end);
\r
580 for (DLFileEntry dlFileEntry : dlFileEntries) {
\r
581 dlAppHelperLocalService.deleteFileEntry(
\r
582 new LiferayFileEntry(dlFileEntry));
\r
584 deleteFileEntry(dlFileEntry);
\r
589 public void deleteFileEntry(long fileEntryId)
\r
590 throws PortalException, SystemException {
\r
592 DLFileEntry dlFileEntry = getFileEntry(fileEntryId);
\r
594 deleteFileEntry(dlFileEntry);
\r
597 public void deleteFileEntry(long userId, long fileEntryId)
\r
598 throws PortalException, SystemException {
\r
600 if (!hasFileEntryLock(userId, fileEntryId)) {
\r
601 lockFileEntry(userId, fileEntryId);
\r
605 deleteFileEntry(fileEntryId);
\r
608 unlockFileEntry(fileEntryId);
\r
612 @Indexable(type = IndexableType.DELETE)
\r
613 public void deleteFileVersion(long userId, long fileEntryId, String version)
\r
614 throws PortalException, SystemException {
\r
616 if (Validator.isNull(version) ||
\r
617 version.equals(DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {
\r
619 throw new InvalidFileVersionException();
\r
622 if (!hasFileEntryLock(userId, fileEntryId)) {
\r
623 lockFileEntry(userId, fileEntryId);
\r
627 DLFileVersion dlFileVersion = dlFileVersionPersistence.findByF_V(
\r
628 fileEntryId, version);
\r
630 if (!dlFileVersion.isApproved()) {
\r
631 throw new InvalidFileVersionException(
\r
632 "Cannot delete an unapproved file version");
\r
635 int count = dlFileVersionPersistence.countByF_S(
\r
636 fileEntryId, WorkflowConstants.STATUS_APPROVED);
\r
639 throw new InvalidFileVersionException(
\r
640 "Cannot delete the only approved file version");
\r
644 dlFileVersionPersistence.remove(dlFileVersion);
\r
646 expandoValueLocalService.deleteValues(
\r
647 DLFileVersion.class.getName(),
\r
648 dlFileVersion.getFileVersionId());
\r
650 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
653 if (version.equals(dlFileEntry.getVersion())) {
\r
655 DLFileVersion dlLatestFileVersion =
\r
656 dlFileVersionLocalService.getLatestFileVersion(
\r
657 dlFileEntry.getFileEntryId(), true);
\r
659 dlFileEntry.setVersionUserId(
\r
660 dlLatestFileVersion.getUserId());
\r
661 dlFileEntry.setVersionUserName(
\r
662 dlLatestFileVersion.getUserName());
\r
663 dlFileEntry.setModifiedDate(
\r
664 dlLatestFileVersion.getCreateDate());
\r
665 dlFileEntry.setExtension(
\r
666 dlLatestFileVersion.getExtension());
\r
667 dlFileEntry.setTitle(dlLatestFileVersion.getTitle());
\r
668 dlFileEntry.setDescription(
\r
669 dlLatestFileVersion.getDescription());
\r
670 dlFileEntry.setExtraSettings(
\r
671 dlLatestFileVersion.getExtraSettings());
\r
672 dlFileEntry.setFileEntryTypeId(
\r
673 dlLatestFileVersion.getFileEntryTypeId());
\r
674 dlFileEntry.setVersion(dlLatestFileVersion.getVersion());
\r
675 dlFileEntry.setSize(dlLatestFileVersion.getSize());
\r
677 dlFileEntryPersistence.update(dlFileEntry, false);
\r
679 catch (NoSuchFileVersionException nsfve) {
\r
684 DLStoreUtil.deleteFile(
\r
685 dlFileEntry.getCompanyId(),
\r
686 dlFileEntry.getDataRepositoryId(), dlFileEntry.getName(),
\r
689 catch (NoSuchModelException nsme) {
\r
693 unlockFileEntry(fileEntryId);
\r
697 public DLFileEntry fetchFileEntryByAnyImageId(long imageId)
\r
698 throws SystemException {
\r
700 return dlFileEntryFinder.fetchByAnyImageId(imageId);
\r
703 public List<DLFileEntry> getExtraSettingsFileEntries(int start, int end)
\r
704 throws SystemException {
\r
706 return dlFileEntryFinder.findByExtraSettings(start, end);
\r
709 public File getFile(
\r
710 long userId, long fileEntryId, String version,
\r
711 boolean incrementCounter)
\r
712 throws PortalException, SystemException {
\r
714 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
717 if (PropsValues.DL_FILE_ENTRY_READ_COUNT_ENABLED && incrementCounter) {
\r
718 dlFileEntry.setReadCount(dlFileEntry.getReadCount() + 1);
\r
720 dlFileEntryPersistence.update(dlFileEntry, false);
\r
723 dlAppHelperLocalService.getFileAsStream(
\r
724 userId, new LiferayFileEntry(dlFileEntry), incrementCounter);
\r
726 return DLStoreUtil.getFile(
\r
727 dlFileEntry.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
728 dlFileEntry.getName(), version);
\r
731 public InputStream getFileAsStream(
\r
732 long userId, long fileEntryId, String version)
\r
733 throws PortalException, SystemException {
\r
735 return getFileAsStream(userId, fileEntryId, version, true);
\r
738 public InputStream getFileAsStream(
\r
739 long userId, long fileEntryId, String version,
\r
740 boolean incrementCounter)
\r
741 throws PortalException, SystemException {
\r
743 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
746 if (PropsValues.DL_FILE_ENTRY_READ_COUNT_ENABLED && incrementCounter) {
\r
747 dlFileEntry.setReadCount(dlFileEntry.getReadCount() + 1);
\r
749 dlFileEntryPersistence.update(dlFileEntry, false);
\r
752 dlAppHelperLocalService.getFileAsStream(
\r
753 userId, new LiferayFileEntry(dlFileEntry), incrementCounter);
\r
755 return DLStoreUtil.getFileAsStream(
\r
756 dlFileEntry.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
757 dlFileEntry.getName(), version);
\r
760 public List<DLFileEntry> getFileEntries(int start, int end)
\r
761 throws SystemException {
\r
763 return dlFileEntryPersistence.findAll(start, end);
\r
766 public List<DLFileEntry> getFileEntries(
\r
767 long groupId, long folderId, int start, int end,
\r
768 OrderByComparator obc)
\r
769 throws SystemException {
\r
771 return dlFileEntryPersistence.findByG_F(
\r
772 groupId, folderId, start, end, obc);
\r
775 public List<DLFileEntry> getFileEntriesByMimeType(String mimeType)
\r
776 throws SystemException {
\r
778 return dlFileEntryPersistence.findByMimeType(mimeType);
\r
781 public int getFileEntriesCount() throws SystemException {
\r
782 return dlFileEntryPersistence.countAll();
\r
785 public int getFileEntriesCount(long groupId, long folderId)
\r
786 throws SystemException {
\r
788 return dlFileEntryPersistence.countByG_F(groupId, folderId);
\r
791 public DLFileEntry getFileEntry(long fileEntryId)
\r
792 throws PortalException, SystemException {
\r
794 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
797 setFileVersion(dlFileEntry);
\r
799 return dlFileEntry;
\r
802 public DLFileEntry getFileEntry(long groupId, long folderId, String title)
\r
803 throws PortalException, SystemException {
\r
805 DLFileEntry dlFileEntry = dlFileEntryPersistence.fetchByG_F_T(
\r
806 groupId, folderId, title);
\r
808 if (dlFileEntry != null) {
\r
809 setFileVersion(dlFileEntry);
\r
811 return dlFileEntry;
\r
814 List<DLFileVersion> dlFileVersions =
\r
815 dlFileVersionPersistence.findByG_F_T_V(
\r
816 groupId, folderId, title,
\r
817 DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION);
\r
819 long userId = PrincipalThreadLocal.getUserId();
\r
821 for (DLFileVersion dlFileVersion : dlFileVersions) {
\r
822 if (hasFileEntryLock(userId, dlFileVersion.getFileEntryId())) {
\r
823 return dlFileVersion.getFileEntry();
\r
827 StringBundler sb = new StringBundler(8);
\r
829 sb.append("No DLFileEntry exists with the key {");
\r
830 sb.append("groupId=");
\r
831 sb.append(groupId);
\r
832 sb.append(", folderId=");
\r
833 sb.append(folderId);
\r
834 sb.append(", title=");
\r
836 sb.append(StringPool.CLOSE_CURLY_BRACE);
\r
838 if (_log.isWarnEnabled()) {
\r
839 _log.warn(sb.toString());
\r
842 throw new NoSuchFileEntryException(sb.toString());
\r
845 public DLFileEntry getFileEntryByName(
\r
846 long groupId, long folderId, String name)
\r
847 throws PortalException, SystemException {
\r
849 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByG_F_N(
\r
850 groupId, folderId, name);
\r
852 setFileVersion(dlFileEntry);
\r
854 return dlFileEntry;
\r
857 public DLFileEntry getFileEntryByUuidAndGroupId(String uuid, long groupId)
\r
858 throws PortalException, SystemException {
\r
860 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByUUID_G(
\r
863 setFileVersion(dlFileEntry);
\r
865 return dlFileEntry;
\r
868 public List<DLFileEntry> getGroupFileEntries(
\r
869 long groupId, int start, int end)
\r
870 throws SystemException {
\r
872 return getGroupFileEntries(
\r
873 groupId, start, end, new RepositoryModelModifiedDateComparator());
\r
876 public List<DLFileEntry> getGroupFileEntries(
\r
877 long groupId, int start, int end, OrderByComparator obc)
\r
878 throws SystemException {
\r
880 return dlFileEntryPersistence.findByGroupId(groupId, start, end, obc);
\r
883 public List<DLFileEntry> getGroupFileEntries(
\r
884 long groupId, long userId, int start, int end)
\r
885 throws SystemException {
\r
887 return getGroupFileEntries(
\r
888 groupId, userId, start, end,
\r
889 new RepositoryModelModifiedDateComparator());
\r
892 public List<DLFileEntry> getGroupFileEntries(
\r
893 long groupId, long userId, int start, int end,
\r
894 OrderByComparator obc)
\r
895 throws SystemException {
\r
898 return dlFileEntryPersistence.findByGroupId(
\r
899 groupId, start, end, obc);
\r
902 return dlFileEntryPersistence.findByG_U(
\r
903 groupId, userId, start, end, obc);
\r
907 public int getGroupFileEntriesCount(long groupId) throws SystemException {
\r
908 return dlFileEntryPersistence.countByGroupId(groupId);
\r
911 public int getGroupFileEntriesCount(long groupId, long userId)
\r
912 throws SystemException {
\r
915 return dlFileEntryPersistence.countByGroupId(groupId);
\r
918 return dlFileEntryPersistence.countByG_U(groupId, userId);
\r
922 public List<DLFileEntry> getMisversionedFileEntries()
\r
923 throws SystemException {
\r
925 return dlFileEntryFinder.findByMisversioned();
\r
928 public List<DLFileEntry> getNoAssetFileEntries() throws SystemException {
\r
929 return dlFileEntryFinder.findByNoAssets();
\r
932 public List<DLFileEntry> getOrphanedFileEntries() throws SystemException {
\r
933 return dlFileEntryFinder.findByOrphanedFileEntries();
\r
936 public boolean hasExtraSettings() throws SystemException {
\r
937 if (dlFileEntryFinder.countByExtraSettings() > 0) {
\r
945 public boolean hasFileEntryLock(long userId, long fileEntryId)
\r
946 throws PortalException, SystemException {
\r
948 DLFileEntry dlFileEntry = getFileEntry(fileEntryId);
\r
950 long folderId = dlFileEntry.getFolderId();
\r
952 boolean hasLock = lockLocalService.hasLock(
\r
953 userId, DLFileEntry.class.getName(), fileEntryId);
\r
956 (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)) {
\r
958 hasLock = dlFolderService.hasInheritableLock(folderId);
\r
964 public boolean isFileEntryCheckedOut(long fileEntryId)
\r
965 throws PortalException, SystemException {
\r
967 DLFileVersion dlFileVersion =
\r
968 dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);
\r
970 String version = dlFileVersion.getVersion();
\r
972 if (version.equals(DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {
\r
980 public DLFileEntry moveFileEntry(
\r
981 long userId, long fileEntryId, long newFolderId,
\r
982 ServiceContext serviceContext)
\r
983 throws PortalException, SystemException {
\r
985 if (!hasFileEntryLock(userId, fileEntryId)) {
\r
986 lockFileEntry(userId, fileEntryId);
\r
990 DLFileEntry dlFileEntry = moveFileEntryImpl(
\r
991 userId, fileEntryId, newFolderId, serviceContext);
\r
993 dlAppHelperLocalService.moveFileEntry(
\r
994 new LiferayFileEntry(dlFileEntry));
\r
996 return dlFileEntryTypeLocalService.updateFileEntryFileEntryType(
\r
997 dlFileEntry, serviceContext);
\r
1000 if (!isFileEntryCheckedOut(fileEntryId)) {
\r
1001 unlockFileEntry(fileEntryId);
\r
1006 public void revertFileEntry(
\r
1007 long userId, long fileEntryId, String version,
\r
1008 ServiceContext serviceContext)
\r
1009 throws PortalException, SystemException {
\r
1011 if (Validator.isNull(version) ||
\r
1012 version.equals(DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {
\r
1014 throw new InvalidFileVersionException();
\r
1017 DLFileVersion dlFileVersion = dlFileVersionLocalService.getFileVersion(
\r
1018 fileEntryId, version);
\r
1020 if (!dlFileVersion.isApproved()) {
\r
1021 throw new InvalidFileVersionException(
\r
1022 "Cannot revert from an unapproved file version");
\r
1025 DLFileVersion latestDLFileVersion =
\r
1026 dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);
\r
1028 if (version.equals(latestDLFileVersion.getVersion())) {
\r
1029 throw new InvalidFileVersionException(
\r
1030 "Cannot revert from the latest file version");
\r
1033 String sourceFileName = dlFileVersion.getTitle();
\r
1034 String extension = dlFileVersion.getExtension();
\r
1035 String mimeType = dlFileVersion.getMimeType();
\r
1036 String title = dlFileVersion.getTitle();
\r
1037 String description = dlFileVersion.getDescription();
\r
1038 String changeLog = "Reverted to " + version;
\r
1039 boolean majorVersion = true;
\r
1040 String extraSettings = dlFileVersion.getExtraSettings();
\r
1041 long fileEntryTypeId = dlFileVersion.getFileEntryTypeId();
\r
1042 Map<String, Fields> fieldsMap = null;
\r
1043 InputStream is = getFileAsStream(userId, fileEntryId, version);
\r
1044 long size = dlFileVersion.getSize();
\r
1046 DLFileEntry dlFileEntry = updateFileEntry(
\r
1047 userId, fileEntryId, sourceFileName, extension, mimeType, title,
\r
1048 description, changeLog, majorVersion, extraSettings,
\r
1049 fileEntryTypeId, fieldsMap, null, is, size, serviceContext);
\r
1051 DLFileVersion newDlFileVersion =
\r
1052 dlFileVersionLocalService.getFileVersion(
\r
1053 fileEntryId, dlFileEntry.getVersion());
\r
1055 copyFileEntryMetadata(
\r
1056 dlFileVersion.getCompanyId(), dlFileVersion.getFileEntryTypeId(),
\r
1057 fileEntryId, newDlFileVersion.getFileVersionId(),
\r
1058 dlFileVersion.getFileVersionId(), serviceContext);
\r
1061 public DLFileEntry updateFileEntry(
\r
1062 long userId, long fileEntryId, String sourceFileName,
\r
1063 String mimeType, String title, String description, String changeLog,
\r
1064 boolean majorVersion, long fileEntryTypeId,
\r
1065 Map<String, Fields> fieldsMap, File file, InputStream is, long size,
\r
1066 ServiceContext serviceContext)
\r
1067 throws PortalException, SystemException {
\r
1069 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
1072 String extension = DLAppUtil.getExtension(title, sourceFileName);
\r
1074 String extraSettings = StringPool.BLANK;
\r
1076 if (fileEntryTypeId == -1) {
\r
1077 fileEntryTypeId = dlFileEntry.getFileEntryTypeId();
\r
1080 fileEntryTypeId = getFileEntryTypeId(
\r
1081 DLUtil.getGroupIds(dlFileEntry.getGroupId()),
\r
1082 dlFileEntry.getFolderId(), fileEntryTypeId);
\r
1084 return updateFileEntry(
\r
1085 userId, fileEntryId, sourceFileName, extension, mimeType, title,
\r
1086 description, changeLog, majorVersion, extraSettings,
\r
1087 fileEntryTypeId, fieldsMap, file, is, size, serviceContext);
\r
1090 public void updateSmallImage(long smallImageId, long largeImageId)
\r
1091 throws PortalException, SystemException {
\r
1094 RenderedImage renderedImage = null;
\r
1096 Image largeImage = imageLocalService.getImage(largeImageId);
\r
1098 byte[] bytes = largeImage.getTextObj();
\r
1099 String contentType = largeImage.getType();
\r
1101 if (bytes != null) {
\r
1102 ImageBag imageBag = ImageToolUtil.read(bytes);
\r
1104 renderedImage = imageBag.getRenderedImage();
\r
1106 //validate(bytes);
\r
1109 if (renderedImage != null) {
\r
1110 int height = PrefsPropsUtil.getInteger(
\r
1111 PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_HEIGHT);
\r
1112 int width = PrefsPropsUtil.getInteger(
\r
1113 PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_WIDTH);
\r
1115 RenderedImage thumbnailRenderedImage = ImageToolUtil.scale(
\r
1116 renderedImage, height, width);
\r
1118 imageLocalService.updateImage(
\r
1120 ImageToolUtil.getBytes(
\r
1121 thumbnailRenderedImage, contentType));
\r
1124 catch (IOException ioe) {
\r
1125 throw new ImageSizeException(ioe);
\r
1129 public DLFileEntry updateStatus(
\r
1130 long userId, long fileVersionId, int status,
\r
1131 Map<String, Serializable> workflowContext,
\r
1132 ServiceContext serviceContext)
\r
1133 throws PortalException, SystemException {
\r
1137 User user = userPersistence.findByPrimaryKey(userId);
\r
1139 DLFileVersion dlFileVersion = dlFileVersionPersistence.findByPrimaryKey(
\r
1142 dlFileVersion.setStatus(status);
\r
1143 dlFileVersion.setStatusByUserId(user.getUserId());
\r
1144 dlFileVersion.setStatusByUserName(user.getFullName());
\r
1145 dlFileVersion.setStatusDate(new Date());
\r
1147 dlFileVersionPersistence.update(dlFileVersion, false);
\r
1151 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
1152 dlFileVersion.getFileEntryId());
\r
1154 if (status == WorkflowConstants.STATUS_APPROVED) {
\r
1155 if (DLUtil.compareVersions(
\r
1156 dlFileEntry.getVersion(),
\r
1157 dlFileVersion.getVersion()) <= 0) {
\r
1159 dlFileEntry.setExtension(dlFileVersion.getExtension());
\r
1160 dlFileEntry.setTitle(dlFileVersion.getTitle());
\r
1161 dlFileEntry.setDescription(dlFileVersion.getDescription());
\r
1162 dlFileEntry.setExtraSettings(dlFileVersion.getExtraSettings());
\r
1163 dlFileEntry.setFileEntryTypeId(
\r
1164 dlFileVersion.getFileEntryTypeId());
\r
1165 dlFileEntry.setVersion(dlFileVersion.getVersion());
\r
1166 dlFileEntry.setVersionUserId(dlFileVersion.getUserId());
\r
1167 dlFileEntry.setVersionUserName(dlFileVersion.getUserName());
\r
1168 dlFileEntry.setModifiedDate(dlFileVersion.getCreateDate());
\r
1169 dlFileEntry.setSize(dlFileVersion.getSize());
\r
1171 dlFileEntryPersistence.update(dlFileEntry, false);
\r
1178 if (dlFileEntry.getVersion().equals(dlFileVersion.getVersion())) {
\r
1179 String newVersion = DLFileEntryConstants.VERSION_DEFAULT;
\r
1181 List<DLFileVersion> approvedFileVersions =
\r
1182 dlFileVersionPersistence.findByF_S(
\r
1183 dlFileEntry.getFileEntryId(),
\r
1184 WorkflowConstants.STATUS_APPROVED);
\r
1186 if (!approvedFileVersions.isEmpty()) {
\r
1187 newVersion = approvedFileVersions.get(0).getVersion();
\r
1190 dlFileEntry.setVersion(newVersion);
\r
1192 dlFileEntryPersistence.update(dlFileEntry, false);
\r
1197 if (dlFileVersion.getVersion().equals(
\r
1198 DLFileEntryConstants.VERSION_DEFAULT)) {
\r
1200 Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(
\r
1201 DLFileEntry.class);
\r
1203 indexer.delete(dlFileEntry);
\r
1209 dlAppHelperLocalService.updateStatus(
\r
1210 userId, new LiferayFileEntry(dlFileEntry),
\r
1211 new LiferayFileVersion(dlFileVersion), status, workflowContext);
\r
1215 if ((status == WorkflowConstants.STATUS_APPROVED) &&
\r
1216 ((serviceContext == null) || serviceContext.isIndexingEnabled())) {
\r
1218 reindex(dlFileEntry);
\r
1219 } catch (Error e) {
\r
1220 _log.error("Failed to index fileEntry : " + dlFileEntry.getFileEntryId(), e);
\r
1224 return dlFileEntry;
\r
1227 public boolean verifyFileEntryCheckOut(long fileEntryId, String lockUuid)
\r
1228 throws PortalException, SystemException {
\r
1230 if (verifyFileEntryLock(fileEntryId, lockUuid) &&
\r
1231 isFileEntryCheckedOut(fileEntryId)) {
\r
1240 public boolean verifyFileEntryLock(long fileEntryId, String lockUuid)
\r
1241 throws PortalException, SystemException {
\r
1243 boolean lockVerified = false;
\r
1246 Lock lock = lockLocalService.getLock(
\r
1247 DLFileEntry.class.getName(), fileEntryId);
\r
1249 if (lock.getUuid().equals(lockUuid)) {
\r
1250 lockVerified = true;
\r
1253 catch (PortalException pe) {
\r
1254 if ((pe instanceof ExpiredLockException) ||
\r
1255 (pe instanceof NoSuchLockException)) {
\r
1257 DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
\r
1260 lockVerified = dlFolderService.verifyInheritableLock(
\r
1261 dlFileEntry.getFolderId(), lockUuid);
\r
1268 return lockVerified;
\r
1271 protected DLFileVersion addFileVersion(
\r
1272 User user, DLFileEntry dlFileEntry, Date modifiedDate,
\r
1273 String extension, String mimeType, String title, String description,
\r
1274 String changeLog, String extraSettings, long fileEntryTypeId,
\r
1275 Map<String, Fields> fieldsMap, String version, long size,
\r
1276 int status, ServiceContext serviceContext)
\r
1277 throws PortalException, SystemException {
\r
1279 long fileVersionId = counterLocalService.increment();
\r
1281 DLFileVersion dlFileVersion = dlFileVersionPersistence.create(
\r
1284 String uuid = ParamUtil.getString(
\r
1285 serviceContext, "fileVersionUuid", serviceContext.getUuid());
\r
1287 dlFileVersion.setUuid(uuid);
\r
1289 dlFileVersion.setGroupId(dlFileEntry.getGroupId());
\r
1290 dlFileVersion.setCompanyId(dlFileEntry.getCompanyId());
\r
1292 long versionUserId = dlFileEntry.getVersionUserId();
\r
1294 if (versionUserId <= 0) {
\r
1295 versionUserId = dlFileEntry.getUserId();
\r
1298 dlFileVersion.setUserId(versionUserId);
\r
1300 String versionUserName = GetterUtil.getString(
\r
1301 dlFileEntry.getVersionUserName(), dlFileEntry.getUserName());
\r
1303 dlFileVersion.setUserName(versionUserName);
\r
1305 dlFileVersion.setCreateDate(modifiedDate);
\r
1306 dlFileVersion.setModifiedDate(modifiedDate);
\r
1307 dlFileVersion.setRepositoryId(dlFileEntry.getRepositoryId());
\r
1308 dlFileVersion.setFolderId(dlFileEntry.getFolderId());
\r
1309 dlFileVersion.setFileEntryId(dlFileEntry.getFileEntryId());
\r
1310 dlFileVersion.setExtension(extension);
\r
1311 dlFileVersion.setMimeType(mimeType);
\r
1312 dlFileVersion.setTitle(title);
\r
1313 dlFileVersion.setDescription(description);
\r
1314 dlFileVersion.setChangeLog(changeLog);
\r
1315 dlFileVersion.setExtraSettings(extraSettings);
\r
1316 dlFileVersion.setFileEntryTypeId(fileEntryTypeId);
\r
1317 dlFileVersion.setVersion(version);
\r
1318 dlFileVersion.setSize(size);
\r
1319 dlFileVersion.setStatus(status);
\r
1320 dlFileVersion.setStatusByUserId(user.getUserId());
\r
1321 dlFileVersion.setStatusByUserName(user.getFullName());
\r
1322 dlFileVersion.setStatusDate(dlFileEntry.getModifiedDate());
\r
1323 dlFileVersion.setExpandoBridgeAttributes(serviceContext);
\r
1325 dlFileVersionPersistence.update(dlFileVersion, false);
\r
1327 if ((fileEntryTypeId > 0) && (fieldsMap != null)) {
\r
1328 dlFileEntryMetadataLocalService.updateFileEntryMetadata(
\r
1329 fileEntryTypeId, dlFileEntry.getFileEntryId(), fileVersionId,
\r
1330 fieldsMap, serviceContext);
\r
1333 return dlFileVersion;
\r
1336 protected void convertExtraSettings(
\r
1337 DLFileEntry dlFileEntry, DLFileVersion dlFileVersion, String[] keys)
\r
1338 throws PortalException, SystemException {
\r
1340 UnicodeProperties extraSettingsProperties =
\r
1341 dlFileVersion.getExtraSettingsProperties();
\r
1343 ExpandoBridge expandoBridge = dlFileVersion.getExpandoBridge();
\r
1345 convertExtraSettings(extraSettingsProperties, expandoBridge, keys);
\r
1347 dlFileVersion.setExtraSettingsProperties(extraSettingsProperties);
\r
1349 dlFileVersionPersistence.update(dlFileVersion, false);
\r
1351 int status = dlFileVersion.getStatus();
\r
1353 if ((status == WorkflowConstants.STATUS_APPROVED) &&
\r
1354 (DLUtil.compareVersions(
\r
1355 dlFileEntry.getVersion(), dlFileVersion.getVersion()) <= 0)) {
\r
1357 reindex(dlFileEntry);
\r
1361 protected void convertExtraSettings(DLFileEntry dlFileEntry, String[] keys)
\r
1362 throws PortalException, SystemException {
\r
1364 UnicodeProperties extraSettingsProperties =
\r
1365 dlFileEntry.getExtraSettingsProperties();
\r
1367 ExpandoBridge expandoBridge = dlFileEntry.getExpandoBridge();
\r
1369 convertExtraSettings(extraSettingsProperties, expandoBridge, keys);
\r
1371 dlFileEntry.setExtraSettingsProperties(extraSettingsProperties);
\r
1373 dlFileEntryPersistence.update(dlFileEntry, false);
\r
1375 List<DLFileVersion> dlFileVersions =
\r
1376 dlFileVersionLocalService.getFileVersions(
\r
1377 dlFileEntry.getFileEntryId(), WorkflowConstants.STATUS_ANY);
\r
1379 for (DLFileVersion dlFileVersion : dlFileVersions) {
\r
1380 convertExtraSettings(dlFileEntry, dlFileVersion, keys);
\r
1384 protected void convertExtraSettings(
\r
1385 UnicodeProperties extraSettingsProperties, ExpandoBridge expandoBridge,
\r
1388 for (String key : keys) {
\r
1389 String value = extraSettingsProperties.remove(key);
\r
1391 if (Validator.isNull(value)) {
\r
1395 int type = expandoBridge.getAttributeType(key);
\r
1397 Serializable serializable = ExpandoColumnConstants.getSerializable(
\r
1400 expandoBridge.setAttribute(key, serializable);
\r
1404 protected void deleteFileEntry(DLFileEntry dlFileEntry)
\r
1405 throws PortalException, SystemException {
\r
1407 // check for a link --> suppression du link dropBox
\r
1409 DlLink dll = DlLinkLocalServiceUtil.getDlFileLinkByTarget(dlFileEntry.getFileEntryId());
\r
1410 // we have a link
\r
1411 DlLinkLocalServiceUtil.removeDlFileLinkByTarget(dll.getTargetId());
\r
1413 int linkLeft = DlLinkLocalServiceUtil.countDlFileLinkBySourceId(dll.getSourceId());
\r
1414 if (linkLeft==0) {
\r
1415 // plus de lien donc on supprime la source
\r
1416 DLFileEntry dlfeSource = DLFileEntryLocalServiceUtil.getDLFileEntry(dll.getSourceId());
\r
1417 DiskUsageUserLocalServiceUtil.substractDiskUsage(dlfeSource,dlfeSource.getUserId(),dll.getSourceOriginPortlet());
\r
1418 DLFileEntryLocalServiceUtil.deleteDLFileEntry(dll.getSourceId());
\r
1419 // on verifie le dossier contenant les ref pour suppression le cas echeant en recurssif
\r
1420 DLEntryUtil.removeLinkedFileContainer(dlfeSource.getFolderId());
\r
1422 } catch (Exception e1) {
\r
1427 dlFileEntryPersistence.remove(dlFileEntry);
\r
1431 resourceLocalService.deleteResource(
\r
1432 dlFileEntry.getCompanyId(), DLFileEntry.class.getName(),
\r
1433 ResourceConstants.SCOPE_INDIVIDUAL, dlFileEntry.getFileEntryId());
\r
1437 webDAVPropsLocalService.deleteWebDAVProps(
\r
1438 DLFileEntry.class.getName(), dlFileEntry.getFileEntryId());
\r
1440 // File entry metadata
\r
1442 dlFileEntryMetadataLocalService.deleteFileEntryMetadata(
\r
1443 dlFileEntry.getFileEntryId());
\r
1447 List<DLFileVersion> dlFileVersions =
\r
1448 dlFileVersionPersistence.findByFileEntryId(
\r
1449 dlFileEntry.getFileEntryId());
\r
1451 for (DLFileVersion dlFileVersion : dlFileVersions) {
\r
1452 dlFileVersionPersistence.remove(dlFileVersion);
\r
1454 expandoValueLocalService.deleteValues(
\r
1455 DLFileVersion.class.getName(),
\r
1456 dlFileVersion.getFileVersionId());
\r
1458 workflowInstanceLinkLocalService.deleteWorkflowInstanceLinks(
\r
1459 dlFileEntry.getCompanyId(), dlFileEntry.getGroupId(),
\r
1460 DLFileEntry.class.getName(), dlFileVersion.getFileVersionId());
\r
1465 expandoValueLocalService.deleteValues(
\r
1466 DLFileEntry.class.getName(), dlFileEntry.getFileEntryId());
\r
1470 lockLocalService.unlock(
\r
1471 DLFileEntry.class.getName(), dlFileEntry.getFileEntryId());
\r
1476 DLStoreUtil.deleteFile(
\r
1477 dlFileEntry.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
1478 dlFileEntry.getName());
\r
1480 catch (Exception e) {
\r
1481 if (_log.isWarnEnabled()) {
\r
1488 Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(
\r
1489 DLFileEntry.class);
\r
1491 indexer.delete(dlFileEntry);
\r
1494 protected Long getFileEntryTypeId(
\r
1495 long[] groupIds, long folderId, long fileEntryTypeId)
\r
1496 throws PortalException, SystemException {
\r
1498 if (fileEntryTypeId == -1) {
\r
1500 dlFileEntryTypeLocalService.getDefaultFileEntryTypeId(folderId);
\r
1503 List<DLFileEntryType> dlFileEntryTypes =
\r
1504 dlFileEntryTypeLocalService.getFolderFileEntryTypes(
\r
1505 groupIds, folderId, true);
\r
1507 boolean found = false;
\r
1509 for (DLFileEntryType dlFileEntryType : dlFileEntryTypes) {
\r
1510 if (dlFileEntryType.getFileEntryTypeId() == fileEntryTypeId) {
\r
1518 throw new InvalidFileEntryTypeException(
\r
1519 "Invalid file entry type " + fileEntryTypeId +
\r
1520 " for folder " + folderId);
\r
1524 return fileEntryTypeId;
\r
1527 protected String getNextVersion(
\r
1528 DLFileEntry dlFileEntry, boolean majorVersion, int workflowAction)
\r
1529 throws PortalException, SystemException {
\r
1531 String version = dlFileEntry.getVersion();
\r
1534 DLFileVersion dlFileVersion =
\r
1535 dlFileVersionLocalService.getLatestFileVersion(
\r
1536 dlFileEntry.getFileEntryId(), true);
\r
1538 version = dlFileVersion.getVersion();
\r
1540 catch (NoSuchFileVersionException nsfve) {
\r
1543 if (workflowAction == WorkflowConstants.ACTION_SAVE_DRAFT) {
\r
1544 majorVersion = false;
\r
1547 int[] versionParts = StringUtil.split(version, StringPool.PERIOD, 0);
\r
1549 if (majorVersion) {
\r
1550 versionParts[0]++;
\r
1551 versionParts[1] = 0;
\r
1554 versionParts[1]++;
\r
1557 return versionParts[0] + StringPool.PERIOD + versionParts[1];
\r
1560 protected Lock lockFileEntry(long userId, long fileEntryId)
\r
1561 throws PortalException, SystemException {
\r
1563 return lockFileEntry(
\r
1564 userId, fileEntryId, null, DLFileEntryImpl.LOCK_EXPIRATION_TIME);
\r
1567 protected Lock lockFileEntry(
\r
1568 long userId, long fileEntryId, String owner, long expirationTime)
\r
1569 throws PortalException, SystemException {
\r
1571 if (hasFileEntryLock(userId, fileEntryId)) {
\r
1572 return lockLocalService.getLock(
\r
1573 DLFileEntry.class.getName(), fileEntryId);
\r
1576 if ((expirationTime <= 0) ||
\r
1577 (expirationTime > DLFileEntryImpl.LOCK_EXPIRATION_TIME)) {
\r
1579 expirationTime = DLFileEntryImpl.LOCK_EXPIRATION_TIME;
\r
1582 return lockLocalService.lock(
\r
1583 userId, DLFileEntry.class.getName(), fileEntryId, owner, false,
\r
1587 protected DLFileEntry moveFileEntryImpl(
\r
1588 long userId, long fileEntryId, long newFolderId,
\r
1589 ServiceContext serviceContext)
\r
1590 throws PortalException, SystemException {
\r
1594 User user = userPersistence.findByPrimaryKey(userId);
\r
1595 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
1598 long oldDataRepositoryId = dlFileEntry.getDataRepositoryId();
\r
1601 dlFileEntry.getGroupId(), newFolderId, dlFileEntry.getFileEntryId(),
\r
1602 dlFileEntry.getTitle(), dlFileEntry.getExtension());
\r
1604 if (DLStoreUtil.hasFile(
\r
1605 user.getCompanyId(),
\r
1606 DLFolderConstants.getDataRepositoryId(
\r
1607 dlFileEntry.getGroupId(), newFolderId),
\r
1608 dlFileEntry.getName(), StringPool.BLANK)) {
\r
1610 throw new DuplicateFileException(dlFileEntry.getName());
\r
1613 dlFileEntry.setModifiedDate(serviceContext.getModifiedDate(null));
\r
1614 dlFileEntry.setFolderId(newFolderId);
\r
1616 dlFileEntryPersistence.update(dlFileEntry, false);
\r
1620 List<DLFileVersion> dlFileVersions =
\r
1621 dlFileVersionPersistence.findByFileEntryId(fileEntryId);
\r
1623 for (DLFileVersion dlFileVersion : dlFileVersions) {
\r
1624 dlFileVersion.setFolderId(newFolderId);
\r
1626 dlFileVersionPersistence.update(dlFileVersion, false);
\r
1631 if (newFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
\r
1632 DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(
\r
1635 dlFolder.setModifiedDate(serviceContext.getModifiedDate(null));
\r
1637 dlFolderPersistence.update(dlFolder, false);
\r
1642 DLStoreUtil.updateFile(
\r
1643 user.getCompanyId(), oldDataRepositoryId,
\r
1644 dlFileEntry.getDataRepositoryId(), dlFileEntry.getName());
\r
1648 if ((serviceContext == null) || serviceContext.isIndexingEnabled()) {
\r
1649 reindex(dlFileEntry);
\r
1652 return dlFileEntry;
\r
1655 protected void reindex(DLFileEntry dlFileEntry) throws SearchException {
\r
1656 Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(
\r
1657 DLFileEntry.class);
\r
1659 indexer.reindex(dlFileEntry);
\r
1662 protected void setFileVersion(DLFileEntry dlFileEntry)
\r
1663 throws PortalException, SystemException {
\r
1666 DLFileVersion dlFileVersion =
\r
1667 dlFileVersionLocalService.getFileVersion(
\r
1668 dlFileEntry.getFileEntryId(), dlFileEntry.getVersion());
\r
1670 dlFileEntry.setFileVersion(dlFileVersion);
\r
1672 catch (NoSuchFileVersionException nsfve) {
\r
1676 protected void startWorkflowInstance(
\r
1677 long userId, ServiceContext serviceContext,
\r
1678 DLFileVersion dlFileVersion, String syncEventType)
\r
1679 throws PortalException, SystemException {
\r
1681 Map<String, Serializable> workflowContext =
\r
1682 new HashMap<String, Serializable>();
\r
1684 workflowContext.put("event", syncEventType);
\r
1686 WorkflowHandlerRegistryUtil.startWorkflowInstance(
\r
1687 dlFileVersion.getCompanyId(), dlFileVersion.getGroupId(), userId,
\r
1688 DLFileEntry.class.getName(), dlFileVersion.getFileVersionId(),
\r
1689 dlFileVersion, serviceContext, workflowContext);
\r
1692 protected void unlockFileEntry(long fileEntryId) throws SystemException {
\r
1693 lockLocalService.unlock(DLFileEntry.class.getName(), fileEntryId);
\r
1696 protected void unlockFileEntry(long fileEntryId, String lockUuid)
\r
1697 throws PortalException, SystemException {
\r
1699 if (Validator.isNotNull(lockUuid)) {
\r
1701 Lock lock = lockLocalService.getLock(
\r
1702 DLFileEntry.class.getName(), fileEntryId);
\r
1704 if (!lock.getUuid().equals(lockUuid)) {
\r
1705 throw new InvalidLockException("UUIDs do not match");
\r
1708 catch (PortalException pe) {
\r
1709 if ((pe instanceof ExpiredLockException) ||
\r
1710 (pe instanceof NoSuchLockException)) {
\r
1718 if (!isFileEntryCheckedOut(fileEntryId)) {
\r
1719 lockLocalService.unlock(DLFileEntry.class.getName(), fileEntryId);
\r
1723 protected DLFileEntry updateFileEntry(
\r
1724 long userId, long fileEntryId, String sourceFileName,
\r
1725 String extension, String mimeType, String title, String description,
\r
1726 String changeLog, boolean majorVersion, String extraSettings,
\r
1727 long fileEntryTypeId, Map<String, Fields> fieldsMap, File file,
\r
1728 InputStream is, long size, ServiceContext serviceContext)
\r
1729 throws PortalException, SystemException {
\r
1731 User user = userPersistence.findByPrimaryKey(userId);
\r
1732 DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(
\r
1735 boolean checkedOut = dlFileEntry.isCheckedOut();
\r
1737 DLFileVersion dlFileVersion =
\r
1738 dlFileVersionLocalService.getLatestFileVersion(
\r
1739 fileEntryId, !checkedOut);
\r
1741 boolean autoCheckIn = !checkedOut && dlFileVersion.isApproved();
\r
1743 if (autoCheckIn) {
\r
1744 dlFileEntry = checkOutFileEntry(
\r
1745 userId, fileEntryId, serviceContext);
\r
1747 else if (!checkedOut) {
\r
1748 lockFileEntry(userId, fileEntryId);
\r
1751 if (!hasFileEntryLock(userId, fileEntryId)) {
\r
1752 lockFileEntry(userId, fileEntryId);
\r
1755 if (checkedOut || autoCheckIn) {
\r
1756 dlFileVersion = dlFileVersionLocalService.getLatestFileVersion(
\r
1757 fileEntryId, false);
\r
1761 if (Validator.isNull(extension)) {
\r
1762 extension = dlFileEntry.getExtension();
\r
1765 if (Validator.isNull(mimeType)) {
\r
1766 mimeType = dlFileEntry.getMimeType();
\r
1769 if (Validator.isNull(title)) {
\r
1770 title = sourceFileName;
\r
1772 if (Validator.isNull(title)) {
\r
1773 title = dlFileEntry.getTitle();
\r
1777 Date now = new Date();
\r
1780 dlFileEntry.getGroupId(), dlFileEntry.getFolderId(),
\r
1781 dlFileEntry.getFileEntryId(), title, extension, sourceFileName,
\r
1786 String version = dlFileVersion.getVersion();
\r
1789 size = dlFileVersion.getSize();
\r
1792 updateFileVersion(
\r
1793 user, dlFileVersion, sourceFileName, extension, mimeType, title,
\r
1794 description, changeLog, extraSettings, fileEntryTypeId,
\r
1795 fieldsMap, version, size, dlFileVersion.getStatus(),
\r
1796 serviceContext.getModifiedDate(now), serviceContext);
\r
1800 dlAppHelperLocalService.updateAsset(
\r
1801 userId, new LiferayFileEntry(dlFileEntry),
\r
1802 new LiferayFileVersion(dlFileVersion),
\r
1803 serviceContext.getAssetCategoryIds(),
\r
1804 serviceContext.getAssetTagNames(),
\r
1805 serviceContext.getAssetLinkEntryIds());
\r
1809 if ((file != null) || (is != null)) {
\r
1811 DLStoreUtil.deleteFile(
\r
1812 user.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
1813 dlFileEntry.getName(), version);
\r
1815 catch (NoSuchModelException nsme) {
\r
1818 if (file != null) {
\r
1819 DLStoreUtil.updateFile(
\r
1820 user.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
1821 dlFileEntry.getName(), dlFileEntry.getExtension(),
\r
1822 false, version, sourceFileName, file);
\r
1825 DLStoreUtil.updateFile(
\r
1826 user.getCompanyId(), dlFileEntry.getDataRepositoryId(),
\r
1827 dlFileEntry.getName(), dlFileEntry.getExtension(),
\r
1828 false, version, sourceFileName, is);
\r
1832 if (autoCheckIn) {
\r
1834 userId, fileEntryId, majorVersion, changeLog,
\r
1837 else if (!checkedOut &&
\r
1838 (serviceContext.getWorkflowAction() ==
\r
1839 WorkflowConstants.ACTION_PUBLISH)) {
\r
1841 String syncEvent = DLSyncConstants.EVENT_UPDATE;
\r
1843 if (dlFileVersion.getVersion().equals(
\r
1844 DLFileEntryConstants.VERSION_DEFAULT)) {
\r
1846 syncEvent = DLSyncConstants.EVENT_ADD;
\r
1849 startWorkflowInstance(
\r
1850 userId, serviceContext, dlFileVersion, syncEvent);
\r
1853 catch (PortalException pe) {
\r
1854 if (autoCheckIn) {
\r
1855 cancelCheckOut(userId, fileEntryId);
\r
1860 catch (SystemException se) {
\r
1861 if (autoCheckIn) {
\r
1862 cancelCheckOut(userId, fileEntryId);
\r
1868 if (!autoCheckIn && !checkedOut) {
\r
1869 unlockFileEntry(fileEntryId);
\r
1873 // MIGRATION MODIFICATION
\r
1874 return updateStatus(
\r
1875 user.getUserId(), dlFileVersion.getFileVersionId(), WorkflowConstants.STATUS_APPROVED,
\r
1876 new HashMap<String, Serializable>(), serviceContext);
\r
1878 // return dlFileEntryPersistence.findByPrimaryKey(fileEntryId);
\r
1881 protected DLFileVersion updateFileVersion(
\r
1882 User user, DLFileVersion dlFileVersion, String sourceFileName,
\r
1883 String extension, String mimeType, String title, String description,
\r
1884 String changeLog, String extraSettings, long fileEntryTypeId,
\r
1885 Map<String, Fields> fieldsMap, String version, long size,
\r
1886 int status, Date statusDate, ServiceContext serviceContext)
\r
1887 throws PortalException, SystemException {
\r
1889 dlFileVersion.setModifiedDate(statusDate);
\r
1891 if (Validator.isNotNull(sourceFileName)) {
\r
1892 dlFileVersion.setExtension(extension);
\r
1893 dlFileVersion.setMimeType(mimeType);
\r
1896 dlFileVersion.setTitle(title);
\r
1897 dlFileVersion.setDescription(description);
\r
1898 dlFileVersion.setChangeLog(changeLog);
\r
1899 dlFileVersion.setExtraSettings(extraSettings);
\r
1900 dlFileVersion.setFileEntryTypeId(fileEntryTypeId);
\r
1901 dlFileVersion.setVersion(version);
\r
1902 dlFileVersion.setSize(size);
\r
1903 dlFileVersion.setStatus(status);
\r
1904 dlFileVersion.setStatusByUserId(user.getUserId());
\r
1905 dlFileVersion.setStatusByUserName(user.getFullName());
\r
1906 dlFileVersion.setStatusDate(statusDate);
\r
1907 dlFileVersion.setExpandoBridgeAttributes(serviceContext);
\r
1909 dlFileVersion = dlFileVersionPersistence.update(dlFileVersion, false);
\r
1911 if ((fileEntryTypeId > 0) && (fieldsMap != null)) {
\r
1912 dlFileEntryMetadataLocalService.updateFileEntryMetadata(
\r
1913 fileEntryTypeId, dlFileVersion.getFileEntryId(),
\r
1914 dlFileVersion.getFileVersionId(), fieldsMap, serviceContext);
\r
1917 return dlFileVersion;
\r
1920 protected void validateFile(
\r
1921 long groupId, long folderId, long fileEntryId, String title,
\r
1923 throws PortalException, SystemException {
\r
1925 DLFolder dlFolder = dlFolderPersistence.fetchByG_P_N(
\r
1926 groupId, folderId, title);
\r
1928 if (dlFolder != null) {
\r
1929 throw new DuplicateFolderNameException(title);
\r
1932 DLFileEntry dlFileEntry = dlFileEntryPersistence.fetchByG_F_T(
\r
1933 groupId, folderId, title);
\r
1935 if ((dlFileEntry != null) &&
\r
1936 (dlFileEntry.getFileEntryId() != fileEntryId)) {
\r
1938 throw new DuplicateFileException(title);
\r
1941 String periodAndExtension = StringPool.PERIOD + extension;
\r
1943 if (!title.endsWith(periodAndExtension)) {
\r
1944 title += periodAndExtension;
\r
1946 dlFileEntry = dlFileEntryPersistence.fetchByG_F_T(
\r
1947 groupId, folderId, title);
\r
1949 if ((dlFileEntry != null) &&
\r
1950 (dlFileEntry.getFileEntryId() != fileEntryId)) {
\r
1952 throw new DuplicateFileException(title);
\r
1957 protected void validateFile(
\r
1958 long groupId, long folderId, long fileEntryId, String title,
\r
1959 String extension, String sourceFileName, File file, InputStream is)
\r
1960 throws PortalException, SystemException {
\r
1962 if (Validator.isNotNull(sourceFileName)) {
\r
1963 if (file != null) {
\r
1964 DLStoreUtil.validate(
\r
1965 sourceFileName, extension, sourceFileName, true, file);
\r
1968 DLStoreUtil.validate(
\r
1969 sourceFileName, extension, sourceFileName, true, is);
\r
1973 validateFileName(title);
\r
1975 DLStoreUtil.validate(title, false);
\r
1977 validateFile(groupId, folderId, fileEntryId, title, extension);
\r
1980 protected void validateFileName(String fileName) throws PortalException {
\r
1981 if (fileName.contains(StringPool.SLASH)) {
\r
1982 throw new FileNameException(fileName);
\r
1986 private static final int _DELETE_INTERVAL = 100;
\r
1988 private static Log _log = LogFactoryUtil.getLog(
\r
1989 DLFileEntryLocalServiceImpl.class);
\r