--- /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.portal.verify;\r
+\r
+import com.liferay.counter.service.CounterLocalServiceUtil;\r
+import com.liferay.portal.kernel.exception.PortalException;\r
+import com.liferay.portal.kernel.exception.SystemException;\r
+import com.liferay.portal.kernel.log.Log;\r
+import com.liferay.portal.kernel.log.LogFactoryUtil;\r
+import com.liferay.portal.kernel.repository.model.FileEntry;\r
+import com.liferay.portal.kernel.repository.model.FileVersion;\r
+import com.liferay.portal.kernel.util.ContentTypes;\r
+import com.liferay.portal.kernel.util.GetterUtil;\r
+import com.liferay.portal.kernel.util.ListUtil;\r
+import com.liferay.portal.kernel.util.MimeTypesUtil;\r
+import com.liferay.portal.kernel.workflow.WorkflowConstants;\r
+import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;\r
+import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntry;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntryType;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntryTypeConstants;\r
+import com.liferay.portlet.documentlibrary.model.DLFileVersion;\r
+import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalServiceUtil;\r
+import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;\r
+import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalServiceUtil;\r
+import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;\r
+import com.liferay.portlet.documentlibrary.store.DLStoreUtil;\r
+import com.liferay.portlet.documentlibrary.util.DLUtil;\r
+import com.liferay.portlet.documentlibrary.util.comparator.FileVersionVersionComparator;\r
+import com.pentila.entSavoie.cartable.model.DlLink;\r
+import com.pentila.entSavoie.cartable.service.DlLinkLocalServiceUtil;\r
+\r
+import java.io.InputStream;\r
+\r
+import java.util.Collections;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+/**\r
+ * @author Raymond Augé\r
+ * @author Douglas Wong\r
+ * @author Alexander Chow\r
+ */\r
+public class VerifyDocumentLibrary extends VerifyProcess {\r
+\r
+ protected void addDLFileVersion(DLFileEntry dlFileEntry)\r
+ throws SystemException {\r
+\r
+ long fileVersionId = CounterLocalServiceUtil.increment();\r
+\r
+ DLFileVersion dlFileVersion =\r
+ DLFileVersionLocalServiceUtil.createDLFileVersion(fileVersionId);\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(dlFileEntry.getModifiedDate());\r
+ dlFileVersion.setModifiedDate(dlFileEntry.getModifiedDate());\r
+ dlFileVersion.setRepositoryId(dlFileEntry.getRepositoryId());\r
+ dlFileVersion.setFolderId(dlFileEntry.getFolderId());\r
+ dlFileVersion.setFileEntryId(dlFileEntry.getFileEntryId());\r
+ dlFileVersion.setExtension(dlFileEntry.getExtension());\r
+ dlFileVersion.setMimeType(dlFileEntry.getMimeType());\r
+ dlFileVersion.setTitle(dlFileEntry.getTitle());\r
+ dlFileVersion.setDescription(dlFileEntry.getDescription());\r
+ dlFileVersion.setExtraSettings(dlFileEntry.getExtraSettings());\r
+ dlFileVersion.setFileEntryTypeId(dlFileEntry.getFileEntryTypeId());\r
+ dlFileVersion.setVersion(dlFileEntry.getVersion());\r
+ dlFileVersion.setSize(dlFileEntry.getSize());\r
+ dlFileVersion.setStatus(WorkflowConstants.STATUS_APPROVED);\r
+ dlFileVersion.setStatusByUserId(versionUserId);\r
+ dlFileVersion.setStatusByUserName(versionUserName);\r
+ dlFileVersion.setStatusDate(new Date());\r
+\r
+ DLFileVersionLocalServiceUtil.updateDLFileVersion(dlFileVersion);\r
+ }\r
+\r
+ protected void checkDLFileEntryType() throws Exception {\r
+ DLFileEntryType dlFileEntryType =\r
+ DLFileEntryTypeLocalServiceUtil.fetchDLFileEntryType(\r
+ DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT);\r
+\r
+ if (dlFileEntryType != null) {\r
+ return;\r
+ }\r
+\r
+ Date now = new Date();\r
+\r
+ dlFileEntryType = DLFileEntryTypeLocalServiceUtil.createDLFileEntryType(\r
+ DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT);\r
+\r
+ dlFileEntryType.setCreateDate(now);\r
+ dlFileEntryType.setModifiedDate(now);\r
+ dlFileEntryType.setName(DLFileEntryTypeConstants.NAME_BASIC_DOCUMENT);\r
+\r
+ DLFileEntryTypeLocalServiceUtil.updateDLFileEntryType(dlFileEntryType);\r
+ }\r
+\r
+ protected void checkMimeTypes() throws Exception {\r
+ List<DLFileEntry> dlFileEntries =\r
+ DLFileEntryLocalServiceUtil.getFileEntriesByMimeType(\r
+ ContentTypes.APPLICATION_OCTET_STREAM);\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug(\r
+ "Processing " + dlFileEntries.size() + " file entries with " +\r
+ ContentTypes.APPLICATION_OCTET_STREAM);\r
+ }\r
+\r
+ for (DLFileEntry dlFileEntry : dlFileEntries) {\r
+ \r
+ DLFileEntry dlFileEntryTarget = dlFileEntry;\r
+ \r
+ // check for a link --> dropBox use of link so no version, don't care of it!!!!\r
+ try {\r
+ DlLink dll = DlLinkLocalServiceUtil.getDlFileLinkByTarget(dlFileEntry.getFileEntryId());\r
+ // we have a link so we take the source content !!!!!\r
+ dlFileEntryTarget = DLFileEntryLocalServiceUtil.getDLFileEntry(dll.getSourceId());\r
+ } catch (Exception e1) {\r
+ continue;\r
+ }\r
+ \r
+ InputStream inputStream =\r
+ DLFileEntryLocalServiceUtil.getFileAsStream(\r
+ dlFileEntryTarget.getUserId(), dlFileEntryTarget.getFileEntryId(),\r
+ dlFileEntryTarget.getVersion(), false);\r
+\r
+ String title = DLUtil.getTitleWithExtension(\r
+ dlFileEntry.getTitle(), dlFileEntry.getExtension());\r
+\r
+ String mimeType = MimeTypesUtil.getContentType(inputStream, title);\r
+\r
+ if (mimeType.equals(ContentTypes.APPLICATION_OCTET_STREAM)) {\r
+ continue;\r
+ }\r
+\r
+ dlFileEntry.setMimeType(mimeType);\r
+\r
+ DLFileEntryLocalServiceUtil.updateDLFileEntry(dlFileEntry);\r
+\r
+ DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();\r
+\r
+ dlFileVersion.setMimeType(mimeType);\r
+\r
+ DLFileVersionLocalServiceUtil.updateDLFileVersion(dlFileVersion);\r
+ }\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Fixed file entries with invalid mime types");\r
+ }\r
+ }\r
+\r
+ protected void checkMisversionedDLFileEntries() throws Exception {\r
+ List<DLFileEntry> dlFileEntries =\r
+ DLFileEntryLocalServiceUtil.getMisversionedFileEntries();\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug(\r
+ "Processing " + dlFileEntries.size() +\r
+ " file entries with invalid version");\r
+ }\r
+\r
+ for (DLFileEntry dlFileEntry : dlFileEntries) {\r
+ copyDLFileEntry(dlFileEntry);\r
+\r
+ addDLFileVersion(dlFileEntry);\r
+ }\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Fixed misversioned file entries");\r
+ }\r
+ }\r
+\r
+ protected void copyDLFileEntry(DLFileEntry dlFileEntry)\r
+ throws PortalException, SystemException {\r
+\r
+ long companyId = dlFileEntry.getCompanyId();\r
+ long dataRepositoryId = dlFileEntry.getDataRepositoryId();\r
+ String name = dlFileEntry.getName();\r
+ String version = dlFileEntry.getVersion();\r
+\r
+ if (DLStoreUtil.hasFile(companyId, dataRepositoryId, name, version)) {\r
+ return;\r
+ }\r
+\r
+ FileVersionVersionComparator comparator =\r
+ new FileVersionVersionComparator();\r
+\r
+ List<DLFileVersion> dlFileVersions = dlFileEntry.getFileVersions(\r
+ WorkflowConstants.STATUS_APPROVED);\r
+\r
+ if (dlFileVersions.isEmpty()) {\r
+ dlFileVersions = dlFileEntry.getFileVersions(\r
+ WorkflowConstants.STATUS_ANY);\r
+ }\r
+\r
+ if (dlFileVersions.isEmpty()) {\r
+ DLStoreUtil.addFile(companyId, dataRepositoryId, name, new byte[0]);\r
+\r
+ return;\r
+ }\r
+\r
+ dlFileVersions = ListUtil.copy(dlFileVersions);\r
+\r
+ Collections.sort(dlFileVersions, comparator);\r
+\r
+ DLFileVersion dlFileVersion = dlFileVersions.get(0);\r
+\r
+ DLStoreUtil.copyFileVersion(\r
+ companyId, dataRepositoryId, name, dlFileVersion.getVersion(),\r
+ version);\r
+ }\r
+\r
+ @Override\r
+ protected void doVerify() throws Exception {\r
+ checkMisversionedDLFileEntries();\r
+\r
+ checkDLFileEntryType();\r
+ checkMimeTypes();\r
+ removeOrphanedDLFileEntries();\r
+ updateAssets();\r
+ }\r
+\r
+ protected void removeOrphanedDLFileEntries() throws Exception {\r
+ List<DLFileEntry> dlFileEntries =\r
+ DLFileEntryLocalServiceUtil.getOrphanedFileEntries();\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug(\r
+ "Processing " + dlFileEntries.size() +\r
+ " file entries with no group");\r
+ }\r
+\r
+ for (DLFileEntry dlFileEntry : dlFileEntries) {\r
+ try {\r
+ DLFileEntryLocalServiceUtil.deleteFileEntry(\r
+ dlFileEntry.getFileEntryId());\r
+ }\r
+ catch (Exception e) {\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(\r
+ "Unable to remove file entry " +\r
+ dlFileEntry.getFileEntryId() + ": " +\r
+ e.getMessage());\r
+ }\r
+ }\r
+ }\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Removed orphaned file entries");\r
+ }\r
+ }\r
+\r
+ protected void updateAssets() throws Exception {\r
+ List<DLFileEntry> dlFileEntries =\r
+ DLFileEntryLocalServiceUtil.getNoAssetFileEntries();\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug(\r
+ "Processing " + dlFileEntries.size() +\r
+ " file entries with no asset");\r
+ }\r
+\r
+ for (DLFileEntry dlFileEntry : dlFileEntries) {\r
+ FileEntry fileEntry = new LiferayFileEntry(dlFileEntry);\r
+ FileVersion fileVersion = new LiferayFileVersion(\r
+ dlFileEntry.getFileVersion());\r
+\r
+ try {\r
+ DLAppHelperLocalServiceUtil.updateAsset(\r
+ dlFileEntry.getUserId(), fileEntry, fileVersion, null, null,\r
+ null);\r
+ }\r
+ catch (Exception e) {\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(\r
+ "Unable to update asset for file entry " +\r
+ dlFileEntry.getFileEntryId() + ": " +\r
+ e.getMessage());\r
+ }\r
+ }\r
+ }\r
+\r
+ if (_log.isDebugEnabled()) {\r
+ _log.debug("Assets verified for file entries");\r
+ }\r
+ }\r
+\r
+ private static Log _log = LogFactoryUtil.getLog(\r
+ VerifyDocumentLibrary.class);\r
+\r
+}
\ No newline at end of file