001
014
015 package com.liferay.portlet.social.service.impl;
016
017 import com.liferay.portal.kernel.cache.MultiVMPoolUtil;
018 import com.liferay.portal.kernel.cache.PortalCache;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.exception.SystemException;
021 import com.liferay.portal.kernel.json.JSONException;
022 import com.liferay.portal.kernel.json.JSONFactoryUtil;
023 import com.liferay.portal.kernel.json.JSONObject;
024 import com.liferay.portal.kernel.log.Log;
025 import com.liferay.portal.kernel.log.LogFactoryUtil;
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.model.Group;
030 import com.liferay.portal.util.PortalUtil;
031 import com.liferay.portlet.social.model.SocialActivityCounterDefinition;
032 import com.liferay.portlet.social.model.SocialActivityDefinition;
033 import com.liferay.portlet.social.model.SocialActivitySetting;
034 import com.liferay.portlet.social.model.SocialActivitySettingConstants;
035 import com.liferay.portlet.social.service.base.SocialActivitySettingLocalServiceBaseImpl;
036 import com.liferay.portlet.social.util.SocialConfigurationUtil;
037
038 import java.util.ArrayList;
039 import java.util.List;
040
041
044 public class SocialActivitySettingLocalServiceImpl
045 extends SocialActivitySettingLocalServiceBaseImpl {
046
047 @Override
048 public void deleteActivitySetting(
049 long groupId, String className, long classPK)
050 throws SystemException {
051
052 long classNameId = PortalUtil.getClassNameId(className);
053 String name = _PREFIX_CLASS_PK.concat(String.valueOf(classPK));
054
055 SocialActivitySetting activitySetting =
056 socialActivitySettingPersistence.fetchByG_C_A_N(
057 groupId, classNameId, 0, name);
058
059 if (activitySetting != null) {
060 socialActivitySettingPersistence.remove(activitySetting);
061 }
062 }
063
064 @Override
065 public void deleteActivitySettings(long groupId) throws SystemException {
066 socialActivitySettingPersistence.removeByGroupId(groupId);
067 }
068
069 @Override
070 public SocialActivityDefinition getActivityDefinition(
071 long groupId, String className, int activityType)
072 throws SystemException {
073
074 String key = encodeKey(groupId, className, activityType);
075
076 SocialActivityDefinition activityDefinition = _activityDefinitions.get(
077 key);
078
079 if (activityDefinition != null) {
080 return activityDefinition;
081 }
082
083 SocialActivityDefinition defaultActivityDefinition =
084 SocialConfigurationUtil.getActivityDefinition(
085 className, activityType);
086
087 if (defaultActivityDefinition == null) {
088 return null;
089 }
090
091 activityDefinition = getActivityDefinition(
092 groupId, className, activityType, defaultActivityDefinition);
093
094 _activityDefinitions.put(key, activityDefinition);
095
096 return activityDefinition;
097 }
098
099 @Override
100 public List<SocialActivityDefinition> getActivityDefinitions(
101 long groupId, String className)
102 throws SystemException {
103
104 List<SocialActivityDefinition> activityDefinitions =
105 new ArrayList<SocialActivityDefinition>();
106
107 List<SocialActivityDefinition> defaultActivityDefinitions =
108 SocialConfigurationUtil.getActivityDefinitions(className);
109
110 for (SocialActivityDefinition defaultActivityDefinition :
111 defaultActivityDefinitions) {
112
113 SocialActivityDefinition activityDefinition = getActivityDefinition(
114 groupId, className,
115 defaultActivityDefinition.getActivityType());
116
117 activityDefinitions.add(activityDefinition);
118 }
119
120 return activityDefinitions;
121 }
122
123 @Override
124 public List<SocialActivitySetting> getActivitySettings(long groupId)
125 throws SystemException {
126
127 return socialActivitySettingPersistence.findByG_A(groupId, 0);
128 }
129
130 @Override
131 public boolean isEnabled(long groupId, long classNameId)
132 throws SystemException {
133
134 SocialActivitySetting activitySetting =
135 socialActivitySettingPersistence.fetchByG_C_A_N(
136 groupId, classNameId, 0,
137 SocialActivitySettingConstants.NAME_ENABLED);
138
139 if (activitySetting == null) {
140 return false;
141 }
142
143 return GetterUtil.getBoolean(activitySetting.getValue());
144 }
145
146 @Override
147 public boolean isEnabled(long groupId, long classNameId, long classPK)
148 throws SystemException {
149
150 String name = _PREFIX_CLASS_PK.concat(String.valueOf(classPK));
151
152 SocialActivitySetting activitySetting =
153 socialActivitySettingPersistence.fetchByG_C_A_N(
154 groupId, classNameId, 0, name);
155
156 if (activitySetting == null) {
157 return true;
158 }
159
160 try {
161 JSONObject jsonObject = JSONFactoryUtil.createJSONObject(
162 activitySetting.getValue());
163
164 return jsonObject.getBoolean("enabled");
165 }
166 catch (JSONException jsone) {
167 _log.error(
168 "Unable to create JSON object from " +
169 activitySetting.getValue());
170
171 return false;
172 }
173 }
174
175 @Override
176 public void updateActivitySetting(
177 long groupId, String className, boolean enabled)
178 throws PortalException, SystemException {
179
180 long classNameId = PortalUtil.getClassNameId(className);
181
182 SocialActivitySetting activitySetting =
183 socialActivitySettingPersistence.fetchByG_C_A_N(
184 groupId, classNameId, 0,
185 SocialActivitySettingConstants.NAME_ENABLED);
186
187 if (activitySetting == null) {
188 Group group = groupLocalService.getGroup(groupId);
189
190 long activitySettingId = counterLocalService.increment();
191
192 activitySetting = socialActivitySettingPersistence.create(
193 activitySettingId);
194
195 activitySetting.setGroupId(groupId);
196 activitySetting.setCompanyId(group.getCompanyId());
197 activitySetting.setClassNameId(classNameId);
198 activitySetting.setName(
199 SocialActivitySettingConstants.NAME_ENABLED);
200 }
201
202 activitySetting.setValue(String.valueOf(enabled));
203
204 socialActivitySettingPersistence.update(activitySetting);
205 }
206
207 @Override
208 public void updateActivitySetting(
209 long groupId, String className, int activityType,
210 SocialActivityCounterDefinition activityCounterDefinition)
211 throws PortalException, SystemException {
212
213 long classNameId = PortalUtil.getClassNameId(className);
214
215 SocialActivityDefinition defaultActivityDefinition =
216 SocialConfigurationUtil.getActivityDefinition(
217 className, activityType);
218
219 SocialActivityCounterDefinition defaultActivityCounterDefinition =
220 defaultActivityDefinition.getActivityCounterDefinition(
221 activityCounterDefinition.getName());
222
223 SocialActivitySetting activitySetting =
224 socialActivitySettingPersistence.fetchByG_C_A_N(
225 groupId, classNameId, activityType,
226 activityCounterDefinition.getName());
227
228 if ((defaultActivityCounterDefinition != null) &&
229 defaultActivityCounterDefinition.equals(
230 activityCounterDefinition)) {
231
232 if (activitySetting != null) {
233 socialActivitySettingPersistence.remove(activitySetting);
234 }
235
236 return;
237 }
238
239 if (activitySetting != null) {
240 activitySetting.setValue(toJSON(activityCounterDefinition));
241 }
242 else {
243 Group group = groupLocalService.getGroup(groupId);
244
245 long activitySettingId = counterLocalService.increment();
246
247 activitySetting = socialActivitySettingPersistence.create(
248 activitySettingId);
249
250 activitySetting.setGroupId(groupId);
251 activitySetting.setCompanyId(group.getCompanyId());
252 activitySetting.setClassNameId(classNameId);
253 activitySetting.setActivityType(activityType);
254 activitySetting.setName(activityCounterDefinition.getName());
255 activitySetting.setValue(toJSON(activityCounterDefinition));
256 }
257
258 socialActivitySettingPersistence.update(activitySetting);
259
260 String key = encodeKey(groupId, className, activityType);
261
262 _activityDefinitions.remove(key);
263 }
264
265 @Override
266 public void updateActivitySetting(
267 long groupId, String className, long classPK, boolean enabled)
268 throws PortalException, SystemException {
269
270 long classNameId = PortalUtil.getClassNameId(className);
271 String name = _PREFIX_CLASS_PK.concat(String.valueOf(classPK));
272
273 SocialActivitySetting activitySetting =
274 socialActivitySettingPersistence.fetchByG_C_A_N(
275 groupId, classNameId, 0, name);
276
277 if (activitySetting == null) {
278 Group group = groupLocalService.getGroup(groupId);
279
280 long activitySettingId = counterLocalService.increment();
281
282 activitySetting = socialActivitySettingPersistence.create(
283 activitySettingId);
284
285 activitySetting.setGroupId(groupId);
286 activitySetting.setCompanyId(group.getCompanyId());
287 activitySetting.setClassNameId(classNameId);
288 activitySetting.setName(name);
289 }
290
291 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
292
293 jsonObject.put("enabled", enabled);
294
295 activitySetting.setValue(jsonObject.toString());
296
297 socialActivitySettingPersistence.update(activitySetting);
298 }
299
300 @Override
301 public void updateActivitySettings(
302 long groupId, String className, int activityType,
303 List<SocialActivityCounterDefinition> activityCounterDefinitions)
304 throws PortalException, SystemException {
305
306 for (SocialActivityCounterDefinition activityCounterDefinition :
307 activityCounterDefinitions) {
308
309 updateActivitySetting(
310 groupId, className, activityType, activityCounterDefinition);
311 }
312 }
313
314 protected String encodeKey(
315 long groupId, String className, int activityType) {
316
317 StringBundler sb = new StringBundler(5);
318
319 sb.append(groupId);
320 sb.append(StringPool.POUND);
321 sb.append(className);
322 sb.append(StringPool.POUND);
323 sb.append(activityType);
324
325 return sb.toString();
326 }
327
328 protected SocialActivityDefinition getActivityDefinition(
329 long groupId, String className, int activityType,
330 SocialActivityDefinition defaultActivityDefinition)
331 throws SystemException {
332
333 SocialActivityDefinition activityDefinition =
334 defaultActivityDefinition.clone();
335
336 List<SocialActivitySetting> activitySettings = getActivitySettings(
337 groupId, className, defaultActivityDefinition.getActivityType());
338
339 for (SocialActivitySetting activitySetting : activitySettings) {
340 String name = activitySetting.getName();
341
342 if (name.equals(SocialActivitySettingConstants.NAME_ENABLED)) {
343 activityDefinition.setCountersEnabled(
344 GetterUtil.getBoolean(
345 activitySetting.getValue(),
346 defaultActivityDefinition.isCountersEnabled()));
347 }
348 else if (name.equals(
349 SocialActivitySettingConstants.NAME_LOG_ENABLED)) {
350
351 activityDefinition.setLogActivity(
352 GetterUtil.getBoolean(
353 activitySetting.getValue(),
354 defaultActivityDefinition.isLogActivity()));
355 }
356 else {
357 JSONObject jsonObject = null;
358
359 try {
360 jsonObject = JSONFactoryUtil.createJSONObject(
361 activitySetting.getValue());
362 }
363 catch (Exception e) {
364 jsonObject = JSONFactoryUtil.createJSONObject();
365 }
366
367 SocialActivityCounterDefinition activityCounterDefinition =
368 activityDefinition.getActivityCounterDefinition(name);
369
370 if (activityCounterDefinition == null) {
371 activityCounterDefinition =
372 new SocialActivityCounterDefinition();
373
374 activityCounterDefinition.setName(name);
375
376 activityDefinition.addCounter(activityCounterDefinition);
377 }
378
379 activityCounterDefinition.setEnabled(
380 jsonObject.getBoolean("enabled"));
381 activityCounterDefinition.setIncrement(
382 jsonObject.getInt("value"));
383 activityCounterDefinition.setLimitEnabled(
384 jsonObject.getBoolean("limitEnabled"));
385 activityCounterDefinition.setLimitPeriod(
386 jsonObject.getInt("limitPeriod"));
387 activityCounterDefinition.setLimitValue(
388 jsonObject.getInt("limitValue"));
389 activityCounterDefinition.setOwnerType(
390 jsonObject.getInt("ownerType"));
391 }
392 }
393
394 return activityDefinition;
395 }
396
397 protected List<SocialActivitySetting> getActivitySettings(
398 long groupId, String className, int activityType)
399 throws SystemException {
400
401 long classNameId = PortalUtil.getClassNameId(className);
402
403 List<SocialActivitySetting> activitySettings =
404 socialActivitySettingPersistence.findByG_C_A(
405 groupId, classNameId, activityType);
406
407 return activitySettings;
408 }
409
410 protected String toJSON(
411 SocialActivityCounterDefinition activityCounterDefinition) {
412
413 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
414
415 jsonObject.put("enabled", activityCounterDefinition.isEnabled());
416 jsonObject.put(
417 "limitEnabled", activityCounterDefinition.isLimitEnabled());
418 jsonObject.put(
419 "limitPeriod", activityCounterDefinition.getLimitPeriod());
420 jsonObject.put("limitValue", activityCounterDefinition.getLimitValue());
421 jsonObject.put("ownerType", activityCounterDefinition.getOwnerType());
422 jsonObject.put("value", activityCounterDefinition.getIncrement());
423
424 return jsonObject.toString();
425 }
426
427 private static final String _PREFIX_CLASS_PK = "_LFR_CLASS_PK_";
428
429 private static Log _log = LogFactoryUtil.getLog(
430 SocialActivitySettingLocalServiceImpl.class);
431
432 private static PortalCache<String, SocialActivityDefinition>
433 _activityDefinitions = MultiVMPoolUtil.getCache(
434 SocialActivitySettingLocalServiceImpl.class.getName());
435
436 }