001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.blogs.service.persistence.impl;
016    
017    import com.liferay.portal.kernel.dao.orm.QueryDefinition;
018    import com.liferay.portal.kernel.dao.orm.QueryPos;
019    import com.liferay.portal.kernel.dao.orm.QueryUtil;
020    import com.liferay.portal.kernel.dao.orm.SQLQuery;
021    import com.liferay.portal.kernel.dao.orm.Session;
022    import com.liferay.portal.kernel.dao.orm.Type;
023    import com.liferay.portal.kernel.exception.SystemException;
024    import com.liferay.portal.kernel.util.CalendarUtil;
025    import com.liferay.portal.kernel.util.StringBundler;
026    import com.liferay.portal.kernel.util.StringPool;
027    import com.liferay.portal.kernel.util.StringUtil;
028    import com.liferay.portal.kernel.workflow.WorkflowConstants;
029    import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
030    import com.liferay.portlet.blogs.model.BlogsEntry;
031    import com.liferay.portlet.blogs.model.impl.BlogsEntryImpl;
032    import com.liferay.portlet.blogs.service.persistence.BlogsEntryFinder;
033    import com.liferay.util.dao.orm.CustomSQLUtil;
034    
035    import java.sql.Timestamp;
036    
037    import java.util.ArrayList;
038    import java.util.Date;
039    import java.util.Iterator;
040    import java.util.List;
041    
042    /**
043     * @author Brian Wing Shun Chan
044     */
045    public class BlogsEntryFinderImpl
046            extends BasePersistenceImpl<BlogsEntry> implements BlogsEntryFinder {
047    
048            public static final String COUNT_BY_ORGANIZATION_IDS =
049                    BlogsEntryFinder.class.getName() + ".countByOrganizationIds";
050    
051            public static final String FIND_BY_GROUP_IDS =
052                    BlogsEntryFinder.class.getName() + ".findByGroupIds";
053    
054            public static final String FIND_BY_ORGANIZATION_IDS =
055                    BlogsEntryFinder.class.getName() + ".findByOrganizationIds";
056    
057            public static final String FIND_BY_NO_ASSETS =
058                    BlogsEntryFinder.class.getName() + ".findByNoAssets";
059    
060            @Override
061            public int countByOrganizationId(
062                    long organizationId, Date displayDate,
063                    QueryDefinition<BlogsEntry> queryDefinition) {
064    
065                    List<Long> organizationIds = new ArrayList<Long>();
066    
067                    organizationIds.add(organizationId);
068    
069                    return countByOrganizationIds(
070                            organizationIds, displayDate, queryDefinition);
071            }
072    
073            @Override
074            public int countByOrganizationIds(
075                    List<Long> organizationIds, Date displayDate,
076                    QueryDefinition<BlogsEntry> queryDefinition) {
077    
078                    Timestamp displayDate_TS = CalendarUtil.getTimestamp(displayDate);
079    
080                    Session session = null;
081    
082                    try {
083                            session = openSession();
084    
085                            String sql = CustomSQLUtil.get(COUNT_BY_ORGANIZATION_IDS);
086    
087                            if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
088                                    if (queryDefinition.isExcludeStatus()) {
089                                            sql = CustomSQLUtil.appendCriteria(
090                                                    sql, "AND (BlogsEntry.status != ?)");
091                                    }
092                                    else {
093                                            sql = CustomSQLUtil.appendCriteria(
094                                                    sql, "AND (BlogsEntry.status = ?)");
095                                    }
096                            }
097    
098                            sql = StringUtil.replace(
099                                    sql, "[$ORGANIZATION_ID$]",
100                                    getOrganizationIds(organizationIds));
101    
102                            SQLQuery q = session.createSynchronizedSQLQuery(sql);
103    
104                            q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
105    
106                            QueryPos qPos = QueryPos.getInstance(q);
107    
108                            for (int i = 0; i < organizationIds.size(); i++) {
109                                    Long organizationId = organizationIds.get(i);
110    
111                                    qPos.add(organizationId);
112                            }
113    
114                            qPos.add(displayDate_TS);
115    
116                            if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
117                                    qPos.add(queryDefinition.getStatus());
118                            }
119    
120                            Iterator<Long> itr = q.iterate();
121    
122                            if (itr.hasNext()) {
123                                    Long count = itr.next();
124    
125                                    if (count != null) {
126                                            return count.intValue();
127                                    }
128                            }
129    
130                            return 0;
131                    }
132                    catch (Exception e) {
133                            throw new SystemException(e);
134                    }
135                    finally {
136                            closeSession(session);
137                    }
138            }
139    
140            @Override
141            public List<BlogsEntry> findByGroupIds(
142                    long companyId, long groupId, Date displayDate,
143                    QueryDefinition<BlogsEntry> queryDefinition) {
144    
145                    Session session = null;
146    
147                    try {
148                            session = openSession();
149    
150                            String sql = CustomSQLUtil.get(FIND_BY_GROUP_IDS);
151    
152                            if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
153                                    if (queryDefinition.isExcludeStatus()) {
154                                            sql = CustomSQLUtil.appendCriteria(
155                                                    sql, "AND (BlogsEntry.status != ?)");
156                                    }
157                                    else {
158                                            sql = CustomSQLUtil.appendCriteria(
159                                                    sql, "AND (BlogsEntry.status = ?)");
160                                    }
161                            }
162    
163                            SQLQuery q = session.createSynchronizedSQLQuery(sql);
164    
165                            q.addEntity("BlogsEntry", BlogsEntryImpl.class);
166    
167                            QueryPos qPos = QueryPos.getInstance(q);
168    
169                            qPos.add(companyId);
170                            qPos.add(groupId);
171                            qPos.add(groupId);
172                            qPos.add(groupId);
173                            qPos.add(displayDate);
174    
175                            if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
176                                    qPos.add(queryDefinition.getStatus());
177                            }
178    
179                            return (List<BlogsEntry>)QueryUtil.list(
180                                    q, getDialect(), queryDefinition.getStart(),
181                                    queryDefinition.getEnd());
182                    }
183                    catch (Exception e) {
184                            throw new SystemException(e);
185                    }
186                    finally {
187                            closeSession(session);
188                    }
189            }
190    
191            @Override
192            public List<BlogsEntry> findByOrganizationId(
193                    long organizationId, Date displayDate,
194                    QueryDefinition<BlogsEntry> queryDefinition) {
195    
196                    List<Long> organizationIds = new ArrayList<Long>();
197    
198                    organizationIds.add(organizationId);
199    
200                    return findByOrganizationIds(
201                            organizationIds, displayDate, queryDefinition);
202            }
203    
204            @Override
205            public List<BlogsEntry> findByOrganizationIds(
206                    List<Long> organizationIds, Date displayDate,
207                    QueryDefinition<BlogsEntry> queryDefinition) {
208    
209                    Timestamp displayDate_TS = CalendarUtil.getTimestamp(displayDate);
210    
211                    Session session = null;
212    
213                    try {
214                            session = openSession();
215    
216                            String sql = CustomSQLUtil.get(FIND_BY_ORGANIZATION_IDS);
217    
218                            if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
219                                    if (queryDefinition.isExcludeStatus()) {
220                                            sql = CustomSQLUtil.appendCriteria(
221                                                    sql, "AND (BlogsEntry.status != ?)");
222                                    }
223                                    else {
224                                            sql = CustomSQLUtil.appendCriteria(
225                                                    sql, "AND (BlogsEntry.status = ?)");
226                                    }
227                            }
228    
229                            sql = StringUtil.replace(
230                                    sql, "[$ORGANIZATION_ID$]",
231                                    getOrganizationIds(organizationIds));
232                            sql = CustomSQLUtil.replaceOrderBy(
233                                    sql, queryDefinition.getOrderByComparator());
234    
235                            SQLQuery q = session.createSynchronizedSQLQuery(sql);
236    
237                            q.addEntity("BlogsEntry", BlogsEntryImpl.class);
238    
239                            QueryPos qPos = QueryPos.getInstance(q);
240    
241                            for (int i = 0; i < organizationIds.size(); i++) {
242                                    Long organizationId = organizationIds.get(i);
243    
244                                    qPos.add(organizationId);
245                            }
246    
247                            qPos.add(displayDate_TS);
248    
249                            if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
250                                    qPos.add(queryDefinition.getStatus());
251                            }
252    
253                            return (List<BlogsEntry>)QueryUtil.list(
254                                    q, getDialect(), queryDefinition.getStart(),
255                                    queryDefinition.getEnd());
256                    }
257                    catch (Exception e) {
258                            throw new SystemException(e);
259                    }
260                    finally {
261                            closeSession(session);
262                    }
263            }
264    
265            @Override
266            public List<BlogsEntry> findByNoAssets() {
267                    Session session = null;
268    
269                    try {
270                            session = openSession();
271    
272                            String sql = CustomSQLUtil.get(FIND_BY_NO_ASSETS);
273    
274                            SQLQuery q = session.createSynchronizedSQLQuery(sql);
275    
276                            q.addEntity("BlogsEntry", BlogsEntryImpl.class);
277    
278                            return q.list(true);
279                    }
280                    catch (Exception e) {
281                            throw new SystemException(e);
282                    }
283                    finally {
284                            closeSession(session);
285                    }
286            }
287    
288            protected String getOrganizationIds(List<Long> organizationIds) {
289                    if (organizationIds.isEmpty()) {
290                            return StringPool.BLANK;
291                    }
292    
293                    StringBundler sb = new StringBundler(organizationIds.size() * 2 - 1);
294    
295                    for (int i = 0; i < organizationIds.size(); i++) {
296                            sb.append("Users_Orgs.organizationId = ? ");
297    
298                            if ((i + 1) != organizationIds.size()) {
299                                    sb.append("OR ");
300                            }
301                    }
302    
303                    return sb.toString();
304            }
305    
306    }