--- /dev/null
+/**\r
+ * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.\r
+ *\r
+ * This library is free software; you can redistribute it and/or modify it under\r
+ * the terms of the GNU Lesser General Public License as published by the Free\r
+ * Software Foundation; either version 2.1 of the License, or (at your option)\r
+ * any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more\r
+ * details.\r
+ */\r
+\r
+package com.liferay.portlet.documentlibrary.service.impl;\r
+\r
+import com.liferay.portal.ExpiredLockException;\r
+import com.liferay.portal.InvalidLockException;\r
+import com.liferay.portal.NoSuchLockException;\r
+import com.liferay.portal.NoSuchModelException;\r
+import com.liferay.portal.kernel.exception.PortalException;\r
+import com.liferay.portal.kernel.exception.SystemException;\r
+import com.liferay.portal.kernel.image.ImageBag;\r
+import com.liferay.portal.kernel.image.ImageToolUtil;\r
+import com.liferay.portal.kernel.log.Log;\r
+import com.liferay.portal.kernel.log.LogFactoryUtil;\r
+import com.liferay.portal.kernel.search.Indexable;\r
+import com.liferay.portal.kernel.search.IndexableType;\r
+import com.liferay.portal.kernel.search.Indexer;\r
+import com.liferay.portal.kernel.search.IndexerRegistryUtil;\r
+import com.liferay.portal.kernel.search.SearchException;\r
+import com.liferay.portal.kernel.util.GetterUtil;\r
+import com.liferay.portal.kernel.util.OrderByComparator;\r
+import com.liferay.portal.kernel.util.ParamUtil;\r
+import com.liferay.portal.kernel.util.PropsKeys;\r
+import com.liferay.portal.kernel.util.StringBundler;\r
+import com.liferay.portal.kernel.util.StringPool;\r
+import com.liferay.portal.kernel.util.StringUtil;\r
+import com.liferay.portal.kernel.util.UnicodeProperties;\r
+import com.liferay.portal.kernel.util.Validator;\r
+import com.liferay.portal.kernel.workflow.WorkflowConstants;\r
+import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil;\r
+import com.liferay.portal.model.Image;\r
+import com.liferay.portal.model.Lock;\r
+import com.liferay.portal.model.ResourceConstants;\r
+import com.liferay.portal.model.User;\r
+import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;\r
+import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;\r
+import com.liferay.portal.security.auth.PrincipalThreadLocal;\r
+import com.liferay.portal.service.ServiceContext;\r
+import com.liferay.portal.util.PortalUtil;\r
+import com.liferay.portal.util.PrefsPropsUtil;\r
+import com.liferay.portal.util.PropsValues;\r
+import com.liferay.portlet.documentlibrary.DuplicateFileException;\r
+import com.liferay.portlet.documentlibrary.DuplicateFolderNameException;\r
+import com.liferay.portlet.documentlibrary.FileNameException;\r
+import com.liferay.portlet.documentlibrary.ImageSizeException;\r
+import com.liferay.portlet.documentlibrary.InvalidFileEntryTypeException;\r
+import com.liferay.portlet.documentlibrary.InvalidFileVersionException;\r
+import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;\r
+import com.liferay.portlet.documentlibrary.NoSuchFileEntryMetadataException;\r
+import com.liferay.portlet.documentlibrary.NoSuchFileVersionException;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntry;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntryType;\r
+import com.liferay.portlet.documentlibrary.model.DLFileVersion;\r
+import com.liferay.portlet.documentlibrary.model.DLFolder;\r
+import com.liferay.portlet.documentlibrary.model.DLFolderConstants;\r
+import com.liferay.portlet.documentlibrary.model.DLSyncConstants;\r
+import com.liferay.portlet.documentlibrary.model.impl.DLFileEntryImpl;\r
+import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;\r
+import com.liferay.portlet.documentlibrary.service.base.DLFileEntryLocalServiceBaseImpl;\r
+import com.liferay.portlet.documentlibrary.store.DLStoreUtil;\r
+import com.liferay.portlet.documentlibrary.util.DLAppUtil;\r
+import com.liferay.portlet.documentlibrary.util.DLUtil;\r
+import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelModifiedDateComparator;\r
+import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;\r
+import com.liferay.portlet.dynamicdatamapping.storage.Fields;\r
+import com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil;\r
+import com.liferay.portlet.expando.model.ExpandoBridge;\r
+import com.liferay.portlet.expando.model.ExpandoColumnConstants;\r
+import com.pentila.entSavoie.cartable.model.DlLink;\r
+import com.pentila.entSavoie.cartable.service.DlLinkLocalServiceUtil;\r
+import com.pentila.entSavoie.service.DiskUsageUserLocalServiceUtil;\r
+import com.pentila.entSavoie.utils.DLEntryUtil;\r
+\r
+import java.awt.image.RenderedImage;\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.Serializable;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+/**\r
+ * The document library file entry local service.\r
+ *\r
+ * <p>\r
+ * Due to legacy code, the names of some file entry properties are not\r
+ * intuitive. Each file entry has both a name and title. The <code>name</code>\r
+ * is a unique identifier for a given file and is generally numeric, whereas the\r
+ * <code>title</code> is the actual name specified by the user (such as\r
+ * "Budget.xls").\r
+ * </p>\r
+ *\r
+ * @author Brian Wing Shun Chan\r
+ * @author Harry Mark\r
+ * @author Alexander Chow\r
+ */\r
+public class DLFileEntryLocalServiceImpl\r
+ extends DLFileEntryLocalServiceBaseImpl {\r
+\r
+ public DLFileEntry addFileEntry(\r
+ long userId, long groupId, long repositoryId, long folderId,\r
+ String sourceFileName, String mimeType, String title,\r
+ String description, String changeLog, long fileEntryTypeId,\r
+ Map<String, Fields> fieldsMap, File file, InputStream is, long size,\r
+ ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ if (Validator.isNull(title)) {\r
+ if (size == 0) {\r
+ throw new FileNameException();\r
+ }\r
+ else {\r
+ title = sourceFileName;\r
+ }\r
+ }\r
+\r
+ // File entry\r
+\r
+ User user = userPersistence.findByPrimaryKey(userId);\r
+ folderId = dlFolderLocalService.getFolderId(\r
+ user.getCompanyId(), folderId);\r
+ String name = String.valueOf(\r
+ counterLocalService.increment(DLFileEntry.class.getName()));\r
+ String extension = DLAppUtil.getExtension(title, sourceFileName);\r
+ fileEntryTypeId = getFileEntryTypeId(\r
+ DLUtil.getGroupIds(groupId), folderId, fileEntryTypeId);\r
+ Date now = new Date();\r
+\r
+ validateFile(\r
+ groupId, folderId, 0, title, extension, sourceFileName, file, is);\r
+\r
+ long fileEntryId = counterLocalService.increment();\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.create(fileEntryId);\r
+\r
+ dlFileEntry.setUuid(serviceContext.getUuid());\r
+ dlFileEntry.setGroupId(groupId);\r
+ dlFileEntry.setCompanyId(user.getCompanyId());\r
+ dlFileEntry.setUserId(user.getUserId());\r
+ dlFileEntry.setUserName(user.getFullName());\r
+ dlFileEntry.setVersionUserId(user.getUserId());\r
+ dlFileEntry.setVersionUserName(user.getFullName());\r
+ dlFileEntry.setCreateDate(serviceContext.getCreateDate(now));\r
+ dlFileEntry.setModifiedDate(serviceContext.getModifiedDate(now));\r
+ dlFileEntry.setRepositoryId(repositoryId);\r
+ dlFileEntry.setFolderId(folderId);\r
+ dlFileEntry.setName(name);\r
+ dlFileEntry.setExtension(extension);\r
+ dlFileEntry.setMimeType(mimeType);\r
+ dlFileEntry.setTitle(title);\r
+ dlFileEntry.setDescription(description);\r
+ dlFileEntry.setFileEntryTypeId(fileEntryTypeId);\r
+ dlFileEntry.setVersion(DLFileEntryConstants.VERSION_DEFAULT);\r
+ dlFileEntry.setSize(size);\r
+ dlFileEntry.setReadCount(DLFileEntryConstants.DEFAULT_READ_COUNT);\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+\r
+ // File version\r
+\r
+ DLFileVersion dlFileVersion = addFileVersion(\r
+ user, dlFileEntry, serviceContext.getModifiedDate(now), extension,\r
+ mimeType, title, description, null, StringPool.BLANK,\r
+ fileEntryTypeId, fieldsMap, DLFileEntryConstants.VERSION_DEFAULT,\r
+ size, WorkflowConstants.STATUS_DRAFT, serviceContext);\r
+\r
+ dlFileEntry.setFileVersion(dlFileVersion);\r
+\r
+ // Folder\r
+\r
+ if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {\r
+ dlFolderLocalService.updateLastPostDate(\r
+ dlFileEntry.getFolderId(), dlFileEntry.getModifiedDate());\r
+ }\r
+\r
+ // File\r
+\r
+ if (file != null) {\r
+ DLStoreUtil.addFile(\r
+ user.getCompanyId(), dlFileEntry.getDataRepositoryId(), name,\r
+ false, file);\r
+ }\r
+ else {\r
+ DLStoreUtil.addFile(\r
+ user.getCompanyId(), dlFileEntry.getDataRepositoryId(), name,\r
+ false, is);\r
+ }\r
+\r
+ return dlFileEntry;\r
+ }\r
+\r
+ public void addFileEntryResources(\r
+ DLFileEntry dlFileEntry, boolean addGroupPermissions,\r
+ boolean addGuestPermissions)\r
+ throws PortalException, SystemException {\r
+\r
+ resourceLocalService.addResources(\r
+ dlFileEntry.getCompanyId(), dlFileEntry.getGroupId(),\r
+ dlFileEntry.getUserId(), DLFileEntry.class.getName(),\r
+ dlFileEntry.getFileEntryId(), false, addGroupPermissions,\r
+ addGuestPermissions);\r
+ }\r
+\r
+ public void addFileEntryResources(\r
+ DLFileEntry dlFileEntry, String[] groupPermissions,\r
+ String[] guestPermissions)\r
+ throws PortalException, SystemException {\r
+\r
+ resourceLocalService.addModelResources(\r
+ dlFileEntry.getCompanyId(), dlFileEntry.getGroupId(),\r
+ dlFileEntry.getUserId(), DLFileEntry.class.getName(),\r
+ dlFileEntry.getFileEntryId(), groupPermissions, guestPermissions);\r
+ }\r
+\r
+ public DLFileVersion cancelCheckOut(long userId, long fileEntryId)\r
+ throws PortalException, SystemException {\r
+\r
+ if (!isFileEntryCheckedOut(fileEntryId)) {\r
+ return null;\r
+ }\r
+\r
+ if (!hasFileEntryLock(userId, fileEntryId)) {\r
+ lockFileEntry(userId, fileEntryId);\r
+ }\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ DLFileVersion dlFileVersion =\r
+ dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);\r
+\r
+ dlFileVersionPersistence.remove(dlFileVersion);\r
+\r
+ try {\r
+ DLStoreUtil.deleteFile(\r
+ dlFileEntry.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(),\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION);\r
+ }\r
+ catch (NoSuchModelException nsme) {\r
+ }\r
+\r
+ lockLocalService.unlock(DLFileEntry.class.getName(), fileEntryId);\r
+\r
+ return dlFileVersion;\r
+ }\r
+\r
+ public void checkInFileEntry(\r
+ long userId, long fileEntryId, boolean majorVersion,\r
+ String changeLog, ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ if (!isFileEntryCheckedOut(fileEntryId)) {\r
+ return;\r
+ }\r
+\r
+ if (!hasFileEntryLock(userId, fileEntryId)) {\r
+ lockFileEntry(userId, fileEntryId);\r
+ }\r
+\r
+ User user = userPersistence.findByPrimaryKey(userId);\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ String version = getNextVersion(\r
+ dlFileEntry, majorVersion, serviceContext.getWorkflowAction());\r
+\r
+ DLFileVersion dlFileVersion =\r
+ dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);\r
+\r
+ dlFileVersion.setVersion(version);\r
+ dlFileVersion.setChangeLog(changeLog);\r
+\r
+ dlFileVersionPersistence.update(dlFileVersion, false);\r
+\r
+ // Folder\r
+\r
+ if (dlFileEntry.getFolderId() !=\r
+ DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {\r
+\r
+ dlFolderLocalService.updateLastPostDate(\r
+ dlFileEntry.getFolderId(), dlFileEntry.getModifiedDate());\r
+ }\r
+\r
+ // File\r
+ \r
+ // MIGRATION MODIFICATION\r
+ try {\r
+ DLStoreUtil.updateFileVersion(\r
+ user.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(),\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION, version);\r
+ }\r
+ catch (DuplicateFileException dfe) {\r
+ // Suppression de la version existante\r
+ DLStoreUtil.deleteFile(user.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(), version);\r
+ \r
+ // Maj de la version courante\r
+ DLStoreUtil.updateFileVersion(\r
+ user.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(),\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION, version);\r
+ }\r
+\r
+ if (serviceContext.getWorkflowAction() ==\r
+ WorkflowConstants.ACTION_PUBLISH) {\r
+\r
+ startWorkflowInstance(\r
+ userId, serviceContext, dlFileVersion,\r
+ DLSyncConstants.EVENT_UPDATE);\r
+ }\r
+\r
+ lockLocalService.unlock(DLFileEntry.class.getName(), fileEntryId);\r
+ }\r
+\r
+ public void checkInFileEntry(long userId, long fileEntryId, String lockUuid)\r
+ throws PortalException, SystemException {\r
+\r
+ if (Validator.isNotNull(lockUuid)) {\r
+ try {\r
+ Lock lock = lockLocalService.getLock(\r
+ DLFileEntry.class.getName(), fileEntryId);\r
+\r
+ if (!lock.getUuid().equals(lockUuid)) {\r
+ throw new InvalidLockException("UUIDs do not match");\r
+ }\r
+ }\r
+ catch (PortalException pe) {\r
+ if ((pe instanceof ExpiredLockException) ||\r
+ (pe instanceof NoSuchLockException)) {\r
+ }\r
+ else {\r
+ throw pe;\r
+ }\r
+ }\r
+ }\r
+\r
+ checkInFileEntry(\r
+ userId, fileEntryId, false, StringPool.BLANK, new ServiceContext());\r
+ }\r
+\r
+ /**\r
+ * @deprecated {@link #checkOutFileEntry(long, long, ServiceContext)}\r
+ */\r
+ public DLFileEntry checkOutFileEntry(long userId, long fileEntryId)\r
+ throws PortalException, SystemException {\r
+\r
+ return checkOutFileEntry(userId, fileEntryId, new ServiceContext());\r
+ }\r
+\r
+ public DLFileEntry checkOutFileEntry(\r
+ long userId, long fileEntryId, ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ return checkOutFileEntry(\r
+ userId, fileEntryId, StringPool.BLANK,\r
+ DLFileEntryImpl.LOCK_EXPIRATION_TIME, serviceContext);\r
+ }\r
+\r
+ /**\r
+ * @deprecated {@link #checkOutFileEntry(long, long, String, long,\r
+ * ServiceContext)}\r
+ */\r
+ public DLFileEntry checkOutFileEntry(\r
+ long userId, long fileEntryId, String owner, long expirationTime)\r
+ throws PortalException, SystemException {\r
+\r
+ return checkOutFileEntry(\r
+ userId, fileEntryId, owner, expirationTime, new ServiceContext());\r
+ }\r
+\r
+ public DLFileEntry checkOutFileEntry(\r
+ long userId, long fileEntryId, String owner, long expirationTime,\r
+ ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ boolean hasLock = hasFileEntryLock(userId, fileEntryId);\r
+\r
+ if (!hasLock) {\r
+ if ((expirationTime <= 0) ||\r
+ (expirationTime > DLFileEntryImpl.LOCK_EXPIRATION_TIME)) {\r
+\r
+ expirationTime = DLFileEntryImpl.LOCK_EXPIRATION_TIME;\r
+ }\r
+\r
+ lockLocalService.lock(\r
+ userId, DLFileEntry.class.getName(), fileEntryId, owner, false,\r
+ expirationTime);\r
+ }\r
+\r
+ User user = userPersistence.findByPrimaryKey(userId);\r
+\r
+ serviceContext.setCompanyId(user.getCompanyId());\r
+ serviceContext.setUserId(userId);\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+\r
+ DLFileVersion dlFileVersion =\r
+ dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);\r
+\r
+ long dlFileVersionId = dlFileVersion.getFileVersionId();\r
+\r
+ String version = dlFileVersion.getVersion();\r
+\r
+ if (!version.equals(\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {\r
+\r
+ long existingDLFileVersionId = ParamUtil.getLong(\r
+ serviceContext, "existingDLFileVersionId");\r
+\r
+ if (existingDLFileVersionId > 0) {\r
+ DLFileVersion existingDLFileVersion =\r
+ dlFileVersionPersistence.findByPrimaryKey(\r
+ existingDLFileVersionId);\r
+\r
+ dlFileVersion = updateFileVersion(\r
+ user, existingDLFileVersion, null,\r
+ existingDLFileVersion.getExtension(),\r
+ existingDLFileVersion.getMimeType(),\r
+ existingDLFileVersion.getTitle(),\r
+ existingDLFileVersion.getDescription(),\r
+ existingDLFileVersion.getChangeLog(),\r
+ existingDLFileVersion.getExtraSettings(),\r
+ existingDLFileVersion.getFileEntryTypeId(), null,\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION,\r
+ existingDLFileVersion.getSize(),\r
+ WorkflowConstants.STATUS_DRAFT, new Date(), serviceContext);\r
+ }\r
+ else {\r
+ dlFileVersion = addFileVersion(\r
+ user, dlFileEntry, new Date(), dlFileVersion.getExtension(),\r
+ dlFileVersion.getMimeType(), dlFileVersion.getTitle(),\r
+ dlFileVersion.getDescription(),\r
+ dlFileVersion.getChangeLog(),\r
+ dlFileVersion.getExtraSettings(),\r
+ dlFileVersion.getFileEntryTypeId(), null,\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION,\r
+ dlFileVersion.getSize(), WorkflowConstants.STATUS_DRAFT,\r
+ serviceContext);\r
+ }\r
+\r
+ try {\r
+ DLStoreUtil.deleteFile(\r
+ dlFileEntry.getCompanyId(),\r
+ dlFileEntry.getDataRepositoryId(), dlFileEntry.getName(),\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION);\r
+ }\r
+ catch (NoSuchModelException nsme) {\r
+ }\r
+\r
+ DLStoreUtil.copyFileVersion(\r
+ user.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(), version,\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION);\r
+\r
+ copyFileEntryMetadata(\r
+ dlFileEntry.getCompanyId(), dlFileVersion.getFileEntryTypeId(),\r
+ fileEntryId, dlFileVersionId, dlFileVersion.getFileVersionId(),\r
+ serviceContext);\r
+ }\r
+\r
+ return dlFileEntry;\r
+ }\r
+\r
+ public void convertExtraSettings(String[] keys)\r
+ throws PortalException, SystemException {\r
+\r
+ int count = dlFileEntryFinder.countByExtraSettings();\r
+\r
+ int pages = count / Indexer.DEFAULT_INTERVAL;\r
+\r
+ for (int i = 0; i <= pages; i++) {\r
+ int start = (i * Indexer.DEFAULT_INTERVAL);\r
+ int end = start + Indexer.DEFAULT_INTERVAL;\r
+\r
+ List<DLFileEntry> dlFileEntries =\r
+ dlFileEntryFinder.findByExtraSettings(start, end);\r
+\r
+ for (DLFileEntry dlFileEntry : dlFileEntries) {\r
+ convertExtraSettings(dlFileEntry, keys);\r
+ }\r
+ }\r
+ }\r
+\r
+ public void copyFileEntryMetadata(\r
+ long companyId, long fileEntryTypeId, long fileEntryId,\r
+ long fromFileVersionId, long toFileVersionId,\r
+ ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ Map<String, Fields> fieldsMap = new HashMap<String, Fields>();\r
+\r
+ List<DDMStructure> ddmStructures = null;\r
+\r
+ if (fileEntryTypeId > 0) {\r
+ DLFileEntryType dlFileEntryType =\r
+ dlFileEntryTypeLocalService.getFileEntryType(fileEntryTypeId);\r
+\r
+ ddmStructures = dlFileEntryType.getDDMStructures();\r
+\r
+ for (DDMStructure ddmStructure : ddmStructures) {\r
+ try {\r
+ DLFileEntryMetadata dlFileEntryMetadata =\r
+ dlFileEntryMetadataLocalService.getFileEntryMetadata(\r
+ ddmStructure.getStructureId(), fromFileVersionId);\r
+\r
+ Fields fields = StorageEngineUtil.getFields(\r
+ dlFileEntryMetadata.getDDMStorageId());\r
+\r
+ fieldsMap.put(ddmStructure.getStructureKey(), fields);\r
+ }\r
+ catch (NoSuchFileEntryMetadataException nsfeme) {\r
+ }\r
+ }\r
+\r
+ dlFileEntryMetadataLocalService.updateFileEntryMetadata(\r
+ companyId, ddmStructures, fileEntryTypeId, fileEntryId,\r
+ toFileVersionId, fieldsMap, serviceContext);\r
+ }\r
+\r
+ long classNameId = PortalUtil.getClassNameId(DLFileEntry.class);\r
+\r
+ ddmStructures = ddmStructureLocalService.getClassStructures(\r
+ classNameId);\r
+\r
+ for (DDMStructure ddmStructure : ddmStructures) {\r
+ try {\r
+ DLFileEntryMetadata fileEntryMetadata =\r
+ dlFileEntryMetadataLocalService.getFileEntryMetadata(\r
+ ddmStructure.getStructureId(), fromFileVersionId);\r
+\r
+ Fields fields = StorageEngineUtil.getFields(\r
+ fileEntryMetadata.getDDMStorageId());\r
+\r
+ fieldsMap.put(ddmStructure.getStructureKey(), fields);\r
+ }\r
+ catch (NoSuchFileEntryMetadataException nsfeme) {\r
+ }\r
+ }\r
+\r
+ dlFileEntryMetadataLocalService.updateFileEntryMetadata(\r
+ companyId, ddmStructures, fileEntryTypeId, fileEntryId,\r
+ toFileVersionId, fieldsMap, serviceContext);\r
+ }\r
+\r
+ public void deleteFileEntries(long groupId, long folderId)\r
+ throws PortalException, SystemException {\r
+\r
+ int count = dlFileEntryPersistence.countByG_F(groupId, folderId);\r
+\r
+ int pages = count / _DELETE_INTERVAL;\r
+\r
+ for (int i = 0; i <= pages; i++) {\r
+ int start = (i * _DELETE_INTERVAL);\r
+ int end = start + _DELETE_INTERVAL;\r
+\r
+ List<DLFileEntry> dlFileEntries = dlFileEntryPersistence.findByG_F(\r
+ groupId, folderId, start, end);\r
+\r
+ for (DLFileEntry dlFileEntry : dlFileEntries) {\r
+ dlAppHelperLocalService.deleteFileEntry(\r
+ new LiferayFileEntry(dlFileEntry));\r
+\r
+ deleteFileEntry(dlFileEntry);\r
+ }\r
+ }\r
+ }\r
+\r
+ public void deleteFileEntry(long fileEntryId)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = getFileEntry(fileEntryId);\r
+\r
+ deleteFileEntry(dlFileEntry);\r
+ }\r
+\r
+ public void deleteFileEntry(long userId, long fileEntryId)\r
+ throws PortalException, SystemException {\r
+\r
+ if (!hasFileEntryLock(userId, fileEntryId)) {\r
+ lockFileEntry(userId, fileEntryId);\r
+ }\r
+\r
+ try {\r
+ deleteFileEntry(fileEntryId);\r
+ }\r
+ finally {\r
+ unlockFileEntry(fileEntryId);\r
+ }\r
+ }\r
+\r
+ @Indexable(type = IndexableType.DELETE)\r
+ public void deleteFileVersion(long userId, long fileEntryId, String version)\r
+ throws PortalException, SystemException {\r
+\r
+ if (Validator.isNull(version) ||\r
+ version.equals(DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {\r
+\r
+ throw new InvalidFileVersionException();\r
+ }\r
+\r
+ if (!hasFileEntryLock(userId, fileEntryId)) {\r
+ lockFileEntry(userId, fileEntryId);\r
+ }\r
+\r
+ try {\r
+ DLFileVersion dlFileVersion = dlFileVersionPersistence.findByF_V(\r
+ fileEntryId, version);\r
+\r
+ if (!dlFileVersion.isApproved()) {\r
+ throw new InvalidFileVersionException(\r
+ "Cannot delete an unapproved file version");\r
+ }\r
+ else {\r
+ int count = dlFileVersionPersistence.countByF_S(\r
+ fileEntryId, WorkflowConstants.STATUS_APPROVED);\r
+\r
+ if (count <= 1) {\r
+ throw new InvalidFileVersionException(\r
+ "Cannot delete the only approved file version");\r
+ }\r
+ }\r
+\r
+ dlFileVersionPersistence.remove(dlFileVersion);\r
+\r
+ expandoValueLocalService.deleteValues(\r
+ DLFileVersion.class.getName(),\r
+ dlFileVersion.getFileVersionId());\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ if (version.equals(dlFileEntry.getVersion())) {\r
+ try {\r
+ DLFileVersion dlLatestFileVersion =\r
+ dlFileVersionLocalService.getLatestFileVersion(\r
+ dlFileEntry.getFileEntryId(), true);\r
+\r
+ dlFileEntry.setVersionUserId(\r
+ dlLatestFileVersion.getUserId());\r
+ dlFileEntry.setVersionUserName(\r
+ dlLatestFileVersion.getUserName());\r
+ dlFileEntry.setModifiedDate(\r
+ dlLatestFileVersion.getCreateDate());\r
+ dlFileEntry.setExtension(\r
+ dlLatestFileVersion.getExtension());\r
+ dlFileEntry.setTitle(dlLatestFileVersion.getTitle());\r
+ dlFileEntry.setDescription(\r
+ dlLatestFileVersion.getDescription());\r
+ dlFileEntry.setExtraSettings(\r
+ dlLatestFileVersion.getExtraSettings());\r
+ dlFileEntry.setFileEntryTypeId(\r
+ dlLatestFileVersion.getFileEntryTypeId());\r
+ dlFileEntry.setVersion(dlLatestFileVersion.getVersion());\r
+ dlFileEntry.setSize(dlLatestFileVersion.getSize());\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+ }\r
+ catch (NoSuchFileVersionException nsfve) {\r
+ }\r
+ }\r
+\r
+ try {\r
+ DLStoreUtil.deleteFile(\r
+ dlFileEntry.getCompanyId(),\r
+ dlFileEntry.getDataRepositoryId(), dlFileEntry.getName(),\r
+ version);\r
+ }\r
+ catch (NoSuchModelException nsme) {\r
+ }\r
+ }\r
+ finally {\r
+ unlockFileEntry(fileEntryId);\r
+ }\r
+ }\r
+\r
+ public DLFileEntry fetchFileEntryByAnyImageId(long imageId)\r
+ throws SystemException {\r
+\r
+ return dlFileEntryFinder.fetchByAnyImageId(imageId);\r
+ }\r
+\r
+ public List<DLFileEntry> getExtraSettingsFileEntries(int start, int end)\r
+ throws SystemException {\r
+\r
+ return dlFileEntryFinder.findByExtraSettings(start, end);\r
+ }\r
+\r
+ public File getFile(\r
+ long userId, long fileEntryId, String version,\r
+ boolean incrementCounter)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ if (PropsValues.DL_FILE_ENTRY_READ_COUNT_ENABLED && incrementCounter) {\r
+ dlFileEntry.setReadCount(dlFileEntry.getReadCount() + 1);\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+ }\r
+\r
+ dlAppHelperLocalService.getFileAsStream(\r
+ userId, new LiferayFileEntry(dlFileEntry), incrementCounter);\r
+\r
+ return DLStoreUtil.getFile(\r
+ dlFileEntry.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(), version);\r
+ }\r
+\r
+ public InputStream getFileAsStream(\r
+ long userId, long fileEntryId, String version)\r
+ throws PortalException, SystemException {\r
+\r
+ return getFileAsStream(userId, fileEntryId, version, true);\r
+ }\r
+\r
+ public InputStream getFileAsStream(\r
+ long userId, long fileEntryId, String version,\r
+ boolean incrementCounter)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ if (PropsValues.DL_FILE_ENTRY_READ_COUNT_ENABLED && incrementCounter) {\r
+ dlFileEntry.setReadCount(dlFileEntry.getReadCount() + 1);\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+ }\r
+\r
+ dlAppHelperLocalService.getFileAsStream(\r
+ userId, new LiferayFileEntry(dlFileEntry), incrementCounter);\r
+\r
+ return DLStoreUtil.getFileAsStream(\r
+ dlFileEntry.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(), version);\r
+ }\r
+\r
+ public List<DLFileEntry> getFileEntries(int start, int end)\r
+ throws SystemException {\r
+\r
+ return dlFileEntryPersistence.findAll(start, end);\r
+ }\r
+\r
+ public List<DLFileEntry> getFileEntries(\r
+ long groupId, long folderId, int start, int end,\r
+ OrderByComparator obc)\r
+ throws SystemException {\r
+\r
+ return dlFileEntryPersistence.findByG_F(\r
+ groupId, folderId, start, end, obc);\r
+ }\r
+\r
+ public List<DLFileEntry> getFileEntriesByMimeType(String mimeType)\r
+ throws SystemException {\r
+\r
+ return dlFileEntryPersistence.findByMimeType(mimeType);\r
+ }\r
+\r
+ public int getFileEntriesCount() throws SystemException {\r
+ return dlFileEntryPersistence.countAll();\r
+ }\r
+\r
+ public int getFileEntriesCount(long groupId, long folderId)\r
+ throws SystemException {\r
+\r
+ return dlFileEntryPersistence.countByG_F(groupId, folderId);\r
+ }\r
+\r
+ public DLFileEntry getFileEntry(long fileEntryId)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ setFileVersion(dlFileEntry);\r
+\r
+ return dlFileEntry;\r
+ }\r
+\r
+ public DLFileEntry getFileEntry(long groupId, long folderId, String title)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.fetchByG_F_T(\r
+ groupId, folderId, title);\r
+\r
+ if (dlFileEntry != null) {\r
+ setFileVersion(dlFileEntry);\r
+\r
+ return dlFileEntry;\r
+ }\r
+\r
+ List<DLFileVersion> dlFileVersions =\r
+ dlFileVersionPersistence.findByG_F_T_V(\r
+ groupId, folderId, title,\r
+ DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION);\r
+\r
+ long userId = PrincipalThreadLocal.getUserId();\r
+\r
+ for (DLFileVersion dlFileVersion : dlFileVersions) {\r
+ if (hasFileEntryLock(userId, dlFileVersion.getFileEntryId())) {\r
+ return dlFileVersion.getFileEntry();\r
+ }\r
+ }\r
+\r
+ StringBundler sb = new StringBundler(8);\r
+\r
+ sb.append("No DLFileEntry exists with the key {");\r
+ sb.append("groupId=");\r
+ sb.append(groupId);\r
+ sb.append(", folderId=");\r
+ sb.append(folderId);\r
+ sb.append(", title=");\r
+ sb.append(title);\r
+ sb.append(StringPool.CLOSE_CURLY_BRACE);\r
+\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(sb.toString());\r
+ }\r
+\r
+ throw new NoSuchFileEntryException(sb.toString());\r
+ }\r
+\r
+ public DLFileEntry getFileEntryByName(\r
+ long groupId, long folderId, String name)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByG_F_N(\r
+ groupId, folderId, name);\r
+\r
+ setFileVersion(dlFileEntry);\r
+\r
+ return dlFileEntry;\r
+ }\r
+\r
+ public DLFileEntry getFileEntryByUuidAndGroupId(String uuid, long groupId)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByUUID_G(\r
+ uuid, groupId);\r
+\r
+ setFileVersion(dlFileEntry);\r
+\r
+ return dlFileEntry;\r
+ }\r
+\r
+ public List<DLFileEntry> getGroupFileEntries(\r
+ long groupId, int start, int end)\r
+ throws SystemException {\r
+\r
+ return getGroupFileEntries(\r
+ groupId, start, end, new RepositoryModelModifiedDateComparator());\r
+ }\r
+\r
+ public List<DLFileEntry> getGroupFileEntries(\r
+ long groupId, int start, int end, OrderByComparator obc)\r
+ throws SystemException {\r
+\r
+ return dlFileEntryPersistence.findByGroupId(groupId, start, end, obc);\r
+ }\r
+\r
+ public List<DLFileEntry> getGroupFileEntries(\r
+ long groupId, long userId, int start, int end)\r
+ throws SystemException {\r
+\r
+ return getGroupFileEntries(\r
+ groupId, userId, start, end,\r
+ new RepositoryModelModifiedDateComparator());\r
+ }\r
+\r
+ public List<DLFileEntry> getGroupFileEntries(\r
+ long groupId, long userId, int start, int end,\r
+ OrderByComparator obc)\r
+ throws SystemException {\r
+\r
+ if (userId <= 0) {\r
+ return dlFileEntryPersistence.findByGroupId(\r
+ groupId, start, end, obc);\r
+ }\r
+ else {\r
+ return dlFileEntryPersistence.findByG_U(\r
+ groupId, userId, start, end, obc);\r
+ }\r
+ }\r
+\r
+ public int getGroupFileEntriesCount(long groupId) throws SystemException {\r
+ return dlFileEntryPersistence.countByGroupId(groupId);\r
+ }\r
+\r
+ public int getGroupFileEntriesCount(long groupId, long userId)\r
+ throws SystemException {\r
+\r
+ if (userId <= 0) {\r
+ return dlFileEntryPersistence.countByGroupId(groupId);\r
+ }\r
+ else {\r
+ return dlFileEntryPersistence.countByG_U(groupId, userId);\r
+ }\r
+ }\r
+\r
+ public List<DLFileEntry> getMisversionedFileEntries()\r
+ throws SystemException {\r
+\r
+ return dlFileEntryFinder.findByMisversioned();\r
+ }\r
+\r
+ public List<DLFileEntry> getNoAssetFileEntries() throws SystemException {\r
+ return dlFileEntryFinder.findByNoAssets();\r
+ }\r
+\r
+ public List<DLFileEntry> getOrphanedFileEntries() throws SystemException {\r
+ return dlFileEntryFinder.findByOrphanedFileEntries();\r
+ }\r
+\r
+ public boolean hasExtraSettings() throws SystemException {\r
+ if (dlFileEntryFinder.countByExtraSettings() > 0) {\r
+ return true;\r
+ }\r
+ else {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ public boolean hasFileEntryLock(long userId, long fileEntryId)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = getFileEntry(fileEntryId);\r
+\r
+ long folderId = dlFileEntry.getFolderId();\r
+\r
+ boolean hasLock = lockLocalService.hasLock(\r
+ userId, DLFileEntry.class.getName(), fileEntryId);\r
+\r
+ if (!hasLock &&\r
+ (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)) {\r
+\r
+ hasLock = dlFolderService.hasInheritableLock(folderId);\r
+ }\r
+\r
+ return hasLock;\r
+ }\r
+\r
+ public boolean isFileEntryCheckedOut(long fileEntryId)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileVersion dlFileVersion =\r
+ dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);\r
+\r
+ String version = dlFileVersion.getVersion();\r
+\r
+ if (version.equals(DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {\r
+ return true;\r
+ }\r
+ else {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ public DLFileEntry moveFileEntry(\r
+ long userId, long fileEntryId, long newFolderId,\r
+ ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ if (!hasFileEntryLock(userId, fileEntryId)) {\r
+ lockFileEntry(userId, fileEntryId);\r
+ }\r
+\r
+ try {\r
+ DLFileEntry dlFileEntry = moveFileEntryImpl(\r
+ userId, fileEntryId, newFolderId, serviceContext);\r
+\r
+ dlAppHelperLocalService.moveFileEntry(\r
+ new LiferayFileEntry(dlFileEntry));\r
+\r
+ return dlFileEntryTypeLocalService.updateFileEntryFileEntryType(\r
+ dlFileEntry, serviceContext);\r
+ }\r
+ finally {\r
+ if (!isFileEntryCheckedOut(fileEntryId)) {\r
+ unlockFileEntry(fileEntryId);\r
+ }\r
+ }\r
+ }\r
+\r
+ public void revertFileEntry(\r
+ long userId, long fileEntryId, String version,\r
+ ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ if (Validator.isNull(version) ||\r
+ version.equals(DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {\r
+\r
+ throw new InvalidFileVersionException();\r
+ }\r
+\r
+ DLFileVersion dlFileVersion = dlFileVersionLocalService.getFileVersion(\r
+ fileEntryId, version);\r
+\r
+ if (!dlFileVersion.isApproved()) {\r
+ throw new InvalidFileVersionException(\r
+ "Cannot revert from an unapproved file version");\r
+ }\r
+\r
+ DLFileVersion latestDLFileVersion =\r
+ dlFileVersionLocalService.getLatestFileVersion(fileEntryId, false);\r
+\r
+ if (version.equals(latestDLFileVersion.getVersion())) {\r
+ throw new InvalidFileVersionException(\r
+ "Cannot revert from the latest file version");\r
+ }\r
+\r
+ String sourceFileName = dlFileVersion.getTitle();\r
+ String extension = dlFileVersion.getExtension();\r
+ String mimeType = dlFileVersion.getMimeType();\r
+ String title = dlFileVersion.getTitle();\r
+ String description = dlFileVersion.getDescription();\r
+ String changeLog = "Reverted to " + version;\r
+ boolean majorVersion = true;\r
+ String extraSettings = dlFileVersion.getExtraSettings();\r
+ long fileEntryTypeId = dlFileVersion.getFileEntryTypeId();\r
+ Map<String, Fields> fieldsMap = null;\r
+ InputStream is = getFileAsStream(userId, fileEntryId, version);\r
+ long size = dlFileVersion.getSize();\r
+\r
+ DLFileEntry dlFileEntry = updateFileEntry(\r
+ userId, fileEntryId, sourceFileName, extension, mimeType, title,\r
+ description, changeLog, majorVersion, extraSettings,\r
+ fileEntryTypeId, fieldsMap, null, is, size, serviceContext);\r
+\r
+ DLFileVersion newDlFileVersion =\r
+ dlFileVersionLocalService.getFileVersion(\r
+ fileEntryId, dlFileEntry.getVersion());\r
+\r
+ copyFileEntryMetadata(\r
+ dlFileVersion.getCompanyId(), dlFileVersion.getFileEntryTypeId(),\r
+ fileEntryId, newDlFileVersion.getFileVersionId(),\r
+ dlFileVersion.getFileVersionId(), serviceContext);\r
+ }\r
+\r
+ public DLFileEntry updateFileEntry(\r
+ long userId, long fileEntryId, String sourceFileName,\r
+ String mimeType, String title, String description, String changeLog,\r
+ boolean majorVersion, long fileEntryTypeId,\r
+ Map<String, Fields> fieldsMap, File file, InputStream is, long size,\r
+ ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ String extension = DLAppUtil.getExtension(title, sourceFileName);\r
+\r
+ String extraSettings = StringPool.BLANK;\r
+\r
+ if (fileEntryTypeId == -1) {\r
+ fileEntryTypeId = dlFileEntry.getFileEntryTypeId();\r
+ }\r
+\r
+ fileEntryTypeId = getFileEntryTypeId(\r
+ DLUtil.getGroupIds(dlFileEntry.getGroupId()),\r
+ dlFileEntry.getFolderId(), fileEntryTypeId);\r
+\r
+ return updateFileEntry(\r
+ userId, fileEntryId, sourceFileName, extension, mimeType, title,\r
+ description, changeLog, majorVersion, extraSettings,\r
+ fileEntryTypeId, fieldsMap, file, is, size, serviceContext);\r
+ }\r
+\r
+ public void updateSmallImage(long smallImageId, long largeImageId)\r
+ throws PortalException, SystemException {\r
+\r
+ try {\r
+ RenderedImage renderedImage = null;\r
+\r
+ Image largeImage = imageLocalService.getImage(largeImageId);\r
+\r
+ byte[] bytes = largeImage.getTextObj();\r
+ String contentType = largeImage.getType();\r
+\r
+ if (bytes != null) {\r
+ ImageBag imageBag = ImageToolUtil.read(bytes);\r
+\r
+ renderedImage = imageBag.getRenderedImage();\r
+\r
+ //validate(bytes);\r
+ }\r
+\r
+ if (renderedImage != null) {\r
+ int height = PrefsPropsUtil.getInteger(\r
+ PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_HEIGHT);\r
+ int width = PrefsPropsUtil.getInteger(\r
+ PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_WIDTH);\r
+\r
+ RenderedImage thumbnailRenderedImage = ImageToolUtil.scale(\r
+ renderedImage, height, width);\r
+\r
+ imageLocalService.updateImage(\r
+ smallImageId,\r
+ ImageToolUtil.getBytes(\r
+ thumbnailRenderedImage, contentType));\r
+ }\r
+ }\r
+ catch (IOException ioe) {\r
+ throw new ImageSizeException(ioe);\r
+ }\r
+ }\r
+\r
+ public DLFileEntry updateStatus(\r
+ long userId, long fileVersionId, int status,\r
+ Map<String, Serializable> workflowContext,\r
+ ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ // File version\r
+\r
+ User user = userPersistence.findByPrimaryKey(userId);\r
+\r
+ DLFileVersion dlFileVersion = dlFileVersionPersistence.findByPrimaryKey(\r
+ fileVersionId);\r
+\r
+ dlFileVersion.setStatus(status);\r
+ dlFileVersion.setStatusByUserId(user.getUserId());\r
+ dlFileVersion.setStatusByUserName(user.getFullName());\r
+ dlFileVersion.setStatusDate(new Date());\r
+\r
+ dlFileVersionPersistence.update(dlFileVersion, false);\r
+\r
+ // File entry\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ dlFileVersion.getFileEntryId());\r
+\r
+ if (status == WorkflowConstants.STATUS_APPROVED) {\r
+ if (DLUtil.compareVersions(\r
+ dlFileEntry.getVersion(),\r
+ dlFileVersion.getVersion()) <= 0) {\r
+ \r
+ dlFileEntry.setExtension(dlFileVersion.getExtension());\r
+ dlFileEntry.setTitle(dlFileVersion.getTitle());\r
+ dlFileEntry.setDescription(dlFileVersion.getDescription());\r
+ dlFileEntry.setExtraSettings(dlFileVersion.getExtraSettings());\r
+ dlFileEntry.setFileEntryTypeId(\r
+ dlFileVersion.getFileEntryTypeId());\r
+ dlFileEntry.setVersion(dlFileVersion.getVersion());\r
+ dlFileEntry.setVersionUserId(dlFileVersion.getUserId());\r
+ dlFileEntry.setVersionUserName(dlFileVersion.getUserName());\r
+ dlFileEntry.setModifiedDate(dlFileVersion.getCreateDate());\r
+ dlFileEntry.setSize(dlFileVersion.getSize());\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+ }\r
+ }\r
+ else {\r
+\r
+ // File entry\r
+\r
+ if (dlFileEntry.getVersion().equals(dlFileVersion.getVersion())) {\r
+ String newVersion = DLFileEntryConstants.VERSION_DEFAULT;\r
+\r
+ List<DLFileVersion> approvedFileVersions =\r
+ dlFileVersionPersistence.findByF_S(\r
+ dlFileEntry.getFileEntryId(),\r
+ WorkflowConstants.STATUS_APPROVED);\r
+\r
+ if (!approvedFileVersions.isEmpty()) {\r
+ newVersion = approvedFileVersions.get(0).getVersion();\r
+ }\r
+\r
+ dlFileEntry.setVersion(newVersion);\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+ }\r
+\r
+ // Indexer\r
+\r
+ if (dlFileVersion.getVersion().equals(\r
+ DLFileEntryConstants.VERSION_DEFAULT)) {\r
+\r
+ Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(\r
+ DLFileEntry.class);\r
+\r
+ indexer.delete(dlFileEntry);\r
+ }\r
+ }\r
+\r
+ // App helper\r
+\r
+ dlAppHelperLocalService.updateStatus(\r
+ userId, new LiferayFileEntry(dlFileEntry),\r
+ new LiferayFileVersion(dlFileVersion), status, workflowContext);\r
+\r
+ // Indexer\r
+\r
+ if ((status == WorkflowConstants.STATUS_APPROVED) &&\r
+ ((serviceContext == null) || serviceContext.isIndexingEnabled())) {\r
+ try {\r
+ reindex(dlFileEntry);\r
+ } catch (Error e) {\r
+ _log.error("Failed to index fileEntry : " + dlFileEntry.getFileEntryId(), e);\r
+ }\r
+ }\r
+\r
+ return dlFileEntry;\r
+ }\r
+\r
+ public boolean verifyFileEntryCheckOut(long fileEntryId, String lockUuid)\r
+ throws PortalException, SystemException {\r
+\r
+ if (verifyFileEntryLock(fileEntryId, lockUuid) &&\r
+ isFileEntryCheckedOut(fileEntryId)) {\r
+\r
+ return true;\r
+ }\r
+ else {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ public boolean verifyFileEntryLock(long fileEntryId, String lockUuid)\r
+ throws PortalException, SystemException {\r
+\r
+ boolean lockVerified = false;\r
+\r
+ try {\r
+ Lock lock = lockLocalService.getLock(\r
+ DLFileEntry.class.getName(), fileEntryId);\r
+\r
+ if (lock.getUuid().equals(lockUuid)) {\r
+ lockVerified = true;\r
+ }\r
+ }\r
+ catch (PortalException pe) {\r
+ if ((pe instanceof ExpiredLockException) ||\r
+ (pe instanceof NoSuchLockException)) {\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(\r
+ fileEntryId);\r
+\r
+ lockVerified = dlFolderService.verifyInheritableLock(\r
+ dlFileEntry.getFolderId(), lockUuid);\r
+ }\r
+ else {\r
+ throw pe;\r
+ }\r
+ }\r
+\r
+ return lockVerified;\r
+ }\r
+\r
+ protected DLFileVersion addFileVersion(\r
+ User user, DLFileEntry dlFileEntry, Date modifiedDate,\r
+ String extension, String mimeType, String title, String description,\r
+ String changeLog, String extraSettings, long fileEntryTypeId,\r
+ Map<String, Fields> fieldsMap, String version, long size,\r
+ int status, ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ long fileVersionId = counterLocalService.increment();\r
+\r
+ DLFileVersion dlFileVersion = dlFileVersionPersistence.create(\r
+ fileVersionId);\r
+\r
+ String uuid = ParamUtil.getString(\r
+ serviceContext, "fileVersionUuid", serviceContext.getUuid());\r
+\r
+ dlFileVersion.setUuid(uuid);\r
+\r
+ dlFileVersion.setGroupId(dlFileEntry.getGroupId());\r
+ dlFileVersion.setCompanyId(dlFileEntry.getCompanyId());\r
+\r
+ long versionUserId = dlFileEntry.getVersionUserId();\r
+\r
+ if (versionUserId <= 0) {\r
+ versionUserId = dlFileEntry.getUserId();\r
+ }\r
+\r
+ dlFileVersion.setUserId(versionUserId);\r
+\r
+ String versionUserName = GetterUtil.getString(\r
+ dlFileEntry.getVersionUserName(), dlFileEntry.getUserName());\r
+\r
+ dlFileVersion.setUserName(versionUserName);\r
+\r
+ dlFileVersion.setCreateDate(modifiedDate);\r
+ dlFileVersion.setModifiedDate(modifiedDate);\r
+ dlFileVersion.setRepositoryId(dlFileEntry.getRepositoryId());\r
+ dlFileVersion.setFolderId(dlFileEntry.getFolderId());\r
+ dlFileVersion.setFileEntryId(dlFileEntry.getFileEntryId());\r
+ dlFileVersion.setExtension(extension);\r
+ dlFileVersion.setMimeType(mimeType);\r
+ dlFileVersion.setTitle(title);\r
+ dlFileVersion.setDescription(description);\r
+ dlFileVersion.setChangeLog(changeLog);\r
+ dlFileVersion.setExtraSettings(extraSettings);\r
+ dlFileVersion.setFileEntryTypeId(fileEntryTypeId);\r
+ dlFileVersion.setVersion(version);\r
+ dlFileVersion.setSize(size);\r
+ dlFileVersion.setStatus(status);\r
+ dlFileVersion.setStatusByUserId(user.getUserId());\r
+ dlFileVersion.setStatusByUserName(user.getFullName());\r
+ dlFileVersion.setStatusDate(dlFileEntry.getModifiedDate());\r
+ dlFileVersion.setExpandoBridgeAttributes(serviceContext);\r
+\r
+ dlFileVersionPersistence.update(dlFileVersion, false);\r
+\r
+ if ((fileEntryTypeId > 0) && (fieldsMap != null)) {\r
+ dlFileEntryMetadataLocalService.updateFileEntryMetadata(\r
+ fileEntryTypeId, dlFileEntry.getFileEntryId(), fileVersionId,\r
+ fieldsMap, serviceContext);\r
+ }\r
+\r
+ return dlFileVersion;\r
+ }\r
+\r
+ protected void convertExtraSettings(\r
+ DLFileEntry dlFileEntry, DLFileVersion dlFileVersion, String[] keys)\r
+ throws PortalException, SystemException {\r
+\r
+ UnicodeProperties extraSettingsProperties =\r
+ dlFileVersion.getExtraSettingsProperties();\r
+\r
+ ExpandoBridge expandoBridge = dlFileVersion.getExpandoBridge();\r
+\r
+ convertExtraSettings(extraSettingsProperties, expandoBridge, keys);\r
+\r
+ dlFileVersion.setExtraSettingsProperties(extraSettingsProperties);\r
+\r
+ dlFileVersionPersistence.update(dlFileVersion, false);\r
+\r
+ int status = dlFileVersion.getStatus();\r
+\r
+ if ((status == WorkflowConstants.STATUS_APPROVED) &&\r
+ (DLUtil.compareVersions(\r
+ dlFileEntry.getVersion(), dlFileVersion.getVersion()) <= 0)) {\r
+\r
+ reindex(dlFileEntry);\r
+ }\r
+ }\r
+\r
+ protected void convertExtraSettings(DLFileEntry dlFileEntry, String[] keys)\r
+ throws PortalException, SystemException {\r
+\r
+ UnicodeProperties extraSettingsProperties =\r
+ dlFileEntry.getExtraSettingsProperties();\r
+\r
+ ExpandoBridge expandoBridge = dlFileEntry.getExpandoBridge();\r
+\r
+ convertExtraSettings(extraSettingsProperties, expandoBridge, keys);\r
+\r
+ dlFileEntry.setExtraSettingsProperties(extraSettingsProperties);\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+\r
+ List<DLFileVersion> dlFileVersions =\r
+ dlFileVersionLocalService.getFileVersions(\r
+ dlFileEntry.getFileEntryId(), WorkflowConstants.STATUS_ANY);\r
+\r
+ for (DLFileVersion dlFileVersion : dlFileVersions) {\r
+ convertExtraSettings(dlFileEntry, dlFileVersion, keys);\r
+ }\r
+ }\r
+\r
+ protected void convertExtraSettings(\r
+ UnicodeProperties extraSettingsProperties, ExpandoBridge expandoBridge,\r
+ String[] keys) {\r
+\r
+ for (String key : keys) {\r
+ String value = extraSettingsProperties.remove(key);\r
+\r
+ if (Validator.isNull(value)) {\r
+ continue;\r
+ }\r
+\r
+ int type = expandoBridge.getAttributeType(key);\r
+\r
+ Serializable serializable = ExpandoColumnConstants.getSerializable(\r
+ type, value);\r
+\r
+ expandoBridge.setAttribute(key, serializable);\r
+ }\r
+ }\r
+\r
+ protected void deleteFileEntry(DLFileEntry dlFileEntry)\r
+ throws PortalException, SystemException {\r
+\r
+ // check for a link --> suppression du link dropBox\r
+ try {\r
+ DlLink dll = DlLinkLocalServiceUtil.getDlFileLinkByTarget(dlFileEntry.getFileEntryId());\r
+ // we have a link \r
+ DlLinkLocalServiceUtil.removeDlFileLinkByTarget(dll.getTargetId());\r
+\r
+ int linkLeft = DlLinkLocalServiceUtil.countDlFileLinkBySourceId(dll.getSourceId());\r
+ if (linkLeft==0) {\r
+ // plus de lien donc on supprime la source\r
+ DLFileEntry dlfeSource = DLFileEntryLocalServiceUtil.getDLFileEntry(dll.getSourceId());\r
+ DiskUsageUserLocalServiceUtil.substractDiskUsage(dlfeSource,dlfeSource.getUserId(),dll.getSourceOriginPortlet());\r
+ DLFileEntryLocalServiceUtil.deleteDLFileEntry(dll.getSourceId());\r
+ // on verifie le dossier contenant les ref pour suppression le cas echeant en recurssif\r
+ DLEntryUtil.removeLinkedFileContainer(dlfeSource.getFolderId());\r
+ }\r
+ } catch (Exception e1) {\r
+ }\r
+\r
+ // File entry\r
+\r
+ dlFileEntryPersistence.remove(dlFileEntry);\r
+\r
+ // Resources\r
+\r
+ resourceLocalService.deleteResource(\r
+ dlFileEntry.getCompanyId(), DLFileEntry.class.getName(),\r
+ ResourceConstants.SCOPE_INDIVIDUAL, dlFileEntry.getFileEntryId());\r
+\r
+ // WebDAVProps\r
+\r
+ webDAVPropsLocalService.deleteWebDAVProps(\r
+ DLFileEntry.class.getName(), dlFileEntry.getFileEntryId());\r
+\r
+ // File entry metadata\r
+\r
+ dlFileEntryMetadataLocalService.deleteFileEntryMetadata(\r
+ dlFileEntry.getFileEntryId());\r
+\r
+ // File versions\r
+\r
+ List<DLFileVersion> dlFileVersions =\r
+ dlFileVersionPersistence.findByFileEntryId(\r
+ dlFileEntry.getFileEntryId());\r
+\r
+ for (DLFileVersion dlFileVersion : dlFileVersions) {\r
+ dlFileVersionPersistence.remove(dlFileVersion);\r
+\r
+ expandoValueLocalService.deleteValues(\r
+ DLFileVersion.class.getName(),\r
+ dlFileVersion.getFileVersionId());\r
+\r
+ workflowInstanceLinkLocalService.deleteWorkflowInstanceLinks(\r
+ dlFileEntry.getCompanyId(), dlFileEntry.getGroupId(),\r
+ DLFileEntry.class.getName(), dlFileVersion.getFileVersionId());\r
+ }\r
+\r
+ // Expando\r
+\r
+ expandoValueLocalService.deleteValues(\r
+ DLFileEntry.class.getName(), dlFileEntry.getFileEntryId());\r
+\r
+ // Lock\r
+\r
+ lockLocalService.unlock(\r
+ DLFileEntry.class.getName(), dlFileEntry.getFileEntryId());\r
+\r
+ // File\r
+\r
+ try {\r
+ DLStoreUtil.deleteFile(\r
+ dlFileEntry.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName());\r
+ }\r
+ catch (Exception e) {\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(e, e);\r
+ }\r
+ }\r
+\r
+ // Index\r
+\r
+ Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(\r
+ DLFileEntry.class);\r
+\r
+ indexer.delete(dlFileEntry);\r
+ }\r
+\r
+ protected Long getFileEntryTypeId(\r
+ long[] groupIds, long folderId, long fileEntryTypeId)\r
+ throws PortalException, SystemException {\r
+\r
+ if (fileEntryTypeId == -1) {\r
+ fileEntryTypeId =\r
+ dlFileEntryTypeLocalService.getDefaultFileEntryTypeId(folderId);\r
+ }\r
+ else {\r
+ List<DLFileEntryType> dlFileEntryTypes =\r
+ dlFileEntryTypeLocalService.getFolderFileEntryTypes(\r
+ groupIds, folderId, true);\r
+\r
+ boolean found = false;\r
+\r
+ for (DLFileEntryType dlFileEntryType : dlFileEntryTypes) {\r
+ if (dlFileEntryType.getFileEntryTypeId() == fileEntryTypeId) {\r
+ found = true;\r
+\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (!found) {\r
+ throw new InvalidFileEntryTypeException(\r
+ "Invalid file entry type " + fileEntryTypeId +\r
+ " for folder " + folderId);\r
+ }\r
+ }\r
+\r
+ return fileEntryTypeId;\r
+ }\r
+\r
+ protected String getNextVersion(\r
+ DLFileEntry dlFileEntry, boolean majorVersion, int workflowAction)\r
+ throws PortalException, SystemException {\r
+\r
+ String version = dlFileEntry.getVersion();\r
+\r
+ try {\r
+ DLFileVersion dlFileVersion =\r
+ dlFileVersionLocalService.getLatestFileVersion(\r
+ dlFileEntry.getFileEntryId(), true);\r
+\r
+ version = dlFileVersion.getVersion();\r
+ }\r
+ catch (NoSuchFileVersionException nsfve) {\r
+ }\r
+\r
+ if (workflowAction == WorkflowConstants.ACTION_SAVE_DRAFT) {\r
+ majorVersion = false;\r
+ }\r
+\r
+ int[] versionParts = StringUtil.split(version, StringPool.PERIOD, 0);\r
+\r
+ if (majorVersion) {\r
+ versionParts[0]++;\r
+ versionParts[1] = 0;\r
+ }\r
+ else {\r
+ versionParts[1]++;\r
+ }\r
+\r
+ return versionParts[0] + StringPool.PERIOD + versionParts[1];\r
+ }\r
+\r
+ protected Lock lockFileEntry(long userId, long fileEntryId)\r
+ throws PortalException, SystemException {\r
+\r
+ return lockFileEntry(\r
+ userId, fileEntryId, null, DLFileEntryImpl.LOCK_EXPIRATION_TIME);\r
+ }\r
+\r
+ protected Lock lockFileEntry(\r
+ long userId, long fileEntryId, String owner, long expirationTime)\r
+ throws PortalException, SystemException {\r
+\r
+ if (hasFileEntryLock(userId, fileEntryId)) {\r
+ return lockLocalService.getLock(\r
+ DLFileEntry.class.getName(), fileEntryId);\r
+ }\r
+\r
+ if ((expirationTime <= 0) ||\r
+ (expirationTime > DLFileEntryImpl.LOCK_EXPIRATION_TIME)) {\r
+\r
+ expirationTime = DLFileEntryImpl.LOCK_EXPIRATION_TIME;\r
+ }\r
+\r
+ return lockLocalService.lock(\r
+ userId, DLFileEntry.class.getName(), fileEntryId, owner, false,\r
+ expirationTime);\r
+ }\r
+\r
+ protected DLFileEntry moveFileEntryImpl(\r
+ long userId, long fileEntryId, long newFolderId,\r
+ ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ // File entry\r
+\r
+ User user = userPersistence.findByPrimaryKey(userId);\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ long oldDataRepositoryId = dlFileEntry.getDataRepositoryId();\r
+\r
+ validateFile(\r
+ dlFileEntry.getGroupId(), newFolderId, dlFileEntry.getFileEntryId(),\r
+ dlFileEntry.getTitle(), dlFileEntry.getExtension());\r
+\r
+ if (DLStoreUtil.hasFile(\r
+ user.getCompanyId(),\r
+ DLFolderConstants.getDataRepositoryId(\r
+ dlFileEntry.getGroupId(), newFolderId),\r
+ dlFileEntry.getName(), StringPool.BLANK)) {\r
+\r
+ throw new DuplicateFileException(dlFileEntry.getName());\r
+ }\r
+\r
+ dlFileEntry.setModifiedDate(serviceContext.getModifiedDate(null));\r
+ dlFileEntry.setFolderId(newFolderId);\r
+\r
+ dlFileEntryPersistence.update(dlFileEntry, false);\r
+\r
+ // File version\r
+\r
+ List<DLFileVersion> dlFileVersions =\r
+ dlFileVersionPersistence.findByFileEntryId(fileEntryId);\r
+\r
+ for (DLFileVersion dlFileVersion : dlFileVersions) {\r
+ dlFileVersion.setFolderId(newFolderId);\r
+\r
+ dlFileVersionPersistence.update(dlFileVersion, false);\r
+ }\r
+\r
+ // Folder\r
+\r
+ if (newFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {\r
+ DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(\r
+ newFolderId);\r
+\r
+ dlFolder.setModifiedDate(serviceContext.getModifiedDate(null));\r
+\r
+ dlFolderPersistence.update(dlFolder, false);\r
+ }\r
+\r
+ // File\r
+\r
+ DLStoreUtil.updateFile(\r
+ user.getCompanyId(), oldDataRepositoryId,\r
+ dlFileEntry.getDataRepositoryId(), dlFileEntry.getName());\r
+\r
+ // Index\r
+\r
+ if ((serviceContext == null) || serviceContext.isIndexingEnabled()) {\r
+ reindex(dlFileEntry);\r
+ }\r
+\r
+ return dlFileEntry;\r
+ }\r
+\r
+ protected void reindex(DLFileEntry dlFileEntry) throws SearchException {\r
+ Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(\r
+ DLFileEntry.class);\r
+\r
+ indexer.reindex(dlFileEntry);\r
+ }\r
+\r
+ protected void setFileVersion(DLFileEntry dlFileEntry)\r
+ throws PortalException, SystemException {\r
+\r
+ try {\r
+ DLFileVersion dlFileVersion =\r
+ dlFileVersionLocalService.getFileVersion(\r
+ dlFileEntry.getFileEntryId(), dlFileEntry.getVersion());\r
+\r
+ dlFileEntry.setFileVersion(dlFileVersion);\r
+ }\r
+ catch (NoSuchFileVersionException nsfve) {\r
+ }\r
+ }\r
+\r
+ protected void startWorkflowInstance(\r
+ long userId, ServiceContext serviceContext,\r
+ DLFileVersion dlFileVersion, String syncEventType)\r
+ throws PortalException, SystemException {\r
+\r
+ Map<String, Serializable> workflowContext =\r
+ new HashMap<String, Serializable>();\r
+\r
+ workflowContext.put("event", syncEventType);\r
+\r
+ WorkflowHandlerRegistryUtil.startWorkflowInstance(\r
+ dlFileVersion.getCompanyId(), dlFileVersion.getGroupId(), userId,\r
+ DLFileEntry.class.getName(), dlFileVersion.getFileVersionId(),\r
+ dlFileVersion, serviceContext, workflowContext);\r
+ }\r
+\r
+ protected void unlockFileEntry(long fileEntryId) throws SystemException {\r
+ lockLocalService.unlock(DLFileEntry.class.getName(), fileEntryId);\r
+ }\r
+\r
+ protected void unlockFileEntry(long fileEntryId, String lockUuid)\r
+ throws PortalException, SystemException {\r
+\r
+ if (Validator.isNotNull(lockUuid)) {\r
+ try {\r
+ Lock lock = lockLocalService.getLock(\r
+ DLFileEntry.class.getName(), fileEntryId);\r
+\r
+ if (!lock.getUuid().equals(lockUuid)) {\r
+ throw new InvalidLockException("UUIDs do not match");\r
+ }\r
+ }\r
+ catch (PortalException pe) {\r
+ if ((pe instanceof ExpiredLockException) ||\r
+ (pe instanceof NoSuchLockException)) {\r
+ }\r
+ else {\r
+ throw pe;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (!isFileEntryCheckedOut(fileEntryId)) {\r
+ lockLocalService.unlock(DLFileEntry.class.getName(), fileEntryId);\r
+ }\r
+ }\r
+\r
+ protected DLFileEntry updateFileEntry(\r
+ long userId, long fileEntryId, String sourceFileName,\r
+ String extension, String mimeType, String title, String description,\r
+ String changeLog, boolean majorVersion, String extraSettings,\r
+ long fileEntryTypeId, Map<String, Fields> fieldsMap, File file,\r
+ InputStream is, long size, ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ User user = userPersistence.findByPrimaryKey(userId);\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.findByPrimaryKey(\r
+ fileEntryId);\r
+\r
+ boolean checkedOut = dlFileEntry.isCheckedOut();\r
+\r
+ DLFileVersion dlFileVersion =\r
+ dlFileVersionLocalService.getLatestFileVersion(\r
+ fileEntryId, !checkedOut);\r
+\r
+ boolean autoCheckIn = !checkedOut && dlFileVersion.isApproved();\r
+\r
+ if (autoCheckIn) {\r
+ dlFileEntry = checkOutFileEntry(\r
+ userId, fileEntryId, serviceContext);\r
+ }\r
+ else if (!checkedOut) {\r
+ lockFileEntry(userId, fileEntryId);\r
+ }\r
+\r
+ if (!hasFileEntryLock(userId, fileEntryId)) {\r
+ lockFileEntry(userId, fileEntryId);\r
+ }\r
+\r
+ if (checkedOut || autoCheckIn) {\r
+ dlFileVersion = dlFileVersionLocalService.getLatestFileVersion(\r
+ fileEntryId, false);\r
+ }\r
+\r
+ try {\r
+ if (Validator.isNull(extension)) {\r
+ extension = dlFileEntry.getExtension();\r
+ }\r
+\r
+ if (Validator.isNull(mimeType)) {\r
+ mimeType = dlFileEntry.getMimeType();\r
+ }\r
+\r
+ if (Validator.isNull(title)) {\r
+ title = sourceFileName;\r
+\r
+ if (Validator.isNull(title)) {\r
+ title = dlFileEntry.getTitle();\r
+ }\r
+ }\r
+\r
+ Date now = new Date();\r
+\r
+ validateFile(\r
+ dlFileEntry.getGroupId(), dlFileEntry.getFolderId(),\r
+ dlFileEntry.getFileEntryId(), title, extension, sourceFileName,\r
+ file, is);\r
+\r
+ // File version\r
+\r
+ String version = dlFileVersion.getVersion();\r
+\r
+ if (size == 0) {\r
+ size = dlFileVersion.getSize();\r
+ }\r
+\r
+ updateFileVersion(\r
+ user, dlFileVersion, sourceFileName, extension, mimeType, title,\r
+ description, changeLog, extraSettings, fileEntryTypeId,\r
+ fieldsMap, version, size, dlFileVersion.getStatus(),\r
+ serviceContext.getModifiedDate(now), serviceContext);\r
+\r
+ // App helper\r
+\r
+ dlAppHelperLocalService.updateAsset(\r
+ userId, new LiferayFileEntry(dlFileEntry),\r
+ new LiferayFileVersion(dlFileVersion),\r
+ serviceContext.getAssetCategoryIds(),\r
+ serviceContext.getAssetTagNames(),\r
+ serviceContext.getAssetLinkEntryIds());\r
+\r
+ // File\r
+\r
+ if ((file != null) || (is != null)) {\r
+ try {\r
+ DLStoreUtil.deleteFile(\r
+ user.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(), version);\r
+ }\r
+ catch (NoSuchModelException nsme) {\r
+ }\r
+\r
+ if (file != null) {\r
+ DLStoreUtil.updateFile(\r
+ user.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(), dlFileEntry.getExtension(),\r
+ false, version, sourceFileName, file);\r
+ }\r
+ else {\r
+ DLStoreUtil.updateFile(\r
+ user.getCompanyId(), dlFileEntry.getDataRepositoryId(),\r
+ dlFileEntry.getName(), dlFileEntry.getExtension(),\r
+ false, version, sourceFileName, is);\r
+ }\r
+ }\r
+\r
+ if (autoCheckIn) {\r
+ checkInFileEntry(\r
+ userId, fileEntryId, majorVersion, changeLog,\r
+ serviceContext);\r
+ }\r
+ else if (!checkedOut &&\r
+ (serviceContext.getWorkflowAction() ==\r
+ WorkflowConstants.ACTION_PUBLISH)) {\r
+\r
+ String syncEvent = DLSyncConstants.EVENT_UPDATE;\r
+\r
+ if (dlFileVersion.getVersion().equals(\r
+ DLFileEntryConstants.VERSION_DEFAULT)) {\r
+\r
+ syncEvent = DLSyncConstants.EVENT_ADD;\r
+ }\r
+\r
+ startWorkflowInstance(\r
+ userId, serviceContext, dlFileVersion, syncEvent);\r
+ }\r
+ }\r
+ catch (PortalException pe) {\r
+ if (autoCheckIn) {\r
+ cancelCheckOut(userId, fileEntryId);\r
+ }\r
+\r
+ throw pe;\r
+ }\r
+ catch (SystemException se) {\r
+ if (autoCheckIn) {\r
+ cancelCheckOut(userId, fileEntryId);\r
+ }\r
+\r
+ throw se;\r
+ }\r
+ finally {\r
+ if (!autoCheckIn && !checkedOut) {\r
+ unlockFileEntry(fileEntryId);\r
+ }\r
+ }\r
+ \r
+ // MIGRATION MODIFICATION\r
+ return updateStatus(\r
+ user.getUserId(), dlFileVersion.getFileVersionId(), WorkflowConstants.STATUS_APPROVED,\r
+ new HashMap<String, Serializable>(), serviceContext);\r
+\r
+ // return dlFileEntryPersistence.findByPrimaryKey(fileEntryId);\r
+ }\r
+\r
+ protected DLFileVersion updateFileVersion(\r
+ User user, DLFileVersion dlFileVersion, String sourceFileName,\r
+ String extension, String mimeType, String title, String description,\r
+ String changeLog, String extraSettings, long fileEntryTypeId,\r
+ Map<String, Fields> fieldsMap, String version, long size,\r
+ int status, Date statusDate, ServiceContext serviceContext)\r
+ throws PortalException, SystemException {\r
+\r
+ dlFileVersion.setModifiedDate(statusDate);\r
+\r
+ if (Validator.isNotNull(sourceFileName)) {\r
+ dlFileVersion.setExtension(extension);\r
+ dlFileVersion.setMimeType(mimeType);\r
+ }\r
+\r
+ dlFileVersion.setTitle(title);\r
+ dlFileVersion.setDescription(description);\r
+ dlFileVersion.setChangeLog(changeLog);\r
+ dlFileVersion.setExtraSettings(extraSettings);\r
+ dlFileVersion.setFileEntryTypeId(fileEntryTypeId);\r
+ dlFileVersion.setVersion(version);\r
+ dlFileVersion.setSize(size);\r
+ dlFileVersion.setStatus(status);\r
+ dlFileVersion.setStatusByUserId(user.getUserId());\r
+ dlFileVersion.setStatusByUserName(user.getFullName());\r
+ dlFileVersion.setStatusDate(statusDate);\r
+ dlFileVersion.setExpandoBridgeAttributes(serviceContext);\r
+\r
+ dlFileVersion = dlFileVersionPersistence.update(dlFileVersion, false);\r
+\r
+ if ((fileEntryTypeId > 0) && (fieldsMap != null)) {\r
+ dlFileEntryMetadataLocalService.updateFileEntryMetadata(\r
+ fileEntryTypeId, dlFileVersion.getFileEntryId(),\r
+ dlFileVersion.getFileVersionId(), fieldsMap, serviceContext);\r
+ }\r
+\r
+ return dlFileVersion;\r
+ }\r
+\r
+ protected void validateFile(\r
+ long groupId, long folderId, long fileEntryId, String title,\r
+ String extension)\r
+ throws PortalException, SystemException {\r
+\r
+ DLFolder dlFolder = dlFolderPersistence.fetchByG_P_N(\r
+ groupId, folderId, title);\r
+\r
+ if (dlFolder != null) {\r
+ throw new DuplicateFolderNameException(title);\r
+ }\r
+\r
+ DLFileEntry dlFileEntry = dlFileEntryPersistence.fetchByG_F_T(\r
+ groupId, folderId, title);\r
+\r
+ if ((dlFileEntry != null) &&\r
+ (dlFileEntry.getFileEntryId() != fileEntryId)) {\r
+\r
+ throw new DuplicateFileException(title);\r
+ }\r
+\r
+ String periodAndExtension = StringPool.PERIOD + extension;\r
+\r
+ if (!title.endsWith(periodAndExtension)) {\r
+ title += periodAndExtension;\r
+\r
+ dlFileEntry = dlFileEntryPersistence.fetchByG_F_T(\r
+ groupId, folderId, title);\r
+\r
+ if ((dlFileEntry != null) &&\r
+ (dlFileEntry.getFileEntryId() != fileEntryId)) {\r
+\r
+ throw new DuplicateFileException(title);\r
+ }\r
+ }\r
+ }\r
+\r
+ protected void validateFile(\r
+ long groupId, long folderId, long fileEntryId, String title,\r
+ String extension, String sourceFileName, File file, InputStream is)\r
+ throws PortalException, SystemException {\r
+\r
+ if (Validator.isNotNull(sourceFileName)) {\r
+ if (file != null) {\r
+ DLStoreUtil.validate(\r
+ sourceFileName, extension, sourceFileName, true, file);\r
+ }\r
+ else {\r
+ DLStoreUtil.validate(\r
+ sourceFileName, extension, sourceFileName, true, is);\r
+ }\r
+ }\r
+\r
+ validateFileName(title);\r
+\r
+ DLStoreUtil.validate(title, false);\r
+\r
+ validateFile(groupId, folderId, fileEntryId, title, extension);\r
+ }\r
+\r
+ protected void validateFileName(String fileName) throws PortalException {\r
+ if (fileName.contains(StringPool.SLASH)) {\r
+ throw new FileNameException(fileName);\r
+ }\r
+ }\r
+\r
+ private static final int _DELETE_INTERVAL = 100;\r
+\r
+ private static Log _log = LogFactoryUtil.getLog(\r
+ DLFileEntryLocalServiceImpl.class);\r
+\r
+}
\ No newline at end of file