001
014
015 package com.liferay.portlet.socialactivity.action;
016
017 import com.liferay.portal.kernel.json.JSONArray;
018 import com.liferay.portal.kernel.json.JSONFactoryUtil;
019 import com.liferay.portal.kernel.json.JSONObject;
020 import com.liferay.portal.kernel.servlet.SessionErrors;
021 import com.liferay.portal.kernel.util.Constants;
022 import com.liferay.portal.kernel.util.GetterUtil;
023 import com.liferay.portal.kernel.util.ParamUtil;
024 import com.liferay.portal.security.auth.PrincipalException;
025 import com.liferay.portal.security.permission.comparator.ModelResourceComparator;
026 import com.liferay.portal.struts.PortletAction;
027 import com.liferay.portal.theme.ThemeDisplay;
028 import com.liferay.portal.util.WebKeys;
029 import com.liferay.portlet.social.model.SocialActivityCounterConstants;
030 import com.liferay.portlet.social.model.SocialActivityCounterDefinition;
031 import com.liferay.portlet.social.model.SocialActivityDefinition;
032 import com.liferay.portlet.social.model.SocialActivitySetting;
033 import com.liferay.portlet.social.service.SocialActivitySettingServiceUtil;
034 import com.liferay.portlet.social.util.SocialConfigurationUtil;
035
036 import java.util.ArrayList;
037 import java.util.Arrays;
038 import java.util.Comparator;
039 import java.util.LinkedHashMap;
040 import java.util.List;
041 import java.util.Map;
042
043 import javax.portlet.ActionRequest;
044 import javax.portlet.ActionResponse;
045 import javax.portlet.PortletConfig;
046 import javax.portlet.RenderRequest;
047 import javax.portlet.RenderResponse;
048
049 import org.apache.struts.action.ActionForm;
050 import org.apache.struts.action.ActionForward;
051 import org.apache.struts.action.ActionMapping;
052
053
057 public class ViewAction extends PortletAction {
058
059 @Override
060 public void processAction(
061 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
062 ActionRequest actionRequest, ActionResponse actionResponse)
063 throws Exception {
064
065 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
066
067 try {
068 if (cmd.equals(Constants.UPDATE)) {
069 updateActivitySettings(actionRequest);
070 }
071
072 sendRedirect(actionRequest, actionResponse);
073 }
074 catch (Exception e) {
075 if (e instanceof PrincipalException) {
076 SessionErrors.add(actionRequest, e.getClass());
077 }
078 else {
079 throw e;
080 }
081 }
082 }
083
084 @Override
085 public ActionForward render(
086 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
087 RenderRequest renderRequest, RenderResponse renderResponse)
088 throws Exception {
089
090 ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
091 WebKeys.THEME_DISPLAY);
092
093 try {
094 renderRequest.setAttribute(
095 WebKeys.SOCIAL_ACTIVITY_SETTINGS_MAP,
096 getActivitySettingsMap(themeDisplay));
097 }
098 catch (Exception e) {
099 if (e instanceof PrincipalException) {
100 SessionErrors.add(renderRequest, e.getClass());
101
102 return mapping.findForward("portlet.social_activity.error");
103 }
104 else {
105 throw e;
106 }
107 }
108
109 return mapping.findForward("portlet.social_activity.view");
110 }
111
112 protected Map<String, Boolean> getActivitySettingsMap(
113 ThemeDisplay themeDisplay)
114 throws Exception {
115
116 Map<String, Boolean> activitySettingsMap =
117 new LinkedHashMap<String, Boolean>();
118
119 List<SocialActivitySetting> activitySettings =
120 SocialActivitySettingServiceUtil.getActivitySettings(
121 themeDisplay.getSiteGroupIdOrLiveGroupId());
122
123 String[] modelNames = SocialConfigurationUtil.getActivityModelNames();
124
125 Comparator<String> comparator = new ModelResourceComparator(
126 themeDisplay.getLocale());
127
128 Arrays.sort(modelNames, comparator);
129
130 for (String modelName : modelNames) {
131 List<SocialActivityDefinition> activityDefinitions =
132 SocialActivitySettingServiceUtil.getActivityDefinitions(
133 themeDisplay.getScopeGroupId(), modelName);
134
135 for (SocialActivityDefinition activityDefinition :
136 activityDefinitions) {
137
138 if (activityDefinition.isCountersEnabled()) {
139 activitySettingsMap.put(modelName, false);
140
141 break;
142 }
143 }
144 }
145
146 for (SocialActivitySetting activitySetting : activitySettings) {
147 String name = activitySetting.getName();
148
149 if (name.equals("enabled") &&
150 activitySettingsMap.containsKey(
151 activitySetting.getClassName())) {
152
153 activitySettingsMap.put(
154 activitySetting.getClassName(),
155 GetterUtil.getBoolean(activitySetting.getValue()));
156 }
157 }
158
159 return activitySettingsMap;
160 }
161
162 protected SocialActivityCounterDefinition updateActivityCounterDefinition(
163 JSONObject actionJSONObject,
164 SocialActivityDefinition activityDefinition,
165 String activityCounterName) {
166
167 SocialActivityCounterDefinition activityCounterDefinition =
168 activityDefinition.getActivityCounterDefinition(
169 activityCounterName);
170
171 if (activityCounterDefinition == null) {
172 activityCounterDefinition = new SocialActivityCounterDefinition();
173
174 activityCounterDefinition.setName(activityCounterName);
175 }
176
177 if (activityCounterName.equals(
178 SocialActivityCounterConstants.NAME_CONTRIBUTION)) {
179
180 activityCounterDefinition.setOwnerType(
181 SocialActivityCounterConstants.TYPE_CREATOR);
182 }
183 else if (activityCounterName.equals(
184 SocialActivityCounterConstants.NAME_PARTICIPATION)) {
185
186 activityCounterDefinition.setOwnerType(
187 SocialActivityCounterConstants.TYPE_ACTOR);
188 }
189 else if (activityCounterName.equals(
190 SocialActivityCounterConstants.NAME_POPULARITY)) {
191
192 activityCounterDefinition.setOwnerType(
193 SocialActivityCounterConstants.TYPE_ASSET);
194
195 activityCounterName =
196 SocialActivityCounterConstants.NAME_CONTRIBUTION;
197 }
198 else {
199 throw new IllegalArgumentException();
200 }
201
202 activityCounterDefinition.setEnabled(
203 actionJSONObject.getBoolean("active"));
204 activityCounterDefinition.setIncrement(
205 actionJSONObject.getInt(activityCounterName + "Increment"));
206 activityCounterDefinition.setLimitPeriod(
207 actionJSONObject.getInt(activityCounterName + "LimitPeriod"));
208 activityCounterDefinition.setLimitValue(
209 actionJSONObject.getInt(activityCounterName + "LimitValue"));
210
211 return activityCounterDefinition;
212 }
213
214 protected void updateActivitySettings(ActionRequest actionRequest)
215 throws Exception {
216
217 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
218 WebKeys.THEME_DISPLAY);
219
220 String settingsJSON = ParamUtil.getString(
221 actionRequest, "settingsJSON");
222
223 JSONObject settingsJSONObject = JSONFactoryUtil.createJSONObject(
224 settingsJSON);
225
226 JSONArray actionsJSONArray = settingsJSONObject.getJSONArray("actions");
227
228 String modelName = settingsJSONObject.getString("modelName");
229
230 for (int i = 0; i < actionsJSONArray.length(); i++) {
231 JSONObject actionJSONObject = actionsJSONArray.getJSONObject(i);
232
233 int activityType = actionJSONObject.getInt("activityType");
234
235 SocialActivityDefinition activityDefinition =
236 SocialActivitySettingServiceUtil.getActivityDefinition(
237 themeDisplay.getSiteGroupIdOrLiveGroupId(), modelName,
238 activityType);
239
240 if (activityDefinition == null) {
241 continue;
242 }
243
244 List<SocialActivityCounterDefinition> activityCounterDefinitions =
245 new ArrayList<SocialActivityCounterDefinition>();
246
247 activityCounterDefinitions.add(
248 updateActivityCounterDefinition(
249 actionJSONObject, activityDefinition,
250 SocialActivityCounterConstants.NAME_CONTRIBUTION));
251
252 activityCounterDefinitions.add(
253 updateActivityCounterDefinition(
254 actionJSONObject, activityDefinition,
255 SocialActivityCounterConstants.NAME_PARTICIPATION));
256
257 activityCounterDefinitions.add(
258 updateActivityCounterDefinition(
259 actionJSONObject, activityDefinition,
260 SocialActivityCounterConstants.NAME_POPULARITY));
261
262 SocialActivitySettingServiceUtil.updateActivitySettings(
263 themeDisplay.getSiteGroupIdOrLiveGroupId(), modelName,
264 activityType, activityCounterDefinitions);
265 }
266 }
267
268 }