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