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