package com.wooki.services.feeds;
import java.util.Map;
import org.apache.tapestry5.ioc.MappedConfiguration;
import org.apache.tapestry5.ioc.ServiceBinder;
import org.apache.tapestry5.ioc.annotations.Autobuild;
import org.apache.tapestry5.ioc.annotations.InjectService;
import org.apache.tapestry5.ioc.services.StrategyBuilder;
import org.apache.tapestry5.ioc.util.StrategyRegistry;
import com.wooki.domain.model.activity.AccountActivity;
import com.wooki.domain.model.activity.BookActivity;
import com.wooki.domain.model.activity.ChapterActivity;
import com.wooki.domain.model.activity.CommentActivity;
import com.wooki.services.activity.ActivitySourceType;
import com.wooki.services.feeds.impl.AccountActivityFeed;
import com.wooki.services.feeds.impl.BookActivityFeed;
import com.wooki.services.feeds.impl.ChapterActivityFeed;
import com.wooki.services.feeds.impl.CommentActivityFeed;
import com.wooki.services.feeds.impl.FeedSourceImpl;
import com.wooki.services.feeds.impl.FrontFeedProducer;
import com.wooki.services.feeds.impl.SingleBookFeedProducer;
import com.wooki.services.feeds.impl.UserPublicFeedProducer;
/**
* Define All services and elements related to Feed creation.
*
* @author ccordenier
*/
public class FeedModule
{
public static void bind(ServiceBinder binder)
{
binder.bind(FeedSource.class, FeedSourceImpl.class);
}
/**
* Strategy for outputting feed content based on activity
*/
@SuppressWarnings("unchecked")
public static ActivityFeedWriter buildActivityFeedWriter(
Map<Class, ActivityFeedWriter> configuration,
@InjectService("StrategyBuilder") StrategyBuilder builder)
{
StrategyRegistry<ActivityFeedWriter> registry = StrategyRegistry.newInstance(
ActivityFeedWriter.class,
configuration);
return builder.build(registry);
}
/**
* Each type of activity is associated to a FeedWriter. This way we can easily render an Feed
* entry using its corresponding writer.
*/
@SuppressWarnings("unchecked")
public void contributeActivityFeedWriter(
MappedConfiguration<Class, ActivityFeedWriter> configuration,
@Autobuild AccountActivityFeed accountActivityFeed,
@Autobuild BookActivityFeed bookActivityFeed,
@Autobuild ChapterActivityFeed chapterActivityFeed,
@Autobuild CommentActivityFeed commentActivityFeed)
{
configuration.add(AccountActivity.class, accountActivityFeed);
configuration.add(BookActivity.class, bookActivityFeed);
configuration.add(ChapterActivity.class, chapterActivityFeed);
configuration.add(CommentActivity.class, commentActivityFeed);
}
/**
* Contribute sources elements
*
* @param configuration
*/
public static void contributeFeedSource(
MappedConfiguration<ActivitySourceType, FeedProducer> configuration)
{
configuration.addInstance(ActivitySourceType.BOOK, SingleBookFeedProducer.class);
configuration.addInstance(ActivitySourceType.BOOK_CREATION, FrontFeedProducer.class);
configuration.addInstance(ActivitySourceType.USER_PUBLIC, UserPublicFeedProducer.class);
}
}