package com.ejie.x38.rss;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.view.feed.AbstractRssFeedView;
import com.ejie.x38.rss.exception.RssInitializationException;
import com.sun.syndication.feed.rss.Channel;
import com.sun.syndication.feed.rss.Content;
import com.sun.syndication.feed.rss.Item;
/**
* Clase encargada de resolver la view que va a devolver el feed RSS.
*
* @author UDA
*
*/
public class RssFeedView extends AbstractRssFeedView {
/**
* Titulo del feed.
*/
private String title;
/**
* Descripción del feed.
*/
private String descripcion;
/**
* Enlace al feed.
*/
private String link;
/**
* Key utilizada para internacionalizar el título del feed.
*/
private String i18nTitle;
/**
* Key utilizada para internacionalizar la descripción del feed.
*/
private String i18nDescripcion;
@Autowired(required = false)
private ReloadableResourceBundleMessageSource messageSource;
/**
* {@inheritDoc}
*/
@Override
protected void buildFeedMetadata(Map<String, Object> model, Channel feed, HttpServletRequest request) {
if (this.i18nTitle != null && this.i18nDescripcion != null && this.messageSource == null) {
throw new RssInitializationException("No se puede resolver el valor de la propiedad i18nTitle al no existir un bean messageSource definido");
}
if (this.i18nDescripcion != null && this.messageSource == null) {
throw new RssInitializationException("No se puede resolver el valor de la propiedad i18nDescripcion al no existir un bean messageSource definido");
}
// Titulo del feed
if (this.i18nTitle != null) {
feed.setTitle(this.messageSource.getMessage(this.i18nTitle, null, LocaleContextHolder.getLocale()));
} else {
feed.setTitle(this.title);
}
// Descripción del feed
if (this.i18nDescripcion != null) {
feed.setDescription(this.messageSource.getMessage(this.i18nDescripcion, null, LocaleContextHolder.getLocale()));
} else {
feed.setDescription(this.descripcion);
}
// Link del feed
feed.setLink(this.link);
super.buildFeedMetadata(model, feed, request);
}
/**
* {@inheritDoc}
*/
@Override
protected List<Item> buildFeedItems(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
@SuppressWarnings("unchecked")
List<RssContent> listContent = (List<RssContent>) model.get("feedContent");
List<Item> items = new ArrayList<Item>(listContent.size());
for (RssContent rssContent : listContent) {
Item item = new Item();
Content content = new Content();
content.setValue(rssContent.getDescription());
item.setContent(content);
item.setTitle(rssContent.getTitle());
item.setLink(rssContent.getLink());
item.setPubDate(rssContent.getPubDate());
items.add(item);
}
return items;
}
/**
* Setter del parámetro title
*
* @param title
* Título del feed
*
*/
public void setTitle(String title) {
this.title = title;
}
/**
* Setter del parámetro descripcion
*
* @param descripcion
* Descripción del feed
*
*/
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
/**
* Setter del parámetro link
*
* @param link
* Link del feed
*
*/
public void setLink(String link) {
this.link = link;
}
/**
* Setter del parámetro i18nTitle
*
* @param i18nTitle
* Key utilizada para internacionalizar el título del feed
*
*/
public void setI18nTitle(String i18nTitle) {
this.i18nTitle = i18nTitle;
}
/**
* Setter del parámetro i18nDescripcion
*
* @param i18nDescripcion
* Key utilizada para internacionalizar la descripción del feed
*
*/
public void setI18nDescripcion(String i18nDescripcion) {
this.i18nDescripcion = i18nDescripcion;
}
}