/**
* 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.announcements.service.persistence.impl;
import com.liferay.announcements.kernel.model.AnnouncementsEntry;
import com.liferay.announcements.kernel.model.AnnouncementsFlagConstants;
import com.liferay.announcements.kernel.service.persistence.AnnouncementsEntryFinder;
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.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.util.CalendarUtil;
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.portlet.announcements.model.impl.AnnouncementsEntryImpl;
import com.liferay.util.dao.orm.CustomSQLUtil;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author Thiago Moreira
* @author Raymond Augé
*/
public class AnnouncementsEntryFinderImpl
extends AnnouncementsEntryFinderBaseImpl
implements AnnouncementsEntryFinder {
public static final String COUNT_BY_HIDDEN =
AnnouncementsEntryFinder.class.getName() + ".countByHidden";
public static final String COUNT_BY_NOT_HIDDEN =
AnnouncementsEntryFinder.class.getName() + ".countByNotHidden";
public static final String FIND_BY_DISPLAY_DATE =
AnnouncementsEntryFinder.class.getName() + ".findByDisplayDate";
public static final String FIND_BY_HIDDEN =
AnnouncementsEntryFinder.class.getName() + ".findByHidden";
public static final String FIND_BY_NOT_HIDDEN =
AnnouncementsEntryFinder.class.getName() + ".findByNotHidden";
@Override
public int countByScope(
long userId, long classNameId, long[] classPKs, int displayDateMonth,
int displayDateDay, int displayDateYear, int displayDateHour,
int displayDateMinute, int expirationDateMonth, int expirationDateDay,
int expirationDateYear, int expirationDateHour,
int expirationDateMinute, boolean alert, int flagValue) {
Session session = null;
try {
session = openSession();
String sql = CustomSQLUtil.get(COUNT_BY_HIDDEN);
if (flagValue == AnnouncementsFlagConstants.NOT_HIDDEN) {
sql = CustomSQLUtil.get(COUNT_BY_NOT_HIDDEN);
}
sql = StringUtil.replace(
sql, "[$CLASS_PKS$]", getClassPKs(classNameId, classPKs));
sql = CustomSQLUtil.replaceAndOperator(sql, true);
SQLQuery q = session.createSynchronizedSQLQuery(sql);
q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
QueryPos qPos = QueryPos.getInstance(q);
setClassPKs(qPos, classNameId, classPKs);
setDates(
qPos, displayDateMonth, displayDateDay, displayDateYear,
displayDateHour, displayDateMinute, expirationDateMonth,
expirationDateDay, expirationDateYear, expirationDateHour,
expirationDateMinute);
qPos.add(alert);
qPos.add(userId);
qPos.add(AnnouncementsFlagConstants.HIDDEN);
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);
}
}
@Override
public int countByScopes(
long userId, LinkedHashMap<Long, long[]> scopes, int displayDateMonth,
int displayDateDay, int displayDateYear, int displayDateHour,
int displayDateMinute, int expirationDateMonth, int expirationDateDay,
int expirationDateYear, int expirationDateHour,
int expirationDateMinute, boolean alert, int flagValue) {
Session session = null;
try {
session = openSession();
String sql = CustomSQLUtil.get(COUNT_BY_HIDDEN);
if (flagValue == AnnouncementsFlagConstants.NOT_HIDDEN) {
sql = CustomSQLUtil.get(COUNT_BY_NOT_HIDDEN);
}
sql = StringUtil.replace(sql, "[$CLASS_PKS$]", getClassPKs(scopes));
sql = CustomSQLUtil.replaceAndOperator(sql, true);
SQLQuery q = session.createSynchronizedSQLQuery(sql);
q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
QueryPos qPos = QueryPos.getInstance(q);
setClassPKs(qPos, scopes);
setDates(
qPos, displayDateMonth, displayDateDay, displayDateYear,
displayDateHour, displayDateMinute, expirationDateMonth,
expirationDateDay, expirationDateYear, expirationDateHour,
expirationDateMinute);
qPos.add(alert);
qPos.add(userId);
qPos.add(AnnouncementsFlagConstants.HIDDEN);
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);
}
}
@Override
public List<AnnouncementsEntry> findByDisplayDate(
Date displayDateLT, Date displayDateGT) {
Timestamp displayDateLT_TS = CalendarUtil.getTimestamp(displayDateLT);
Timestamp displayDateGT_TS = CalendarUtil.getTimestamp(displayDateGT);
Session session = null;
try {
session = openSession();
String sql = CustomSQLUtil.get(FIND_BY_DISPLAY_DATE);
SQLQuery q = session.createSynchronizedSQLQuery(sql);
q.addEntity("AnnouncementsEntry", AnnouncementsEntryImpl.class);
QueryPos qPos = QueryPos.getInstance(q);
qPos.add(displayDateGT_TS);
qPos.add(displayDateLT_TS);
return q.list(true);
}
catch (Exception e) {
throw new SystemException(e);
}
finally {
closeSession(session);
}
}
@Override
public List<AnnouncementsEntry> findByScope(
long userId, long classNameId, long[] classPKs, int displayDateMonth,
int displayDateDay, int displayDateYear, int displayDateHour,
int displayDateMinute, int expirationDateMonth, int expirationDateDay,
int expirationDateYear, int expirationDateHour,
int expirationDateMinute, boolean alert, int flagValue, int start,
int end) {
Session session = null;
try {
session = openSession();
String sql = CustomSQLUtil.get(FIND_BY_HIDDEN);
if (flagValue == AnnouncementsFlagConstants.NOT_HIDDEN) {
sql = CustomSQLUtil.get(FIND_BY_NOT_HIDDEN);
}
sql = StringUtil.replace(
sql, "[$CLASS_PKS$]", getClassPKs(classNameId, classPKs));
sql = CustomSQLUtil.replaceAndOperator(sql, true);
SQLQuery q = session.createSynchronizedSQLQuery(sql);
q.addEntity("AnnouncementsEntry", AnnouncementsEntryImpl.class);
QueryPos qPos = QueryPos.getInstance(q);
setClassPKs(qPos, classNameId, classPKs);
setDates(
qPos, displayDateMonth, displayDateDay, displayDateYear,
displayDateHour, displayDateMinute, expirationDateMonth,
expirationDateDay, expirationDateYear, expirationDateHour,
expirationDateMinute);
qPos.add(alert);
qPos.add(userId);
qPos.add(AnnouncementsFlagConstants.HIDDEN);
return (List<AnnouncementsEntry>)QueryUtil.list(
q, getDialect(), start, end);
}
catch (Exception e) {
throw new SystemException(e);
}
finally {
closeSession(session);
}
}
@Override
public List<AnnouncementsEntry> findByScopes(
long userId, LinkedHashMap<Long, long[]> scopes, int displayDateMonth,
int displayDateDay, int displayDateYear, int displayDateHour,
int displayDateMinute, int expirationDateMonth, int expirationDateDay,
int expirationDateYear, int expirationDateHour,
int expirationDateMinute, boolean alert, int flagValue, int start,
int end) {
Session session = null;
try {
session = openSession();
String sql = CustomSQLUtil.get(FIND_BY_HIDDEN);
if (flagValue == AnnouncementsFlagConstants.NOT_HIDDEN) {
sql = CustomSQLUtil.get(FIND_BY_NOT_HIDDEN);
}
sql = StringUtil.replace(sql, "[$CLASS_PKS$]", getClassPKs(scopes));
sql = CustomSQLUtil.replaceAndOperator(sql, true);
SQLQuery q = session.createSynchronizedSQLQuery(sql);
q.addEntity("AnnouncementsEntry", AnnouncementsEntryImpl.class);
QueryPos qPos = QueryPos.getInstance(q);
setClassPKs(qPos, scopes);
setDates(
qPos, displayDateMonth, displayDateDay, displayDateYear,
displayDateHour, displayDateMinute, expirationDateMonth,
expirationDateDay, expirationDateYear, expirationDateHour,
expirationDateMinute);
qPos.add(alert);
qPos.add(userId);
qPos.add(AnnouncementsFlagConstants.HIDDEN);
return (List<AnnouncementsEntry>)QueryUtil.list(
q, getDialect(), start, end);
}
catch (Exception e) {
throw new SystemException(e);
}
finally {
closeSession(session);
}
}
protected String getClassPKs(LinkedHashMap<Long, long[]> scopes) {
if ((scopes == null) || scopes.isEmpty()) {
return StringPool.BLANK;
}
StringBundler sb = new StringBundler(scopes.size() * 4);
for (Map.Entry<Long, long[]> entry : scopes.entrySet()) {
Long classNameId = entry.getKey();
long[] classPKs = entry.getValue();
sb.append(StringPool.OPEN_PARENTHESIS);
sb.append(getClassPKs(classNameId.longValue(), classPKs));
sb.append(StringPool.CLOSE_PARENTHESIS);
sb.append(" OR ");
}
sb.setIndex(sb.index() - 1);
return sb.toString();
}
protected String getClassPKs(long classNameId, long[] classPKs) {
if (classPKs.length == 0) {
return "(AnnouncementsEntry.classNameId = ?) AND (";
}
StringBundler sb = new StringBundler(classPKs.length * 2 + 1);
sb.append("(AnnouncementsEntry.classNameId = ?) AND (");
for (int i = 0; i < classPKs.length; i++) {
sb.append("(AnnouncementsEntry.classPK = ?)");
if ((i + 1) < classPKs.length) {
sb.append(" OR ");
}
else {
sb.append(StringPool.CLOSE_PARENTHESIS);
}
}
return sb.toString();
}
protected void setClassPKs(
QueryPos qPos, LinkedHashMap<Long, long[]> scopes) {
if (scopes == null) {
return;
}
for (Map.Entry<Long, long[]> entry : scopes.entrySet()) {
Long classNameId = entry.getKey();
long[] classPKs = entry.getValue();
setClassPKs(qPos, classNameId.longValue(), classPKs);
}
}
protected void setClassPKs(
QueryPos qPos, long classNameId, long[] classPKs) {
qPos.add(classNameId);
for (int i = 0; i < classPKs.length; i++) {
qPos.add(classPKs[i]);
}
}
protected void setDates(
QueryPos qPos, int displayDateMonth, int displayDateDay,
int displayDateYear, int displayDateHour, int displayDateMinute,
int expirationDateMonth, int expirationDateDay, int expirationDateYear,
int expirationDateHour, int expirationDateMinute) {
Date displayDate = null;
try {
displayDate = PortalUtil.getDate(
displayDateMonth, displayDateDay, displayDateYear,
displayDateHour, displayDateMinute, null);
}
catch (PortalException pe) {
// LPS-52675
if (_log.isDebugEnabled()) {
_log.debug(pe, pe);
}
}
if (displayDate == null) {
displayDate = new Date();
}
Timestamp displayDateTS = CalendarUtil.getTimestamp(displayDate);
Date expirationDate = null;
try {
expirationDate = PortalUtil.getDate(
expirationDateMonth, expirationDateDay, expirationDateYear,
expirationDateHour, expirationDateMinute, null);
}
catch (PortalException pe) {
// LPS-52675
if (_log.isDebugEnabled()) {
_log.debug(pe, pe);
}
}
if (expirationDate == null) {
expirationDate = new Date();
}
Timestamp expirationDateTS = CalendarUtil.getTimestamp(expirationDate);
qPos.add(displayDateTS);
qPos.add(displayDateTS);
qPos.add(expirationDateTS);
qPos.add(expirationDateTS);
}
private static final Log _log = LogFactoryUtil.getLog(
AnnouncementsEntryFinderImpl.class);
}