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.JSONFactoryUtil;
022 import com.liferay.portal.kernel.json.JSONObject;
023 import com.liferay.portal.kernel.util.GetterUtil;
024 import com.liferay.portal.kernel.util.StringBundler;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.model.Group;
027 import com.liferay.portal.util.PortalUtil;
028 import com.liferay.portlet.social.model.SocialActivityCounterDefinition;
029 import com.liferay.portlet.social.model.SocialActivityDefinition;
030 import com.liferay.portlet.social.model.SocialActivitySetting;
031 import com.liferay.portlet.social.model.SocialActivitySettingConstants;
032 import com.liferay.portlet.social.service.base.SocialActivitySettingLocalServiceBaseImpl;
033 import com.liferay.portlet.social.util.SocialConfigurationUtil;
034
035 import java.util.ArrayList;
036 import java.util.List;
037
038
041 public class SocialActivitySettingLocalServiceImpl
042 extends SocialActivitySettingLocalServiceBaseImpl {
043
044 public SocialActivityDefinition getActivityDefinition(
045 long groupId, String className, int activityType)
046 throws SystemException {
047
048 String key = encodeKey(groupId, className, activityType);
049
050 SocialActivityDefinition activityDefinition =
051 (SocialActivityDefinition)_activityDefinitions.get(key);
052
053 if (activityDefinition != null) {
054 return activityDefinition;
055 }
056
057 SocialActivityDefinition defaultActivityDefinition =
058 SocialConfigurationUtil.getActivityDefinition(
059 className, activityType);
060
061 if (defaultActivityDefinition == null) {
062 return null;
063 }
064
065 activityDefinition = getActivityDefinition(
066 groupId, className, activityType, defaultActivityDefinition);
067
068 _activityDefinitions.put(key, activityDefinition);
069
070 return activityDefinition;
071 }
072
073 public List<SocialActivityDefinition> getActivityDefinitions(
074 long groupId, String className)
075 throws SystemException {
076
077 List<SocialActivityDefinition> activityDefinitions =
078 new ArrayList<SocialActivityDefinition>();
079
080 List<SocialActivityDefinition> defaultActivityDefinitions =
081 SocialConfigurationUtil.getActivityDefinitions(className);
082
083 for (SocialActivityDefinition defaultActivityDefinition :
084 defaultActivityDefinitions) {
085
086 SocialActivityDefinition activityDefinition = getActivityDefinition(
087 groupId, className,
088 defaultActivityDefinition.getActivityType());
089
090 activityDefinitions.add(activityDefinition);
091 }
092
093 return activityDefinitions;
094 }
095
096 public List<SocialActivitySetting> getActivitySettings(long groupId)
097 throws SystemException {
098
099 return socialActivitySettingPersistence.findByG_A(groupId, 0);
100 }
101
102 public boolean isEnabled(long groupId, long classNameId)
103 throws SystemException {
104
105 SocialActivitySetting activitySetting =
106 socialActivitySettingPersistence.fetchByG_C_A_N(
107 groupId, classNameId, 0,
108 SocialActivitySettingConstants.NAME_ENABLED);
109
110 if (activitySetting == null) {
111 return false;
112 }
113
114 return GetterUtil.getBoolean(activitySetting.getValue());
115 }
116
117 public void updateActivitySetting(
118 long groupId, String className, boolean enabled)
119 throws PortalException, SystemException {
120
121 long classNameId = PortalUtil.getClassNameId(className);
122
123 SocialActivitySetting activitySetting =
124 socialActivitySettingPersistence.fetchByG_C_A_N(
125 groupId, classNameId, 0,
126 SocialActivitySettingConstants.NAME_ENABLED);
127
128 if (activitySetting == null) {
129 Group group = groupLocalService.getGroup(groupId);
130
131 long activitySettingId = counterLocalService.increment();
132
133 activitySetting = socialActivitySettingPersistence.create(
134 activitySettingId);
135
136 activitySetting.setGroupId(groupId);
137 activitySetting.setCompanyId(group.getCompanyId());
138 activitySetting.setClassNameId(classNameId);
139 activitySetting.setName(
140 SocialActivitySettingConstants.NAME_ENABLED);
141 }
142
143 activitySetting.setValue(String.valueOf(enabled));
144
145 socialActivitySettingPersistence.update(activitySetting, false);
146 }
147
148 public void updateActivitySetting(
149 long groupId, String className, int activityType,
150 SocialActivityCounterDefinition activityCounterDefinition)
151 throws PortalException, SystemException {
152
153 long classNameId = PortalUtil.getClassNameId(className);
154
155 SocialActivityDefinition defaultActivityDefinition =
156 SocialConfigurationUtil.getActivityDefinition(
157 className, activityType);
158
159 SocialActivityCounterDefinition defaultActivityCounterDefinition =
160 defaultActivityDefinition.getActivityCounterDefinition(
161 activityCounterDefinition.getName());
162
163 SocialActivitySetting activitySetting =
164 socialActivitySettingPersistence.fetchByG_C_A_N(
165 groupId, classNameId, activityType,
166 activityCounterDefinition.getName());
167
168 if ((defaultActivityCounterDefinition != null) &&
169 defaultActivityCounterDefinition.equals(
170 activityCounterDefinition)) {
171
172 if (activitySetting != null) {
173 socialActivitySettingPersistence.remove(activitySetting);
174 }
175
176 return;
177 }
178
179 if (activitySetting != null) {
180 activitySetting.setValue(toJSON(activityCounterDefinition));
181 }
182 else {
183 Group group = groupLocalService.getGroup(groupId);
184
185 long activitySettingId = counterLocalService.increment();
186
187 activitySetting = socialActivitySettingPersistence.create(
188 activitySettingId);
189
190 activitySetting.setGroupId(groupId);
191 activitySetting.setCompanyId(group.getCompanyId());
192 activitySetting.setClassNameId(classNameId);
193 activitySetting.setActivityType(activityType);
194 activitySetting.setName(activityCounterDefinition.getName());
195 activitySetting.setValue(toJSON(activityCounterDefinition));
196 }
197
198 socialActivitySettingPersistence.update(activitySetting, false);
199
200 String key = encodeKey(groupId, className, activityType);
201
202 _activityDefinitions.remove(key);
203 }
204
205 public void updateActivitySettings(
206 long groupId, String className, int activityType,
207 List<SocialActivityCounterDefinition> activityCounterDefinitions)
208 throws PortalException, SystemException {
209
210 for (SocialActivityCounterDefinition activityCounterDefinition :
211 activityCounterDefinitions) {
212
213 updateActivitySetting(
214 groupId, className, activityType, activityCounterDefinition);
215 }
216 }
217
218 protected String encodeKey(
219 long groupId, String className, int activityType) {
220
221 StringBundler sb = new StringBundler(5);
222
223 sb.append(groupId);
224 sb.append(StringPool.POUND);
225 sb.append(className);
226 sb.append(StringPool.POUND);
227 sb.append(activityType);
228
229 return sb.toString();
230 }
231
232 protected SocialActivityDefinition getActivityDefinition(
233 long groupId, String className, int activityType,
234 SocialActivityDefinition defaultActivityDefinition)
235 throws SystemException {
236
237 SocialActivityDefinition activityDefinition =
238 defaultActivityDefinition.clone();
239
240 List<SocialActivitySetting> activitySettings = getActivitySettings(
241 groupId, className, defaultActivityDefinition.getActivityType());
242
243 for (SocialActivitySetting activitySetting : activitySettings) {
244 String name = activitySetting.getName();
245
246 if (name.equals(SocialActivitySettingConstants.NAME_ENABLED)) {
247 activityDefinition.setEnabled(
248 GetterUtil.getBoolean(
249 activitySetting.getValue(),
250 defaultActivityDefinition.isEnabled()));
251 }
252 else if (name.equals(
253 SocialActivitySettingConstants.NAME_LOG_ENABLED)) {
254
255 activityDefinition.setLogActivity(
256 GetterUtil.getBoolean(
257 activitySetting.getValue(),
258 defaultActivityDefinition.isLogActivity()));
259 }
260 else {
261 JSONObject jsonObject = null;
262
263 try {
264 jsonObject = JSONFactoryUtil.createJSONObject(
265 activitySetting.getValue());
266 }
267 catch (Exception e) {
268 jsonObject = JSONFactoryUtil.createJSONObject();
269 }
270
271 SocialActivityCounterDefinition activityCounterDefinition =
272 activityDefinition.getActivityCounterDefinition(name);
273
274 if (activityCounterDefinition == null) {
275 activityCounterDefinition =
276 new SocialActivityCounterDefinition();
277
278 activityCounterDefinition.setName(name);
279
280 activityDefinition.addCounter(activityCounterDefinition);
281 }
282
283 activityCounterDefinition.setEnabled(
284 jsonObject.getBoolean("enabled"));
285 activityCounterDefinition.setIncrement(
286 jsonObject.getInt("value"));
287 activityCounterDefinition.setLimitEnabled(
288 jsonObject.getBoolean("limitEnabled"));
289 activityCounterDefinition.setLimitPeriod(
290 jsonObject.getInt("limitPeriod"));
291 activityCounterDefinition.setLimitValue(
292 jsonObject.getInt("limitValue"));
293 activityCounterDefinition.setOwnerType(
294 jsonObject.getInt("ownerType"));
295 }
296 }
297
298 return activityDefinition;
299 }
300
301 protected List<SocialActivitySetting> getActivitySettings(
302 long groupId, String className, int activityType)
303 throws SystemException {
304
305 long classNameId = PortalUtil.getClassNameId(className);
306
307 List<SocialActivitySetting> activitySettings =
308 socialActivitySettingPersistence.findByG_C_A(
309 groupId, classNameId, activityType);
310
311 return activitySettings;
312 }
313
314 protected String toJSON(
315 SocialActivityCounterDefinition activityCounterDefinition) {
316
317 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
318
319 jsonObject.put("enabled", activityCounterDefinition.isEnabled());
320 jsonObject.put(
321 "limitEnabled", activityCounterDefinition.isLimitEnabled());
322 jsonObject.put(
323 "limitPeriod", activityCounterDefinition.getLimitPeriod());
324 jsonObject.put("limitValue", activityCounterDefinition.getLimitValue());
325 jsonObject.put("ownerType", activityCounterDefinition.getOwnerType());
326 jsonObject.put("value", activityCounterDefinition.getIncrement());
327
328 return jsonObject.toString();
329 }
330
331 private static PortalCache _activityDefinitions = MultiVMPoolUtil.getCache(
332 SocialActivitySettingLocalServiceImpl.class.getName());
333
334 }