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.util.ListUtil;
022 import com.liferay.portal.kernel.util.StringBundler;
023 import com.liferay.portal.kernel.util.StringPool;
024 import com.liferay.portal.model.Group;
025 import com.liferay.portal.security.permission.ResourceActionsUtil;
026 import com.liferay.portal.util.PortalUtil;
027 import com.liferay.portlet.social.model.SocialEquityActionMapping;
028 import com.liferay.portlet.social.model.SocialEquitySetting;
029 import com.liferay.portlet.social.model.SocialEquitySettingConstants;
030 import com.liferay.portlet.social.model.impl.SocialEquitySettingImpl;
031 import com.liferay.portlet.social.service.base.SocialEquitySettingLocalServiceBaseImpl;
032
033 import java.util.Collections;
034 import java.util.List;
035
036
040 public class SocialEquitySettingLocalServiceImpl
041 extends SocialEquitySettingLocalServiceBaseImpl {
042
043 public static final String CACHE_NAME =
044 SocialEquitySettingLocalServiceImpl.class.getName();
045
046 public List<SocialEquitySetting> getEquitySettings(
047 long groupId, String className, String actionId)
048 throws SystemException {
049
050 long classNameId = PortalUtil.getClassNameId(className);
051
052 return getEquitySettings(groupId, classNameId, actionId);
053 }
054
055 public List<SocialEquitySetting> getEquitySettings(
056 long groupId, long classNameId, String actionId)
057 throws SystemException {
058
059 String key = encodeKey(classNameId, actionId);
060
061 List<SocialEquitySetting> socialEquitySettings =
062 (List<SocialEquitySetting>)_portalCache.get(key);
063
064 if (socialEquitySettings != null) {
065 return socialEquitySettings;
066 }
067
068 String className = PortalUtil.getClassName(classNameId);
069
070 SocialEquityActionMapping equityActionMapping =
071 ResourceActionsUtil.getSocialEquityActionMapping(
072 className, actionId);
073
074 if (equityActionMapping == null) {
075 socialEquitySettings = Collections.EMPTY_LIST;
076
077 _portalCache.put(key, socialEquitySettings);
078
079 return socialEquitySettings;
080 }
081
082 List<SocialEquitySetting> equitySettings =
083 socialEquitySettingPersistence.findByG_C_A(
084 groupId, classNameId, actionId);
085
086 equitySettings = ListUtil.copy(equitySettings);
087
088 if (equitySettings.isEmpty()) {
089 if (equityActionMapping.getInformationValue() > 0) {
090 SocialEquitySetting informationEquitySetting =
091 getInformationEquitySetting(actionId, equityActionMapping);
092
093 equitySettings.add(informationEquitySetting);
094 }
095
096 if (equityActionMapping.getParticipationValue() > 0) {
097 SocialEquitySetting participationEquitySetting =
098 getParticipationEquitySetting(
099 actionId, equityActionMapping);
100
101 equitySettings.add(participationEquitySetting);
102 }
103 }
104 else if (equitySettings.size() == 1) {
105 SocialEquitySetting equitySetting = equitySettings.get(0);
106
107 if ((equityActionMapping.getInformationValue() > 0) &&
108 (equitySetting.getType() ==
109 SocialEquitySettingConstants.TYPE_PARTICIPATION)) {
110
111 SocialEquitySetting informationEquitySetting =
112 getInformationEquitySetting(actionId, equityActionMapping);
113
114 equitySettings.add(informationEquitySetting);
115 }
116 else if ((equityActionMapping.getParticipationValue() > 0) &&
117 (equitySetting.getType() ==
118 SocialEquitySettingConstants.TYPE_INFORMATION)) {
119
120 SocialEquitySetting participationEquitySetting =
121 getParticipationEquitySetting(
122 actionId, equityActionMapping);
123
124 equitySettings.add(participationEquitySetting);
125 }
126 }
127
128 _portalCache.put(key, socialEquitySettings);
129
130 return equitySettings;
131 }
132
133 public void updateEquitySettings(
134 long groupId, String className,
135 List<SocialEquityActionMapping> equityActionMappings)
136 throws PortalException, SystemException {
137
138 for (SocialEquityActionMapping equityActionMapping :
139 equityActionMappings) {
140
141 updateEquitySettings(groupId, className, equityActionMapping);
142 }
143 }
144
145 protected String encodeKey(long classNameId, String actionId) {
146 StringBundler sb = new StringBundler(5);
147
148 sb.append(CACHE_NAME);
149 sb.append(StringPool.POUND);
150 sb.append(classNameId);
151 sb.append(StringPool.POUND);
152 sb.append(actionId);
153
154 return sb.toString();
155 }
156
157 protected SocialEquitySetting getInformationEquitySetting(
158 String actionId, SocialEquityActionMapping equityActionMapping) {
159
160 SocialEquitySetting equitySetting = new SocialEquitySettingImpl();
161
162 equitySetting.setActionId(actionId);
163 equitySetting.setDailyLimit(
164 equityActionMapping.getInformationDailyLimit());
165 equitySetting.setLifespan(equityActionMapping.getInformationLifespan());
166 equitySetting.setType(SocialEquitySettingConstants.TYPE_INFORMATION);
167 equitySetting.setUniqueEntry(equityActionMapping.isUnique());
168 equitySetting.setValue(equityActionMapping.getInformationValue());
169
170 return equitySetting;
171 }
172
173 protected SocialEquitySetting getParticipationEquitySetting(
174 String actionId, SocialEquityActionMapping equityActionMapping) {
175
176 SocialEquitySetting equitySetting = new SocialEquitySettingImpl();
177
178 equitySetting.setActionId(actionId);
179 equitySetting.setDailyLimit(
180 equityActionMapping.getParticipationDailyLimit());
181 equitySetting.setLifespan(
182 equityActionMapping.getParticipationLifespan());
183 equitySetting.setType(SocialEquitySettingConstants.TYPE_PARTICIPATION);
184 equitySetting.setUniqueEntry(
185 equityActionMapping.isUnique());
186 equitySetting.setValue(equityActionMapping.getParticipationValue());
187
188 return equitySetting;
189 }
190
191 protected void updateEquitySettings(
192 long groupId, String className,
193 SocialEquityActionMapping equityActionMapping)
194 throws PortalException, SystemException {
195
196 long classNameId = PortalUtil.getClassNameId(className);
197
198 List<SocialEquitySetting> equitySettings = getEquitySettings(
199 groupId, className, equityActionMapping.getActionId());
200
201 for (SocialEquitySetting equitySetting : equitySettings) {
202 if (!equityActionMapping.equals(equitySetting)) {
203 equitySetting.update(equityActionMapping);
204
205 if (equitySetting.getPrimaryKey() == 0) {
206 Group group = groupLocalService.getGroup(groupId);
207
208 equitySetting.setEquitySettingId(
209 counterLocalService.increment());
210 equitySetting.setGroupId(groupId);
211 equitySetting.setCompanyId(group.getCompanyId());
212 equitySetting.setClassNameId(classNameId);
213 }
214
215 socialEquitySettingPersistence.update(equitySetting, false);
216 }
217 }
218
219 String key = encodeKey(classNameId, equityActionMapping.getActionId());
220
221 _portalCache.remove(key);
222 }
223
224 private static PortalCache _portalCache = MultiVMPoolUtil.getCache(
225 CACHE_NAME);
226
227 }