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