/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.social.activity.web.internal.portlet.action;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCRenderCommand;
import com.liferay.portal.kernel.security.auth.PrincipalException;
import com.liferay.portal.kernel.security.permission.comparator.ModelResourceComparator;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.social.activity.web.internal.constants.SocialActivityPortletKeys;
import com.liferay.social.activity.web.internal.constants.SocialActivityWebKeys;
import com.liferay.social.kernel.model.SocialActivityDefinition;
import com.liferay.social.kernel.model.SocialActivitySetting;
import com.liferay.social.kernel.service.SocialActivitySettingService;
import com.liferay.social.kernel.util.SocialConfigurationUtil;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Roberto Díaz
*/
@Component(
immediate = true,
property = {
"javax.portlet.name=" + SocialActivityPortletKeys.SOCIAL_ACTIVITY,
"mvc.command.name=/", "mvc.command.name=/social_activity/view"
},
service = MVCRenderCommand.class
)
public class ViewMVCRenderCommand implements MVCRenderCommand {
@Override
public String render(
RenderRequest renderRequest, RenderResponse renderResponse)
throws PortletException {
ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
WebKeys.THEME_DISPLAY);
try {
renderRequest.setAttribute(
SocialActivityWebKeys.SOCIAL_ACTIVITY_SETTINGS_MAP,
getActivitySettingsMap(themeDisplay));
}
catch (Exception e) {
if (e instanceof PrincipalException) {
SessionErrors.add(renderRequest, e.getClass());
return "/error.jsp";
}
else {
throw new PortletException(e);
}
}
return "/view.jsp";
}
protected Map<String, Boolean> getActivitySettingsMap(
ThemeDisplay themeDisplay)
throws Exception {
Map<String, Boolean> activitySettingsMap = new LinkedHashMap<>();
List<SocialActivitySetting> activitySettings =
_socialActivitySettingService.getActivitySettings(
themeDisplay.getSiteGroupIdOrLiveGroupId());
String[] modelNames = SocialConfigurationUtil.getActivityModelNames();
Comparator<String> comparator = new ModelResourceComparator(
themeDisplay.getLocale());
Arrays.sort(modelNames, comparator);
for (String modelName : modelNames) {
List<SocialActivityDefinition> activityDefinitions =
_socialActivitySettingService.getActivityDefinitions(
themeDisplay.getScopeGroupId(), modelName);
for (SocialActivityDefinition activityDefinition :
activityDefinitions) {
if (activityDefinition.isCountersEnabled()) {
activitySettingsMap.put(modelName, false);
break;
}
}
}
for (SocialActivitySetting activitySetting : activitySettings) {
String name = activitySetting.getName();
if (name.equals("enabled") &&
activitySettingsMap.containsKey(
activitySetting.getClassName())) {
activitySettingsMap.put(
activitySetting.getClassName(),
GetterUtil.getBoolean(activitySetting.getValue()));
}
}
return activitySettingsMap;
}
@Reference(unbind = "-")
protected void setSocialActivitySettingService(
SocialActivitySettingService socialActivitySettingService) {
_socialActivitySettingService = socialActivitySettingService;
}
private SocialActivitySettingService _socialActivitySettingService;
}