blob: 53f62e3d1f9f5c16e2c2ee41a5da9d039b1fe333 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.web.view;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.QueueBrowser;
import javax.jms.TextMessage;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.io.FeedException;
import com.sun.syndication.io.SyndFeedOutput;
/**
* This renderer uses XStream to render messages on a queue as full XML elements
*
*
*/
public class RssMessageRenderer extends SimpleMessageRenderer {
// private String feedType = "atom_0.3";
private String feedType = "rss_2.0";
private SyndFeed feed;
private String description = "This feed is auto-generated by Apache ActiveMQ";
private String entryContentType = "text/plain";
public void renderMessage(PrintWriter writer, HttpServletRequest request, HttpServletResponse response, QueueBrowser browser, Message message) throws JMSException {
SyndFeed feed = getFeed(browser, request);
List<SyndEntry> entries = feed.getEntries();
SyndEntry entry = createEntry(browser, message, request);
SyndContent description = createEntryContent(browser, message, request);
entry.setDescription(description);
entries.add(entry);
}
// Properties
// -------------------------------------------------------------------------
public String getDescription() {
return description;
}
public void setDescription(String feedDescription) {
this.description = feedDescription;
}
public String getFeedType() {
return feedType;
}
public void setFeedType(String feedType) {
this.feedType = feedType;
}
public String getEntryContentType() {
return entryContentType;
}
public void setEntryContentType(String entryContentType) {
this.entryContentType = entryContentType;
}
// Implementation methods
// -------------------------------------------------------------------------
protected void printFooter(PrintWriter writer, QueueBrowser browser, HttpServletRequest request) throws IOException, JMSException, ServletException {
// now lets actually write out the content
SyndFeed feed = getFeed(browser, request);
SyndFeedOutput output = new SyndFeedOutput();
try {
output.output(feed, writer);
} catch (FeedException e) {
throw new ServletException(e);
}
}
protected void printHeader(PrintWriter writer, QueueBrowser browser, HttpServletRequest request) throws IOException, JMSException {
}
public SyndFeed getFeed(QueueBrowser browser, HttpServletRequest request) throws JMSException {
if (feed == null) {
feed = createFeed(browser, request);
}
return feed;
}
protected SyndEntry createEntry(QueueBrowser browser, Message message, HttpServletRequest request) throws JMSException {
SyndEntry entry = new SyndEntryImpl();
String title = message.getJMSMessageID();
entry.setTitle(title);
String link = request.getRequestURI() + "?msgId=" + title;
entry.setLink(link);
entry.setPublishedDate(new Date());
return entry;
}
protected SyndContent createEntryContent(QueueBrowser browser, Message message, HttpServletRequest request) throws JMSException {
SyndContent description = new SyndContentImpl();
description.setType(entryContentType);
if (message instanceof TextMessage) {
String text = ((TextMessage)message).getText();
description.setValue(text);
}
return description;
}
protected SyndFeed createFeed(QueueBrowser browser, HttpServletRequest request) throws JMSException {
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(feedType);
String title = browser.getQueue().toString();
String selector = browser.getMessageSelector();
if (selector != null) {
title += " with selector: " + selector;
}
feed.setTitle(title);
feed.setLink(request.getRequestURI());
feed.setDescription(getDescription());
return feed;
}
}