Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Excerpt
hiddentrue

How to create a Rss page in Wicket

Panel
borderStylesolid
titleTable of contents
Table of Contents
minLevel1

Howto create a Rss Page

In this document i try to explain how to create a simple Rss page to integrate in wicket applications

Info

There is also a FeedPage component that created as an alternative to this RssPage.

First RssModel class

we define a RssModel class to store the rss information

Code Block

    import java.util.ArrayList;
    import java.util.List;
    import wicket.util.time.Time;
    public class RssModel {
    private String title;
    private String link;
    private String description;
    private String language;
    private Time pubDate;
    private Time lastBuildDate;
    private String generator;
    private String webMaster;
    private List itemList=new ArrayList();
    
    public RssModel()
    {
        
    }
    
    public String getTitle()
    {
        return title;
    }
    
    public void setTitle(String title)
    {
        this.title=title;
    }
    
    public String getLink()
    {
        return link;
    }
    
    public void setLink(String link)
    {
        this.link=link;
    }
    
    public String getDescription()
    {
        return description;
    }
    
    public void setDescription(String description)
    {
        this.description=description;
    }
    
    public String getLanguage()
    {
        return language;
    }
    
    public void setLanguage(String language)
    {
        this.language=language;
    }
    
    public Time getPubDate()
    {
        return pubDate;
    }
    
    public void setPubDate(Time pubDate)
    {
        this.pubDate=pubDate;
    }
    
    public Time getLastBuildDate()
    {
        return lastBuildDate;
    }
    
    public void setLastBuildDate(Time lastBuildDate)
    {
        this.lastBuildDate=lastBuildDate;
    }
    
    public String getGenerator()
    {
        return generator;
    }
    
    public void setGenerator(String generator)
    {
        this.generator=generator;
    }
    
    public String getWebMaster()
    {
        return webMaster;
    }
    
    public void setWebMaster(String webMaster)
    {
        this.webMaster=webMaster;
    }
    
    public List getItems()
    {
        return itemList;
    }
    
    public void addItem(RssItem item)
    {
        itemList.add(item);
    }
    }

Second RssItem class

create a RssItem class for store information of RssItems

Code Block

    import wicket.PageParameters;
    import wicket.util.time.Time;
    
    public class RssItem {
    private String title;
    private String link;
    private String description;
    private Time pubDate;
    private Class pageClass;
    private PageParameters parameters;
    
    public RssItem()
    {
        
    }
    
    public String getTitle()
    {
        return title;
    }
    
    public void setTitle(String title)
    {
        this.title=title;
    }
    
    public String getDescription()
    {
        return description;
    }
    
    public void setDescription(String description)
    {
        this.description=description;
    }
    
    public Time getPubDate()
    {
        return pubDate;
    }
    
    public void setPubDate(Time pubDate)
    {
        this.pubDate=pubDate;
    }
    
    public Class getPageClass()
    {
        return pageClass;
    }
    
    public void setPageClass(Class pageClass)
    {
        this.pageClass=pageClass;
    }
    
    public void setPageParameters(PageParameters parameters)
    {
        this.parameters=parameters;
    }
    
    public PageParameters getPageParameters()
    {
        return parameters;
    }
    }

Third RssPage class

create a class that extends WebPage and represents the RssPage. Note that this class override
getMarkupType to return "xml" this is the way for create xml pages in wicket

this class is define in RssPage.java file

Code Block

    import javax.servlet.http.HttpServletRequest;
    import oz.web.model.basic.RssItem;
    import oz.web.model.basic.RssModel;
    import oz.web.model.basic.WebApp;
    import wicket.PageParameters;
    import wicket.markup.html.WebPage;
    import wicket.markup.html.basic.Label;
    import wicket.markup.html.list.ListItem;
    import wicket.markup.html.list.ListView;
    import wicket.protocol.http.servlet.ServletWebRequest;

    public class RssPage extends WebPage {
    private Label lblTitle;
    private Label lblLink;
    private Label lblDescription;
    private Label lblLanguage;
    private Label lblPubDate;
    private Label lblLastBuildDate;
    private Label lblGenerator;
    private Label lblWebMaster;
    private ListView itemListView;    
    private RssModel model;

    public RssPage()
    {
        /*
         * This is a method of my application where i populate the RssModel from my
         * applcations objects you must adapt it to your needs.
        */
        String siteName=getRequest().getParameter("siteName");
        model=((WebApp)getApplication()).getRssModel(siteName);    
        add(lblTitle=new Label("lblTitle",model.getTitle()));
        add(lblLink=new Label("lblLink",model.getLink()));
        add(lblDescription=new Label("lblDescription",model.getDescription()));
        add(lblLanguage=new Label("lblLanguage",model.getLanguage()));
        add(lblPubDate=new Label("lblPubDate",
                model.getPubDate().toDateString() +
                "-" +
                model.getPubDate().toTimeString()));
        add(lblLastBuildDate=new Label(
                "lblLastBuildDate",
                model.getLastBuildDate().toDateString() +
                "-" +
                model.getLastBuildDate().toTimeString()));
        add(lblGenerator=new Label("lblGenerator",model.getGenerator()));
        add(lblWebMaster=new Label("lblWebMaster",model.getWebMaster()));
        
        add(itemListView=new ListView("itemListView",model.getItems())
            {
                public void populateItem(ListItem item)
                {
                    RssItem modelItem=(RssItem)item.getModelObject();

                    item.add(new Label("lblItemTitle",modelItem.getTitle()));
                    item.add(new Label(
                            "lblItemLink",
                            getFullUrl( 
                                    (String)null,
                                    modelItem.getPageClass(),
                                    modelItem.getPageParameters())));
                    item.add(new Label("lblItemDescription",modelItem.getDescription()));
                    item.add(new Label(
                            "lblItemPubDate",
                            modelItem.getPubDate().toDateString() +
                            "-" +
                            modelItem.getPubDate().toTimeString()));
                }
            });
    }
    
    public String getMarkupType()
    {
        return "xml";
    }

    private String getFullUrl(
            final String pageMapName,
            final Class pageClass,
            final PageParameters parameters)
    {
        
        HttpServletRequest request=((ServletWebRequest)getRequest()).getHttpServletRequest();
        
        final StringBuffer url=new StringBuffer();
        url.append(getProtocolHeader(request.getProtocol()));
        url.append(request.getServerName());
        if(request.getServerPort()!=80)
        {
            url.append(":");
            url.append(String.valueOf(request.getServerPort()));
        }
        
        url.append(urlFor(
                    pageMapName,
                    pageClass,
                    parameters));
        return url.toString();
    }
    
    private String getProtocolHeader(String protocol)
    {
        if(protocol.equals("HTTP/1.1"))
            return "http://";
        else
            return "";
    }
}

Fourth RssPage.xml markup file

Define the page markup in RssPage.xml file

...


   <?xml version="1.0" encoding="iso-8859-1"?>
    <rss version="2.0">
    <channel>
        <title wicket:id="lblTitle">lblTitle</title>
        <link wicket:id="lblLink">http://www.abc.es</link>
        <description wicket:id="lblDescription">lblDescription</description>
        <language wicket:id="lblLanguage">lblLanguage</language>
        <pubDate wicket:id="lblPubDate">lblPubDate</pubDate>
        <lastBuildDate wicket:id="lblLastBuildDate">lblLastBuildDate</lastBuildDate>
        <generator wicket:id="lblGenerator">lblGenerator</generator>
        <webMaster wicket:id="lblWebMaster">lblWebMaster</webMaster>
        
        <item wicket:id="itemListView">
            <title wicket:id="lblItemTitle">lblItemTitle</title>
            <link wicket:id="lblItemLink">lblItemLink</link>
            <description wicket:id="lblItemDescription">lblItemDescription</description>
            <pubDate wicket:id="lblItemPubDate">lblItemPubDate</pubDate>
        </item>
        
    </channel>
    </rss>

Five example of how i populate RssModel

...

This information is no longer relavent. The Wicket Stuff project has a complete subproject devoted to creation of RSS/Atom feeds. see: http://wicketstuff.org/confluence/display/STUFFWIKI/wicketstuff-rome