com.liferay.social.activities.web.internal.portlet.action.RSSMVCResourceCommand.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.social.activities.web.internal.portlet.action.RSSMVCResourceCommand.java

Source

/**
 * 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.activities.web.internal.portlet.action;

import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.dao.search.SearchContainer;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
import com.liferay.portal.kernel.portlet.bridges.mvc.BaseRSSMVCResourceCommand;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCResourceCommand;
import com.liferay.portal.kernel.service.GroupLocalService;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.ServiceContextFactory;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.rss.util.RSSUtil;
import com.liferay.social.activities.constants.SocialActivitiesPortletKeys;
import com.liferay.social.activities.web.internal.util.SocialActivitiesQueryHelper;
import com.liferay.social.kernel.model.SocialActivityFeedEntry;
import com.liferay.social.kernel.model.SocialActivitySet;
import com.liferay.social.kernel.service.SocialActivityInterpreterLocalService;

import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;
import com.sun.syndication.feed.synd.SyndLink;
import com.sun.syndication.feed.synd.SyndLinkImpl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.portlet.PortletPreferences;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import javax.portlet.ResourceURL;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Brian Wing Shun Chan
 * @author Vilmos Papp
 * @author Eduardo Garcia
 * @author Raymond Aug
 */
@Component(immediate = true, property = { "javax.portlet.name=" + SocialActivitiesPortletKeys.SOCIAL_ACTIVITIES,
        "mvc.command.name=rss" }, service = MVCResourceCommand.class)
public class RSSMVCResourceCommand extends BaseRSSMVCResourceCommand {

    protected String exportToRSS(ResourceRequest resourceRequest, ResourceResponse resourceResponse, String title,
            String description, String format, double version, String displayStyle,
            List<SocialActivitySet> socialActivitySets, ServiceContext serviceContext) throws Exception {

        ThemeDisplay themeDisplay = (ThemeDisplay) resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);

        SyndFeed syndFeed = new SyndFeedImpl();

        syndFeed.setDescription(GetterUtil.getString(description, title));

        List<SyndEntry> syndEntries = new ArrayList<>();

        syndFeed.setEntries(syndEntries);

        for (SocialActivitySet socialActivitySet : socialActivitySets) {
            SocialActivityFeedEntry socialActivityFeedEntry = _socialActivityInterpreterLocalService
                    .interpret(StringPool.BLANK, socialActivitySet, serviceContext);

            if (socialActivityFeedEntry == null) {
                continue;
            }

            SyndEntry syndEntry = new SyndEntryImpl();

            SyndContent syndContent = new SyndContentImpl();

            syndContent.setType(RSSUtil.ENTRY_TYPE_DEFAULT);

            String value = null;

            if (displayStyle.equals(RSSUtil.DISPLAY_STYLE_TITLE)) {
                value = StringPool.BLANK;
            } else {
                value = socialActivityFeedEntry.getBody();
            }

            syndContent.setValue(value);

            syndEntry.setDescription(syndContent);

            if (Validator.isNotNull(socialActivityFeedEntry.getLink())) {
                syndEntry.setLink(socialActivityFeedEntry.getLink());
            }

            syndEntry.setPublishedDate(new Date(socialActivitySet.getCreateDate()));
            syndEntry.setTitle(HtmlUtil.extractText(socialActivityFeedEntry.getTitle()));
            syndEntry.setUri(syndEntry.getLink());

            syndEntries.add(syndEntry);
        }

        syndFeed.setFeedType(RSSUtil.getFeedType(format, version));

        List<SyndLink> syndLinks = new ArrayList<>();

        syndFeed.setLinks(syndLinks);

        SyndLink selfSyndLink = new SyndLinkImpl();

        syndLinks.add(selfSyndLink);

        LiferayPortletResponse liferayPortletResponse = _portal.getLiferayPortletResponse(resourceResponse);

        ResourceURL rssURL = liferayPortletResponse.createResourceURL();

        rssURL.setParameter("feedTitle", title);
        rssURL.setResourceID("rss");

        selfSyndLink.setHref(rssURL.toString());

        selfSyndLink.setRel("self");

        SyndLink alternateSyndLink = new SyndLinkImpl();

        syndLinks.add(alternateSyndLink);

        alternateSyndLink.setHref(_portal.getLayoutFullURL(themeDisplay));
        alternateSyndLink.setRel("alternate");

        syndFeed.setPublishedDate(new Date());
        syndFeed.setTitle(title);
        syndFeed.setUri(rssURL.toString());

        return RSSUtil.export(syndFeed);
    }

    @Override
    protected byte[] getRSS(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws Exception {

        ThemeDisplay themeDisplay = (ThemeDisplay) resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);

        String tabs1 = ParamUtil.getString(resourceRequest, "tabs1", "all");

        String feedTitle = ParamUtil.getString(resourceRequest, "feedTitle");
        String format = ParamUtil.getString(resourceRequest, "type", RSSUtil.FORMAT_DEFAULT);
        double version = ParamUtil.getDouble(resourceRequest, "version", RSSUtil.VERSION_DEFAULT);
        String displayStyle = ParamUtil.getString(resourceRequest, "displayStyle", RSSUtil.DISPLAY_STYLE_DEFAULT);
        int max = ParamUtil.getInteger(resourceRequest, "max", SearchContainer.DEFAULT_DELTA);

        Group group = _groupLocalService.getGroup(themeDisplay.getScopeGroupId());

        SocialActivitiesQueryHelper.Scope scope = SocialActivitiesQueryHelper.Scope.fromValue(tabs1);

        List<SocialActivitySet> socialActivitySets = _socialActivitiesQueryHelper.getSocialActivitySets(group,
                themeDisplay.getLayout(), scope, 0, max);

        ServiceContext serviceContext = ServiceContextFactory.getInstance(resourceRequest);

        String rss = exportToRSS(resourceRequest, resourceResponse, feedTitle, null, format, version, displayStyle,
                socialActivitySets, serviceContext);

        return rss.getBytes(StringPool.UTF8);
    }

    @Override
    protected boolean isRSSFeedsEnabled(ResourceRequest resourceRequest) {
        if (!super.isRSSFeedsEnabled(resourceRequest)) {
            return false;
        }

        PortletPreferences portletPreferences = resourceRequest.getPreferences();

        return GetterUtil.getBoolean(portletPreferences.getValue("enableRss", null), true);
    }

    @Reference(unbind = "-")
    protected void setGroupLocalService(GroupLocalService groupLocalService) {
        _groupLocalService = groupLocalService;
    }

    @Reference(unbind = "-")
    protected void setSocialActivitiesQueryHelper(SocialActivitiesQueryHelper socialActivitiesQueryHelper) {

        _socialActivitiesQueryHelper = socialActivitiesQueryHelper;
    }

    @Reference(unbind = "-")
    protected void setSocialActivityInterpreterLocalService(
            SocialActivityInterpreterLocalService socialActivityInterpreterLocalService) {

        _socialActivityInterpreterLocalService = socialActivityInterpreterLocalService;
    }

    private GroupLocalService _groupLocalService;

    @Reference
    private Portal _portal;

    private SocialActivitiesQueryHelper _socialActivitiesQueryHelper;
    private SocialActivityInterpreterLocalService _socialActivityInterpreterLocalService;

}