001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portlet.socialequityadmin.action;
016    
017    import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
018    import com.liferay.portal.kernel.util.Constants;
019    import com.liferay.portal.kernel.util.ParamUtil;
020    import com.liferay.portal.model.Group;
021    import com.liferay.portal.security.permission.comparator.ModelResourceComparator;
022    import com.liferay.portal.struts.PortletAction;
023    import com.liferay.portal.theme.ThemeDisplay;
024    import com.liferay.portal.util.PortalUtil;
025    import com.liferay.portal.util.WebKeys;
026    import com.liferay.portlet.social.model.SocialEquityActionMapping;
027    import com.liferay.portlet.social.model.SocialEquitySetting;
028    import com.liferay.portlet.social.model.SocialEquitySettingConstants;
029    import com.liferay.portlet.social.service.SocialEquityGroupSettingLocalServiceUtil;
030    import com.liferay.portlet.social.service.SocialEquityLogLocalServiceUtil;
031    import com.liferay.portlet.social.service.SocialEquitySettingLocalServiceUtil;
032    
033    import java.util.ArrayList;
034    import java.util.Arrays;
035    import java.util.Comparator;
036    import java.util.LinkedHashMap;
037    import java.util.List;
038    import java.util.Map;
039    
040    import javax.portlet.ActionRequest;
041    import javax.portlet.ActionResponse;
042    import javax.portlet.PortletConfig;
043    import javax.portlet.RenderRequest;
044    import javax.portlet.RenderResponse;
045    
046    import org.apache.struts.action.ActionForm;
047    import org.apache.struts.action.ActionForward;
048    import org.apache.struts.action.ActionMapping;
049    
050    /**
051     * @author Zsolt Balogh
052     * @author Zsolt Berentey
053     * @author Brian Wing Shun Chan
054     */
055    public class ViewAction extends PortletAction {
056    
057            public void processAction(
058                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
059                            ActionRequest actionRequest, ActionResponse actionResponse)
060                    throws Exception {
061    
062                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
063    
064                    if (cmd.equals("updateRanks")) {
065                            updateRanks(actionRequest);
066                    }
067                    else if (cmd.equals("updateSettings")) {
068                            updateSettings(actionRequest);
069                    }
070    
071                    sendRedirect(actionRequest, actionResponse);
072            }
073    
074            public ActionForward render(
075                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
076                            RenderRequest renderRequest, RenderResponse renderResponse)
077                    throws Exception {
078    
079                    ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
080                            WebKeys.THEME_DISPLAY);
081    
082                    Map<String, List<SocialEquityActionMapping>> equityActionMappingsMap =
083                            new LinkedHashMap<String, List<SocialEquityActionMapping>>();
084    
085                    String[] classNames = PortalUtil.getSocialEquityClassNames();
086    
087                    Comparator<String> comparator = new ModelResourceComparator(
088                            themeDisplay.getLocale());
089    
090                    Arrays.sort(classNames, comparator);
091    
092                    for (String className : classNames) {
093                            List<SocialEquityActionMapping> mergedEquityActionMappings =
094                                    getMergedEquityActionMappings(
095                                            themeDisplay.getScopeGroupId(), className);
096    
097                            equityActionMappingsMap.put(className, mergedEquityActionMappings);
098                    }
099    
100                    renderRequest.setAttribute(
101                            WebKeys.SOCIAL_EQUITY_ACTION_MAPPINGS_MAP, equityActionMappingsMap);
102    
103                    return mapping.findForward("portlet.social_equity_admin.view");
104            }
105    
106            protected SocialEquityActionMapping getMergedEquityActionMapping(
107                            ActionRequest actionRequest,
108                            SocialEquityActionMapping equityActionMapping)
109                    throws Exception {
110    
111                    SocialEquityActionMapping mergedMapping = equityActionMapping.clone();
112    
113                    updateModel(actionRequest, mergedMapping, "informationDailyLimit");
114                    updateModel(actionRequest, mergedMapping, "informationLifespan");
115                    updateModel(actionRequest, mergedMapping, "informationValue");
116                    updateModel(actionRequest, mergedMapping, "participationDailyLimit");
117                    updateModel(actionRequest, mergedMapping, "participationLifespan");
118                    updateModel(actionRequest, mergedMapping, "participationValue");
119    
120                    return mergedMapping;
121            }
122    
123            protected SocialEquityActionMapping getMergedEquityActionMapping(
124                            long groupId, SocialEquityActionMapping equityActionMapping)
125                    throws Exception {
126    
127                    SocialEquityActionMapping mergedEquityActionMapping =
128                            equityActionMapping.clone();
129    
130                    List<SocialEquitySetting> equitySettings =
131                            SocialEquitySettingLocalServiceUtil.getEquitySettings(
132                                    groupId, equityActionMapping.getClassName(),
133                                    equityActionMapping.getActionId());
134    
135                    for (SocialEquitySetting equitySetting : equitySettings) {
136                            if (equitySetting.getType() ==
137                                            SocialEquitySettingConstants.TYPE_INFORMATION) {
138    
139                                    mergedEquityActionMapping.setInformationDailyLimit(
140                                            equitySetting.getDailyLimit());
141                                    mergedEquityActionMapping.setInformationLifespan(
142                                            equitySetting.getLifespan());
143                                    mergedEquityActionMapping.setInformationValue(
144                                            equitySetting.getValue());
145                            }
146                            else {
147                                    mergedEquityActionMapping.setParticipationDailyLimit(
148                                            equitySetting.getDailyLimit());
149                                    mergedEquityActionMapping.setParticipationLifespan(
150                                            equitySetting.getLifespan());
151                                    mergedEquityActionMapping.setParticipationValue(
152                                            equitySetting.getValue());
153                            }
154                    }
155    
156                    return mergedEquityActionMapping;
157            }
158    
159            protected List<SocialEquityActionMapping> getMergedEquityActionMappings(
160                            ActionRequest actionRequest, String className)
161                    throws Exception {
162    
163                    List<SocialEquityActionMapping> mergedEquityActionMappings =
164                            new ArrayList<SocialEquityActionMapping>();
165    
166                    List<SocialEquityActionMapping> equityActionMappings =
167                            PortalUtil.getSocialEquityActionMappings(className);
168    
169                    for (SocialEquityActionMapping equityActionMapping :
170                                    equityActionMappings) {
171    
172                            SocialEquityActionMapping mergedEquityActionMapping =
173                                    getMergedEquityActionMapping(
174                                            actionRequest, equityActionMapping);
175    
176                            mergedEquityActionMappings.add(mergedEquityActionMapping);
177                    }
178    
179                    return mergedEquityActionMappings;
180            }
181    
182            protected List<SocialEquityActionMapping> getMergedEquityActionMappings(
183                            long groupId, String className)
184                    throws Exception {
185    
186                    List<SocialEquityActionMapping> mergedEquityActionMappings =
187                            new ArrayList<SocialEquityActionMapping>();
188    
189                    List<SocialEquityActionMapping> equityActionMappings =
190                            PortalUtil.getSocialEquityActionMappings(className);
191    
192                    for (SocialEquityActionMapping equityActionMapping :
193                                    equityActionMappings) {
194    
195                            SocialEquityActionMapping mergedEquityActionMapping =
196                                    getMergedEquityActionMapping(groupId, equityActionMapping);
197    
198                            mergedEquityActionMappings.add(mergedEquityActionMapping);
199                    }
200    
201                    return mergedEquityActionMappings;
202            }
203    
204            protected void updateModel(
205                            ActionRequest actionRequest,
206                            SocialEquityActionMapping equityActionMapping, String param)
207                    throws Exception {
208    
209                    String className = equityActionMapping.getClassName();
210    
211                    int value = ParamUtil.getInteger(
212                            actionRequest,
213                            className + "." + equityActionMapping.getActionId() + "." + param,
214                            -1);
215    
216                    if (value >= 0) {
217                            BeanPropertiesUtil.setProperty(equityActionMapping, param, value);
218                    }
219            }
220    
221            protected void updateRanks(ActionRequest actionRequest) throws Exception {
222                    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
223                            WebKeys.THEME_DISPLAY);
224    
225                    SocialEquityLogLocalServiceUtil.updateRanks(
226                            themeDisplay.getScopeGroupId());
227            }
228    
229            protected void updateSettings(ActionRequest actionRequest)
230                    throws Exception {
231    
232                    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
233                            WebKeys.THEME_DISPLAY);
234    
235                    boolean enabled = ParamUtil.getBoolean(actionRequest, "enabled");
236    
237                    SocialEquityGroupSettingLocalServiceUtil.updateEquityGroupSetting(
238                            themeDisplay.getScopeGroupId(), Group.class.getName(),
239                            SocialEquitySettingConstants.TYPE_INFORMATION, enabled);
240    
241                    SocialEquityGroupSettingLocalServiceUtil.updateEquityGroupSetting(
242                            themeDisplay.getScopeGroupId(), Group.class.getName(),
243                            SocialEquitySettingConstants.TYPE_PARTICIPATION, enabled);
244    
245                    String[] classNames = PortalUtil.getSocialEquityClassNames();
246    
247                    for (String className : classNames) {
248                            List<SocialEquityActionMapping> mergedEquityActionMappings =
249                                    getMergedEquityActionMappings(actionRequest, className);
250    
251                            SocialEquitySettingLocalServiceUtil.updateEquitySettings(
252                                    themeDisplay.getScopeGroupId(), className,
253                                    mergedEquityActionMappings);
254    
255                            enabled = ParamUtil.getBoolean(
256                                    actionRequest, className + ".enabled");
257    
258                            SocialEquityGroupSettingLocalServiceUtil.updateEquityGroupSetting(
259                                    themeDisplay.getScopeGroupId(), className,
260                                    SocialEquitySettingConstants.TYPE_INFORMATION,
261                                    enabled);
262    
263                            SocialEquityGroupSettingLocalServiceUtil.updateEquityGroupSetting(
264                                    themeDisplay.getScopeGroupId(), className,
265                                    SocialEquitySettingConstants.TYPE_PARTICIPATION,
266                                    enabled);
267                    }
268            }
269    
270    }