package com.wooki.services.feeds.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.tapestry5.internal.services.LinkSource;
import org.apache.tapestry5.ioc.annotations.Inject;
import com.sun.syndication.feed.atom.Content;
import com.sun.syndication.feed.atom.Entry;
import com.sun.syndication.feed.atom.Feed;
import com.sun.syndication.feed.atom.Link;
import com.sun.syndication.feed.atom.Person;
import com.wooki.domain.model.User;
import com.wooki.domain.model.activity.Activity;
import com.wooki.services.ServicesMessages;
import com.wooki.services.feeds.ActivityFeedWriter;
import com.wooki.services.feeds.FeedProducer;
/**
* Define a base utility for feed producing.
*
* @author ccordenier
*/
public abstract class AbstractFeedProducer implements FeedProducer
{
@Inject
protected ServicesMessages messages;
@Inject
protected LinkSource lnkSource;
@Inject
protected ActivityFeedWriter<Activity> activityFeed;
protected Feed fillFeed(String id, String title, List<Link> altLinks, List<Activity> activities)
{
Feed result = new Feed("atom_1.0");
result.setTitle(title);
result.setId(id);
result.setAlternateLinks(altLinks);
if (activities != null && activities.size() > 0)
{
if (activities.size() > 0)
{
result.setUpdated(activities.get(0).getCreationDate());
}
List<Entry> entries = new ArrayList<Entry>();
for (final Activity activity : activities)
{
Entry e = new Entry();
// title, date
e.setTitle(activityFeed.getTitle(activity));
e.setPublished(activity.getCreationDate());
// adding author
List<Person> author = new ArrayList<Person>();
author.add(toPerson(activity.getUser()));
e.setAuthors(author);
// setting content
Content c = new Content();
c.setType(Content.TEXT);
c.setValue(activityFeed.getSummary(activity));
List<Content> content = new ArrayList<Content>();
content.add(c);
e.setContents(content);
Link altLink = activityFeed.getLink(activity);
if (altLink != null)
{
e.setAlternateLinks(Arrays.asList(altLink));
}
else
{
e.setAlternateLinks(altLinks);
}
// add this entry
entries.add(e);
}
result.setEntries(entries);
}
return result;
}
private Person toPerson(User user)
{
Person person = new Person();
person.setName(user.getFullname());
person.setUri(this.lnkSource.createPageRenderLink("index", true, user.getUsername())
.toURI());
person.setEmail(user.getEmail());
return person;
}
}