use of com.rometools.rome.feed.synd.SyndContent in project nutch by apache.
the class FeedParser method addFields.
private void addFields(Metadata parseMeta, Metadata contentMeta, SyndFeed feed, SyndEntry entry) {
List<?> authors = entry.getAuthors(), categories = entry.getCategories();
Date published = entry.getPublishedDate(), updated = entry.getUpdatedDate();
String contentType = null;
if (authors != null) {
for (Object o : authors) {
SyndPerson author = (SyndPerson) o;
String authorName = author.getName();
if (checkString(authorName)) {
parseMeta.add(Feed.FEED_AUTHOR, authorName);
}
}
} else {
// getAuthors may return null if feed is non-atom
// if so, call getAuthor to get Dublin Core module creator.
String authorName = entry.getAuthor();
if (checkString(authorName)) {
parseMeta.set(Feed.FEED_AUTHOR, authorName);
}
}
for (Object i : categories) {
parseMeta.add(Feed.FEED_TAGS, ((SyndCategory) i).getName());
}
if (published != null) {
parseMeta.set(Feed.FEED_PUBLISHED, Long.toString(published.getTime()));
}
if (updated != null) {
parseMeta.set(Feed.FEED_UPDATED, Long.toString(updated.getTime()));
}
SyndContent description = entry.getDescription();
if (description != null) {
contentType = description.getType();
} else {
// TODO: What to do if contents.size() > 1?
List<?> contents = entry.getContents();
if (contents.size() > 0) {
contentType = ((SyndContent) contents.get(0)).getType();
}
}
if (checkString(contentType)) {
// ROME may return content-type as html
if (contentType.equals("html"))
contentType = "text/html";
else if (contentType.equals("xhtml"))
contentType = "text/xhtml";
contentMeta.set(Response.CONTENT_TYPE, contentType + "; " + CHARSET_UTF8);
} else {
contentMeta.set(Response.CONTENT_TYPE, TEXT_PLAIN_CONTENT_TYPE);
}
}
use of com.rometools.rome.feed.synd.SyndContent in project BIMserver by opensourceBIM.
the class SyndicationServlet method writeRevisionsFeed.
private void writeRevisionsFeed(HttpServletRequest request, HttpServletResponse response, ServiceMap serviceMap) throws IOException, FeedException, ServiceException, PublicInterfaceNotFoundException {
long poid = Long.parseLong(request.getParameter("poid"));
SProject sProject = serviceMap.getServiceInterface().getProjectByPoid(poid);
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(FEED_TYPE);
feed.setTitle("BIMserver.org revisions feed for project '" + sProject.getName() + "'");
feed.setLink(request.getContextPath());
feed.setDescription("This feed represents all the revisions of project '" + sProject.getName() + "'");
List<SyndEntry> entries = new ArrayList<SyndEntry>();
try {
List<SRevision> allRevisionsOfProject = serviceMap.getServiceInterface().getAllRevisionsOfProject(poid);
Collections.sort(allRevisionsOfProject, new SRevisionIdComparator(false));
for (SRevision sVirtualRevision : allRevisionsOfProject) {
SUser user = serviceMap.getServiceInterface().getUserByUoid(sVirtualRevision.getUserId());
SyndEntry entry = new SyndEntryImpl();
entry.setTitle("Revision " + sVirtualRevision.getOid());
entry.setLink(request.getContextPath() + "/revision.jsp?poid=" + sVirtualRevision.getOid() + "&roid=" + sVirtualRevision.getOid());
entry.setPublishedDate(sVirtualRevision.getDate());
SyndContent description = new SyndContentImpl();
description.setType("text/html");
description.setValue("<table><tr><td>User</td><td>" + user.getUsername() + "</td></tr><tr><td>Comment</td><td>" + sVirtualRevision.getComment() + "</td></tr></table>");
entry.setDescription(description);
entries.add(entry);
}
} catch (ServiceException e) {
LOGGER.error("", e);
}
feed.setEntries(entries);
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, response.getWriter());
}
use of com.rometools.rome.feed.synd.SyndContent in project structr by structr.
the class DataFeed method updateFeed.
static void updateFeed(final DataFeed thisFeed, final boolean cleanUp) {
final String remoteUrl = thisFeed.getUrl();
if (StringUtils.isNotBlank(remoteUrl)) {
final SecurityContext securityContext = thisFeed.getSecurityContext();
final App app = StructrApp.getInstance(securityContext);
try {
final PropertyKey<Date> dateKey = StructrApp.key(FeedItem.class, "pubDate");
final PropertyKey<String> urlKey = StructrApp.key(FeedItem.class, "url");
final URL remote = new URL(remoteUrl);
final SyndFeedInput input = new SyndFeedInput();
try (final Reader reader = new XmlReader(remote)) {
final SyndFeed feed = input.build(reader);
final List<SyndEntry> entries = feed.getEntries();
thisFeed.setProperty(StructrApp.key(DataFeed.class, "feedType"), feed.getFeedType());
thisFeed.setProperty(StructrApp.key(DataFeed.class, "description"), feed.getDescription());
final List<FeedItem> newItems = Iterables.toList(thisFeed.getItems());
for (final SyndEntry entry : entries) {
final PropertyMap props = new PropertyMap();
final String link = entry.getLink();
// Check if item with this link already exists
if (app.nodeQuery(FeedItem.class).and(urlKey, link).getFirst() == null) {
props.put(urlKey, entry.getLink());
props.put(StructrApp.key(FeedItem.class, "name"), entry.getTitle());
props.put(StructrApp.key(FeedItem.class, "author"), entry.getAuthor());
props.put(StructrApp.key(FeedItem.class, "comments"), entry.getComments());
props.put(StructrApp.key(FeedItem.class, "description"), entry.getDescription().getValue());
final FeedItem item = app.create(FeedItem.class, props);
item.setProperty(dateKey, entry.getPublishedDate());
final List<FeedItemContent> itemContents = new LinkedList<>();
final List<FeedItemEnclosure> itemEnclosures = new LinkedList<>();
// Get and add all contents
final List<SyndContent> contents = entry.getContents();
for (final SyndContent content : contents) {
final FeedItemContent itemContent = app.create(FeedItemContent.class);
itemContent.setValue(content.getValue());
itemContents.add(itemContent);
}
// Get and add all enclosures
final List<SyndEnclosure> enclosures = entry.getEnclosures();
for (final SyndEnclosure enclosure : enclosures) {
final FeedItemEnclosure itemEnclosure = app.create(FeedItemEnclosure.class);
itemEnclosure.setProperty(StructrApp.key(FeedItemEnclosure.class, "url"), enclosure.getUrl());
itemEnclosure.setProperty(StructrApp.key(FeedItemEnclosure.class, "enclosureLength"), enclosure.getLength());
itemEnclosure.setProperty(StructrApp.key(FeedItemEnclosure.class, "enclosureType"), enclosure.getType());
itemEnclosures.add(itemEnclosure);
}
item.setProperty(StructrApp.key(FeedItem.class, "contents"), itemContents);
item.setProperty(StructrApp.key(FeedItem.class, "enclosures"), itemEnclosures);
newItems.add(item);
logger.debug("Created new item: {} ({}) ", item.getProperty(FeedItem.name), item.getProperty(dateKey));
}
}
thisFeed.setProperty(StructrApp.key(DataFeed.class, "items"), newItems);
thisFeed.setProperty(StructrApp.key(DataFeed.class, "lastUpdated"), new Date());
}
} catch (IllegalArgumentException | IOException | FeedException | FrameworkException ex) {
logger.error("Error while updating feed", ex);
}
}
if (cleanUp) {
thisFeed.cleanUp();
}
}
Aggregations