SyndRetrievalService.java

package org.ferris.resiste.console.rome;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Priority;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import static org.ferris.resiste.console.rome.SyndRetrievalEvent.RETRIEVE;
import org.ferris.resiste.console.rss.RssFeed;
import org.ferris.resiste.console.rss.RssFeedFactory;
import org.ferris.resiste.console.rss.RssUrl;
import org.ferris.resiste.console.rss.RssUrlService;
import org.slf4j.Logger;

/**
 *
 * @author Michael Remijan mjremijan@yahoo.com @mjremijan
 */
@ApplicationScoped
public class SyndRetrievalService {

    @Inject
    protected Logger log;

    @Inject
    protected RssUrlService service;

    @Inject
    protected RssFeedFactory factory;


    protected void observeRetrieve(
        @Observes @Priority(RETRIEVE) SyndRetrievalEvent evnt
    ) {
        log.info(String.format("Retrieve all of the user's feeds %s", evnt));

        List<RssUrl> userFeeds
            = service.findAll();

        List<RssFeed> feeds = new ArrayList<>(userFeeds.size());
        userFeeds.forEach(f -> {
            try {
                feeds.add(
                    factory.build(f)
                );
            } catch (Exception e) {
                evnt.addError(
                    String.format("%s: %s - %s", f.getUrl().toString(), e.getMessage(), Arrays.toString(e.getStackTrace()))
                );
            }
        });

        evnt.setFeeds(feeds);
    }
}