/**
* 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.portlet.documentlibrary.service.impl;
import com.liferay.document.library.kernel.model.DLFileRank;
import com.liferay.document.library.kernel.model.DLFolder;
import com.liferay.document.library.kernel.util.comparator.FileRankCreateDateComparator;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.SystemEventConstants;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.systemevent.SystemEvent;
import com.liferay.portal.util.PropsValues;
import com.liferay.portlet.documentlibrary.service.base.DLFileRankLocalServiceBaseImpl;
import java.util.List;
/**
* @author Brian Wing Shun Chan
*/
public class DLFileRankLocalServiceImpl extends DLFileRankLocalServiceBaseImpl {
@Override
public DLFileRank addFileRank(
long groupId, long companyId, long userId, long fileEntryId,
ServiceContext serviceContext) {
long fileRankId = counterLocalService.increment();
DLFileRank dlFileRank = dlFileRankPersistence.create(fileRankId);
dlFileRank.setGroupId(groupId);
dlFileRank.setCompanyId(companyId);
dlFileRank.setUserId(userId);
dlFileRank.setCreateDate(serviceContext.getCreateDate(null));
dlFileRank.setFileEntryId(fileEntryId);
dlFileRank.setActive(true);
try {
dlFileRankPersistence.update(dlFileRank);
}
catch (SystemException se) {
if (_log.isWarnEnabled()) {
_log.warn(
"Add failed, fetch {companyId=" + companyId + ", userId=" +
userId + ", fileEntryId=" + fileEntryId + "}");
}
dlFileRank = dlFileRankPersistence.fetchByC_U_F(
companyId, userId, fileEntryId, false);
if (dlFileRank == null) {
throw se;
}
}
return dlFileRank;
}
@Override
public void checkFileRanks() {
List<Object[]> staleFileRanks = dlFileRankFinder.findByStaleRanks(
PropsValues.DL_FILE_RANK_MAX_SIZE);
for (Object[] staleFileRank : staleFileRanks) {
long groupId = (Long)staleFileRank[0];
long userId = (Long)staleFileRank[1];
List<DLFileRank> dlFileRanks = dlFileRankPersistence.findByG_U_A(
groupId, userId, true, PropsValues.DL_FILE_RANK_MAX_SIZE,
QueryUtil.ALL_POS, new FileRankCreateDateComparator());
for (DLFileRank dlFileRank : dlFileRanks) {
long fileRankId = dlFileRank.getFileRankId();
try {
dlFileRankPersistence.remove(dlFileRank);
}
catch (Exception e) {
if (_log.isWarnEnabled()) {
_log.warn("Unable to remove file rank " + fileRankId);
}
}
}
}
}
@Override
@SystemEvent(type = SystemEventConstants.TYPE_DELETE)
public void deleteFileRank(DLFileRank dlFileRank) {
dlFileRankPersistence.remove(dlFileRank);
}
@Override
public void deleteFileRank(long fileRankId) throws PortalException {
DLFileRank dlFileRank = dlFileRankPersistence.findByPrimaryKey(
fileRankId);
dlFileRankLocalService.deleteFileRank(dlFileRank);
}
@Override
public void deleteFileRanksByFileEntryId(long fileEntryId) {
List<DLFileRank> dlFileRanks = dlFileRankPersistence.findByFileEntryId(
fileEntryId);
for (DLFileRank dlFileRank : dlFileRanks) {
dlFileRankLocalService.deleteFileRank(dlFileRank);
}
}
@Override
public void deleteFileRanksByUserId(long userId) {
List<DLFileRank> dlFileRanks = dlFileRankPersistence.findByUserId(
userId);
for (DLFileRank dlFileRank : dlFileRanks) {
dlFileRankLocalService.deleteFileRank(dlFileRank);
}
}
@Override
public void disableFileRanks(long fileEntryId) {
List<DLFileRank> dlFileRanks = dlFileRankPersistence.findByFileEntryId(
fileEntryId);
for (DLFileRank dlFileRank : dlFileRanks) {
dlFileRank.setActive(false);
dlFileRankPersistence.update(dlFileRank);
}
}
@Override
public void disableFileRanksByFolderId(long folderId)
throws PortalException {
DLFolder dlFolder = dlFolderLocalService.getDLFolder(folderId);
updateFileRanks(dlFolder, false);
}
@Override
public void enableFileRanks(long fileEntryId) {
List<DLFileRank> dlFileRanks = dlFileRankPersistence.findByFileEntryId(
fileEntryId);
for (DLFileRank dlFileRank : dlFileRanks) {
dlFileRank.setActive(true);
dlFileRankPersistence.update(dlFileRank);
}
}
@Override
public void enableFileRanksByFolderId(long folderId)
throws PortalException {
DLFolder dlFolder = dlFolderLocalService.getDLFolder(folderId);
updateFileRanks(dlFolder, true);
}
@Override
public List<DLFileRank> getFileRanks(long groupId, long userId) {
return dlFileRankPersistence.findByG_U_A(
groupId, userId, true, 0, PropsValues.DL_FILE_RANK_MAX_SIZE,
new FileRankCreateDateComparator());
}
@Override
public DLFileRank updateFileRank(
long groupId, long companyId, long userId, long fileEntryId,
ServiceContext serviceContext) {
if (!PropsValues.DL_FILE_RANK_ENABLED) {
return null;
}
DLFileRank dlFileRank = dlFileRankPersistence.fetchByC_U_F(
companyId, userId, fileEntryId);
if (dlFileRank != null) {
dlFileRank.setCreateDate(serviceContext.getCreateDate(null));
try {
dlFileRankPersistence.update(dlFileRank);
}
catch (Exception e) {
if (_log.isWarnEnabled()) {
_log.warn(
"Update failed, fetch {companyId=" + companyId +
", userId=" + userId + ", fileEntryId=" +
fileEntryId + "}");
}
}
}
else {
dlFileRank = addFileRank(
groupId, companyId, userId, fileEntryId, serviceContext);
}
return dlFileRank;
}
protected void updateFileRanks(DLFolder dlFolder, boolean active) {
List<DLFolder> dlFolders = dlFolderPersistence.findByG_P(
dlFolder.getGroupId(), dlFolder.getFolderId());
for (DLFolder curDLFolder : dlFolders) {
updateFileRanks(curDLFolder, active);
}
List<DLFileRank> dlFileRanks = dlFileRankFinder.findByFolderId(
dlFolder.getFolderId());
for (DLFileRank dlFileRank : dlFileRanks) {
dlFileRank.setActive(active);
dlFileRankPersistence.update(dlFileRank);
}
}
private static final Log _log = LogFactoryUtil.getLog(
DLFileRankLocalServiceImpl.class);
}