001
014
015 package com.liferay.portlet.social.model;
016
017 import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.util.GetterUtil;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.kernel.util.StringUtil;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.model.User;
026 import com.liferay.portal.util.PortalUtil;
027 import com.liferay.portlet.asset.model.AssetEntry;
028 import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;
029 import com.liferay.portlet.social.service.SocialActivityAchievementLocalServiceUtil;
030 import com.liferay.portlet.social.service.SocialActivityCounterLocalServiceUtil;
031
032
035 public class BaseSocialAchievement implements SocialAchievement {
036
037 public boolean equals(SocialAchievement socialAchievement) {
038 if (Validator.equals(_name, socialAchievement.getName())) {
039 return true;
040 }
041
042 return false;
043 }
044
045 public int getCounterIncrement() {
046 return _counterIncrement;
047 }
048
049 public String getCounterName() {
050 return _counterName;
051 }
052
053 public String getCounterOwner() {
054 return _counterOwner;
055 }
056
057 public int getCounterPeriodLength() {
058 return _counterPeriodLength;
059 }
060
061 public int getCounterThreshold() {
062 return _counterThreshold;
063 }
064
065 @Override
066 public String getDescriptionKey() {
067 return _ACHIEVEMENT_DESCRIPTION_PREFIX.concat(_name);
068 }
069
070 @Override
071 public String getIcon() {
072 if (_icon == null) {
073 return _name.concat(_ICON_SUFFIX);
074 }
075
076 return _icon;
077 }
078
079 @Override
080 public String getName() {
081 return _name;
082 }
083
084 @Override
085 public String getNameKey() {
086 return _ACHIEVEMENT_NAME_PREFIX.concat(_name);
087 }
088
089 @Override
090 public void initialize(SocialActivityDefinition activityDefinition) {
091 SocialActivityCounterDefinition activityCounterDefinition =
092 activityDefinition.getActivityCounterDefinition(_counterName);
093
094 if (activityCounterDefinition != null) {
095 return;
096 }
097
098 activityCounterDefinition = new SocialActivityCounterDefinition();
099
100 activityCounterDefinition.setEnabled(true);
101 activityCounterDefinition.setIncrement(_counterIncrement);
102 activityCounterDefinition.setName(_counterName);
103 activityCounterDefinition.setOwnerType(_counterOwner);
104
105 if (_counterPeriodLength > 0) {
106 activityCounterDefinition.setPeriodLength(_counterPeriodLength);
107 activityCounterDefinition.setTransient(true);
108 }
109
110 activityDefinition.addCounter(activityCounterDefinition);
111 }
112
113 @Override
114 public void processActivity(SocialActivity activity) {
115 try {
116 doProcessActivity(activity);
117 }
118 catch (Exception e) {
119 if (_log.isWarnEnabled()) {
120 _log.warn("Unable to process activity", e);
121 }
122 }
123 }
124
125 public void setCounterIncrement(int counterIncrement) {
126 _counterIncrement = counterIncrement;
127 }
128
129 public void setCounterName(String counterName) {
130 _counterName = counterName;
131 }
132
133 public void setCounterOwner(String counterOwner) {
134 _counterOwner = counterOwner;
135
136 if (StringUtil.equalsIgnoreCase(counterOwner, "actor")) {
137 _ownerType = SocialActivityCounterConstants.TYPE_ACTOR;
138 }
139 else if (StringUtil.equalsIgnoreCase(counterOwner, "asset")) {
140 _ownerType = SocialActivityCounterConstants.TYPE_ASSET;
141 }
142 else if (StringUtil.equalsIgnoreCase(counterOwner, "creator")) {
143 _ownerType = SocialActivityCounterConstants.TYPE_CREATOR;
144 }
145 }
146
147 public void setCounterPeriodLength(int counterPeriodLength) {
148 _counterPeriodLength = counterPeriodLength;
149 }
150
151 public void setCounterThreshold(int counterThreshold) {
152 _counterThreshold = counterThreshold;
153 }
154
155 @Override
156 public void setIcon(String icon) {
157 _icon = icon;
158 }
159
160 @Override
161 public void setName(String name) {
162 name = StringUtil.replace(name, StringPool.SPACE, StringPool.UNDERLINE);
163 name = StringUtil.toLowerCase(name);
164
165 _name = StringUtil.extract(name, _NAME_SUPPORTED_CHARS);
166 }
167
168 @Override
169 public void setProperty(String name, String value) {
170 if (name.equals("counterIncrement") ||
171 name.equals("counterPeriodLength") ||
172 name.equals("counterThreshold")) {
173
174 BeanPropertiesUtil.setProperty(
175 this, name, GetterUtil.getInteger(value, 0));
176 }
177 else {
178 BeanPropertiesUtil.setProperty(this, name, value);
179 }
180 }
181
182 protected void doProcessActivity(SocialActivity activity)
183 throws PortalException {
184
185 if (_counterThreshold == 0) {
186 return;
187 }
188
189 SocialActivityAchievement achievement =
190 SocialActivityAchievementLocalServiceUtil.fetchUserAchievement(
191 activity.getUserId(), activity.getGroupId(), _name);
192
193 if (achievement != null) {
194 return;
195 }
196
197 long classNameId = activity.getClassNameId();
198 long classPK = activity.getClassPK();
199
200 if (_ownerType != SocialActivityCounterConstants.TYPE_ASSET) {
201 classNameId = PortalUtil.getClassNameId(User.class);
202 classPK = activity.getUserId();
203 }
204
205 if (_ownerType == SocialActivityCounterConstants.TYPE_ASSET) {
206 AssetEntry assetEntry = AssetEntryLocalServiceUtil.fetchEntry(
207 activity.getClassName(), activity.getClassPK());
208
209 if (assetEntry != null) {
210 classPK = assetEntry.getUserId();
211 }
212 }
213
214 SocialActivityCounter activityCounter =
215 SocialActivityCounterLocalServiceUtil.fetchLatestActivityCounter(
216 activity.getGroupId(), classNameId, classPK, _counterName,
217 _ownerType);
218
219 if ((activityCounter != null) &&
220 (activityCounter.getCurrentValue() >= _counterThreshold)) {
221
222 SocialActivityAchievementLocalServiceUtil.addActivityAchievement(
223 activity.getUserId(), activity.getGroupId(), this);
224 }
225 }
226
227 private static final String _ACHIEVEMENT_DESCRIPTION_PREFIX =
228 "social.achievement.description.";
229
230 private static final String _ACHIEVEMENT_NAME_PREFIX =
231 "social.achievement.name.";
232
233 private static final String _ICON_SUFFIX = "-icon.jpg";
234
235 private static final char[] _NAME_SUPPORTED_CHARS =
236 "abcdefghijklmnopqrstuvwxyz123456789_-.".toCharArray();
237
238 private static final Log _log = LogFactoryUtil.getLog(
239 BaseSocialAchievement.class);
240
241 private int _counterIncrement = 1;
242 private String _counterName;
243 private String _counterOwner;
244 private int _counterPeriodLength =
245 SocialActivityCounterConstants.PERIOD_LENGTH_SYSTEM;
246 private int _counterThreshold;
247 private String _icon;
248 private String _name;
249 private int _ownerType;
250
251 }