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 =
100 new ArrayList<SocialActivityDefinition>();
101
102 List<SocialActivityDefinition> defaultActivityDefinitions =
103 SocialConfigurationUtil.getActivityDefinitions(className);
104
105 for (SocialActivityDefinition defaultActivityDefinition :
106 defaultActivityDefinitions) {
107
108 SocialActivityDefinition activityDefinition = getActivityDefinition(
109 groupId, className,
110 defaultActivityDefinition.getActivityType());
111
112 activityDefinitions.add(activityDefinition);
113 }
114
115 return activityDefinitions;
116 }
117
118 @Override
119 public List<SocialActivitySetting> getActivitySettings(long groupId) {
120 return socialActivitySettingPersistence.findByG_A(groupId, 0);
121 }
122
123 @Override
124 public boolean isEnabled(long groupId, long classNameId) {
125 SocialActivitySetting activitySetting =
126 socialActivitySettingPersistence.fetchByG_C_A_N(
127 groupId, classNameId, 0,
128 SocialActivitySettingConstants.NAME_ENABLED);
129
130 if (activitySetting == null) {
131 return false;
132 }
133
134 return GetterUtil.getBoolean(activitySetting.getValue());
135 }
136
137 @Override
138 public boolean isEnabled(long groupId, long classNameId, long classPK) {
139 String name = _PREFIX_CLASS_PK.concat(String.valueOf(classPK));
140
141 SocialActivitySetting activitySetting =
142 socialActivitySettingPersistence.fetchByG_C_A_N(
143 groupId, classNameId, 0, name);
144
145 if (activitySetting == null) {
146 return true;
147 }
148
149 try {
150 JSONObject jsonObject = JSONFactoryUtil.createJSONObject(
151 activitySetting.getValue());
152
153 return jsonObject.getBoolean("enabled");
154 }
155 catch (JSONException jsone) {
156 _log.error(
157 "Unable to create JSON object from " +
158 activitySetting.getValue());
159
160 return false;
161 }
162 }
163
164 @Override
165 public void updateActivitySetting(
166 long groupId, String className, boolean enabled)
167 throws PortalException {
168
169 long classNameId = classNameLocalService.getClassNameId(className);
170
171 SocialActivitySetting activitySetting =
172 socialActivitySettingPersistence.fetchByG_C_A_N(
173 groupId, classNameId, 0,
174 SocialActivitySettingConstants.NAME_ENABLED);
175
176 if (activitySetting == null) {
177 Group group = groupLocalService.getGroup(groupId);
178
179 long activitySettingId = counterLocalService.increment();
180
181 activitySetting = socialActivitySettingPersistence.create(
182 activitySettingId);
183
184 activitySetting.setGroupId(groupId);
185 activitySetting.setCompanyId(group.getCompanyId());
186 activitySetting.setClassNameId(classNameId);
187 activitySetting.setName(
188 SocialActivitySettingConstants.NAME_ENABLED);
189 }
190
191 activitySetting.setValue(String.valueOf(enabled));
192
193 socialActivitySettingPersistence.update(activitySetting);
194 }
195
196 @Override
197 public void updateActivitySetting(
198 long groupId, String className, int activityType,
199 SocialActivityCounterDefinition activityCounterDefinition)
200 throws PortalException {
201
202 long classNameId = classNameLocalService.getClassNameId(className);
203
204 SocialActivityDefinition defaultActivityDefinition =
205 SocialConfigurationUtil.getActivityDefinition(
206 className, activityType);
207
208 SocialActivityCounterDefinition defaultActivityCounterDefinition =
209 defaultActivityDefinition.getActivityCounterDefinition(
210 activityCounterDefinition.getName());
211
212 SocialActivitySetting activitySetting =
213 socialActivitySettingPersistence.fetchByG_C_A_N(
214 groupId, classNameId, activityType,
215 activityCounterDefinition.getName());
216
217 if ((defaultActivityCounterDefinition != null) &&
218 defaultActivityCounterDefinition.equals(
219 activityCounterDefinition)) {
220
221 if (activitySetting != null) {
222 socialActivitySettingPersistence.remove(activitySetting);
223 }
224
225 return;
226 }
227
228 if (activitySetting != null) {
229 activitySetting.setValue(toJSON(activityCounterDefinition));
230 }
231 else {
232 Group group = groupLocalService.getGroup(groupId);
233
234 long activitySettingId = counterLocalService.increment();
235
236 activitySetting = socialActivitySettingPersistence.create(
237 activitySettingId);
238
239 activitySetting.setGroupId(groupId);
240 activitySetting.setCompanyId(group.getCompanyId());
241 activitySetting.setClassNameId(classNameId);
242 activitySetting.setActivityType(activityType);
243 activitySetting.setName(activityCounterDefinition.getName());
244 activitySetting.setValue(toJSON(activityCounterDefinition));
245 }
246
247 socialActivitySettingPersistence.update(activitySetting);
248
249 String key = encodeKey(groupId, className, activityType);
250
251 _activityDefinitions.remove(key);
252 }
253
254 @Override
255 public void updateActivitySetting(
256 long groupId, String className, long classPK, boolean enabled)
257 throws PortalException {
258
259 long classNameId = classNameLocalService.getClassNameId(className);
260 String name = _PREFIX_CLASS_PK.concat(String.valueOf(classPK));
261
262 SocialActivitySetting activitySetting =
263 socialActivitySettingPersistence.fetchByG_C_A_N(
264 groupId, classNameId, 0, name);
265
266 if (activitySetting == null) {
267 Group group = groupLocalService.getGroup(groupId);
268
269 long activitySettingId = counterLocalService.increment();
270
271 activitySetting = socialActivitySettingPersistence.create(
272 activitySettingId);
273
274 activitySetting.setGroupId(groupId);
275 activitySetting.setCompanyId(group.getCompanyId());
276 activitySetting.setClassNameId(classNameId);
277 activitySetting.setName(name);
278 }
279
280 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
281
282 jsonObject.put("enabled", enabled);
283
284 activitySetting.setValue(jsonObject.toString());
285
286 socialActivitySettingPersistence.update(activitySetting);
287 }
288
289 @Override
290 public void updateActivitySettings(
291 long groupId, String className, int activityType,
292 List<SocialActivityCounterDefinition> activityCounterDefinitions)
293 throws PortalException {
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
321 SocialActivityDefinition activityDefinition =
322 defaultActivityDefinition.clone();
323
324 List<SocialActivitySetting> activitySettings = getActivitySettings(
325 groupId, className, defaultActivityDefinition.getActivityType());
326
327 for (SocialActivitySetting activitySetting : activitySettings) {
328 String name = activitySetting.getName();
329
330 if (name.equals(SocialActivitySettingConstants.NAME_ENABLED)) {
331 activityDefinition.setCountersEnabled(
332 GetterUtil.getBoolean(
333 activitySetting.getValue(),
334 defaultActivityDefinition.isCountersEnabled()));
335 }
336 else if (name.equals(
337 SocialActivitySettingConstants.NAME_LOG_ENABLED)) {
338
339 activityDefinition.setLogActivity(
340 GetterUtil.getBoolean(
341 activitySetting.getValue(),
342 defaultActivityDefinition.isLogActivity()));
343 }
344 else {
345 JSONObject jsonObject = null;
346
347 try {
348 jsonObject = JSONFactoryUtil.createJSONObject(
349 activitySetting.getValue());
350 }
351 catch (Exception e) {
352 jsonObject = JSONFactoryUtil.createJSONObject();
353 }
354
355 SocialActivityCounterDefinition activityCounterDefinition =
356 activityDefinition.getActivityCounterDefinition(name);
357
358 if (activityCounterDefinition == null) {
359 activityCounterDefinition =
360 new SocialActivityCounterDefinition();
361
362 activityCounterDefinition.setName(name);
363
364 activityDefinition.addCounter(activityCounterDefinition);
365 }
366
367 activityCounterDefinition.setEnabled(
368 jsonObject.getBoolean("enabled"));
369 activityCounterDefinition.setIncrement(
370 jsonObject.getInt("value"));
371 activityCounterDefinition.setLimitEnabled(
372 jsonObject.getBoolean("limitEnabled"));
373 activityCounterDefinition.setLimitPeriod(
374 jsonObject.getInt("limitPeriod"));
375 activityCounterDefinition.setLimitValue(
376 jsonObject.getInt("limitValue"));
377 activityCounterDefinition.setOwnerType(
378 jsonObject.getInt("ownerType"));
379 }
380 }
381
382 return activityDefinition;
383 }
384
385 protected List<SocialActivitySetting> getActivitySettings(
386 long groupId, String className, int activityType) {
387
388 long classNameId = classNameLocalService.getClassNameId(className);
389
390 List<SocialActivitySetting> activitySettings =
391 socialActivitySettingPersistence.findByG_C_A(
392 groupId, classNameId, activityType);
393
394 return activitySettings;
395 }
396
397 protected String toJSON(
398 SocialActivityCounterDefinition activityCounterDefinition) {
399
400 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
401
402 jsonObject.put("enabled", activityCounterDefinition.isEnabled());
403 jsonObject.put(
404 "limitEnabled", activityCounterDefinition.isLimitEnabled());
405 jsonObject.put(
406 "limitPeriod", activityCounterDefinition.getLimitPeriod());
407 jsonObject.put("limitValue", activityCounterDefinition.getLimitValue());
408 jsonObject.put("ownerType", activityCounterDefinition.getOwnerType());
409 jsonObject.put("value", activityCounterDefinition.getIncrement());
410
411 return jsonObject.toString();
412 }
413
414 private static final String _PREFIX_CLASS_PK = "_LFR_CLASS_PK_";
415
416 private static final Log _log = LogFactoryUtil.getLog(
417 SocialActivitySettingLocalServiceImpl.class);
418
419 private static final PortalCache<String, SocialActivityDefinition>
420 _activityDefinitions = MultiVMPoolUtil.getCache(
421 SocialActivitySettingLocalServiceImpl.class.getName());
422
423 }