001
014
015 package com.liferay.portlet.social.service.persistence.impl;
016
017 import com.liferay.portal.kernel.cache.MultiVMPoolUtil;
018 import com.liferay.portal.kernel.cache.PortalCache;
019 import com.liferay.portal.kernel.dao.orm.QueryPos;
020 import com.liferay.portal.kernel.dao.orm.QueryUtil;
021 import com.liferay.portal.kernel.dao.orm.SQLQuery;
022 import com.liferay.portal.kernel.dao.orm.Session;
023 import com.liferay.portal.kernel.dao.orm.Type;
024 import com.liferay.portal.kernel.exception.SystemException;
025 import com.liferay.portal.kernel.util.ArrayUtil;
026 import com.liferay.portal.kernel.util.GetterUtil;
027 import com.liferay.portal.kernel.util.StringBundler;
028 import com.liferay.portal.kernel.util.StringPool;
029 import com.liferay.portal.kernel.util.StringUtil;
030 import com.liferay.portal.model.User;
031 import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
032 import com.liferay.portal.util.PortalUtil;
033 import com.liferay.portlet.social.model.SocialActivityCounter;
034 import com.liferay.portlet.social.model.impl.SocialActivityCounterImpl;
035 import com.liferay.portlet.social.service.persistence.SocialActivityCounterFinder;
036 import com.liferay.portlet.social.util.SocialCounterPeriodUtil;
037 import com.liferay.util.dao.orm.CustomSQLUtil;
038
039 import java.io.Serializable;
040
041 import java.util.ArrayList;
042 import java.util.Iterator;
043 import java.util.List;
044
045
048 public class SocialActivityCounterFinderImpl
049 extends BasePersistenceImpl<SocialActivityCounter>
050 implements SocialActivityCounterFinder {
051
052 public static final String COUNT_U_BY_G_C_N_S_E =
053 SocialActivityCounterFinder.class.getName() + ".countU_ByG_C_N_S_E";
054
055 public static final String FIND_AC_BY_G_N_S_E_1 =
056 SocialActivityCounterFinder.class.getName() + ".findAC_ByG_N_S_E_1";
057
058 public static final String FIND_AC_BY_G_N_S_E_2 =
059 SocialActivityCounterFinder.class.getName() + ".findAC_ByG_N_S_E_2";
060
061 public static final String FIND_AC_BY_G_C_C_N_S_E =
062 SocialActivityCounterFinder.class.getName() + ".findAC_By_G_C_C_N_S_E";
063
064 public static final String FIND_U_BY_G_C_N_S_E =
065 SocialActivityCounterFinder.class.getName() + ".findU_ByG_C_N_S_E";
066
067 @Override
068 public int countU_ByG_N(long groupId, String[] names) {
069 Session session = null;
070
071 try {
072 session = openSession();
073
074 String sql = CustomSQLUtil.get(COUNT_U_BY_G_C_N_S_E);
075
076 sql = StringUtil.replace(sql, "[$NAME$]", getNames(names));
077
078 SQLQuery q = session.createSynchronizedSQLQuery(sql);
079
080 q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
081
082 QueryPos qPos = QueryPos.getInstance(q);
083
084 qPos.add(groupId);
085 qPos.add(PortalUtil.getClassNameId(User.class.getName()));
086
087 setNames(qPos, names);
088
089 qPos.add(SocialCounterPeriodUtil.getPeriodLength());
090 qPos.add(SocialCounterPeriodUtil.getActivityDay());
091
092 Iterator<Long> itr = q.iterate();
093
094 if (itr.hasNext()) {
095 Long count = itr.next();
096
097 if (count != null) {
098 return count.intValue();
099 }
100 }
101
102 return 0;
103 }
104 catch (Exception e) {
105 throw new SystemException(e);
106 }
107 finally {
108 closeSession(session);
109 }
110 }
111
112 @Override
113 public List<SocialActivityCounter> findAC_ByG_N_S_E_1(
114 long groupId, String name, int startPeriod, int endPeriod,
115 int periodLength) {
116
117 StringBundler sb = new StringBundler(9);
118
119 sb.append(groupId);
120 sb.append(StringPool.POUND);
121 sb.append(name);
122 sb.append(StringPool.POUND);
123 sb.append(startPeriod);
124 sb.append(StringPool.POUND);
125 sb.append(endPeriod);
126 sb.append(StringPool.POUND);
127 sb.append(periodLength);
128
129 String key = sb.toString();
130
131 List<SocialActivityCounter> activityCounters = null;
132
133 if (endPeriod < SocialCounterPeriodUtil.getActivityDay()) {
134 activityCounters =
135 (List<SocialActivityCounter>)_activityCounters.get(key);
136 }
137
138 if (activityCounters != null) {
139 return activityCounters;
140 }
141
142 Session session = null;
143
144 try {
145 session = openSession();
146
147 String sql = CustomSQLUtil.get(FIND_AC_BY_G_N_S_E_1);
148
149 SQLQuery q = session.createSynchronizedSQLQuery(sql);
150
151 QueryPos qPos = QueryPos.getInstance(q);
152
153 qPos.add(groupId);
154 qPos.add(name);
155 qPos.add(startPeriod);
156 qPos.add(endPeriod);
157 qPos.add(periodLength);
158 qPos.add(endPeriod);
159
160 activityCounters = new ArrayList<SocialActivityCounter>();
161
162 Iterator<Object[]> itr = q.iterate();
163
164 while (itr.hasNext()) {
165 Object[] array = itr.next();
166
167 SocialActivityCounter activityCounter =
168 new SocialActivityCounterImpl();
169
170 activityCounter.setName(GetterUtil.getString(array[0]));
171 activityCounter.setCurrentValue(
172 GetterUtil.getInteger(array[1]));
173 activityCounter.setStartPeriod(GetterUtil.getInteger(array[2]));
174 activityCounter.setEndPeriod(GetterUtil.getInteger(array[3]));
175
176 activityCounters.add(activityCounter);
177 }
178 }
179 catch (Exception e) {
180 throw new SystemException(e);
181 }
182 finally {
183 if (activityCounters == null) {
184 _activityCounters.remove(key);
185 }
186 else {
187 if (endPeriod < SocialCounterPeriodUtil.getActivityDay()) {
188 _activityCounters.put(key, (Serializable)activityCounters);
189 }
190 }
191
192 closeSession(session);
193 }
194
195 return activityCounters;
196 }
197
198 @Override
199 public List<SocialActivityCounter> findAC_ByG_N_S_E_2(
200 long groupId, String counterName, int startPeriod, int endPeriod,
201 int periodLength) {
202
203 Session session = null;
204
205 try {
206 session = openSession();
207
208 String sql = CustomSQLUtil.get(FIND_AC_BY_G_N_S_E_2);
209
210 SQLQuery q = session.createSynchronizedSQLQuery(sql);
211
212 QueryPos qPos = QueryPos.getInstance(q);
213
214 qPos.add(groupId);
215 qPos.add(counterName);
216 qPos.add(startPeriod);
217 qPos.add(endPeriod);
218 qPos.add(periodLength);
219 qPos.add(endPeriod);
220
221 List<SocialActivityCounter> activityCounters =
222 new ArrayList<SocialActivityCounter>();
223
224 Iterator<Object[]> itr = q.iterate();
225
226 while (itr.hasNext()) {
227 Object[] array = itr.next();
228
229 SocialActivityCounter activityCounter =
230 new SocialActivityCounterImpl();
231
232 activityCounter.setClassNameId(GetterUtil.getLong(array[0]));
233 activityCounter.setName(GetterUtil.getString(array[1]));
234 activityCounter.setCurrentValue(
235 GetterUtil.getInteger(array[2]));
236
237 activityCounters.add(activityCounter);
238 }
239
240 return activityCounters;
241 }
242 catch (Exception e) {
243 throw new SystemException(e);
244 }
245 finally {
246 closeSession(session);
247 }
248 }
249
250 @Override
251 public List<SocialActivityCounter> findAC_By_G_C_C_N_S_E(
252 long groupId, List<Long> userIds, String[] names, int start, int end) {
253
254 if (names.length == 0) {
255 return null;
256 }
257
258 Session session = null;
259
260 try {
261 session = openSession();
262
263 String sql = CustomSQLUtil.get(FIND_AC_BY_G_C_C_N_S_E);
264
265 sql = StringUtil.replace(
266 sql, new String[] {"[$CLASS_PK$]", "[$NAME$]"},
267 new String[] {StringUtil.merge(userIds), getNames(names)});
268
269 SQLQuery q = session.createSynchronizedSQLQuery(sql);
270
271 q.addEntity(
272 "SocialActivityCounter", SocialActivityCounterImpl.class);
273
274 QueryPos qPos = QueryPos.getInstance(q);
275
276 qPos.add(groupId);
277 qPos.add(PortalUtil.getClassNameId(User.class.getName()));
278
279 setNames(qPos, names);
280
281 return (List<SocialActivityCounter>)QueryUtil.list(
282 q, getDialect(), start, end);
283 }
284 catch (Exception e) {
285 throw new SystemException(e);
286 }
287 finally {
288 closeSession(session);
289 }
290 }
291
292 @Override
293 public List<Long> findU_ByG_N(
294 long groupId, String[] names, int start, int end) {
295
296 if (names.length == 0) {
297 return null;
298 }
299
300 Session session = null;
301
302 try {
303 session = openSession();
304
305 String sql = CustomSQLUtil.get(FIND_U_BY_G_C_N_S_E);
306
307 sql = StringUtil.replace(sql, "[$NAME$]", getNames(names));
308
309 SQLQuery q = session.createSynchronizedSQLQuery(sql);
310
311 q.addScalar("classPK", Type.LONG);
312
313 QueryPos qPos = QueryPos.getInstance(q);
314
315 qPos.add(groupId);
316 qPos.add(PortalUtil.getClassNameId(User.class.getName()));
317
318 setNames(qPos, names);
319
320 qPos.add(SocialCounterPeriodUtil.getStartPeriod());
321
322 return (List<Long>)QueryUtil.list(q, getDialect(), start, end);
323 }
324 catch (Exception e) {
325 throw new SystemException(e);
326 }
327 finally {
328 closeSession(session);
329 }
330 }
331
332 protected String getNames(String[] names) {
333 if (names.length == 0) {
334 return StringPool.BLANK;
335 }
336
337 StringBundler sb = new StringBundler(names.length * 2 - 1);
338
339 for (int i = 0; i < names.length; i++) {
340 sb.append(StringPool.QUESTION);
341
342 if ((i + 1) < names.length) {
343 sb.append(StringPool.COMMA);
344 }
345 }
346
347 return sb.toString();
348 }
349
350 protected void setNames(QueryPos qPos, String[] names) {
351 if (ArrayUtil.isNotEmpty(names)) {
352 for (String name : names) {
353 qPos.add(name);
354 }
355 }
356 }
357
358 private static PortalCache<String, Serializable> _activityCounters =
359 MultiVMPoolUtil.getCache(SocialActivityCounterFinder.class.getName());
360
361 }