/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This file is part of Liferay Social Office. Liferay Social Office is free * software: you can redistribute it and/or modify it under the terms of the GNU * Affero General Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. * * Liferay Social Office 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 Affero General Public License * for more details. * * You should have received a copy of the GNU General Public License along with * Liferay Social Office. If not, see http://www.gnu.org/licenses/agpl-3.0.html. */ package com.liferay.tasks.service.persistence.impl; import com.liferay.portal.kernel.dao.orm.QueryPos; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.dao.orm.SQLQuery; import com.liferay.portal.kernel.dao.orm.Session; import com.liferay.portal.kernel.dao.orm.Type; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.tasks.model.TasksEntry; import com.liferay.tasks.model.TasksEntryConstants; import com.liferay.tasks.model.impl.TasksEntryImpl; import com.liferay.tasks.service.persistence.TasksEntryFinder; import com.liferay.tasks.service.persistence.TasksEntryUtil; import com.liferay.util.dao.orm.CustomSQLUtil; import java.util.Iterator; import java.util.List; /** * @author Ryan Park */ public class TasksEntryFinderImpl extends TasksEntryFinderBaseImpl implements TasksEntryFinder { public static final String COUNT_BY_G_U_P_A_S_T_N = TasksEntryFinder.class.getName() + ".countByG_U_P_A_S_T_N"; public static final String FIND_BY_G_U_P_A_S_T_N = TasksEntryFinder.class.getName() + ".findByG_U_P_A_S_T_N"; public static final String JOIN_BY_ASSET_TAGS = TasksEntryFinder.class.getName() + ".joinByAssetTags"; public static final String JOIN_BY_NOT_ASSET_TAGS = TasksEntryFinder.class.getName() + ".joinByNotAssetTags"; public int countByG_U_P_A_S_T_N( long groupId, long userId, int priority, long assigneeUserId, int status, long[] assetTagIds, long[] notAssetTagIds) { if ((priority <= 0) && (assetTagIds.length == 0) && (notAssetTagIds.length == 0)) { if ((userId > 0) && (assigneeUserId <= 0)) { return countByG_U_S(groupId, userId, status); } if ((userId <= 0) && (assigneeUserId > 0)) { return countByG_A_S(groupId, assigneeUserId, status); } } Session session = null; try { session = openSession(); String sql = CustomSQLUtil.get(COUNT_BY_G_U_P_A_S_T_N); sql = StringUtil.replace( sql, "[$JOIN$]", getJoin(assetTagIds, notAssetTagIds)); sql = StringUtil.replace( sql, "[$ASSET_TAG_TAG_IDS$]", getAssetTagTagIds(assetTagIds, notAssetTagIds)); if (assetTagIds.length > 0) { sql = StringUtil.replaceLast(sql, "WHERE", StringPool.BLANK); } sql = StringUtil.replace(sql, "[$GROUP_ID$]", getGroupId(groupId)); sql = StringUtil.replace(sql, "[$USER_ID$]", getUserId(userId)); sql = StringUtil.replace( sql, "[$PRIORITY$]", getPriority(priority)); sql = StringUtil.replace( sql, "[$ASSIGNEE_USER_ID$]", getAssigneeUserId(assigneeUserId)); int[] statuses = getStatuses(status); sql = StringUtil.replace(sql, "[$STATUS$]", getStatus(statuses)); sql = StringUtil.replaceLast(sql, "AND", StringPool.BLANK); SQLQuery q = session.createSynchronizedSQLQuery(sql); q.addScalar(COUNT_COLUMN_NAME, Type.LONG); QueryPos qPos = QueryPos.getInstance(q); if ((assetTagIds.length > 0) || (notAssetTagIds.length > 0)) { qPos.add(PortalUtil.getClassNameId(TasksEntry.class.getName())); qPos.add(assetTagIds); qPos.add(notAssetTagIds); } if (groupId > 0) { qPos.add(groupId); } if (userId > 0) { qPos.add(userId); } if (priority > 0) { qPos.add(priority); } if (assigneeUserId > 0) { qPos.add(assigneeUserId); } qPos.add(statuses); Iterator<Long> itr = q.iterate(); if (itr.hasNext()) { Long count = itr.next(); if (count != null) { return count.intValue(); } } return 0; } catch (Exception e) { throw new SystemException(e); } finally { closeSession(session); } } public List<TasksEntry> findByG_U_P_A_S_T_N( long groupId, long userId, int priority, long assigneeUserId, int status, long[] assetTagIds, long[] notAssetTagIds, int start, int end) { if ((priority <= 0) && (assetTagIds.length == 0) && (notAssetTagIds.length == 0)) { if ((userId > 0) && (assigneeUserId <= 0)) { return findByG_U_S(groupId, userId, status, start, end); } if ((userId <= 0) && (assigneeUserId > 0)) { return findByG_A_S(groupId, assigneeUserId, status, start, end); } } Session session = null; try { session = openSession(); String sql = CustomSQLUtil.get(FIND_BY_G_U_P_A_S_T_N); sql = StringUtil.replace( sql, "[$JOIN$]", getJoin(assetTagIds, notAssetTagIds)); sql = StringUtil.replace( sql, "[$ASSET_TAG_TAG_IDS$]", getAssetTagTagIds(assetTagIds, notAssetTagIds)); if (assetTagIds.length > 0) { sql = StringUtil.replaceLast(sql, "WHERE", StringPool.BLANK); } sql = StringUtil.replace(sql, "[$GROUP_ID$]", getGroupId(groupId)); sql = StringUtil.replace(sql, "[$USER_ID$]", getUserId(userId)); sql = StringUtil.replace( sql, "[$PRIORITY$]", getPriority(priority)); sql = StringUtil.replace( sql, "[$ASSIGNEE_USER_ID$]", getAssigneeUserId(assigneeUserId)); int[] statuses = getStatuses(status); sql = StringUtil.replace(sql, "[$STATUS$]", getStatus(statuses)); sql = StringUtil.replaceLast(sql, "AND", StringPool.BLANK); SQLQuery q = session.createSynchronizedSQLQuery(sql); q.addEntity("TMS_TasksEntry", TasksEntryImpl.class); QueryPos qPos = QueryPos.getInstance(q); if ((assetTagIds.length > 0) || (notAssetTagIds.length > 0)) { qPos.add(PortalUtil.getClassNameId(TasksEntry.class.getName())); qPos.add(assetTagIds); qPos.add(notAssetTagIds); } if (groupId > 0) { qPos.add(groupId); } if (userId > 0) { qPos.add(userId); } if (priority > 0) { qPos.add(priority); } if (assigneeUserId > 0) { qPos.add(assigneeUserId); } qPos.add(statuses); return (List<TasksEntry>)QueryUtil.list( q, getDialect(), start, end); } catch (Exception e) { throw new SystemException(e); } finally { closeSession(session); } } protected int countByG_A_S(long groupId, long assigneeUserId, int status) { if (status != TasksEntryConstants.STATUS_ALL) { if (groupId > 0) { return TasksEntryUtil.countByG_A_S( groupId, assigneeUserId, getStatuses(status)); } return TasksEntryUtil.countByA_S( assigneeUserId, getStatuses(status)); } if (groupId > 0) { return TasksEntryUtil.countByG_A(groupId, assigneeUserId); } return TasksEntryUtil.countByAssigneeUserId(assigneeUserId); } protected int countByG_U_S(long groupId, long userId, int status) { if (status != TasksEntryConstants.STATUS_ALL) { if (groupId > 0) { return TasksEntryUtil.countByG_U_S( groupId, userId, getStatuses(status)); } return TasksEntryUtil.countByU_S(userId, getStatuses(status)); } if (groupId > 0) { return TasksEntryUtil.countByG_U(groupId, userId); } return TasksEntryUtil.countByUserId(userId); } protected List<TasksEntry> findByG_A_S( long groupId, long assigneeUserId, int status, int start, int end) { if (status != TasksEntryConstants.STATUS_ALL) { if (groupId > 0) { return TasksEntryUtil.findByG_A_S( groupId, assigneeUserId, getStatuses(status), start, end); } return TasksEntryUtil.findByA_S( assigneeUserId, getStatuses(status), start, end); } if (groupId > 0) { return TasksEntryUtil.findByG_A( groupId, assigneeUserId, start, end); } return TasksEntryUtil.findByAssigneeUserId(assigneeUserId, start, end); } protected List<TasksEntry> findByG_U_S( long groupId, long userId, int status, int start, int end) { if (status != TasksEntryConstants.STATUS_ALL) { if (groupId > 0) { return TasksEntryUtil.findByG_U_S( groupId, userId, getStatuses(status), start, end); } return TasksEntryUtil.findByU_S( userId, getStatuses(status), start, end); } if (groupId > 0) { return TasksEntryUtil.findByG_U(groupId, userId, start, end); } return TasksEntryUtil.findByUserId(userId, start, end); } protected String getAssetTagTagIds( long[] assetTagIds, boolean equalsOperator) { StringBundler sb = new StringBundler((assetTagIds.length * 4) + 1); sb.append(" ("); for (int i = 0; i < assetTagIds.length; i++) { sb.append("AssetEntries_AssetTags.tagId "); if (equalsOperator) { sb.append(StringPool.EQUAL); } else { sb.append(StringPool.NOT_EQUAL); } sb.append(" ? "); if ((i + 1) != assetTagIds.length) { if (equalsOperator) { sb.append("OR "); } else { sb.append("AND "); } } } sb.append(StringPool.CLOSE_PARENTHESIS); return sb.toString(); } protected String getAssetTagTagIds( long[] assetTagIds, long[] notAssetTagIds) { if ((assetTagIds != null) && (assetTagIds.length > 0)) { return getAssetTagTagIds(assetTagIds, true); } if ((notAssetTagIds != null) && (notAssetTagIds.length > 0)) { return getAssetTagTagIds(notAssetTagIds, false); } return StringPool.BLANK; } protected String getAssigneeUserId(long assigneeUserId) { if (assigneeUserId > 0) { return "TMS_TasksEntry.assigneeUserId = ? AND"; } return StringPool.BLANK; } protected String getGroupId(long groupId) { if (groupId > 0) { return "TMS_TasksEntry.groupId = ? AND"; } return StringPool.BLANK; } protected String getJoin(long[] assetTagIds, long[] notAssetTagIds) { if ((assetTagIds != null) && (assetTagIds.length > 0)) { return CustomSQLUtil.get(JOIN_BY_ASSET_TAGS); } if ((notAssetTagIds != null) && (notAssetTagIds.length > 0)) { return CustomSQLUtil.get(JOIN_BY_NOT_ASSET_TAGS); } return StringPool.BLANK; } protected String getPriority(int priority) { if (priority > 0) { return "TMS_TasksEntry.priority = ? AND"; } return StringPool.BLANK; } protected String getStatus(int[] statuses) { if (statuses.length == 0) { return StringPool.BLANK; } StringBundler sb = new StringBundler((statuses.length * 2) + 1); sb.append(" ("); for (int i = 0; i < statuses.length; i++) { sb.append("TMS_TasksEntry.status = ? "); sb.append("OR "); } sb.setIndex(sb.index() - 1); sb.append(") AND "); return sb.toString(); } protected int[] getStatuses(int status) { if (status == TasksEntryConstants.STATUS_ALL) { return new int[0]; } if (status == TasksEntryConstants.STATUS_RESOLVED) { return _RESOLVED_STATUS_ARRAY; } return _OPEN_STATUSES_ARRAY; } protected String getUserId(long userId) { if (userId > 0) { return "TMS_TasksEntry.userId = ? AND"; } return StringPool.BLANK; } private static final int[] _OPEN_STATUSES_ARRAY = { TasksEntryConstants.STATUS_OPEN, TasksEntryConstants.STATUS_PERCENT_TWENTY, TasksEntryConstants.STATUS_PERCENT_SIXTY, TasksEntryConstants.STATUS_PERCENT_FORTY, TasksEntryConstants.STATUS_PERCENT_EIGHTY, TasksEntryConstants.STATUS_REOPENED }; private static final int[] _RESOLVED_STATUS_ARRAY = { TasksEntryConstants.STATUS_RESOLVED }; }