1
14
15 package com.liferay.portlet.social.service.impl;
16
17 import com.liferay.portal.kernel.cache.MultiVMPoolUtil;
18 import com.liferay.portal.kernel.cache.PortalCache;
19 import com.liferay.portal.kernel.exception.PortalException;
20 import com.liferay.portal.kernel.exception.SystemException;
21 import com.liferay.portal.kernel.util.ListUtil;
22 import com.liferay.portal.kernel.util.StringBundler;
23 import com.liferay.portal.kernel.util.StringPool;
24 import com.liferay.portal.model.Group;
25 import com.liferay.portal.security.permission.ResourceActionsUtil;
26 import com.liferay.portal.util.PortalUtil;
27 import com.liferay.portlet.social.NoSuchEquitySettingException;
28 import com.liferay.portlet.social.model.SocialEquityActionMapping;
29 import com.liferay.portlet.social.model.SocialEquitySetting;
30 import com.liferay.portlet.social.model.SocialEquitySettingConstants;
31 import com.liferay.portlet.social.model.impl.SocialEquitySettingImpl;
32 import com.liferay.portlet.social.service.base.SocialEquitySettingLocalServiceBaseImpl;
33
34 import java.util.Collections;
35 import java.util.List;
36
37
44 public class SocialEquitySettingLocalServiceImpl
45 extends SocialEquitySettingLocalServiceBaseImpl {
46
47 public static final String CACHE_NAME =
48 SocialEquitySettingLocalServiceImpl.class.getName();
49
50 public List<SocialEquitySetting> getEquitySettings(
51 long groupId, String className, String actionId)
52 throws SystemException {
53
54 long classNameId = PortalUtil.getClassNameId(className);
55
56 return getEquitySettings(groupId, classNameId, actionId);
57 }
58
59 public List<SocialEquitySetting> getEquitySettings(
60 long groupId, long classNameId, String actionId)
61 throws SystemException {
62
63 String key = encodeKey(classNameId, actionId);
64
65 List<SocialEquitySetting> socialEquitySettings =
66 (List<SocialEquitySetting>)_portalCache.get(key);
67
68 if (socialEquitySettings != null) {
69 return socialEquitySettings;
70 }
71
72 String className = PortalUtil.getClassName(classNameId);
73
74 SocialEquityActionMapping equityActionMapping =
75 ResourceActionsUtil.getSocialEquityActionMapping(
76 className, actionId);
77
78 if (equityActionMapping == null) {
79 socialEquitySettings = Collections.EMPTY_LIST;
80
81 _portalCache.put(key, socialEquitySettings);
82
83 return socialEquitySettings;
84 }
85
86 List<SocialEquitySetting> equitySettings =
87 socialEquitySettingPersistence.findByG_C_A(
88 groupId, classNameId, actionId);
89
90 equitySettings = ListUtil.copy(equitySettings);
91
92 if (equitySettings.isEmpty()) {
93 if (equityActionMapping.getInformationValue() > 0) {
94 SocialEquitySetting informationEquitySetting =
95 getInformationEquitySetting(actionId, equityActionMapping);
96
97 equitySettings.add(informationEquitySetting);
98 }
99
100 if (equityActionMapping.getParticipationValue() > 0) {
101 SocialEquitySetting participationEquitySetting =
102 getParticipationEquitySetting(
103 actionId, equityActionMapping);
104
105 equitySettings.add(participationEquitySetting);
106 }
107 }
108 else if (equitySettings.size() == 1) {
109 SocialEquitySetting equitySetting = equitySettings.get(0);
110
111 if ((equityActionMapping.getInformationValue() > 0) &&
112 (equitySetting.getType() ==
113 SocialEquitySettingConstants.TYPE_PARTICIPATION)) {
114
115 SocialEquitySetting informationEquitySetting =
116 getInformationEquitySetting(actionId, equityActionMapping);
117
118 equitySettings.add(informationEquitySetting);
119 }
120 else if ((equityActionMapping.getParticipationValue() > 0) &&
121 (equitySetting.getType() ==
122 SocialEquitySettingConstants.TYPE_INFORMATION)) {
123
124 SocialEquitySetting participationEquitySetting =
125 getParticipationEquitySetting(
126 actionId, equityActionMapping);
127
128 equitySettings.add(participationEquitySetting);
129 }
130 }
131
132 _portalCache.put(key, socialEquitySettings);
133
134 return equitySettings;
135 }
136
137 public void updateSocialEquitySettings(
138 long groupId, String className,
139 List<SocialEquityActionMapping> equityActionMappings)
140 throws PortalException, SystemException {
141
142 for (SocialEquityActionMapping equityActionMapping :
143 equityActionMappings) {
144
145 updateSocialEquitySettings(groupId, className, equityActionMapping);
146 }
147 }
148
149 protected String encodeKey(long classNameId, String actionId) {
150 StringBundler sb = new StringBundler(5);
151
152 sb.append(CACHE_NAME);
153 sb.append(StringPool.POUND);
154 sb.append(classNameId);
155 sb.append(StringPool.POUND);
156 sb.append(actionId);
157
158 return sb.toString();
159 }
160
161 protected SocialEquitySetting getEquitySetting(
162 long groupId, String className, String actionId, int type)
163 throws PortalException, SystemException {
164
165 long classNameId = PortalUtil.getClassNameId(className);
166
167 SocialEquitySetting equitySetting = null;
168
169 try {
170 equitySetting = socialEquitySettingPersistence.findByG_C_A_T(
171 groupId, classNameId, actionId, type);
172 }
173 catch (NoSuchEquitySettingException nsqse) {
174 Group group = groupLocalService.getGroup(groupId);
175
176 long equitySettingId = counterLocalService.increment();
177
178 equitySetting = socialEquitySettingPersistence.create(
179 equitySettingId);
180
181 equitySetting.setGroupId(groupId);
182 equitySetting.setCompanyId(group.getCompanyId());
183 equitySetting.setClassNameId(classNameId);
184 equitySetting.setActionId(actionId);
185 equitySetting.setType(type);
186 }
187
188 return equitySetting;
189 }
190
191 protected SocialEquitySetting getInformationEquitySetting(
192 String actionId, SocialEquityActionMapping equityActionMapping) {
193
194 SocialEquitySetting equitySetting = new SocialEquitySettingImpl();
195
196 equitySetting.setActionId(actionId);
197 equitySetting.setType(SocialEquitySettingConstants.TYPE_INFORMATION);
198 equitySetting.setValue(equityActionMapping.getInformationValue());
199 equitySetting.setValidity(equityActionMapping.getInformationLifespan());
200
201 return equitySetting;
202 }
203
204 protected SocialEquitySetting getParticipationEquitySetting(
205 String actionId, SocialEquityActionMapping equityActionMapping) {
206
207 SocialEquitySetting equitySetting = new SocialEquitySettingImpl();
208
209 equitySetting.setActionId(actionId);
210 equitySetting.setType(SocialEquitySettingConstants.TYPE_PARTICIPATION);
211 equitySetting.setValue(equityActionMapping.getParticipationValue());
212 equitySetting.setValidity(
213 equityActionMapping.getParticipationLifespan());
214
215 return equitySetting;
216 }
217
218 protected void updateSocialEquitySettings(
219 long groupId, String className,
220 SocialEquityActionMapping equityActionMapping)
221 throws PortalException, SystemException {
222
223 SocialEquityActionMapping defaultEquityActionMapping =
224 PortalUtil.getSocialEquityActionMapping(
225 className, equityActionMapping.getActionId());
226
227 if ((equityActionMapping.getInformationValue() > 0) &&
228 !equityActionMapping.equals(
229 defaultEquityActionMapping,
230 SocialEquitySettingConstants.TYPE_INFORMATION)) {
231
232 SocialEquitySetting equitySetting = getEquitySetting(
233 groupId, className, equityActionMapping.getActionId(),
234 SocialEquitySettingConstants.TYPE_INFORMATION);
235
236 if ((equityActionMapping.getInformationValue() !=
237 equitySetting.getValue()) ||
238 (equityActionMapping.getInformationLifespan() !=
239 equitySetting.getValidity())) {
240
241 equitySetting.setValue(
242 equityActionMapping.getInformationValue());
243 equitySetting.setValidity(
244 equityActionMapping.getInformationLifespan());
245
246 socialEquitySettingPersistence.update(equitySetting, false);
247 }
248 }
249
250 if ((equityActionMapping.getParticipationValue() > 0) &&
251 !equityActionMapping.equals(
252 defaultEquityActionMapping,
253 SocialEquitySettingConstants.TYPE_PARTICIPATION)) {
254
255 SocialEquitySetting equitySetting = getEquitySetting(
256 groupId, className, equityActionMapping.getActionId(),
257 SocialEquitySettingConstants.TYPE_PARTICIPATION);
258
259 if ((equityActionMapping.getParticipationValue() !=
260 equitySetting.getValue()) ||
261 (equityActionMapping.getParticipationLifespan() !=
262 equitySetting.getValidity())) {
263
264 equitySetting.setValue(
265 equityActionMapping.getParticipationValue());
266 equitySetting.setValidity(
267 equityActionMapping.getParticipationLifespan());
268
269 socialEquitySettingPersistence.update(equitySetting, false);
270 }
271 }
272
273 long classNameId = PortalUtil.getClassNameId(className);
274
275 String key = encodeKey(classNameId, equityActionMapping.getActionId());
276
277 _portalCache.remove(key);
278 }
279
280 private static PortalCache _portalCache = MultiVMPoolUtil.getCache(
281 CACHE_NAME);
282
283 }