1
22
23 package com.liferay.portlet.tags.service.impl;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.kernel.util.ArrayUtil;
28 import com.liferay.portal.kernel.util.GetterUtil;
29 import com.liferay.portal.model.Company;
30 import com.liferay.portal.model.Group;
31 import com.liferay.portal.security.permission.ActionKeys;
32 import com.liferay.portal.util.PortalUtil;
33 import com.liferay.portlet.tags.model.TagsAsset;
34 import com.liferay.portlet.tags.model.TagsAssetDisplay;
35 import com.liferay.portlet.tags.model.TagsAssetType;
36 import com.liferay.portlet.tags.service.base.TagsAssetServiceBaseImpl;
37 import com.liferay.portlet.tags.service.permission.TagsEntryPermission;
38 import com.liferay.util.RSSUtil;
39
40 import com.sun.syndication.feed.synd.SyndContent;
41 import com.sun.syndication.feed.synd.SyndContentImpl;
42 import com.sun.syndication.feed.synd.SyndEntry;
43 import com.sun.syndication.feed.synd.SyndEntryImpl;
44 import com.sun.syndication.feed.synd.SyndFeed;
45 import com.sun.syndication.feed.synd.SyndFeedImpl;
46 import com.sun.syndication.io.FeedException;
47
48 import java.util.ArrayList;
49 import java.util.Date;
50 import java.util.List;
51
52
60 public class TagsAssetServiceImpl extends TagsAssetServiceBaseImpl {
61
62 public void deleteAsset(long assetId)
63 throws PortalException, SystemException {
64
65 tagsAssetLocalService.deleteAsset(assetId);
66 }
67
68 public TagsAsset getAsset(long assetId)
69 throws PortalException, SystemException {
70
71 return tagsAssetLocalService.getAsset(assetId);
72 }
73
74 public List<TagsAsset> getAssets(
75 long groupId, long[] classNameIds, long[] entryIds,
76 long[] notEntryIds, boolean andOperator, String orderByCol1,
77 String orderByCol2, String orderByType1, String orderByType2,
78 boolean excludeZeroViewCount, Date publishDate, Date expirationDate,
79 int start, int end)
80 throws PortalException, SystemException {
81
82 long[][] viewableEntryIds = getViewableEntryIds(entryIds, notEntryIds);
83
84 entryIds = viewableEntryIds[0];
85 notEntryIds = viewableEntryIds[1];
86
87 return tagsAssetLocalService.getAssets(
88 groupId, classNameIds, entryIds, notEntryIds, andOperator,
89 orderByCol1, orderByCol2, orderByType1, orderByType2,
90 excludeZeroViewCount, publishDate, expirationDate, start, end);
91 }
92
93 public int getAssetsCount(
94 long groupId, long[] classNameIds, long[] entryIds,
95 long[] notEntryIds, boolean andOperator,
96 boolean excludeZeroViewCount, Date publishDate, Date expirationDate)
97 throws PortalException, SystemException {
98
99 long[][] viewableEntryIds = getViewableEntryIds(entryIds, notEntryIds);
100
101 entryIds = viewableEntryIds[0];
102 notEntryIds = viewableEntryIds[1];
103
104 return tagsAssetLocalService.getAssetsCount(
105 groupId, classNameIds, entryIds, notEntryIds, andOperator,
106 excludeZeroViewCount, publishDate, expirationDate);
107 }
108
109 public String getAssetsRSS(
110 long groupId, long[] classNameIds, long[] entryIds,
111 long[] notEntryIds, boolean andOperator, String orderByCol1,
112 String orderByCol2, String orderByType1, String orderByType2,
113 boolean excludeZeroViewCount, Date publishDate, Date expirationDate,
114 int max, String type, double version, String displayStyle,
115 String feedURL, String entryURL)
116 throws PortalException, SystemException {
117
118 Group group = groupPersistence.findByPrimaryKey(groupId);
119
120 String name = group.getName();
121
122 List<TagsAsset> assets = tagsAssetLocalService.getAssets(
123 groupId, classNameIds, entryIds, notEntryIds, andOperator,
124 orderByCol1, orderByCol2, orderByType1, orderByType2,
125 excludeZeroViewCount, publishDate, expirationDate, 0, max);
126
127 return exportToRSS(
128 name, null, type, version, displayStyle, feedURL, entryURL, assets);
129 }
130
131 public TagsAssetType[] getAssetTypes(String languageId) {
132 return tagsAssetLocalService.getAssetTypes(languageId);
133 }
134
135 public TagsAssetDisplay[] getCompanyAssetDisplays(
136 long companyId, int start, int end, String languageId)
137 throws SystemException {
138
139 return tagsAssetLocalService.getCompanyAssetDisplays(
140 companyId, start, end, languageId);
141 }
142
143 public List<TagsAsset> getCompanyAssets(long companyId, int start, int end)
144 throws SystemException {
145
146 return tagsAssetLocalService.getCompanyAssets(companyId, start, end);
147 }
148
149 public int getCompanyAssetsCount(long companyId) throws SystemException {
150 return tagsAssetLocalService.getCompanyAssetsCount(companyId);
151 }
152
153 public String getCompanyAssetsRSS(
154 long companyId, int max, String type, double version,
155 String displayStyle, String feedURL, String entryURL)
156 throws PortalException, SystemException {
157
158 Company company = companyPersistence.findByPrimaryKey(companyId);
159
160 String name = company.getName();
161
162 List<TagsAsset> assets = getCompanyAssets(companyId, 0, max);
163
164 return exportToRSS(
165 name, null, type, version, displayStyle, feedURL, entryURL, assets);
166 }
167
168 public TagsAsset incrementViewCounter(String className, long classPK)
169 throws SystemException {
170
171 return tagsAssetLocalService.incrementViewCounter(className, classPK);
172 }
173
174 public TagsAssetDisplay[] searchAssetDisplays(
175 long companyId, String portletId, String keywords,
176 String languageId, int start, int end)
177 throws SystemException {
178
179 return tagsAssetLocalService.searchAssetDisplays(
180 companyId, portletId, keywords, languageId, start, end);
181 }
182
183 public int searchAssetDisplaysCount(
184 long companyId, String portletId, String keywords,
185 String languageId)
186 throws SystemException {
187
188 return tagsAssetLocalService.searchAssetDisplaysCount(
189 companyId, portletId, keywords, languageId);
190 }
191
192 public TagsAsset updateAsset(
193 long groupId, String className, long classPK,
194 String[] categoryNames, String[] entryNames, boolean visible,
195 Date startDate, Date endDate, Date publishDate, Date expirationDate,
196 String mimeType, String title, String description, String summary,
197 String url, int height, int width, Integer priority)
198 throws PortalException, SystemException {
199
200 return tagsAssetLocalService.updateAsset(
201 getUserId(), groupId, className, classPK, categoryNames, entryNames,
202 visible, startDate, endDate, publishDate, expirationDate, mimeType,
203 title, description, summary, url, height, width, priority);
204 }
205
206 protected String exportToRSS(
207 String name, String description, String type, double version,
208 String displayStyle, String feedURL, String entryURL,
209 List<TagsAsset> assets)
210 throws SystemException {
211
212 SyndFeed syndFeed = new SyndFeedImpl();
213
214 syndFeed.setFeedType(RSSUtil.getFeedType(type, version));
215 syndFeed.setTitle(name);
216 syndFeed.setLink(feedURL);
217 syndFeed.setDescription(GetterUtil.getString(description, name));
218
219 List<SyndEntry> entries = new ArrayList<SyndEntry>();
220
221 syndFeed.setEntries(entries);
222
223 for (TagsAsset asset : assets) {
224 String author = PortalUtil.getUserName(
225 asset.getUserId(), asset.getUserName());
226
227 String link = entryURL + "assetId=" + asset.getAssetId();
228
229 String value = asset.getSummary();
230
231 SyndEntry syndEntry = new SyndEntryImpl();
232
233 syndEntry.setAuthor(author);
234 syndEntry.setTitle(asset.getTitle());
235 syndEntry.setLink(link);
236 syndEntry.setUri(syndEntry.getLink());
237 syndEntry.setPublishedDate(asset.getCreateDate());
238 syndEntry.setUpdatedDate(asset.getModifiedDate());
239
240 SyndContent syndContent = new SyndContentImpl();
241
242 syndContent.setType(RSSUtil.DEFAULT_ENTRY_TYPE);
243 syndContent.setValue(value);
244
245 syndEntry.setDescription(syndContent);
246
247 entries.add(syndEntry);
248 }
249
250 try {
251 return RSSUtil.export(syndFeed);
252 }
253 catch (FeedException fe) {
254 throw new SystemException(fe);
255 }
256 }
257
258 protected long[][] getViewableEntryIds(long[] entryIds, long[] notEntryIds)
259 throws PortalException, SystemException {
260
261 List<Long> viewableList = new ArrayList<Long>();
262
263 for (long entryId : entryIds) {
264 if (TagsEntryPermission.contains(
265 getPermissionChecker(), entryId, ActionKeys.VIEW)) {
266
267 viewableList.add(entryId);
268 }
269 else {
270 notEntryIds = ArrayUtil.append(notEntryIds, entryId);
271 }
272 }
273
274 entryIds = new long[viewableList.size()];
275
276 for (int i = 0; i < viewableList.size(); i++) {
277 entryIds[i] = viewableList.get(i).longValue();
278 }
279
280 return new long[][] {entryIds, notEntryIds};
281 }
282
283 }