001    /**
002     * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
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                    boolean unique = ParamUtil.getBoolean(
121                            actionRequest,
122                            equityActionMapping.getClassName() + "." +
123                                    equityActionMapping.getActionId() + ".unique");
124    
125                    mergedMapping.setUnique(unique);
126    
127                    return mergedMapping;
128            }
129    
130            protected SocialEquityActionMapping getMergedEquityActionMapping(
131                            long groupId, SocialEquityActionMapping equityActionMapping)
132                    throws Exception {
133    
134                    SocialEquityActionMapping mergedEquityActionMapping =
135                            equityActionMapping.clone();
136    
137                    List<SocialEquitySetting> equitySettings =
138                            SocialEquitySettingLocalServiceUtil.getEquitySettings(
139                                    groupId, equityActionMapping.getClassName(),
140                                    equityActionMapping.getActionId());
141    
142                    for (SocialEquitySetting equitySetting : equitySettings) {
143                            if (equitySetting.getType() ==
144                                            SocialEquitySettingConstants.TYPE_INFORMATION) {
145    
146                                    mergedEquityActionMapping.setInformationDailyLimit(
147                                            equitySetting.getDailyLimit());
148                                    mergedEquityActionMapping.setInformationLifespan(
149                                            equitySetting.getLifespan());
150                                    mergedEquityActionMapping.setInformationValue(
151                                            equitySetting.getValue());
152                            }
153                            else {
154                                    mergedEquityActionMapping.setParticipationDailyLimit(
155                                            equitySetting.getDailyLimit());
156                                    mergedEquityActionMapping.setParticipationLifespan(
157                                            equitySetting.getLifespan());
158                                    mergedEquityActionMapping.setParticipationValue(
159                                            equitySetting.getValue());
160                            }
161    
162                            mergedEquityActionMapping.setUnique(equitySetting.isUniqueEntry());
163                    }
164    
165                    return mergedEquityActionMapping;
166            }
167    
168            protected List<SocialEquityActionMapping> getMergedEquityActionMappings(
169                            ActionRequest actionRequest, String className)
170                    throws Exception {
171    
172                    List<SocialEquityActionMapping> mergedEquityActionMappings =
173                            new ArrayList<SocialEquityActionMapping>();
174    
175                    List<SocialEquityActionMapping> equityActionMappings =
176                            PortalUtil.getSocialEquityActionMappings(className);
177    
178                    for (SocialEquityActionMapping equityActionMapping :
179                                    equityActionMappings) {
180    
181                            SocialEquityActionMapping mergedEquityActionMapping =
182                                    getMergedEquityActionMapping(
183                                            actionRequest, equityActionMapping);
184    
185                            mergedEquityActionMappings.add(mergedEquityActionMapping);
186                    }
187    
188                    return mergedEquityActionMappings;
189            }
190    
191            protected List<SocialEquityActionMapping> getMergedEquityActionMappings(
192                            long groupId, String className)
193                    throws Exception {
194    
195                    List<SocialEquityActionMapping> mergedEquityActionMappings =
196                            new ArrayList<SocialEquityActionMapping>();
197    
198                    List<SocialEquityActionMapping> equityActionMappings =
199                            PortalUtil.getSocialEquityActionMappings(className);
200    
201                    for (SocialEquityActionMapping equityActionMapping :
202                                    equityActionMappings) {
203    
204                            SocialEquityActionMapping mergedEquityActionMapping =
205                                    getMergedEquityActionMapping(groupId, equityActionMapping);
206    
207                            mergedEquityActionMappings.add(mergedEquityActionMapping);
208                    }
209    
210                    return mergedEquityActionMappings;
211            }
212    
213            protected void updateModel(
214                            ActionRequest actionRequest,
215                            SocialEquityActionMapping equityActionMapping, String param)
216                    throws Exception {
217    
218                    String className = equityActionMapping.getClassName();
219    
220                    int value = ParamUtil.getInteger(
221                            actionRequest,
222                            className + "." + equityActionMapping.getActionId() + "." + param,
223                            -1);
224    
225                    if (value >= 0) {
226                            BeanPropertiesUtil.setProperty(equityActionMapping, param, value);
227                    }
228            }
229    
230            protected void updateRanks(ActionRequest actionRequest) throws Exception {
231                    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
232                            WebKeys.THEME_DISPLAY);
233    
234                    SocialEquityLogLocalServiceUtil.updateRanks(
235                            themeDisplay.getScopeGroupId());
236            }
237    
238            protected void updateSettings(ActionRequest actionRequest)
239                    throws Exception {
240    
241                    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
242                            WebKeys.THEME_DISPLAY);
243    
244                    boolean enabled = ParamUtil.getBoolean(actionRequest, "enabled");
245    
246                    SocialEquityGroupSettingLocalServiceUtil.updateEquityGroupSetting(
247                            themeDisplay.getScopeGroupId(), Group.class.getName(),
248                            SocialEquitySettingConstants.TYPE_INFORMATION, enabled);
249    
250                    SocialEquityGroupSettingLocalServiceUtil.updateEquityGroupSetting(
251                            themeDisplay.getScopeGroupId(), Group.class.getName(),
252                            SocialEquitySettingConstants.TYPE_PARTICIPATION, enabled);
253    
254                    String[] classNames = PortalUtil.getSocialEquityClassNames();
255    
256                    for (String className : classNames) {
257                            List<SocialEquityActionMapping> mergedEquityActionMappings =
258                                    getMergedEquityActionMappings(actionRequest, className);
259    
260                            SocialEquitySettingLocalServiceUtil.updateEquitySettings(
261                                    themeDisplay.getScopeGroupId(), className,
262                                    mergedEquityActionMappings);
263    
264                            enabled = ParamUtil.getBoolean(
265                                    actionRequest, className + ".enabled");
266    
267                            SocialEquityGroupSettingLocalServiceUtil.updateEquityGroupSetting(
268                                    themeDisplay.getScopeGroupId(), className,
269                                    SocialEquitySettingConstants.TYPE_INFORMATION,
270                                    enabled);
271    
272                            SocialEquityGroupSettingLocalServiceUtil.updateEquityGroupSetting(
273                                    themeDisplay.getScopeGroupId(), className,
274                                    SocialEquitySettingConstants.TYPE_PARTICIPATION,
275                                    enabled);
276                    }
277            }
278    
279    }