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