001
014
015 package com.liferay.portlet.activities.action;
016
017 import com.liferay.portal.kernel.exception.SystemException;
018 import com.liferay.portal.kernel.util.HtmlUtil;
019 import com.liferay.portal.kernel.util.ParamUtil;
020 import com.liferay.portal.kernel.util.StringPool;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.model.Group;
023 import com.liferay.portal.service.GroupLocalServiceUtil;
024 import com.liferay.portal.theme.ThemeDisplay;
025 import com.liferay.portal.util.Portal;
026 import com.liferay.portal.util.PortalUtil;
027 import com.liferay.portal.util.WebKeys;
028 import com.liferay.portlet.social.model.SocialActivity;
029 import com.liferay.portlet.social.model.SocialActivityFeedEntry;
030 import com.liferay.portlet.social.service.SocialActivityInterpreterLocalServiceUtil;
031 import com.liferay.portlet.social.service.SocialActivityLocalServiceUtil;
032 import com.liferay.util.RSSUtil;
033
034 import com.sun.syndication.feed.synd.SyndContent;
035 import com.sun.syndication.feed.synd.SyndContentImpl;
036 import com.sun.syndication.feed.synd.SyndEntry;
037 import com.sun.syndication.feed.synd.SyndEntryImpl;
038 import com.sun.syndication.feed.synd.SyndFeed;
039 import com.sun.syndication.feed.synd.SyndFeedImpl;
040 import com.sun.syndication.feed.synd.SyndLink;
041 import com.sun.syndication.feed.synd.SyndLinkImpl;
042 import com.sun.syndication.io.FeedException;
043
044 import java.util.ArrayList;
045 import java.util.Collections;
046 import java.util.Date;
047 import java.util.List;
048
049 import javax.portlet.PortletRequest;
050 import javax.portlet.ResourceRequest;
051 import javax.portlet.ResourceResponse;
052
053
057 public class RSSAction extends com.liferay.portal.struts.RSSAction {
058
059 protected List<SocialActivity> getActivities(PortletRequest portletRequest)
060 throws Exception {
061
062 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
063 WebKeys.THEME_DISPLAY);
064
065 Group group = GroupLocalServiceUtil.getGroup(
066 themeDisplay.getScopeGroupId());
067
068 int start = 0;
069 int end = 10;
070
071 if (group.isOrganization()) {
072 return SocialActivityLocalServiceUtil.getOrganizationActivities(
073 group.getOrganizationId(), start, end);
074 }
075 else if (group.isRegularSite()) {
076 return SocialActivityLocalServiceUtil.getGroupActivities(
077 group.getGroupId(), start, end);
078 }
079 else if (group.isUser()) {
080 return SocialActivityLocalServiceUtil.getUserActivities(
081 group.getClassPK(), start, end);
082 }
083
084 return Collections.emptyList();
085 }
086
087 @Override
088 protected byte[] getRSS(
089 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
090 throws Exception {
091
092 ThemeDisplay themeDisplay = (ThemeDisplay)resourceRequest.getAttribute(
093 WebKeys.THEME_DISPLAY);
094
095 SyndFeed syndFeed = new SyndFeedImpl();
096
097 String description = ParamUtil.getString(resourceRequest, "feedTitle");
098
099 syndFeed.setDescription(description);
100
101 List<SyndEntry> syndEntries = new ArrayList<SyndEntry>();
102
103 syndFeed.setEntries(syndEntries);
104
105 List<SocialActivity> activities = getActivities(resourceRequest);
106
107 for (SocialActivity activity : activities) {
108 SocialActivityFeedEntry activityFeedEntry =
109 SocialActivityInterpreterLocalServiceUtil.interpret(
110 activity, themeDisplay);
111
112 if (activityFeedEntry == null) {
113 continue;
114 }
115
116 SyndEntry syndEntry = new SyndEntryImpl();
117
118 SyndContent syndContent = new SyndContentImpl();
119
120 syndContent.setType(RSSUtil.FEED_TYPE_DEFAULT);
121 syndContent.setValue(activityFeedEntry.getBody());
122
123 syndEntry.setDescription(syndContent);
124
125 if (Validator.isNotNull(activityFeedEntry.getLink())) {
126 syndEntry.setLink(activityFeedEntry.getLink());
127 }
128
129 syndEntry.setPublishedDate(new Date(activity.getCreateDate()));
130 syndEntry.setTitle(
131 HtmlUtil.extractText(activityFeedEntry.getTitle()));
132
133 syndEntries.add(syndEntry);
134 }
135
136 syndFeed.setFeedType(RSSUtil.FEED_TYPE_DEFAULT);
137
138 List<SyndLink> syndLinks = new ArrayList<SyndLink>();
139
140 syndFeed.setLinks(syndLinks);
141
142 SyndLink selfSyndLink = new SyndLinkImpl();
143
144 syndLinks.add(selfSyndLink);
145
146 String link =
147 PortalUtil.getLayoutFullURL(themeDisplay) +
148 Portal.FRIENDLY_URL_SEPARATOR + "activities/rss";
149
150 selfSyndLink.setHref(link);
151
152 selfSyndLink.setRel("self");
153
154 SyndLink alternateSyndLink = new SyndLinkImpl();
155
156 syndLinks.add(alternateSyndLink);
157
158 alternateSyndLink.setHref(PortalUtil.getLayoutFullURL(themeDisplay));
159 alternateSyndLink.setRel("alternate");
160
161 syndFeed.setPublishedDate(new Date());
162 syndFeed.setTitle(description);
163 syndFeed.setUri(link);
164
165 String rss = StringPool.BLANK;
166
167 try {
168 rss = RSSUtil.export(syndFeed);
169 }
170 catch (FeedException fe) {
171 throw new SystemException(fe);
172 }
173
174 return rss.getBytes(StringPool.UTF8);
175 }
176
177 }