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.portal.verify;
\r
17 import com.liferay.counter.service.CounterLocalServiceUtil;
\r
18 import com.liferay.portal.kernel.exception.PortalException;
\r
19 import com.liferay.portal.kernel.exception.SystemException;
\r
20 import com.liferay.portal.kernel.log.Log;
\r
21 import com.liferay.portal.kernel.log.LogFactoryUtil;
\r
22 import com.liferay.portal.kernel.repository.model.FileEntry;
\r
23 import com.liferay.portal.kernel.repository.model.FileVersion;
\r
24 import com.liferay.portal.kernel.util.ContentTypes;
\r
25 import com.liferay.portal.kernel.util.GetterUtil;
\r
26 import com.liferay.portal.kernel.util.ListUtil;
\r
27 import com.liferay.portal.kernel.util.MimeTypesUtil;
\r
28 import com.liferay.portal.kernel.workflow.WorkflowConstants;
\r
29 import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
\r
30 import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
\r
31 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
\r
32 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
\r
33 import com.liferay.portlet.documentlibrary.model.DLFileEntryTypeConstants;
\r
34 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
\r
35 import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalServiceUtil;
\r
36 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
\r
37 import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalServiceUtil;
\r
38 import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
\r
39 import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
\r
40 import com.liferay.portlet.documentlibrary.util.DLUtil;
\r
41 import com.liferay.portlet.documentlibrary.util.comparator.FileVersionVersionComparator;
\r
42 import com.pentila.entSavoie.cartable.model.DlLink;
\r
43 import com.pentila.entSavoie.cartable.service.DlLinkLocalServiceUtil;
\r
45 import java.io.InputStream;
\r
47 import java.util.Collections;
\r
48 import java.util.Date;
\r
49 import java.util.List;
\r
52 * @author Raymond Augé
\r
53 * @author Douglas Wong
\r
54 * @author Alexander Chow
\r
56 public class VerifyDocumentLibrary extends VerifyProcess {
\r
58 protected void addDLFileVersion(DLFileEntry dlFileEntry)
\r
59 throws SystemException {
\r
61 long fileVersionId = CounterLocalServiceUtil.increment();
\r
63 DLFileVersion dlFileVersion =
\r
64 DLFileVersionLocalServiceUtil.createDLFileVersion(fileVersionId);
\r
66 dlFileVersion.setGroupId(dlFileEntry.getGroupId());
\r
67 dlFileVersion.setCompanyId(dlFileEntry.getCompanyId());
\r
69 long versionUserId = dlFileEntry.getVersionUserId();
\r
71 if (versionUserId <= 0) {
\r
72 versionUserId = dlFileEntry.getUserId();
\r
75 dlFileVersion.setUserId(versionUserId);
\r
77 String versionUserName = GetterUtil.getString(
\r
78 dlFileEntry.getVersionUserName(), dlFileEntry.getUserName());
\r
80 dlFileVersion.setUserName(versionUserName);
\r
82 dlFileVersion.setCreateDate(dlFileEntry.getModifiedDate());
\r
83 dlFileVersion.setModifiedDate(dlFileEntry.getModifiedDate());
\r
84 dlFileVersion.setRepositoryId(dlFileEntry.getRepositoryId());
\r
85 dlFileVersion.setFolderId(dlFileEntry.getFolderId());
\r
86 dlFileVersion.setFileEntryId(dlFileEntry.getFileEntryId());
\r
87 dlFileVersion.setExtension(dlFileEntry.getExtension());
\r
88 dlFileVersion.setMimeType(dlFileEntry.getMimeType());
\r
89 dlFileVersion.setTitle(dlFileEntry.getTitle());
\r
90 dlFileVersion.setDescription(dlFileEntry.getDescription());
\r
91 dlFileVersion.setExtraSettings(dlFileEntry.getExtraSettings());
\r
92 dlFileVersion.setFileEntryTypeId(dlFileEntry.getFileEntryTypeId());
\r
93 dlFileVersion.setVersion(dlFileEntry.getVersion());
\r
94 dlFileVersion.setSize(dlFileEntry.getSize());
\r
95 dlFileVersion.setStatus(WorkflowConstants.STATUS_APPROVED);
\r
96 dlFileVersion.setStatusByUserId(versionUserId);
\r
97 dlFileVersion.setStatusByUserName(versionUserName);
\r
98 dlFileVersion.setStatusDate(new Date());
\r
100 DLFileVersionLocalServiceUtil.updateDLFileVersion(dlFileVersion);
\r
103 protected void checkDLFileEntryType() throws Exception {
\r
104 DLFileEntryType dlFileEntryType =
\r
105 DLFileEntryTypeLocalServiceUtil.fetchDLFileEntryType(
\r
106 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT);
\r
108 if (dlFileEntryType != null) {
\r
112 Date now = new Date();
\r
114 dlFileEntryType = DLFileEntryTypeLocalServiceUtil.createDLFileEntryType(
\r
115 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT);
\r
117 dlFileEntryType.setCreateDate(now);
\r
118 dlFileEntryType.setModifiedDate(now);
\r
119 dlFileEntryType.setName(DLFileEntryTypeConstants.NAME_BASIC_DOCUMENT);
\r
121 DLFileEntryTypeLocalServiceUtil.updateDLFileEntryType(dlFileEntryType);
\r
124 protected void checkMimeTypes() throws Exception {
\r
125 List<DLFileEntry> dlFileEntries =
\r
126 DLFileEntryLocalServiceUtil.getFileEntriesByMimeType(
\r
127 ContentTypes.APPLICATION_OCTET_STREAM);
\r
129 if (_log.isDebugEnabled()) {
\r
131 "Processing " + dlFileEntries.size() + " file entries with " +
\r
132 ContentTypes.APPLICATION_OCTET_STREAM);
\r
135 for (DLFileEntry dlFileEntry : dlFileEntries) {
\r
137 DLFileEntry dlFileEntryTarget = dlFileEntry;
\r
139 // check for a link --> dropBox use of link so no version, don't care of it!!!!
\r
141 DlLink dll = DlLinkLocalServiceUtil.getDlFileLinkByTarget(dlFileEntry.getFileEntryId());
\r
142 // we have a link so we take the source content !!!!!
\r
143 dlFileEntryTarget = DLFileEntryLocalServiceUtil.getDLFileEntry(dll.getSourceId());
\r
144 } catch (Exception e1) {
\r
148 InputStream inputStream =
\r
149 DLFileEntryLocalServiceUtil.getFileAsStream(
\r
150 dlFileEntryTarget.getUserId(), dlFileEntryTarget.getFileEntryId(),
\r
151 dlFileEntryTarget.getVersion(), false);
\r
153 String title = DLUtil.getTitleWithExtension(
\r
154 dlFileEntry.getTitle(), dlFileEntry.getExtension());
\r
156 String mimeType = MimeTypesUtil.getContentType(inputStream, title);
\r
158 if (mimeType.equals(ContentTypes.APPLICATION_OCTET_STREAM)) {
\r
162 dlFileEntry.setMimeType(mimeType);
\r
164 DLFileEntryLocalServiceUtil.updateDLFileEntry(dlFileEntry);
\r
166 DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();
\r
168 dlFileVersion.setMimeType(mimeType);
\r
170 DLFileVersionLocalServiceUtil.updateDLFileVersion(dlFileVersion);
\r
173 if (_log.isDebugEnabled()) {
\r
174 _log.debug("Fixed file entries with invalid mime types");
\r
178 protected void checkMisversionedDLFileEntries() throws Exception {
\r
179 List<DLFileEntry> dlFileEntries =
\r
180 DLFileEntryLocalServiceUtil.getMisversionedFileEntries();
\r
182 if (_log.isDebugEnabled()) {
\r
184 "Processing " + dlFileEntries.size() +
\r
185 " file entries with invalid version");
\r
188 for (DLFileEntry dlFileEntry : dlFileEntries) {
\r
189 copyDLFileEntry(dlFileEntry);
\r
191 addDLFileVersion(dlFileEntry);
\r
194 if (_log.isDebugEnabled()) {
\r
195 _log.debug("Fixed misversioned file entries");
\r
199 protected void copyDLFileEntry(DLFileEntry dlFileEntry)
\r
200 throws PortalException, SystemException {
\r
202 long companyId = dlFileEntry.getCompanyId();
\r
203 long dataRepositoryId = dlFileEntry.getDataRepositoryId();
\r
204 String name = dlFileEntry.getName();
\r
205 String version = dlFileEntry.getVersion();
\r
207 if (DLStoreUtil.hasFile(companyId, dataRepositoryId, name, version)) {
\r
211 FileVersionVersionComparator comparator =
\r
212 new FileVersionVersionComparator();
\r
214 List<DLFileVersion> dlFileVersions = dlFileEntry.getFileVersions(
\r
215 WorkflowConstants.STATUS_APPROVED);
\r
217 if (dlFileVersions.isEmpty()) {
\r
218 dlFileVersions = dlFileEntry.getFileVersions(
\r
219 WorkflowConstants.STATUS_ANY);
\r
222 if (dlFileVersions.isEmpty()) {
\r
223 DLStoreUtil.addFile(companyId, dataRepositoryId, name, new byte[0]);
\r
228 dlFileVersions = ListUtil.copy(dlFileVersions);
\r
230 Collections.sort(dlFileVersions, comparator);
\r
232 DLFileVersion dlFileVersion = dlFileVersions.get(0);
\r
234 DLStoreUtil.copyFileVersion(
\r
235 companyId, dataRepositoryId, name, dlFileVersion.getVersion(),
\r
240 protected void doVerify() throws Exception {
\r
241 checkMisversionedDLFileEntries();
\r
243 checkDLFileEntryType();
\r
245 removeOrphanedDLFileEntries();
\r
249 protected void removeOrphanedDLFileEntries() throws Exception {
\r
250 List<DLFileEntry> dlFileEntries =
\r
251 DLFileEntryLocalServiceUtil.getOrphanedFileEntries();
\r
253 if (_log.isDebugEnabled()) {
\r
255 "Processing " + dlFileEntries.size() +
\r
256 " file entries with no group");
\r
259 for (DLFileEntry dlFileEntry : dlFileEntries) {
\r
261 DLFileEntryLocalServiceUtil.deleteFileEntry(
\r
262 dlFileEntry.getFileEntryId());
\r
264 catch (Exception e) {
\r
265 if (_log.isWarnEnabled()) {
\r
267 "Unable to remove file entry " +
\r
268 dlFileEntry.getFileEntryId() + ": " +
\r
274 if (_log.isDebugEnabled()) {
\r
275 _log.debug("Removed orphaned file entries");
\r
279 protected void updateAssets() throws Exception {
\r
280 List<DLFileEntry> dlFileEntries =
\r
281 DLFileEntryLocalServiceUtil.getNoAssetFileEntries();
\r
283 if (_log.isDebugEnabled()) {
\r
285 "Processing " + dlFileEntries.size() +
\r
286 " file entries with no asset");
\r
289 for (DLFileEntry dlFileEntry : dlFileEntries) {
\r
290 FileEntry fileEntry = new LiferayFileEntry(dlFileEntry);
\r
291 FileVersion fileVersion = new LiferayFileVersion(
\r
292 dlFileEntry.getFileVersion());
\r
295 DLAppHelperLocalServiceUtil.updateAsset(
\r
296 dlFileEntry.getUserId(), fileEntry, fileVersion, null, null,
\r
299 catch (Exception e) {
\r
300 if (_log.isWarnEnabled()) {
\r
302 "Unable to update asset for file entry " +
\r
303 dlFileEntry.getFileEntryId() + ": " +
\r
309 if (_log.isDebugEnabled()) {
\r
310 _log.debug("Assets verified for file entries");
\r
314 private static Log _log = LogFactoryUtil.getLog(
\r
315 VerifyDocumentLibrary.class);
\r