[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