/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.sync.util; import com.liferay.document.library.kernel.model.DLFileEntry; import com.liferay.document.library.kernel.model.DLFolder; import com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil; import com.liferay.document.library.kernel.service.DLFolderLocalServiceUtil; import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery; import com.liferay.portal.kernel.dao.orm.DynamicQuery; import com.liferay.portal.kernel.dao.orm.Property; import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.service.GroupLocalServiceUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.sync.constants.SyncDLObjectConstants; import com.liferay.sync.model.SyncDLObject; import com.liferay.sync.service.SyncDLObjectLocalServiceUtil; import java.util.Date; import java.util.List; /** * @author Dennis Ju * @deprecated As of 1.2.0, with no direct replacement */ @Deprecated public class VerifyUtil { public static void verify() throws Exception { VerifyUtil verifyUtil = new VerifyUtil(); verifyUtil.doVerify(); } protected void doVerify() throws Exception { List<Group> groups = GroupLocalServiceUtil.getGroups( QueryUtil.ALL_POS, QueryUtil.ALL_POS); for (Group group : groups) { if (group.isStaged()) { continue; } if (_log.isDebugEnabled()) { _log.debug("Verifying group " + group.getGroupId()); } verifyDLFileEntriesAndFolders(group.getGroupId()); verifySyncDLObjects(group.getGroupId()); } if (_log.isDebugEnabled()) { _log.debug("Verification completed"); } } protected void logCount(long count, long totalCount, String name) { if (_log.isDebugEnabled()) { if ((count % 1000) == 0) { _log.debug("Verified " + count + "/" + totalCount + " " + name); } } } protected void verifyDLFileEntriesAndFolders(long groupId) throws Exception { _dlFoldersAndFileEntriesCount = 0; ActionableDynamicQuery dlFolderActionableDynamicQuery = DLFolderLocalServiceUtil.getActionableDynamicQuery(); dlFolderActionableDynamicQuery.setAddCriteriaMethod( new ActionableDynamicQuery.AddCriteriaMethod() { @Override public void addCriteria(DynamicQuery dynamicQuery) { Property hiddenProperty = PropertyFactoryUtil.forName( "hidden"); dynamicQuery.add(hiddenProperty.eq(false)); Property mountPointProperty = PropertyFactoryUtil.forName( "mountPoint"); dynamicQuery.add(mountPointProperty.eq(false)); Property statusProperty = PropertyFactoryUtil.forName( "status"); int[] workflowConstants = new int[] { WorkflowConstants.STATUS_APPROVED, WorkflowConstants.STATUS_IN_TRASH }; dynamicQuery.add(statusProperty.in(workflowConstants)); } }); dlFolderActionableDynamicQuery.setGroupId(groupId); dlFolderActionableDynamicQuery.setPerformActionMethod( new ActionableDynamicQuery.PerformActionMethod<DLFolder>() { @Override public void performAction(DLFolder dlFolder) throws PortalException { _dlFoldersAndFileEntriesCount++; logCount( _dlFoldersAndFileEntriesCount, _dlFoldersAndFileEntriesTotalCount, "DL folders and DL file entries"); try { if (dlFolder.getStatus() == WorkflowConstants.STATUS_APPROVED) { SyncUtil.addSyncDLObject( SyncUtil.toSyncDLObject( dlFolder, 0, StringPool.BLANK, SyncDLObjectConstants.EVENT_ADD)); } else { SyncUtil.addSyncDLObject( SyncUtil.toSyncDLObject( dlFolder, 0, StringPool.BLANK, SyncDLObjectConstants.EVENT_TRASH)); } } catch (Exception e) { _log.error(e, e); } } }); ActionableDynamicQuery dlFileEntryActionableDynamicQuery = DLFileEntryLocalServiceUtil.getActionableDynamicQuery(); dlFileEntryActionableDynamicQuery.setGroupId(groupId); dlFileEntryActionableDynamicQuery.setPerformActionMethod( new ActionableDynamicQuery.PerformActionMethod<DLFileEntry>() { @Override public void performAction(DLFileEntry dlFileEntry) throws PortalException { _dlFoldersAndFileEntriesCount++; logCount( _dlFoldersAndFileEntriesCount, _dlFoldersAndFileEntriesTotalCount, "DL folders and DL file entries"); if ((dlFileEntry.getStatus() != WorkflowConstants.STATUS_APPROVED) && !dlFileEntry.isInTrash()) { return; } try { SyncDLObject syncDLObject = SyncDLObjectLocalServiceUtil.fetchSyncDLObject( SyncDLObjectConstants.TYPE_FILE, dlFileEntry.getFileEntryId()); if (syncDLObject != null) { Date modifiedDate = dlFileEntry.getModifiedDate(); if (syncDLObject.getModifiedTime() >= modifiedDate.getTime()) { return; } } String event = null; if (dlFileEntry.getStatus() == WorkflowConstants.STATUS_APPROVED) { event = SyncDLObjectConstants.EVENT_ADD; } else { event = SyncDLObjectConstants.EVENT_TRASH; } if (dlFileEntry.isCheckedOut()) { SyncDLObject approvedFileEntrySyncDLObject = SyncUtil.toSyncDLObject( dlFileEntry, event, !dlFileEntry.isInTrash(), true); SyncUtil.addSyncDLObject( approvedFileEntrySyncDLObject); } SyncUtil.addSyncDLObject( SyncUtil.toSyncDLObject( dlFileEntry, event, !dlFileEntry.isInTrash())); } catch (Exception e) { _log.error(e, e); } } }); _dlFoldersAndFileEntriesTotalCount = dlFolderActionableDynamicQuery.performCount() + dlFileEntryActionableDynamicQuery.performCount(); dlFolderActionableDynamicQuery.performActions(); dlFileEntryActionableDynamicQuery.performActions(); logCount( _dlFoldersAndFileEntriesCount, _dlFoldersAndFileEntriesTotalCount, "DL folders and DL file entries"); } protected void verifySyncDLObjects(final long groupId) throws Exception { _syncDLObjectsCount = 0; ActionableDynamicQuery actionableDynamicQuery = SyncDLObjectLocalServiceUtil.getActionableDynamicQuery(); actionableDynamicQuery.setAddCriteriaMethod( new ActionableDynamicQuery.AddCriteriaMethod() { @Override public void addCriteria(DynamicQuery dynamicQuery) { Property eventProperty = PropertyFactoryUtil.forName( "event"); dynamicQuery.add( eventProperty.ne(SyncDLObjectConstants.EVENT_DELETE)); Property repositoryIdProperty = PropertyFactoryUtil.forName( "repositoryId"); dynamicQuery.add(repositoryIdProperty.eq(groupId)); } }); actionableDynamicQuery.setPerformActionMethod( new ActionableDynamicQuery.PerformActionMethod<SyncDLObject>() { @Override public void performAction(SyncDLObject syncDLObject) throws PortalException { _syncDLObjectsCount++; logCount( _syncDLObjectsCount, _syncDLObjectsTotalCount, "Sync DL objects"); String type = syncDLObject.getType(); if (type.equals(SyncDLObjectConstants.TYPE_FILE)) { DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.fetchDLFileEntry( syncDLObject.getTypePK()); if (dlFileEntry == null) { syncDLObject.setEvent( SyncDLObjectConstants.EVENT_DELETE); syncDLObject.setModifiedTime( System.currentTimeMillis()); SyncUtil.addSyncDLObject(syncDLObject); } } else if (type.equals(SyncDLObjectConstants.TYPE_FOLDER)) { DLFolder dlFolder = DLFolderLocalServiceUtil.fetchDLFolder( syncDLObject.getTypePK()); if (dlFolder == null) { syncDLObject.setEvent( SyncDLObjectConstants.EVENT_DELETE); syncDLObject.setModifiedTime( System.currentTimeMillis()); SyncUtil.addSyncDLObject(syncDLObject); } } else if (type.equals( SyncDLObjectConstants. TYPE_PRIVATE_WORKING_COPY)) { DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.fetchDLFileEntry( syncDLObject.getTypePK()); if ((dlFileEntry == null) || !DLFileEntryLocalServiceUtil.isFileEntryCheckedOut( syncDLObject.getTypePK())) { SyncDLObjectLocalServiceUtil.deleteSyncDLObject( syncDLObject); } } } }); _syncDLObjectsTotalCount = actionableDynamicQuery.performCount(); actionableDynamicQuery.performActions(); logCount( _syncDLObjectsTotalCount, _syncDLObjectsTotalCount, "Sync DL objects"); } private static final Log _log = LogFactoryUtil.getLog(VerifyUtil.class); private long _dlFoldersAndFileEntriesCount; private long _dlFoldersAndFileEntriesTotalCount; private long _syncDLObjectsCount; private long _syncDLObjectsTotalCount; }