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<>();
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 = new ArrayList<>();
222
223 Iterator<Object[]> itr = q.iterate();
224
225 while (itr.hasNext()) {
226 Object[] array = itr.next();
227
228 SocialActivityCounter activityCounter =
229 new SocialActivityCounterImpl();
230
231 activityCounter.setClassNameId(GetterUtil.getLong(array[0]));
232 activityCounter.setName(GetterUtil.getString(array[1]));
233 activityCounter.setCurrentValue(
234 GetterUtil.getInteger(array[2]));
235
236 activityCounters.add(activityCounter);
237 }
238
239 return activityCounters;
240 }
241 catch (Exception e) {
242 throw new SystemException(e);
243 }
244 finally {
245 closeSession(session);
246 }
247 }
248
249 @Override
250 public List<SocialActivityCounter> findAC_By_G_C_C_N_S_E(
251 long groupId, List<Long> userIds, String[] names, int start, int end) {
252
253 if (names.length == 0) {
254 return null;
255 }
256
257 Session session = null;
258
259 try {
260 session = openSession();
261
262 String sql = CustomSQLUtil.get(FIND_AC_BY_G_C_C_N_S_E);
263
264 sql = StringUtil.replace(
265 sql, new String[] {"[$CLASS_PK$]", "[$NAME$]"},
266 new String[] {StringUtil.merge(userIds), getNames(names)});
267
268 SQLQuery q = session.createSynchronizedSQLQuery(sql);
269
270 q.addEntity(
271 "SocialActivityCounter", SocialActivityCounterImpl.class);
272
273 QueryPos qPos = QueryPos.getInstance(q);
274
275 qPos.add(groupId);
276 qPos.add(PortalUtil.getClassNameId(User.class.getName()));
277
278 setNames(qPos, names);
279
280 return (List<SocialActivityCounter>)QueryUtil.list(
281 q, getDialect(), start, end);
282 }
283 catch (Exception e) {
284 throw new SystemException(e);
285 }
286 finally {
287 closeSession(session);
288 }
289 }
290
291 @Override
292 public List<Long> findU_ByG_N(
293 long groupId, String[] names, int start, int end) {
294
295 if (names.length == 0) {
296 return null;
297 }
298
299 Session session = null;
300
301 try {
302 session = openSession();
303
304 String sql = CustomSQLUtil.get(FIND_U_BY_G_C_N_S_E);
305
306 sql = StringUtil.replace(sql, "[$NAME$]", getNames(names));
307
308 SQLQuery q = session.createSynchronizedSQLQuery(sql);
309
310 q.addScalar("classPK", Type.LONG);
311
312 QueryPos qPos = QueryPos.getInstance(q);
313
314 qPos.add(groupId);
315 qPos.add(PortalUtil.getClassNameId(User.class.getName()));
316
317 setNames(qPos, names);
318
319 qPos.add(SocialCounterPeriodUtil.getStartPeriod());
320
321 return (List<Long>)QueryUtil.list(q, getDialect(), start, end);
322 }
323 catch (Exception e) {
324 throw new SystemException(e);
325 }
326 finally {
327 closeSession(session);
328 }
329 }
330
331 protected String getNames(String[] names) {
332 if (names.length == 0) {
333 return StringPool.BLANK;
334 }
335
336 StringBundler sb = new StringBundler(names.length * 2 - 1);
337
338 for (int i = 0; i < names.length; i++) {
339 sb.append(StringPool.QUESTION);
340
341 if ((i + 1) < names.length) {
342 sb.append(StringPool.COMMA);
343 }
344 }
345
346 return sb.toString();
347 }
348
349 protected void setNames(QueryPos qPos, String[] names) {
350 if (ArrayUtil.isNotEmpty(names)) {
351 for (String name : names) {
352 qPos.add(name);
353 }
354 }
355 }
356
357 private static final PortalCache<String, Serializable> _activityCounters =
358 MultiVMPoolUtil.getCache(SocialActivityCounterFinder.class.getName());
359
360 }