You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Howto create a Rss Page

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

First RssModel class

we define a RssModel class to store the rss information

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()

Unknown macro: { return title; }

public void setTitle(String title)

Unknown macro: { this.title=title; }

public String getLink()

Unknown macro: { return link; }

public void setLink(String link)

Unknown macro: { this.link=link; }

public String getDescription()

Unknown macro: { return description; }

public void setDescription(String description)

Unknown macro: { this.description=description; }

public String getLanguage()

Unknown macro: { return language; }

public void setLanguage(String language)

Unknown macro: { this.language=language; }

public Time getPubDate()

Unknown macro: { return pubDate; }

public void setPubDate(Time pubDate)

Unknown macro: { this.pubDate=pubDate; }

public Time getLastBuildDate()

Unknown macro: { return lastBuildDate; }

public void setLastBuildDate(Time lastBuildDate)

Unknown macro: { this.lastBuildDate=lastBuildDate; }

public String getGenerator()

Unknown macro: { return generator; }

public void setGenerator(String generator)

Unknown macro: { this.generator=generator; }

public String getWebMaster()

Unknown macro: { return webMaster; }

public void setWebMaster(String webMaster)

Unknown macro: { this.webMaster=webMaster; }

public List getItems()

Unknown macro: { return itemList; }

public void addItem(RssItem item)

Unknown macro: { itemList.add(item); }

}

Second RssItem class

create a RssItem class for store information of RssItems

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()

Unknown macro: { return title; }

public void setTitle(String title)

Unknown macro: { this.title=title; }

public String getDescription()

Unknown macro: { return description; }

public void setDescription(String description)

Unknown macro: { this.description=description; }

public Time getPubDate()

Unknown macro: { return pubDate; }

public void setPubDate(Time pubDate)

Unknown macro: { this.pubDate=pubDate; }

public Class getPageClass()

Unknown macro: { return pageClass; }

public void setPageClass(Class pageClass)

Unknown macro: { this.pageClass=pageClass; }

public void setPageParameters(PageParameters parameters)

Unknown macro: { this.parameters=parameters; }

public PageParameters getPageParameters()

Unknown macro: { 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

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()

Unknown macro: { 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)

Unknown macro: { url.append("}

url.append(urlFor(
pageMapName,
pageClass,
parameters));
return url.toString();
}

private String getProtocolHeader(String protocol)

Unknown macro: { if(protocol.equals("HTTP/1.1")) return "http}

}

Forth 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

public RssModel getRssModel(String siteName)
{
RssModel model=new RssModel();
model.setTitle(siteName);
model.setLink("www.on-rez.com");
model.setDescription("Rss Description");
model.setLanguage("es-ES (Spanish)");
model.setPubDate(Time.now());
model.setLastBuildDate(Time.now());
model.setGenerator("oz.web.html.rss.RssGenerator");
model.setWebMaster("pepone.on-rez@gmail.com");

CmsSitePrx sitePx=getSiteNamed(siteName);
try
{
Map lastChanges=sitePx.getFileSystem().getChangesCacheMap();
Iterator it=lastChanges.keySet().iterator();
while(it.hasNext())
{
OnRezPrx objectPx=(OnRezPrx)lastChanges.get(it.next());

if(objectPx.ice_isA("::Oz::Files::Document"))

Unknown macro: { RssItem item=new RssItem(); DocumentPrx documentPx=DocumentPrxHelper.uncheckedCast(objectPx); item.setTitle(documentPx.getName()); item.setDescription(documentPx.getResume("es")); item.setPubDate( Time.milliseconds( documentPx.getUpdateDate().getUnixTime()*1000)); item.setPageClass(CmsViewPage.class); PageParameters parameters=new PageParameters(); parameters.put("siteName",siteName); parameters.put("nodePath",documentPx.getPath()); item.setPageParameters(parameters); model.addItem(item); }

}
}
catch(Exception e)
{

}
return model;
}

  • No labels