[jboss-cvs] JBossBlog SVN: r168 - in trunk: src/action/org/jboss/blog/session/feed/mod and 9 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 9 12:51:38 EST 2008


Author: adamw
Date: 2008-01-09 12:51:37 -0500 (Wed, 09 Jan 2008)
New Revision: 168

Added:
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java
   trunk/src/model/org/jboss/blog/model/post/
   trunk/src/model/org/jboss/blog/model/post/PostFilter.java
Modified:
   trunk/resources/WEB-INF/pages.xml
   trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
   trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java
   trunk/src/action/org/jboss/blog/session/scanner/AnnotationScanner.java
   trunk/src/action/org/jboss/blog/session/scanner/Init.java
   trunk/src/action/org/jboss/blog/session/update/UpdateManager.java
   trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java
   trunk/src/test/org/jboss/blog/session/feed/posts/AggregatedFeedPostsTest.java
   trunk/view/manage/aggregated/aggregated_mod.xhtml
Log:


Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/resources/WEB-INF/pages.xml	2008-01-09 17:51:37 UTC (rev 168)
@@ -51,7 +51,7 @@
     </page>
 
     <page view-id="/manage/feed_edit.xhtml">
-        <begin-conversation flush-mode="manual" />
+        <begin-conversation flush-mode="manual" join="true" />
         <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
         <navigation from-action="#{feedMod.saveExisting}">
             <end-conversation />
@@ -76,7 +76,7 @@
     </page>
 
     <page view-id="/manage/remote/remote_edit.xhtml">
-        <begin-conversation flush-mode="manual" />
+        <begin-conversation flush-mode="manual" join="true" />
         <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
         <navigation from-action="#{remoteFeedMod.saveExisting}">
             <end-conversation />
@@ -94,7 +94,7 @@
     </page>
 
     <page view-id="/manage/aggregated/aggregated_edit.xhtml">
-        <begin-conversation flush-mode="manual" />
+        <begin-conversation flush-mode="manual" join="true" />
         <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
         <navigation from-action="#{aggregatedFeedMod.saveExisting}">
             <end-conversation />

Modified: trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -3,10 +3,11 @@
 import org.jboss.blog.model.feed.AggregatedFeed;
 import org.jboss.blog.model.feed.Feed;
 import org.jboss.blog.model.Post;
+import org.jboss.blog.model.post.PostFilter;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.session.feed.InvalidFeedTypeException;
+import org.jboss.blog.session.feed.posts.filter.AndFilter;
 import org.jboss.blog.session.view.LinkServiceBean;
-import org.jboss.blog.tools.GeneralTools;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.faces.FacesMessages;
 import org.jboss.seam.annotations.Create;
@@ -14,12 +15,10 @@
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Scope;
 
-import javax.faces.model.SelectItem;
 import javax.faces.application.FacesMessage;
 import javax.persistence.EntityManager;
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -44,16 +43,21 @@
 
     private AggregatedFeed aggregatedFeed;
 
-    // We have to use SelectItem-s because of a bug with coerce in JSF RI.
-    private List<SelectItem> availableFeeds;
-    private List<String> selectedFeeds;
+    private List<Feed> availableFeeds;
 
+    private Map<Feed, Boolean> selectedFeeds;
+
+    private Map<Feed, List<PostFilter>> selectedFeedsFilters;
+
+    private List<PostFilter> globalFilters;
+
     public AggregatedFeed getAggregatedFeed() {
         if (aggregatedFeed == null) {
             if (feedMod.getFeed() == null) {
                 aggregatedFeed = new AggregatedFeed();
-                aggregatedFeed.setFeeds(new ArrayList<Feed>());
+                aggregatedFeed.setFeeds(new HashMap<Feed, PostFilter>());
                 aggregatedFeed.setPosts(new ArrayList<Post>());
+                aggregatedFeed.setGlobalFilter(new AndFilter());
 
                 feedMod.initNewFeed(aggregatedFeed);
                 aggregatedFeed.setLink(linkService.generateFeedPageLink(aggregatedFeed));
@@ -69,40 +73,89 @@
         return aggregatedFeed;
     }
 
+    private boolean containsFeed(Feed containing, Feed checked) {
+        if (checked.equals(containing)) {
+            return true;
+        }
+
+        if (containing instanceof AggregatedFeed) {
+            AggregatedFeed aggChecked = (AggregatedFeed) containing;
+            for (Feed newContaining : aggChecked.getFeeds().keySet()) {
+                if (containsFeed(newContaining, checked)) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    private void fillPostFilterList(List<PostFilter> toFill, PostFilter source) {
+        if (source instanceof AndFilter) {
+            AndFilter andFilter = (AndFilter) source;
+            for (PostFilter filter : andFilter.getFilters()) {
+                toFill.add(filter);
+            }
+        }
+    }
+
     @Create
     public void populateLists() {
-        availableFeeds = new ArrayList<SelectItem>();
-        for (Feed feed : feedsService.getAllFeeds()) {
-            if (!GeneralTools.objectsEquals(getAggregatedFeed().getName(), feed.getName())) {
-                availableFeeds.add(new SelectItem(feed.getName()));
+        // Populating available feeds
+        availableFeeds = feedsService.getAllFeeds();
+        for (Iterator<Feed> iter = availableFeeds.iterator(); iter.hasNext();) {
+            if (containsFeed(iter.next(), getAggregatedFeed())) {
+                iter.remove();
             }
         }
+        
+        // Populating individual filters
+        selectedFeedsFilters = new HashMap<Feed, List<PostFilter>>();
+        Map<Feed, PostFilter> realFeedsFilters = getAggregatedFeed().getFeeds();
+        for (Feed feed : availableFeeds) {
+            selectedFeedsFilters.put(feed, new ArrayList<PostFilter>());
 
-        selectedFeeds = new ArrayList<String>();
-        for (Feed feed : getAggregatedFeed().getFeeds()) {
-            selectedFeeds.add(feed.getName());
+            if (realFeedsFilters.containsKey(feed)) {
+                fillPostFilterList(selectedFeedsFilters.get(feed), realFeedsFilters.get(feed));
+            }
         }
+
+        // Populating selected feeds
+        selectedFeeds = new HashMap<Feed, Boolean>();
+        for (Feed feed : availableFeeds) {
+            selectedFeeds.put(feed, realFeedsFilters.containsKey(feed));
+        }
+
+        // Populating global filters
+        globalFilters = new ArrayList<PostFilter>();
+        fillPostFilterList(globalFilters, getAggregatedFeed().getGlobalFilter());
     }
 
-    public List<SelectItem> getAvailableFeeds() {
+    public List<Feed> getAvailableFeeds() {
         return availableFeeds;
     }
 
-    public List<String> getSelectedFeeds() {
+    public Map<Feed, Boolean> getSelectedFeeds() {
         return selectedFeeds;
     }
 
-    public void setSelectedFeeds(List<String> selectedFeeds) {
+    public void setSelectedFeeds(Map<Feed, Boolean> selectedFeeds) {
         this.selectedFeeds = selectedFeeds;
     }
 
     private void save() {
-        List<Feed> currentAggregatedFeeds = getAggregatedFeed().getFeeds();
+        // Saving feeds and filters
+        Map<Feed, PostFilter> currentAggregatedFeeds = getAggregatedFeed().getFeeds();
         currentAggregatedFeeds.clear();
 
-        for (String si : getSelectedFeeds()) {
-            currentAggregatedFeeds.add(feedsService.getFeed(si));
+        for (Feed feed : selectedFeeds.keySet()) {
+            if (selectedFeeds.get(feed)) {
+                currentAggregatedFeeds.put(feed, new AndFilter(selectedFeedsFilters.get(feed)));
+            }
         }
+
+        // Saving global filters
+        getAggregatedFeed().setGlobalFilter(new AndFilter(globalFilters));
     }
 
     public void saveNew() {

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -5,14 +5,13 @@
 import org.jboss.blog.model.Post;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.tools.GeneralTools;
+import org.jboss.blog.model.post.PostFilter;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Scope;
 
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
+import java.util.*;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -22,7 +21,15 @@
 public class AggregatedFeedPosts {
     @In
     private FeedsService feedsService;
-    
+
+    private void filterPostList(List<Post> posts, PostFilter filter) {
+        for (Iterator<Post> iter = posts.iterator(); iter.hasNext();) {
+            if (!filter.filter(iter.next())) {
+                iter.remove();
+            }
+        }
+    }
+
     @SuppressWarnings("unchecked")
     public List<Post> getPosts(AggregatedFeed aggregatedFeed, int from, int to) {
         /*return entityManager.createQuery(
@@ -32,8 +39,11 @@
                         "order by post.published desc, post.link")
                 .setParameter(1, feed).setMaxResults(to-from).setFirstResult(from).getResultList();*/
 
+        Map<Feed, PostFilter> feedsAndFilters = aggregatedFeed.getFeeds();
+        PostFilter globalFilter = aggregatedFeed.getGlobalFilter(); 
+
         // Initial list of aggregated feeds.
-        List<Feed> availableFeeds = aggregatedFeed.getFeeds();
+        Set<Feed> availableFeeds = feedsAndFilters.keySet();
 
         // Generating the list of posts.
         List<Post> posts = new ArrayList<Post>();
@@ -44,22 +54,22 @@
 
         do {
             // A list of feeds from which we may later read more posts, if necessary.
-            List<Feed> newAvailableFeeds = new ArrayList<Feed>();
+            Set<Feed> newAvailableFeeds = new HashSet<Feed>();
 
             for (Feed feed : availableFeeds) {
                 List<Post> feedPosts = feedsService.getPosts(feed, feedPostsFrom, feedPostsTo);
 
                 // Checking if this feed has any more posts; if so, remembering it so it can be checked for more posts,
                 // if needed.
-                if (feedPosts.size() == from-to) {
+                if (feedPosts.size() == feedPostsTo-feedPostsFrom) {
                     newAvailableFeeds.add(feed);
                 }
 
                 // Apply the local filters
-                // TODO
+                filterPostList(feedPosts, feedsAndFilters.get(feed));
 
                 // Apply the global filters
-                // TODO
+                filterPostList(feedPosts, globalFilter);
 
                 posts.addAll(feedPosts);
             }

Added: trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -0,0 +1,42 @@
+package org.jboss.blog.session.feed.posts.filter;
+
+import org.jboss.blog.model.Post;
+import org.jboss.blog.model.post.PostFilter;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class AndFilter implements PostFilter {
+    private static final long serialVersionUID = 6716831026867502343L;
+
+    private List<PostFilter> filters;
+
+    public AndFilter() {
+        filters = new ArrayList<PostFilter>();
+    }
+
+    public AndFilter(List<PostFilter> filters) {
+        this.filters = filters;
+    }
+
+    public List<PostFilter> getFilters() {
+        return filters;
+    }
+
+    public void setFilters(List<PostFilter> filters) {
+        this.filters = filters;
+    }
+
+    public boolean filter(Post post) {
+        for (PostFilter filter : filters) {
+            if (!filter.filter(post)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}

Added: trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -0,0 +1,23 @@
+package org.jboss.blog.session.feed.posts.filter;
+
+import org.jboss.blog.model.Post;
+import org.jboss.blog.model.post.PostFilter;
+
+import java.util.regex.Pattern;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class AuthorRegexpFilter implements PostFilter {
+    private static final long serialVersionUID = 2015864901762113142L;
+    
+    private Pattern pattern;
+
+    public AuthorRegexpFilter(String regexp) {
+        pattern = Pattern.compile(regexp);
+    }
+
+    public boolean filter(Post post) {
+        return pattern.matcher(post.getAuthor()).matches();
+    }
+}

Added: trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -0,0 +1,15 @@
+package org.jboss.blog.session.feed.posts.filter;
+
+import org.jboss.blog.model.Post;
+import org.jboss.blog.model.post.PostFilter;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class NotPodcastFilter implements PostFilter {
+    private static final long serialVersionUID = 3962316121420952911L;
+
+    public boolean filter(Post post) {
+        return post.getEnclosures() == null || post.getEnclosures().size() == 0;
+    }
+}

Added: trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -0,0 +1,15 @@
+package org.jboss.blog.session.feed.posts.filter;
+
+import org.jboss.blog.model.Post;
+import org.jboss.blog.model.post.PostFilter;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class PodcastFilter implements PostFilter {
+    private static final long serialVersionUID = -1115632975507749056L;
+
+    public boolean filter(Post post) {
+        return post.getEnclosures() != null && post.getEnclosures().size() != 0;
+    }
+}

Added: trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -0,0 +1,15 @@
+package org.jboss.blog.session.feed.posts.filter;
+
+import org.jboss.blog.model.Post;
+import org.jboss.blog.model.post.PostFilter;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class TotalFilter implements PostFilter {
+    private static final long serialVersionUID = -8839681871861904116L;
+
+    public boolean filter(Post post) {
+        return true;
+    }
+}

Modified: trunk/src/action/org/jboss/blog/session/scanner/AnnotationScanner.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/scanner/AnnotationScanner.java	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/src/action/org/jboss/blog/session/scanner/AnnotationScanner.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -33,8 +33,6 @@
     public AnnotationScanner(ClassLoader classLoader, Map<Class<? extends Annotation>, ClassHandler> handlers) {
         this.classLoader = classLoader;
         this.handlers = handlers;
-
-
     }
 
     private void addParentURLsOfResource(Set<String> urlPaths, String resourceName) throws IOException {

Modified: trunk/src/action/org/jboss/blog/session/scanner/Init.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/scanner/Init.java	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/src/action/org/jboss/blog/session/scanner/Init.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -24,10 +24,10 @@
 
     @Observer("org.jboss.seam.postInitialization")
     public void scanForBlogAnnotations() {
-        Map<Class<? extends Annotation>, ClassHandler> handlers =
-                new HashMap<Class<? extends Annotation>, ClassHandler>();
+        //Map<Class<? extends Annotation>, ClassHandler> handlers =
+        //        new HashMap<Class<? extends Annotation>, ClassHandler>();
         
-        handlers.put(FeedType.class, feedTypes);
+        //handlers.put(FeedType.class, feedTypes);
 
         // TODO
         //new AnnotationScanner(Thread.currentThread().getContextClassLoader(), handlers).scan();

Modified: trunk/src/action/org/jboss/blog/session/update/UpdateManager.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/update/UpdateManager.java	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/src/action/org/jboss/blog/session/update/UpdateManager.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -16,6 +16,7 @@
 
     @Observer("org.jboss.blog.postBlogInit")
     public void register() {
-        updateHandler.update(new Date(), 60000 * 15);
+        //TODO
+        // updateHandler.update(new Date(), 60000 * 15);
     }
 }

Modified: trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -1,22 +1,40 @@
 package org.jboss.blog.model.feed;
 
+import org.jboss.blog.model.post.PostFilter;
+import org.hibernate.validator.NotNull;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.MapKeyManyToMany;
+
 import javax.persistence.Entity;
-import javax.persistence.ManyToMany;
-import java.util.List;
+import javax.persistence.Basic;
+import java.util.Map;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Entity
 public class AggregatedFeed extends Feed {
-    @ManyToMany
-    private List<Feed> feeds;
+    @CollectionOfElements
+    @MapKeyManyToMany
+    private Map<Feed, PostFilter> feeds;
 
-    public List<Feed> getFeeds() {
+    @NotNull
+    @Basic
+    private PostFilter globalFilter;
+
+    public Map<Feed, PostFilter> getFeeds() {
         return feeds;
     }
 
-    public void setFeeds(List<Feed> feeds) {
+    public void setFeeds(Map<Feed, PostFilter> feeds) {
         this.feeds = feeds;
     }
+
+    public PostFilter getGlobalFilter() {
+        return globalFilter;
+    }
+
+    public void setGlobalFilter(PostFilter globalFilter) {
+        this.globalFilter = globalFilter;
+    }
 }

Added: trunk/src/model/org/jboss/blog/model/post/PostFilter.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/post/PostFilter.java	                        (rev 0)
+++ trunk/src/model/org/jboss/blog/model/post/PostFilter.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -0,0 +1,12 @@
+package org.jboss.blog.model.post;
+
+import org.jboss.blog.model.Post;
+
+import java.io.Serializable;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface PostFilter extends Serializable {
+    public boolean filter(Post post);
+}

Modified: trunk/src/test/org/jboss/blog/session/feed/posts/AggregatedFeedPostsTest.java
===================================================================
--- trunk/src/test/org/jboss/blog/session/feed/posts/AggregatedFeedPostsTest.java	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/src/test/org/jboss/blog/session/feed/posts/AggregatedFeedPostsTest.java	2008-01-09 17:51:37 UTC (rev 168)
@@ -7,8 +7,10 @@
 import org.jboss.blog.model.feed.AggregatedFeed;
 import org.jboss.blog.model.feed.Feed;
 import org.jboss.blog.model.Post;
+import org.jboss.blog.model.post.PostFilter;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.tools.TestTools;
+import org.jboss.blog.session.feed.posts.filter.TotalFilter;
 
 import java.util.*;
 
@@ -29,6 +31,7 @@
     private List<Post> list_4_posts;
 
     private AggregatedFeed aggFeed1;
+    private AggregatedFeed aggFeed2;
 
     private FeedsService mockFeedsService;
     private AggregatedFeedPosts aggFeedPosts;
@@ -41,11 +44,11 @@
 
     @BeforeMethod
     public void setupFeeds() {
-        feed_0_posts = new Feed();
-        feed_1_posts = new Feed();
-        feed_2_posts = new Feed();
-        feed_3_posts = new Feed();
-        feed_4_posts = new Feed();
+        feed_0_posts = new Feed(); feed_0_posts.setId(0);
+        feed_1_posts = new Feed(); feed_1_posts.setId(1);
+        feed_2_posts = new Feed(); feed_2_posts.setId(2);
+        feed_3_posts = new Feed(); feed_3_posts.setId(3);
+        feed_4_posts = new Feed(); feed_4_posts.setId(4);
 
         list_0_posts = new ArrayList<Post>();
         list_1_posts = new ArrayList<Post>();
@@ -60,7 +63,23 @@
         addPosts(list_4_posts, 4);
 
         aggFeed1 = new AggregatedFeed();
-        aggFeed1.setFeeds(Arrays.asList(feed_0_posts, feed_1_posts, feed_2_posts, feed_3_posts, feed_4_posts));
+        Map<Feed, PostFilter> feedsFilters1 = new HashMap<Feed, PostFilter>();
+        feedsFilters1.put(feed_0_posts, new TotalFilter());
+        feedsFilters1.put(feed_1_posts, new TotalFilter());
+        feedsFilters1.put(feed_2_posts, new TotalFilter());
+        feedsFilters1.put(feed_3_posts, new TotalFilter());
+        feedsFilters1.put(feed_4_posts, new TotalFilter());
+        aggFeed1.setFeeds(feedsFilters1);
+        aggFeed1.setGlobalFilter(new TotalFilter());
+
+        aggFeed2 = new AggregatedFeed();
+        aggFeed2.setFeeds(feedsFilters1);
+        aggFeed2.setGlobalFilter(new PostFilter() {
+            private static final long serialVersionUID = 8320081945645277412L;
+            public boolean filter(Post post) {
+                return false;
+            }
+        });
     }
 
     @BeforeMethod
@@ -74,11 +93,11 @@
     @Test
     public void testGetLessThanAvailable() {
         // Setup
-        expect(mockFeedsService.getPosts(feed_0_posts, 0, 2)).andReturn(list_0_posts);
-        expect(mockFeedsService.getPosts(feed_1_posts, 0, 2)).andReturn(list_1_posts);
-        expect(mockFeedsService.getPosts(feed_2_posts, 0, 2)).andReturn(list_2_posts);
-        expect(mockFeedsService.getPosts(feed_3_posts, 0, 2)).andReturn(list_3_posts);
-        expect(mockFeedsService.getPosts(feed_4_posts, 0, 2)).andReturn(list_4_posts);
+        expect(mockFeedsService.getPosts(feed_0_posts, 0, 2)).andReturn(new ArrayList<Post>(list_0_posts));
+        expect(mockFeedsService.getPosts(feed_1_posts, 0, 2)).andReturn(new ArrayList<Post>(list_1_posts));
+        expect(mockFeedsService.getPosts(feed_2_posts, 0, 2)).andReturn(new ArrayList<Post>(list_2_posts));
+        expect(mockFeedsService.getPosts(feed_3_posts, 0, 2)).andReturn(new ArrayList<Post>(list_2_posts));
+        expect(mockFeedsService.getPosts(feed_4_posts, 0, 2)).andReturn(new ArrayList<Post>(list_2_posts));
 
         // Test
         replay(mockFeedsService);
@@ -92,11 +111,11 @@
     @Test
     public void testGetExactlyAvailable() {
         // Setup
-        expect(mockFeedsService.getPosts(feed_0_posts, 0, 10)).andReturn(list_0_posts);
-        expect(mockFeedsService.getPosts(feed_1_posts, 0, 10)).andReturn(list_1_posts);
-        expect(mockFeedsService.getPosts(feed_2_posts, 0, 10)).andReturn(list_2_posts);
-        expect(mockFeedsService.getPosts(feed_3_posts, 0, 10)).andReturn(list_3_posts);
-        expect(mockFeedsService.getPosts(feed_4_posts, 0, 10)).andReturn(list_4_posts);
+        expect(mockFeedsService.getPosts(feed_0_posts, 0, 10)).andReturn(new ArrayList<Post>(list_0_posts));
+        expect(mockFeedsService.getPosts(feed_1_posts, 0, 10)).andReturn(new ArrayList<Post>(list_1_posts));
+        expect(mockFeedsService.getPosts(feed_2_posts, 0, 10)).andReturn(new ArrayList<Post>(list_2_posts));
+        expect(mockFeedsService.getPosts(feed_3_posts, 0, 10)).andReturn(new ArrayList<Post>(list_3_posts));
+        expect(mockFeedsService.getPosts(feed_4_posts, 0, 10)).andReturn(new ArrayList<Post>(list_4_posts));
 
         // Test
         replay(mockFeedsService);
@@ -106,4 +125,28 @@
         verify(mockFeedsService);
         assert posts.size() == 10;
     }
+
+    @Test
+    public void testGetMoreThanAvailable() {
+        // Setup
+        expect(mockFeedsService.getPosts(feed_0_posts, 0, 2)).andReturn(new ArrayList<Post>(list_0_posts));
+        expect(mockFeedsService.getPosts(feed_1_posts, 0, 2)).andReturn(new ArrayList<Post>(list_1_posts));
+        expect(mockFeedsService.getPosts(feed_2_posts, 0, 2)).andReturn(new ArrayList<Post>(list_2_posts));
+        expect(mockFeedsService.getPosts(feed_3_posts, 0, 2)).andReturn(new ArrayList<Post>(list_2_posts));
+        expect(mockFeedsService.getPosts(feed_4_posts, 0, 2)).andReturn(new ArrayList<Post>(list_2_posts));
+
+        expect(mockFeedsService.getPosts(feed_2_posts, 2, 4)).andReturn(new ArrayList<Post>(list_0_posts));
+        expect(mockFeedsService.getPosts(feed_3_posts, 2, 4)).andReturn(new ArrayList<Post>(list_1_posts));
+        expect(mockFeedsService.getPosts(feed_4_posts, 2, 4)).andReturn(new ArrayList<Post>(list_2_posts));
+
+        expect(mockFeedsService.getPosts(feed_4_posts, 4, 6)).andReturn(new ArrayList<Post>(list_0_posts));
+
+        // Test
+        replay(mockFeedsService);
+        List<Post> posts = aggFeedPosts.getPosts(aggFeed2, 0, 2);
+
+        // Check
+        verify(mockFeedsService);
+        assert posts.size() == 0;
+    }
 }

Modified: trunk/view/manage/aggregated/aggregated_mod.xhtml
===================================================================
--- trunk/view/manage/aggregated/aggregated_mod.xhtml	2008-01-09 12:38:31 UTC (rev 167)
+++ trunk/view/manage/aggregated/aggregated_mod.xhtml	2008-01-09 17:51:37 UTC (rev 168)
@@ -12,9 +12,17 @@
             <h:outputLabel>Please select feeds to include:</h:outputLabel>
 
             <h:panelGroup>
-                <h:selectManyCheckbox value="#{aggregatedFeedMod.selectedFeeds}" layout="pageDirection">
-                    <f:selectItems value="#{aggregatedFeedMod.availableFeeds}" />
-                </h:selectManyCheckbox>
+                <h:dataTable value="#{aggregatedFeedMod.availableFeeds}" var="feed">
+                    <h:column>
+                        <h:selectBooleanCheckbox value="#{aggregatedFeedMod.selectedFeeds[feed]}" />
+                        #{feed.name}
+                    </h:column>
+                    <h:column>
+                        <h:panelGroup rendered="">
+
+                        </h:panelGroup>
+                    </h:column>
+                </h:dataTable>
             </h:panelGroup>
 
             <h:panelGroup id="proceed">




More information about the jboss-cvs-commits mailing list