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.portlet.blogs.service.persistence;
\r
17 import java.math.BigInteger;
\r
18 import java.sql.Timestamp;
\r
19 import java.util.ArrayList;
\r
20 import java.util.Calendar;
\r
21 import java.util.Date;
\r
22 import java.util.Iterator;
\r
23 import java.util.List;
\r
25 import com.liferay.portal.kernel.dao.orm.QueryPos;
\r
26 import com.liferay.portal.kernel.dao.orm.QueryUtil;
\r
27 import com.liferay.portal.kernel.dao.orm.SQLQuery;
\r
28 import com.liferay.portal.kernel.dao.orm.Session;
\r
29 import com.liferay.portal.kernel.dao.orm.Type;
\r
30 import com.liferay.portal.kernel.exception.SystemException;
\r
31 import com.liferay.portal.kernel.log.Log;
\r
32 import com.liferay.portal.kernel.log.LogFactoryUtil;
\r
33 import com.liferay.portal.kernel.util.CalendarUtil;
\r
34 import com.liferay.portal.kernel.util.OrderByComparator;
\r
35 import com.liferay.portal.kernel.util.StringBundler;
\r
36 import com.liferay.portal.kernel.util.StringPool;
\r
37 import com.liferay.portal.kernel.util.StringUtil;
\r
38 import com.liferay.portal.kernel.workflow.WorkflowConstants;
\r
39 import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
\r
40 import com.liferay.portlet.blogs.model.BlogsEntry;
\r
41 import com.liferay.portlet.blogs.model.impl.BlogsEntryImpl;
\r
42 import com.liferay.util.dao.orm.CustomSQLUtil;
\r
43 import com.pentila.entSavoie.blogs.BlogsEntryHeader;
\r
46 * @author Brian Wing Shun Chan
\r
48 public class BlogsEntryFinderImpl
\r
49 extends BasePersistenceImpl<BlogsEntry> implements BlogsEntryFinder {
\r
51 public static final String COUNT_BY_ORGANIZATION_IDS =
\r
52 BlogsEntryFinder.class.getName() + ".countByOrganizationIds";
\r
54 public static final String FIND_BY_GROUP_IDS =
\r
55 BlogsEntryFinder.class.getName() + ".findByGroupIds";
\r
57 public static final String FIND_HEADERS_BY_GROUP_IDS =
\r
58 BlogsEntryFinder.class.getName() + ".findHeadersByGroupIds";
\r
60 public static final String FIND_BY_ORGANIZATION_IDS =
\r
61 BlogsEntryFinder.class.getName() + ".findByOrganizationIds";
\r
63 public static final String FIND_BY_NO_ASSETS =
\r
64 BlogsEntryFinder.class.getName() + ".findByNoAssets";
\r
66 public int countByOrganizationId(
\r
67 long organizationId, Date displayDate, int status)
\r
68 throws SystemException {
\r
70 List<Long> organizationIds = new ArrayList<Long>();
\r
72 organizationIds.add(organizationId);
\r
74 return countByOrganizationIds(organizationIds, displayDate, status);
\r
77 public int countByOrganizationIds(
\r
78 List<Long> organizationIds, Date displayDate, int status)
\r
79 throws SystemException {
\r
81 Timestamp displayDate_TS = CalendarUtil.getTimestamp(displayDate);
\r
83 Session session = null;
\r
86 session = openSession();
\r
88 String sql = CustomSQLUtil.get(COUNT_BY_ORGANIZATION_IDS);
\r
90 if (status != WorkflowConstants.STATUS_ANY) {
\r
91 sql = CustomSQLUtil.appendCriteria(
\r
92 sql, "AND (BlogsEntry.status = ?)");
\r
95 sql = StringUtil.replace(
\r
96 sql, "[$ORGANIZATION_ID$]",
\r
97 getOrganizationIds(organizationIds));
\r
99 SQLQuery q = session.createSQLQuery(sql);
\r
101 q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
\r
103 QueryPos qPos = QueryPos.getInstance(q);
\r
105 for (int i = 0; i < organizationIds.size(); i++) {
\r
106 Long organizationId = organizationIds.get(i);
\r
108 qPos.add(organizationId);
\r
111 qPos.add(displayDate_TS);
\r
113 if (status != WorkflowConstants.STATUS_ANY) {
\r
117 Iterator<Long> itr = q.iterate();
\r
119 if (itr.hasNext()) {
\r
120 Long count = itr.next();
\r
122 if (count != null) {
\r
123 return count.intValue();
\r
129 catch (Exception e) {
\r
130 throw new SystemException(e);
\r
133 closeSession(session);
\r
137 public List<BlogsEntry> findByGroupIds(
\r
138 long companyId, long groupId, Date displayDate, int status,
\r
139 int start, int end)
\r
140 throws SystemException {
\r
142 Session session = null;
\r
145 session = openSession();
\r
147 String sql = CustomSQLUtil.get(FIND_BY_GROUP_IDS);
\r
149 if (status != WorkflowConstants.STATUS_ANY) {
\r
150 sql = CustomSQLUtil.appendCriteria(
\r
151 sql, "AND (BlogsEntry.status = ?)");
\r
154 SQLQuery q = session.createSQLQuery(sql);
\r
156 q.addEntity("BlogsEntry", BlogsEntryImpl.class);
\r
158 QueryPos qPos = QueryPos.getInstance(q);
\r
160 qPos.add(companyId);
\r
164 qPos.add(displayDate);
\r
166 if (status != WorkflowConstants.STATUS_ANY) {
\r
170 return (List<BlogsEntry>)QueryUtil.list(
\r
171 q, getDialect(), start, end);
\r
173 catch (Exception e) {
\r
174 throw new SystemException(e);
\r
177 closeSession(session);
\r
181 public List<BlogsEntryHeader> findHeadersByGroupIds(List<Long> groupIds) throws SystemException {
\r
183 List<BlogsEntryHeader> blogsEntryHeadersList = new ArrayList<BlogsEntryHeader>();
\r
184 Session session = null;
\r
187 session = openSession();
\r
189 // Build group id list
\r
190 String groupIdsStr = "";
\r
191 for (int i = 0 ; i < groupIds.size() ; i++) {
\r
192 groupIdsStr += groupIds.get(i);
\r
193 if (i != (groupIds.size() - 1)) {
\r
194 groupIdsStr += ",";
\r
198 // Here the only way to inject arrays into an 'IN' clause is to replace a given string
\r
199 // Else hibernate embraces the given parameter with quotes and the query doesn't run
\r
200 String sql = CustomSQLUtil.get(FIND_HEADERS_BY_GROUP_IDS);
\r
201 sql = StringUtil.replace(sql, "[$GROUP_IDS$]", groupIdsStr);
\r
203 SQLQuery query = session.createSQLQuery(sql);
\r
206 //SELECT be.entryId, be.groupId, be.userId, be.displayDate
\r
207 List<Object[]> result = query.list();
\r
209 if (result != null && result.size() > 0) {
\r
210 for (Object[] message : result) {
\r
212 BlogsEntryHeader blogsEntryHeader = new BlogsEntryHeader();
\r
214 long entryId = ((BigInteger) message[0]).longValue();
\r
215 blogsEntryHeader.setEntryId(entryId);
\r
217 long groupId = ((BigInteger) message[1]).longValue();
\r
218 blogsEntryHeader.setGroupId(groupId);
\r
220 long userId = ((BigInteger) message[2]).longValue();
\r
221 blogsEntryHeader.setUserId(userId);
\r
223 Timestamp displayDateTimestamp = (Timestamp) message[3];
\r
224 Calendar cal = Calendar.getInstance();
\r
225 cal.setTimeInMillis( displayDateTimestamp.getTime() );
\r
226 Date displayDate = cal.getTime();
\r
227 blogsEntryHeader.setDisplayDate(displayDate);
\r
229 blogsEntryHeadersList.add(blogsEntryHeader);
\r
232 } catch (Exception e) {
\r
233 throw new SystemException(e);
\r
236 closeSession(session);
\r
238 return blogsEntryHeadersList;
\r
241 public List<BlogsEntry> findByOrganizationId(
\r
242 long organizationId, Date displayDate, int status, int start,
\r
243 int end, OrderByComparator obc)
\r
244 throws SystemException {
\r
246 List<Long> organizationIds = new ArrayList<Long>();
\r
248 organizationIds.add(organizationId);
\r
250 return findByOrganizationIds(
\r
251 organizationIds, displayDate, status, start, end, obc);
\r
254 public List<BlogsEntry> findByOrganizationIds(
\r
255 List<Long> organizationIds, Date displayDate, int status, int start,
\r
256 int end, OrderByComparator obc)
\r
257 throws SystemException {
\r
259 Timestamp displayDate_TS = CalendarUtil.getTimestamp(displayDate);
\r
261 Session session = null;
\r
264 session = openSession();
\r
266 String sql = CustomSQLUtil.get(FIND_BY_ORGANIZATION_IDS);
\r
268 if (status != WorkflowConstants.STATUS_ANY) {
\r
269 sql = CustomSQLUtil.appendCriteria(
\r
270 sql, "AND (BlogsEntry.status = ?)");
\r
273 sql = StringUtil.replace(
\r
274 sql, "[$ORGANIZATION_ID$]",
\r
275 getOrganizationIds(organizationIds));
\r
276 sql = CustomSQLUtil.replaceOrderBy(sql, obc);
\r
278 SQLQuery q = session.createSQLQuery(sql);
\r
280 q.addEntity("BlogsEntry", BlogsEntryImpl.class);
\r
282 QueryPos qPos = QueryPos.getInstance(q);
\r
284 for (int i = 0; i < organizationIds.size(); i++) {
\r
285 Long organizationId = organizationIds.get(i);
\r
287 qPos.add(organizationId);
\r
290 qPos.add(displayDate_TS);
\r
292 if (status != WorkflowConstants.STATUS_ANY) {
\r
296 return (List<BlogsEntry>)QueryUtil.list(
\r
297 q, getDialect(), start, end);
\r
299 catch (Exception e) {
\r
300 throw new SystemException(e);
\r
303 closeSession(session);
\r
307 public List<BlogsEntry> findByNoAssets() throws SystemException {
\r
308 Session session = null;
\r
311 session = openSession();
\r
313 String sql = CustomSQLUtil.get(FIND_BY_NO_ASSETS);
\r
315 SQLQuery q = session.createSQLQuery(sql);
\r
317 q.addEntity("BlogsEntry", BlogsEntryImpl.class);
\r
319 return q.list(true);
\r
321 catch (Exception e) {
\r
322 throw new SystemException(e);
\r
325 closeSession(session);
\r
329 protected String getOrganizationIds(List<Long> organizationIds) {
\r
330 if (organizationIds.isEmpty()) {
\r
331 return StringPool.BLANK;
\r
334 StringBundler sb = new StringBundler(organizationIds.size() * 2 - 1);
\r
336 for (int i = 0; i < organizationIds.size(); i++) {
\r
337 sb.append("Users_Orgs.organizationId = ? ");
\r
339 if ((i + 1) != organizationIds.size()) {
\r
344 return sb.toString();
\r
347 private static Log _log = LogFactoryUtil.getLog(BlogsEntryFinderImpl.class);
\r