--- /dev/null
+/**\r
+ * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.\r
+ *\r
+ * This library is free software; you can redistribute it and/or modify it under\r
+ * the terms of the GNU Lesser General Public License as published by the Free\r
+ * Software Foundation; either version 2.1 of the License, or (at your option)\r
+ * any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more\r
+ * details.\r
+ */\r
+\r
+package com.liferay.portlet.blogs.service.persistence;\r
+\r
+import java.math.BigInteger;\r
+import java.sql.Timestamp;\r
+import java.util.ArrayList;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import com.liferay.portal.kernel.dao.orm.QueryPos;\r
+import com.liferay.portal.kernel.dao.orm.QueryUtil;\r
+import com.liferay.portal.kernel.dao.orm.SQLQuery;\r
+import com.liferay.portal.kernel.dao.orm.Session;\r
+import com.liferay.portal.kernel.dao.orm.Type;\r
+import com.liferay.portal.kernel.exception.SystemException;\r
+import com.liferay.portal.kernel.log.Log;\r
+import com.liferay.portal.kernel.log.LogFactoryUtil;\r
+import com.liferay.portal.kernel.util.CalendarUtil;\r
+import com.liferay.portal.kernel.util.OrderByComparator;\r
+import com.liferay.portal.kernel.util.StringBundler;\r
+import com.liferay.portal.kernel.util.StringPool;\r
+import com.liferay.portal.kernel.util.StringUtil;\r
+import com.liferay.portal.kernel.workflow.WorkflowConstants;\r
+import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;\r
+import com.liferay.portlet.blogs.model.BlogsEntry;\r
+import com.liferay.portlet.blogs.model.impl.BlogsEntryImpl;\r
+import com.liferay.util.dao.orm.CustomSQLUtil;\r
+import com.pentila.entSavoie.blogs.BlogsEntryHeader;\r
+\r
+/**\r
+ * @author Brian Wing Shun Chan\r
+ */\r
+public class BlogsEntryFinderImpl\r
+ extends BasePersistenceImpl<BlogsEntry> implements BlogsEntryFinder {\r
+\r
+ public static final String COUNT_BY_ORGANIZATION_IDS =\r
+ BlogsEntryFinder.class.getName() + ".countByOrganizationIds";\r
+\r
+ public static final String FIND_BY_GROUP_IDS =\r
+ BlogsEntryFinder.class.getName() + ".findByGroupIds";\r
+\r
+ public static final String FIND_HEADERS_BY_GROUP_IDS =\r
+ BlogsEntryFinder.class.getName() + ".findHeadersByGroupIds";\r
+\r
+ public static final String FIND_BY_ORGANIZATION_IDS =\r
+ BlogsEntryFinder.class.getName() + ".findByOrganizationIds";\r
+\r
+ public static final String FIND_BY_NO_ASSETS =\r
+ BlogsEntryFinder.class.getName() + ".findByNoAssets";\r
+\r
+ public int countByOrganizationId(\r
+ long organizationId, Date displayDate, int status)\r
+ throws SystemException {\r
+\r
+ List<Long> organizationIds = new ArrayList<Long>();\r
+\r
+ organizationIds.add(organizationId);\r
+\r
+ return countByOrganizationIds(organizationIds, displayDate, status);\r
+ }\r
+\r
+ public int countByOrganizationIds(\r
+ List<Long> organizationIds, Date displayDate, int status)\r
+ throws SystemException {\r
+\r
+ Timestamp displayDate_TS = CalendarUtil.getTimestamp(displayDate);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(COUNT_BY_ORGANIZATION_IDS);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ sql = CustomSQLUtil.appendCriteria(\r
+ sql, "AND (BlogsEntry.status = ?)");\r
+ }\r
+\r
+ sql = StringUtil.replace(\r
+ sql, "[$ORGANIZATION_ID$]",\r
+ getOrganizationIds(organizationIds));\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addScalar(COUNT_COLUMN_NAME, Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ for (int i = 0; i < organizationIds.size(); i++) {\r
+ Long organizationId = organizationIds.get(i);\r
+\r
+ qPos.add(organizationId);\r
+ }\r
+\r
+ qPos.add(displayDate_TS);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ qPos.add(status);\r
+ }\r
+\r
+ Iterator<Long> itr = q.iterate();\r
+\r
+ if (itr.hasNext()) {\r
+ Long count = itr.next();\r
+\r
+ if (count != null) {\r
+ return count.intValue();\r
+ }\r
+ }\r
+\r
+ return 0;\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ public List<BlogsEntry> findByGroupIds(\r
+ long companyId, long groupId, Date displayDate, int status,\r
+ int start, int end)\r
+ throws SystemException {\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(FIND_BY_GROUP_IDS);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ sql = CustomSQLUtil.appendCriteria(\r
+ sql, "AND (BlogsEntry.status = ?)");\r
+ }\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addEntity("BlogsEntry", BlogsEntryImpl.class);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ qPos.add(companyId);\r
+ qPos.add(groupId);\r
+ qPos.add(groupId);\r
+ qPos.add(groupId);\r
+ qPos.add(displayDate);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ qPos.add(status);\r
+ }\r
+\r
+ return (List<BlogsEntry>)QueryUtil.list(\r
+ q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ public List<BlogsEntryHeader> findHeadersByGroupIds(List<Long> groupIds) throws SystemException {\r
+\r
+ List<BlogsEntryHeader> blogsEntryHeadersList = new ArrayList<BlogsEntryHeader>();\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ // Build group id list\r
+ String groupIdsStr = "";\r
+ for (int i = 0 ; i < groupIds.size() ; i++) {\r
+ groupIdsStr += groupIds.get(i);\r
+ if (i != (groupIds.size() - 1)) {\r
+ groupIdsStr += ",";\r
+ }\r
+ }\r
+\r
+ // Here the only way to inject arrays into an 'IN' clause is to replace a given string\r
+ // Else hibernate embraces the given parameter with quotes and the query doesn't run\r
+ String sql = CustomSQLUtil.get(FIND_HEADERS_BY_GROUP_IDS);\r
+ sql = StringUtil.replace(sql, "[$GROUP_IDS$]", groupIdsStr);\r
+\r
+ SQLQuery query = session.createSQLQuery(sql);\r
+\r
+ \r
+ //SELECT be.entryId, be.groupId, be.userId, be.displayDate\r
+ List<Object[]> result = query.list();\r
+ \r
+ if (result != null && result.size() > 0) {\r
+ for (Object[] message : result) {\r
+\r
+ BlogsEntryHeader blogsEntryHeader = new BlogsEntryHeader();\r
+ \r
+ long entryId = ((BigInteger) message[0]).longValue();\r
+ blogsEntryHeader.setEntryId(entryId);\r
+ \r
+ long groupId = ((BigInteger) message[1]).longValue();\r
+ blogsEntryHeader.setGroupId(groupId);\r
+ \r
+ long userId = ((BigInteger) message[2]).longValue();\r
+ blogsEntryHeader.setUserId(userId);\r
+ \r
+ Timestamp displayDateTimestamp = (Timestamp) message[3];\r
+ Calendar cal = Calendar.getInstance();\r
+ cal.setTimeInMillis( displayDateTimestamp.getTime() );\r
+ Date displayDate = cal.getTime();\r
+ blogsEntryHeader.setDisplayDate(displayDate);\r
+ \r
+ blogsEntryHeadersList.add(blogsEntryHeader);\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ return blogsEntryHeadersList;\r
+ }\r
+\r
+ public List<BlogsEntry> findByOrganizationId(\r
+ long organizationId, Date displayDate, int status, int start,\r
+ int end, OrderByComparator obc)\r
+ throws SystemException {\r
+\r
+ List<Long> organizationIds = new ArrayList<Long>();\r
+\r
+ organizationIds.add(organizationId);\r
+\r
+ return findByOrganizationIds(\r
+ organizationIds, displayDate, status, start, end, obc);\r
+ }\r
+\r
+ public List<BlogsEntry> findByOrganizationIds(\r
+ List<Long> organizationIds, Date displayDate, int status, int start,\r
+ int end, OrderByComparator obc)\r
+ throws SystemException {\r
+\r
+ Timestamp displayDate_TS = CalendarUtil.getTimestamp(displayDate);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(FIND_BY_ORGANIZATION_IDS);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ sql = CustomSQLUtil.appendCriteria(\r
+ sql, "AND (BlogsEntry.status = ?)");\r
+ }\r
+\r
+ sql = StringUtil.replace(\r
+ sql, "[$ORGANIZATION_ID$]",\r
+ getOrganizationIds(organizationIds));\r
+ sql = CustomSQLUtil.replaceOrderBy(sql, obc);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addEntity("BlogsEntry", BlogsEntryImpl.class);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ for (int i = 0; i < organizationIds.size(); i++) {\r
+ Long organizationId = organizationIds.get(i);\r
+\r
+ qPos.add(organizationId);\r
+ }\r
+\r
+ qPos.add(displayDate_TS);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ qPos.add(status);\r
+ }\r
+\r
+ return (List<BlogsEntry>)QueryUtil.list(\r
+ q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ public List<BlogsEntry> findByNoAssets() throws SystemException {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(FIND_BY_NO_ASSETS);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addEntity("BlogsEntry", BlogsEntryImpl.class);\r
+\r
+ return q.list(true);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ protected String getOrganizationIds(List<Long> organizationIds) {\r
+ if (organizationIds.isEmpty()) {\r
+ return StringPool.BLANK;\r
+ }\r
+\r
+ StringBundler sb = new StringBundler(organizationIds.size() * 2 - 1);\r
+\r
+ for (int i = 0; i < organizationIds.size(); i++) {\r
+ sb.append("Users_Orgs.organizationId = ? ");\r
+\r
+ if ((i + 1) != organizationIds.size()) {\r
+ sb.append("OR ");\r
+ }\r
+ }\r
+\r
+ return sb.toString();\r
+ }\r
+\r
+ private static Log _log = LogFactoryUtil.getLog(BlogsEntryFinderImpl.class);\r
+\r
+}
\ No newline at end of file