001
014
015 package com.liferay.portlet.blogs.service.persistence.impl;
016
017 import com.liferay.portal.kernel.dao.orm.QueryPos;
018 import com.liferay.portal.kernel.dao.orm.QueryUtil;
019 import com.liferay.portal.kernel.dao.orm.SQLQuery;
020 import com.liferay.portal.kernel.dao.orm.Session;
021 import com.liferay.portal.kernel.dao.orm.Type;
022 import com.liferay.portal.kernel.exception.SystemException;
023 import com.liferay.portal.kernel.util.OrderByComparator;
024 import com.liferay.portal.kernel.util.StringBundler;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.kernel.util.StringUtil;
027 import com.liferay.portlet.blogs.model.BlogsStatsUser;
028 import com.liferay.portlet.blogs.model.impl.BlogsStatsUserImpl;
029 import com.liferay.portlet.blogs.service.persistence.BlogsStatsUserFinder;
030 import com.liferay.portlet.blogs.service.persistence.BlogsStatsUserUtil;
031 import com.liferay.util.dao.orm.CustomSQLUtil;
032
033 import java.util.ArrayList;
034 import java.util.Date;
035 import java.util.Iterator;
036 import java.util.List;
037
038
041 public class BlogsStatsUserFinderImpl
042 extends BlogsStatsUserFinderBaseImpl implements BlogsStatsUserFinder {
043
044 public static final String COUNT_BY_ORGANIZATION_IDS =
045 BlogsStatsUserFinder.class.getName() + ".countByOrganizationIds";
046
047 public static final String FIND_BY_GROUP_IDS =
048 BlogsStatsUserFinder.class.getName() + ".findByGroupIds";
049
050 public static final String FIND_BY_ORGANIZATION_IDS =
051 BlogsStatsUserFinder.class.getName() + ".findByOrganizationIds";
052
053 @Override
054 public int countByOrganizationId(long organizationId) {
055 List<Long> organizationIds = new ArrayList<>();
056
057 organizationIds.add(organizationId);
058
059 return countByOrganizationIds(organizationIds);
060 }
061
062 @Override
063 public int countByOrganizationIds(List<Long> organizationIds) {
064 Session session = null;
065
066 try {
067 session = openSession();
068
069 String sql = CustomSQLUtil.get(COUNT_BY_ORGANIZATION_IDS);
070
071 sql = StringUtil.replace(
072 sql, "[$ORGANIZATION_ID$]",
073 getOrganizationIds(organizationIds));
074
075 SQLQuery q = session.createSynchronizedSQLQuery(sql);
076
077 q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
078
079 QueryPos qPos = QueryPos.getInstance(q);
080
081 for (int i = 0; i < organizationIds.size(); i++) {
082 Long organizationId = organizationIds.get(i);
083
084 qPos.add(organizationId);
085 }
086
087 Iterator<Long> itr = q.iterate();
088
089 if (itr.hasNext()) {
090 Long count = itr.next();
091
092 if (count != null) {
093 return count.intValue();
094 }
095 }
096
097 return 0;
098 }
099 catch (Exception e) {
100 throw new SystemException(e);
101 }
102 finally {
103 closeSession(session);
104 }
105 }
106
107 @Override
108 public List<BlogsStatsUser> findByGroupIds(
109 long companyId, long groupId, int start, int end) {
110
111 Session session = null;
112
113 try {
114 session = openSession();
115
116 String sql = CustomSQLUtil.get(FIND_BY_GROUP_IDS);
117
118 SQLQuery q = session.createSynchronizedSQLQuery(sql);
119
120 q.addScalar("userId", Type.LONG);
121 q.addScalar("lastPostDate", Type.TIMESTAMP);
122
123 QueryPos qPos = QueryPos.getInstance(q);
124
125 qPos.add(companyId);
126 qPos.add(groupId);
127 qPos.add(groupId);
128 qPos.add(groupId);
129
130 List<BlogsStatsUser> statsUsers = new ArrayList<>();
131
132 Iterator<Object[]> itr = (Iterator<Object[]>)QueryUtil.iterate(
133 q, getDialect(), start, end);
134
135 while (itr.hasNext()) {
136 Object[] array = itr.next();
137
138 long userId = (Long)array[0];
139 Date lastPostDate = (Date)array[1];
140
141 List<BlogsStatsUser> curStatsUsers =
142 BlogsStatsUserUtil.findByU_L(userId, lastPostDate);
143
144 if (!curStatsUsers.isEmpty()) {
145 BlogsStatsUser statsUser = curStatsUsers.get(0);
146
147 statsUsers.add(statsUser);
148 }
149 }
150
151 return statsUsers;
152 }
153 catch (Exception e) {
154 throw new SystemException(e);
155 }
156 finally {
157 closeSession(session);
158 }
159 }
160
161 @Override
162 public List<BlogsStatsUser> findByOrganizationId(
163 long organizationId, int start, int end,
164 OrderByComparator<BlogsStatsUser> obc) {
165
166 List<Long> organizationIds = new ArrayList<>();
167
168 organizationIds.add(organizationId);
169
170 return findByOrganizationIds(organizationIds, start, end, obc);
171 }
172
173 @Override
174 public List<BlogsStatsUser> findByOrganizationIds(
175 List<Long> organizationIds, int start, int end,
176 OrderByComparator<BlogsStatsUser> obc) {
177
178 Session session = null;
179
180 try {
181 session = openSession();
182
183 String sql = CustomSQLUtil.get(FIND_BY_ORGANIZATION_IDS);
184
185 sql = StringUtil.replace(
186 sql, "[$ORGANIZATION_ID$]",
187 getOrganizationIds(organizationIds));
188 sql = CustomSQLUtil.replaceOrderBy(sql, obc);
189
190 SQLQuery q = session.createSynchronizedSQLQuery(sql);
191
192 q.addEntity("BlogsStatsUser", BlogsStatsUserImpl.class);
193
194 QueryPos qPos = QueryPos.getInstance(q);
195
196 for (int i = 0; i < organizationIds.size(); i++) {
197 Long organizationId = organizationIds.get(i);
198
199 qPos.add(organizationId);
200 }
201
202 return (List<BlogsStatsUser>)QueryUtil.list(
203 q, getDialect(), start, end);
204 }
205 catch (Exception e) {
206 throw new SystemException(e);
207 }
208 finally {
209 closeSession(session);
210 }
211 }
212
213 protected String getOrganizationIds(List<Long> organizationIds) {
214 if (organizationIds.isEmpty()) {
215 return StringPool.BLANK;
216 }
217
218 StringBundler sb = new StringBundler(organizationIds.size() * 2 - 1);
219
220 for (int i = 0; i < organizationIds.size(); i++) {
221 sb.append("Users_Orgs.organizationId = ? ");
222
223 if ((i + 1) != organizationIds.size()) {
224 sb.append("OR ");
225 }
226 }
227
228 return sb.toString();
229 }
230
231 }