/** * 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.rss.web.util; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.Http; import com.liferay.portal.kernel.util.HttpUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.webcache.WebCacheItem; import com.liferay.portal.kernel.webcache.WebCachePoolUtil; import com.liferay.rss.web.configuration.RSSWebCacheConfiguration; import com.liferay.rss.web.internal.util.RSSWebCacheItem; import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.feed.synd.SyndImage; import java.util.ArrayList; import java.util.List; /** * @author Eudaldo Alonso */ public class RSSFeed { public RSSFeed( RSSWebCacheConfiguration rssWebCacheConfiguration, String url, String title) { _rssWebCacheConfiguration = rssWebCacheConfiguration; _url = url; SyndFeed syndFeed = getSyndFeed(); if (syndFeed == null) { _baseURL = StringPool.BLANK; _syndFeedImageLink = StringPool.BLANK; _syndFeedImageURL = StringPool.BLANK; _syndFeedLink = StringPool.BLANK; _title = title; return; } if (Validator.isNull(title)) { title = syndFeed.getTitle(); } String baseURL = StringPool.BLANK; String syndFeedImageLink = StringPool.BLANK; String syndFeedImageURL = StringPool.BLANK; String syndFeedLink = syndFeed.getLink(); if (Validator.isNull(syndFeedLink) || !HttpUtil.hasDomain(syndFeedLink)) { baseURL = HttpUtil.getProtocol(_url).concat( Http.PROTOCOL_DELIMITER).concat(HttpUtil.getDomain(_url)); if (Validator.isNotNull(syndFeedLink)) { syndFeedLink = baseURL.concat(syndFeedLink); } else { syndFeedLink = baseURL; } } else { baseURL = HttpUtil.getProtocol(syndFeedLink).concat( Http.PROTOCOL_DELIMITER).concat( HttpUtil.getDomain(syndFeedLink)); } SyndImage syndImage = syndFeed.getImage(); if (syndImage != null) { syndFeedImageLink = syndImage.getLink(); if (!HttpUtil.hasDomain(syndFeedImageLink)) { syndFeedImageLink = baseURL + syndFeedImageLink; } syndFeedImageURL = syndImage.getUrl(); if (!HttpUtil.hasDomain(syndFeedImageURL)) { syndFeedImageURL = baseURL + syndFeedImageURL; } } _baseURL = baseURL; _syndFeedImageLink = syndFeedImageLink; _syndFeedImageURL = syndFeedImageURL; _syndFeedLink = syndFeedLink; _title = title; } public String getBaseURL() { return _baseURL; } public List<RSSFeedEntry> getRSSFeedEntries(ThemeDisplay themeDisplay) { if (_rssFeedEntries != null) { return _rssFeedEntries; } _rssFeedEntries = new ArrayList<>(); SyndFeed syndFeed = getSyndFeed(); if (syndFeed == null) { return _rssFeedEntries; } for (Object syndEntry : syndFeed.getEntries()) { RSSFeedEntry rssFeedEntry = new RSSFeedEntry( this, (SyndEntry)syndEntry, themeDisplay); _rssFeedEntries.add(rssFeedEntry); } return _rssFeedEntries; } public SyndFeed getSyndFeed() { if (_syndFeed != null) { return _syndFeed; } WebCacheItem wci = new RSSWebCacheItem(_rssWebCacheConfiguration, _url); _syndFeed = (SyndFeed)WebCachePoolUtil.get( RSSFeed.class.getName() + StringPool.PERIOD + _url, wci); return _syndFeed; } public String getSyndFeedImageLink() { return _syndFeedImageLink; } public String getSyndFeedImageURL() { return _syndFeedImageURL; } public String getSyndFeedLink() { return _syndFeedLink; } public String getTitle() { return _title; } public String getURL() { return _url; } private final String _baseURL; private List<RSSFeedEntry> _rssFeedEntries; private final RSSWebCacheConfiguration _rssWebCacheConfiguration; private SyndFeed _syndFeed; private final String _syndFeedImageLink; private final String _syndFeedImageURL; private final String _syndFeedLink; private final String _title; private final String _url; }