[jboss-cvs] JBossBlog SVN: r181 - in trunk: src/action/org/jboss/blog/session/cache and 18 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 24 16:00:16 EST 2008


Author: adamw
Date: 2008-01-24 16:00:16 -0500 (Thu, 24 Jan 2008)
New Revision: 181

Added:
   trunk/src/model/org/jboss/blog/model/RestrictedCategory.java
   trunk/src/model/org/jboss/blog/model/RestrictedEnclosure.java
   trunk/src/model/org/jboss/blog/model/RestrictedPost.java
   trunk/src/model/org/jboss/blog/model/feed/RestrictedFeed.java
Removed:
   trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetFeedInterceptor.java
   trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetFeedsInterceptor.java
   trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetPostInterceptor.java
   trunk/src/action/org/jboss/blog/session/converter/writeable/
Modified:
   trunk/resources/WEB-INF/pages.xml
   trunk/src/action/org/jboss/blog/session/cache/CacheManager.java
   trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetPostsInterceptor.java
   trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java
   trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
   trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java
   trunk/src/action/org/jboss/blog/session/feed/dao/FeedDao.java
   trunk/src/action/org/jboss/blog/session/feed/dao/RemoteFeedDao.java
   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/feed/posts/DatabaseFeedPosts.java
   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/action/org/jboss/blog/session/feed/type/FeedTypes.java
   trunk/src/action/org/jboss/blog/session/merge/FeedsServicePostsIterator.java
   trunk/src/action/org/jboss/blog/session/merge/ListPostsIterator.java
   trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java
   trunk/src/action/org/jboss/blog/session/merge/PostsIterator.java
   trunk/src/action/org/jboss/blog/session/update/UpdateHandlerImpl.java
   trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java
   trunk/src/action/org/jboss/blog/session/xml/velocity/VelocityXmlService.java
   trunk/src/model/org/jboss/blog/model/Category.java
   trunk/src/model/org/jboss/blog/model/Enclosure.java
   trunk/src/model/org/jboss/blog/model/Post.java
   trunk/src/model/org/jboss/blog/model/feed/Feed.java
   trunk/src/model/org/jboss/blog/model/post/PostFilter.java
   trunk/src/services/org/jboss/blog/service/FeedsService.java
   trunk/src/tools/org/jboss/blog/tools/GeneralTools.java
   trunk/view/home.xhtml
   trunk/view/manage/index.xhtml
Log:


Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/resources/WEB-INF/pages.xml	2008-01-24 21:00:16 UTC (rev 181)
@@ -52,7 +52,7 @@
 
     <page view-id="/manage/feed_edit.xhtml">
         <begin-conversation flush-mode="manual" join="true" />
-        <param name="name" converterId="writeableFeedConverter" value="#{feedMod.feed}" />
+        <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
         <navigation from-action="#{feedMod.saveExisting}">
             <end-conversation />
             <redirect view-id="/manage/index.xhtml" />
@@ -60,7 +60,7 @@
     </page>
 
     <page view-id="/manage/feed_delete.xhtml">
-        <param name="name" converterId="writeableFeedConverter" value="#{feedMod.feed}" />
+        <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
         <navigation from-action="#{feedMod.delete}">
             <redirect view-id="/manage/index.xhtml" />
         </navigation>
@@ -77,7 +77,7 @@
 
     <page view-id="/manage/remote/remote_edit.xhtml">
         <begin-conversation flush-mode="manual" join="true" />
-        <param name="name" converterId="writeableFeedConverter" value="#{feedMod.feed}" />
+        <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
         <navigation from-action="#{remoteFeedMod.saveExisting}">
             <end-conversation />
             <redirect view-id="/manage/index.xhtml" />
@@ -109,7 +109,7 @@
 
     <page view-id="/manage/aggregated/aggregated_edit.xhtml">
         <begin-conversation flush-mode="manual" join="true" />
-        <param name="name" converterId="writeableFeedConverter" value="#{feedMod.feed}" />
+        <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
         <navigation from-action="#{aggregatedFeedMod.saveExisting}">
             <end-conversation />
             <redirect view-id="/manage/index.xhtml" />

Modified: trunk/src/action/org/jboss/blog/session/cache/CacheManager.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/cache/CacheManager.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/cache/CacheManager.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -8,14 +8,15 @@
 import org.jboss.cache.aop.PojoCache;
 import org.jboss.cache.Fqn;
 import org.jboss.cache.CacheException;
-import org.jboss.blog.model.feed.Feed;
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.feed.RestrictedFeed;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.session.xml.content.InMemoryContentResponse;
 
 import java.lang.ref.SoftReference;
 import java.util.List;
 
 /**
+ * TODO: check Soft References
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Name("cacheManager")
@@ -40,113 +41,52 @@
         return reference.get();
     }
 
-    //
-
-    public void evictAll() {
-        try {
-            log.debug("Evicting all feeds from the cache.");
-            pojoCache.remove(BASE_FQN);
-        } catch (CacheException e) {
-            log.error(e);
-        }
+    private void readPost(RestrictedPost post) {
+        post.getFeed();
+        post.getCategories();
+        post.getEnclosures();
     }
 
-    //
-
-    private final static Object ALL_FEEDS = new Object();
-
-    private Fqn getAllFeedsListFqn() {
-        return new Fqn(BASE_FQN, ALL_FEEDS);
-    }
-
-    public void putAllFeedsList(List<Feed> feeds) {
-        try {
-            log.debug("Putting all feeds list into the cache.");
-            pojoCache.put(getAllFeedsListFqn(), CACHE_MAP_KEY, new SoftReference<List<Feed>>(feeds));
-        } catch (CacheException e) {
-            log.error(e);
+    private void readPosts(List<? extends RestrictedPost> posts) {
+        for (RestrictedPost post : posts) {
+            readPost(post);
         }
     }
 
-    public List<Feed> getAllFeedsList() {
-        try {
-            //noinspection unchecked
-            List<Feed> inCache = getFromSoftReference((SoftReference<List<Feed>>) pojoCache.get(getAllFeedsListFqn(),
-                    CACHE_MAP_KEY));
-            log.debug("Getting all feeds list from the cache, result: #0.", inCache);
-            return inCache;
-        } catch (CacheException e) {
-            log.error(e);
-            return null;
-        }
-    }
-
-    public void evictAllFeedsList() {
-        try {
-            log.debug("Evicting all feeds list from the cache.");
-            pojoCache.remove(getAllFeedsListFqn());
-        } catch (CacheException e) {
-            log.error(e);
-        }
-    }
-
     //
 
-    private Fqn getFeedFqn(String feedName) {
-        return new Fqn(BASE_FQN, feedName);
-    }
-
-    public void putFeed(Feed feed) {
+    public void evictAll() {
         try {
-            log.debug("Putting feed '#0' into the cache.", feed.getName());
-            pojoCache.put(getFeedFqn(feed.getName()), CACHE_MAP_KEY, new SoftReference<Feed>(feed));
+            log.debug("Evicting everything from the cache.");
+            pojoCache.remove(BASE_FQN);
         } catch (CacheException e) {
             log.error(e);
         }
     }
 
-    public Feed getFeed(String feedName) {
-        try {
-            //noinspection unchecked
-            Feed inCache = getFromSoftReference((SoftReference<Feed>) pojoCache.get(getFeedFqn(feedName),
-                    CACHE_MAP_KEY));
-            log.debug("Getting feed '#0' from the cache, result: #1.", feedName, inCache);
-            return inCache;
-        } catch (CacheException e) {
-            log.error(e);
-            return null;
-        }
-    }
-
-    public void evictFeed(String feedName) {
-        try {
-            log.debug("Evicting feed '#0' from the cache.", feedName);
-            pojoCache.remove(getFeedFqn(feedName));
-        } catch (CacheException e) {
-            log.error(e);
-        }
-    }
-
     //
 
     private Fqn getFeedPostsFqn(String feedName, int from, int to) {
         return new Fqn(BASE_FQN, feedName, from, to);
     }
 
-    public void putFeedPosts(Feed feed, List<Post> posts, int from, int to) {
+    public void putFeedPosts(RestrictedFeed feed, List<? extends RestrictedPost> posts, int from, int to) {
         try {
+            readPosts(posts);
+            
             log.debug("Putting feed '#0' posts into the cache, from #1 to #2.", feed.getName(), from, to);
             pojoCache.put(getFeedPostsFqn(feed.getName(), from, to), CACHE_MAP_KEY, 
-                    new SoftReference<List<Post>>(posts));
+                    new SoftReference<List<? extends RestrictedPost>>(posts));
         } catch (CacheException e) {
             log.error(e);
         }
     }
 
-    public List<Post> getFeedPosts(String feedName, int from, int to) {
+    public List<? extends RestrictedPost> getFeedPosts(String feedName, int from, int to) {
         try {
             //noinspection unchecked
-            List<Post> inCache = getFromSoftReference(((SoftReference<List<Post>>) pojoCache.get(
+            List<? extends RestrictedPost> inCache =
+                    getFromSoftReference(((SoftReference<List<? extends RestrictedPost>>) pojoCache.get(
                     getFeedPostsFqn(feedName, from, to), CACHE_MAP_KEY)));
             log.debug("Getting feed '#0' posts from the cache, from #1 to #2, result: #3.",
                     feedName, from, to, inCache);
@@ -188,35 +128,4 @@
             return null;
         }
     }
-
-    //
-
-    private final static Object POSTS_INDIVIDUAL = new Object();
-
-    private Fqn getPostFqn(String titleAsId) {
-        return new Fqn(BASE_FQN, POSTS_INDIVIDUAL, titleAsId);
-    }
-
-    public void putPost(Post post) {
-        try {
-            log.debug("Putting post '#0' into the cache.", post.getTitleAsId());
-            pojoCache.put(getPostFqn(post.getTitleAsId()), CACHE_MAP_KEY,
-                    new SoftReference<Post>(post));
-        } catch (CacheException e) {
-            log.error(e);
-        }
-    }
-
-    public Post getPost(String titleAsId) {
-        try {
-            //noinspection unchecked
-            Post inCache = getFromSoftReference(((SoftReference<Post>) pojoCache.get(getPostFqn(titleAsId),
-                    CACHE_MAP_KEY)));
-            log.debug("Getting post '#0' from the cache, result: #1.", titleAsId, inCache);
-            return inCache;
-        } catch (CacheException e) {
-            log.error(e);
-            return null;
-        }
-    }
 }

Deleted: trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetFeedInterceptor.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetFeedInterceptor.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetFeedInterceptor.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,40 +0,0 @@
-package org.jboss.blog.session.cache;
-
-import org.jboss.seam.annotations.intercept.Interceptor;
-import org.jboss.seam.Component;
-import org.jboss.blog.model.feed.Feed;
-
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.InvocationContext;
-
-/**
- * @author <a href="mailto:adam at warski.org">Adam Warski</a>
- */
- at Interceptor(stateless = true)
-public class FeedsServiceGetFeedInterceptor {
-    @AroundInvoke
-    public Object cacheFeed(InvocationContext invocation) throws Exception {
-        CacheManager cacheManager = (CacheManager) Component.getInstance("cacheManager");
-
-        String feedName = (String) invocation.getParameters()[0];
-        Boolean writeable = false;
-        if (invocation.getParameters().length > 1) {
-            writeable = (Boolean) invocation.getParameters()[1];
-        }
-
-        if (writeable) {
-            return invocation.proceed();
-        }
-
-        Feed inCache = cacheManager.getFeed(feedName);
-
-        if (inCache != null) {
-            return inCache;
-        } else {
-            Feed feed = (Feed) invocation.proceed();
-            cacheManager.putFeed(feed);
-
-            return feed;
-        }
-    }
-}
\ No newline at end of file

Deleted: trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetFeedsInterceptor.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetFeedsInterceptor.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetFeedsInterceptor.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,32 +0,0 @@
-package org.jboss.blog.session.cache;
-
-import org.jboss.seam.annotations.intercept.Interceptor;
-import org.jboss.seam.Component;
-import org.jboss.blog.model.feed.Feed;
-
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.InvocationContext;
-import java.util.List;
-
-/**
- * @author <a href="mailto:adam at warski.org">Adam Warski</a>
- */
- at Interceptor(stateless = true)
-public class FeedsServiceGetFeedsInterceptor {
-    @AroundInvoke
-    public Object cacheFeeds(InvocationContext invocation) throws Exception {
-        CacheManager cacheManager = (CacheManager) Component.getInstance("cacheManager");
-
-        List<Feed> inCache = cacheManager.getAllFeedsList();
-
-        if (inCache != null) {
-            return inCache;
-        } else {
-            //noinspection unchecked
-            List<Feed> feeds = (List<Feed>) invocation.proceed();
-            cacheManager.putAllFeedsList(feeds);
-
-            return feeds;
-        }
-    }
-}
\ No newline at end of file

Deleted: trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetPostInterceptor.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetPostInterceptor.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetPostInterceptor.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,40 +0,0 @@
-package org.jboss.blog.session.cache;
-
-import org.jboss.seam.annotations.intercept.Interceptor;
-import org.jboss.seam.Component;
-import org.jboss.blog.model.Post;
-
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.InvocationContext;
-
-/**
- * @author <a href="mailto:adam at warski.org">Adam Warski</a>
- */
- at Interceptor(stateless = true)
-public class FeedsServiceGetPostInterceptor {
-    @AroundInvoke
-    public Object cachePost(InvocationContext invocation) throws Exception {
-        CacheManager cacheManager = (CacheManager) Component.getInstance("cacheManager");
-
-        String titleAsId = (String) invocation.getParameters()[0];
-        Boolean writeable = false;
-        if (invocation.getParameters().length > 1) {
-            writeable = (Boolean) invocation.getParameters()[1];
-        }
-
-        if (writeable) {
-            return invocation.proceed();
-        }
-
-        Post inCache = cacheManager.getPost(titleAsId);
-
-        if (inCache != null) {
-            return inCache;
-        } else {
-            Post post = (Post) invocation.proceed();
-            cacheManager.putPost(post);
-
-            return post;
-        }
-    }
-}
\ No newline at end of file

Modified: trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetPostsInterceptor.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetPostsInterceptor.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/cache/FeedsServiceGetPostsInterceptor.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -3,7 +3,7 @@
 import org.jboss.seam.annotations.intercept.Interceptor;
 import org.jboss.seam.Component;
 import org.jboss.blog.model.feed.Feed;
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 
 import javax.interceptor.AroundInvoke;
 import javax.interceptor.InvocationContext;
@@ -22,13 +22,13 @@
         Integer from = (Integer) invocation.getParameters()[1];
         Integer to = (Integer) invocation.getParameters()[2];
 
-        List<Post> inCache = cacheManager.getFeedPosts(feed.getName(), from, to);
+        List<? extends RestrictedPost> inCache = cacheManager.getFeedPosts(feed.getName(), from, to);
 
         if (inCache != null) {
             return inCache;
         } else {
             //noinspection unchecked
-            List<Post> posts = (List<Post>) invocation.proceed();
+            List<? extends RestrictedPost> posts = (List<? extends RestrictedPost>) invocation.proceed();
             cacheManager.putFeedPosts(feed, posts, from, to);
 
             return posts;

Modified: trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,7 +1,6 @@
 package org.jboss.blog.session.converter;
 
 import org.jboss.blog.model.feed.Feed;
-import org.jboss.blog.service.FeedNotFoundException;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.seam.Component;
 import org.jboss.seam.annotations.Name;
@@ -11,8 +10,6 @@
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceException;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -24,9 +21,6 @@
     @Transactional
     public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
         FeedsService feedsService = (FeedsService) Component.getInstance("feedsService");
-
-        // TODO: entityManager.joinTransaction();
-        // EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");
         
         return feedsService.getFeed(value);
     }

Modified: trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,16 +1,15 @@
 package org.jboss.blog.session.feed;
 
 import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.feed.RestrictedFeed;
 import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.model.Group;
 import org.jboss.blog.service.FeedNotFoundException;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.service.PostNotFoundException;
 import org.jboss.blog.session.feed.type.FeedTypes;
 import org.jboss.blog.session.cache.FeedsServiceGetPostsInterceptor;
-import org.jboss.blog.session.cache.FeedsServiceGetFeedInterceptor;
-import org.jboss.blog.session.cache.FeedsServiceGetPostInterceptor;
-import org.jboss.blog.session.cache.FeedsServiceGetFeedsInterceptor;
 import org.jboss.seam.annotations.AutoCreate;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
@@ -42,25 +41,17 @@
 
     @SuppressWarnings("unchecked")
     public List<Group> getAllGroups() {
-        // TODO: add caching
         return entityManager.createQuery("select group from Group group order by group.name").getResultList();
     }
 
-    @SuppressWarnings("unchecked")
-    @Interceptors(FeedsServiceGetFeedsInterceptor.class)
+    /* TODO: remove @SuppressWarnings("unchecked")
     public List<Feed> getAllFeeds() {
         log.debug("Reading a list of all feeds from the DB.");
         return entityManager.createQuery("select feed from Feed feed order by feed.name").getResultList();
-    }
+    } */
 
-    @Interceptors(FeedsServiceGetPostInterceptor.class)
     public Post getPost(String titleAsId) throws PostNotFoundException {
-        return getPost(titleAsId, false);
-    }
-
-    @Interceptors(FeedsServiceGetPostInterceptor.class)
-    public Post getPost(String titleAsId, boolean writeable) throws PostNotFoundException {
-        log.debug("Reading post '#0' from the DB, writeable: #1.", titleAsId, writeable);
+        log.debug("Reading post '#0' from the DB.", titleAsId);
         try {
             return (Post) entityManager.createQuery("select post from Post post where post.titleAsId = ?1")
                     .setParameter(1, titleAsId).getSingleResult();
@@ -69,14 +60,8 @@
         }
     }
 
-    @Interceptors(FeedsServiceGetFeedInterceptor.class)
     public Feed getFeed(String feedName) throws FeedNotFoundException {
-        return getFeed(feedName, false);
-    }
-
-    @Interceptors(FeedsServiceGetFeedInterceptor.class)
-    public Feed getFeed(String feedName, boolean writeable) throws FeedNotFoundException {
-        log.debug("Reading feed '#0' from the DB, writeable: #1.", feedName, writeable);
+        log.debug("Reading feed '#0' from the DB.", feedName);
         try {
             return (Feed) entityManager.createQuery("select feed from Feed feed where feed.name = ?1")
                     .setParameter(1, feedName).getSingleResult();
@@ -86,7 +71,7 @@
     }
 
     @Interceptors(FeedsServiceGetPostsInterceptor.class)
-    public List<Post> getPosts(Feed feed, int from, int to) {
+    public List<? extends RestrictedPost> getPosts(RestrictedFeed feed, int from, int to) {
         log.debug("Reading feed '#0' posts from the DB, from #1 to #2.", feed.getName(), from, to);
         return feedTypes.getFeedDao(feed).getPosts(from, to);
     }

Modified: trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,9 +1,13 @@
 package org.jboss.blog.session.feed.dao;
 
 import org.jboss.blog.model.feed.AggregatedFeed;
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.Group;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.session.feed.posts.AggregatedFeedPosts;
 import org.jboss.blog.session.feed.type.FeedType;
+import org.jboss.blog.session.feed.type.FeedTypes;
+import org.jboss.blog.tools.GeneralTools;
 import org.jboss.seam.Component;
 
 import java.util.List;
@@ -23,7 +27,7 @@
         this.aggregatedFeed = aggregatedFeed;
     }
 
-    public List<Post> getPosts(int from, int to) {
+    public List<? extends RestrictedPost> getPosts(int from, int to) {
         return ((AggregatedFeedPosts) Component.getInstance("aggregatedFeedPosts")).getPosts(
                 aggregatedFeed, from, to);
     }
@@ -31,4 +35,28 @@
     public void update() {
 
     }
+
+    public boolean linkedTo(Feed feed) {
+        if (GeneralTools.objectsEqual(aggregatedFeed, feed)) {
+            return true;
+        }
+
+        FeedTypes feedTypes = (FeedTypes) Component.getInstance("feedTypes");
+
+        for (Feed containedFeed : aggregatedFeed.getFeeds().keySet()) {
+            if (feedTypes.getFeedDao(containedFeed).linkedTo(feed)) {
+                return true;
+            }
+        }
+
+        for (Group group : aggregatedFeed.getGroups().keySet()) {
+            for (Feed containedFeed : group.getFeeds()) {
+                if (feedTypes.getFeedDao(containedFeed).linkedTo(feed)) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
 }

Modified: trunk/src/action/org/jboss/blog/session/feed/dao/FeedDao.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/FeedDao.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/FeedDao.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,7 @@
 package org.jboss.blog.session.feed.dao;
 
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
+import org.jboss.blog.model.feed.Feed;
 
 import java.util.List;
 
@@ -8,7 +9,9 @@
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 public interface FeedDao {
-    public List<Post> getPosts(int from, int to);
+    public List<? extends RestrictedPost> getPosts(int from, int to);
 
     public void update();
+
+    public boolean linkedTo(Feed feed);
 }

Modified: trunk/src/action/org/jboss/blog/session/feed/dao/RemoteFeedDao.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/RemoteFeedDao.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/RemoteFeedDao.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,10 +1,12 @@
 package org.jboss.blog.session.feed.dao;
 
 import org.jboss.blog.model.feed.RemoteFeed;
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.session.feed.posts.DatabaseFeedPosts;
 import org.jboss.blog.session.feed.type.FeedType;
 import org.jboss.blog.session.feed.update.RemoteFeedUpdate;
+import org.jboss.blog.tools.GeneralTools;
 import org.jboss.seam.Component;
 
 import java.util.List;
@@ -24,7 +26,7 @@
         this.remoteFeed = remoteFeed;
     }
 
-    public List<Post> getPosts(int from, int to) {
+    public List<? extends RestrictedPost> getPosts(int from, int to) {
         return ((DatabaseFeedPosts) Component.getInstance("databaseFeedPosts")).getPosts(
                 remoteFeed, from, to);
     }
@@ -32,4 +34,8 @@
     public void update() {
         ((RemoteFeedUpdate) Component.getInstance("remoteFeedUpdate")).update(remoteFeed);
     }
+
+    public boolean linkedTo(Feed feed) {
+        return GeneralTools.objectsEqual(remoteFeed, feed);
+    }
 }

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-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -7,8 +7,11 @@
 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.dao.FeedDao;
+import org.jboss.blog.session.feed.type.FeedTypes;
 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.*;
@@ -32,13 +35,16 @@
 
     @In
     private FeedsService feedsService;
-    
+
     @In
     private FacesMessages facesMessages;
 
     @In
     private LinkServiceBean linkService;
 
+    @In
+    private FeedTypes feedTypes;
+
     private AggregatedFeed aggregatedFeed;
 
     private List<Feed> availableFeeds;
@@ -78,23 +84,6 @@
         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;
@@ -124,28 +113,35 @@
 
     @Create
     public void populateLists() {
-        // Populating available feeds
-        availableFeeds = feedsService.getAllFeeds();
-        // TODO
-        /*for (Iterator<Feed> iter = availableFeeds.iterator(); iter.hasNext();) {
-            if (containsFeed(iter.next(), getAggregatedFeed())) {
-                iter.remove();
+        // Populating available groups
+        availableGroups = feedsService.getAllGroups();
+        availableFeeds = new ArrayList<Feed>();
+
+        for (Iterator<Group> iter = availableGroups.iterator(); iter.hasNext();) {
+            for (Feed nextFeed : iter.next().getFeeds()) {
+                if (GeneralTools.objectsEqual(nextFeed, getAggregatedFeed())) {
+                    // Allowing aggregating a group, in which this feed is contained.
+                    continue;
+                }
+
+                FeedDao nextFeedDao = feedTypes.getFeedDao(nextFeed);
+
+                if (nextFeedDao.linkedTo(getAggregatedFeed())) {
+                    iter.remove();
+                } else {
+                    availableFeeds.add(nextFeed);
+                }
             }
-        } */
+        }
 
         selectedFeedsFilters = new HashMap<Feed, List<PostFilter>>();
-        Map<Feed, PostFilter> realFeedsFilters = getAggregatedFeed().getFeeds();
         selectedFeeds = new HashMap<Feed, Boolean>();
-        readSelectedEntities(availableFeeds, realFeedsFilters, selectedFeeds, selectedFeedsFilters);
+        readSelectedEntities(availableFeeds, getAggregatedFeed().getFeeds(), selectedFeeds, selectedFeedsFilters);
 
-        // Populating available groups
-        availableGroups = feedsService.getAllGroups();
         selectedGroupsFilters = new HashMap<Group, List<PostFilter>>();
-        Map<Group, PostFilter> realGroupsFilters = getAggregatedFeed().getGroups();
         selectedGroups = new HashMap<Group, Boolean>();
+        readSelectedEntities(availableGroups, getAggregatedFeed().getGroups(), selectedGroups, selectedGroupsFilters);
 
-        readSelectedEntities(availableGroups, realGroupsFilters, selectedGroups, selectedGroupsFilters);
-
         // Populating global filters
         globalFilters = new ArrayList<PostFilter>();
         fillPostFilterList(globalFilters, getAggregatedFeed().getGlobalFilter());

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-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -2,7 +2,7 @@
 
 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.RestrictedPost;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.tools.GeneralTools;
 import org.jboss.blog.model.post.PostFilter;
@@ -22,8 +22,8 @@
     @In
     private FeedsService feedsService;
 
-    private void filterPostList(List<Post> posts, PostFilter filter) {
-        for (Iterator<Post> iter = posts.iterator(); iter.hasNext();) {
+    private void filterPostList(List<? extends RestrictedPost> posts, PostFilter filter) {
+        for (Iterator<? extends RestrictedPost> iter = posts.iterator(); iter.hasNext();) {
             if (!filter.filter(iter.next())) {
                 iter.remove();
             }
@@ -31,7 +31,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public List<Post> getPosts(AggregatedFeed aggregatedFeed, int from, int to) {
+    public List<? extends RestrictedPost> getPosts(AggregatedFeed aggregatedFeed, int from, int to) {
         /*return entityManager.createQuery(
                 "select post from Post post " +
                         "where post.feed in " +
@@ -46,7 +46,7 @@
         Set<Feed> availableFeeds = feedsAndFilters.keySet();
 
         // Generating the list of posts.
-        List<Post> posts = new ArrayList<Post>();
+        List<RestrictedPost> posts = new ArrayList<RestrictedPost>();
 
         // Bounds for the number of posts read from each feed.
         int feedPostsFrom = 0;
@@ -57,7 +57,7 @@
             Set<Feed> newAvailableFeeds = new HashSet<Feed>();
 
             for (Feed feed : availableFeeds) {
-                List<Post> feedPosts = feedsService.getPosts(feed, feedPostsFrom, feedPostsTo);
+                List<? extends RestrictedPost> 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.

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/DatabaseFeedPosts.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/DatabaseFeedPosts.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/DatabaseFeedPosts.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -5,6 +5,7 @@
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.ScopeType;
 import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.model.feed.Feed;
 
 import javax.persistence.EntityManager;
@@ -20,7 +21,7 @@
     private EntityManager entityManager;
 
     @SuppressWarnings("unchecked")
-    public List<Post> getPosts(Feed feed, int from, int to) {
+    public List<? extends RestrictedPost> getPosts(Feed feed, int from, int to) {
         return (List<Post>) entityManager.createQuery(
                 "select post from Post post where post.feed = ?1 order by post.published desc, post.link")
                 .setParameter(1, feed).setMaxResults(to-from).setFirstResult(from).getResultList();

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,6 @@
 package org.jboss.blog.session.feed.posts.filter;
 
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.model.post.PostFilter;
 
 import java.util.List;
@@ -31,7 +31,7 @@
         this.filters = filters;
     }
 
-    public boolean filter(Post post) {
+    public boolean filter(RestrictedPost post) {
         for (PostFilter filter : filters) {
             if (!filter.filter(post)) {
                 return false;

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,7 +1,7 @@
 package org.jboss.blog.session.feed.posts.filter;
 
-import org.jboss.blog.model.Post;
 import org.jboss.blog.model.post.PostFilter;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.tools.validator.Regexp;
 
 import java.util.regex.Pattern;
@@ -28,7 +28,7 @@
         pattern = Pattern.compile(this.regexp);
     }
 
-    public boolean filter(Post post) {
+    public boolean filter(RestrictedPost post) {
         return pattern.matcher(post.getAuthor()).matches();
     }
 

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,6 @@
 package org.jboss.blog.session.feed.posts.filter;
 
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.model.post.PostFilter;
 
 /**
@@ -9,7 +9,7 @@
 public class NotPodcastFilter implements PostFilter {
     private static final long serialVersionUID = 3962316121420952911L;
 
-    public boolean filter(Post post) {
+    public boolean filter(RestrictedPost post) {
         return post.getEnclosures() == null || post.getEnclosures().size() == 0;
     }
 

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,6 @@
 package org.jboss.blog.session.feed.posts.filter;
 
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.model.post.PostFilter;
 
 /**
@@ -9,7 +9,7 @@
 public class PodcastFilter implements PostFilter {
     private static final long serialVersionUID = -1115632975507749056L;
 
-    public boolean filter(Post post) {
+    public boolean filter(RestrictedPost post) {
         return post.getEnclosures() != null && post.getEnclosures().size() != 0;
     }
 

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,6 @@
 package org.jboss.blog.session.feed.posts.filter;
 
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.model.post.PostFilter;
 
 /**
@@ -9,7 +9,7 @@
 public class TotalFilter implements PostFilter {
     private static final long serialVersionUID = -8839681871861904116L;
 
-    public boolean filter(Post post) {
+    public boolean filter(RestrictedPost post) {
         return true;
     }
 

Modified: trunk/src/action/org/jboss/blog/session/feed/type/FeedTypes.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/type/FeedTypes.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/feed/type/FeedTypes.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,7 @@
 package org.jboss.blog.session.feed.type;
 
 import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.feed.RestrictedFeed;
 import org.jboss.blog.session.feed.InvalidFeedTypeException;
 import org.jboss.blog.session.feed.dao.FeedDao;
 import org.jboss.blog.session.scanner.ClassHandler;
@@ -25,12 +26,13 @@
     @Logger
     private Log log;
 
-    private Map<Class<? extends Feed>, FeedType> feedTypes;
-    private Map<Class<? extends Feed>, Constructor<? extends FeedDao>> feedDaos;
+    private Map<Class<? extends RestrictedFeed>, FeedType> feedTypes;
+    private Map<Class<? extends RestrictedFeed>, Constructor<? extends FeedDao>> feedDaos;
 
     public FeedTypes() {
-        feedTypes = KeySafeMap.wrap(new ConcurrentHashMap<Class<? extends Feed>, FeedType>());
-        feedDaos = KeySafeMap.wrap(new ConcurrentHashMap<Class<? extends Feed>, Constructor<? extends FeedDao>>());
+        feedTypes = KeySafeMap.wrap(new ConcurrentHashMap<Class<? extends RestrictedFeed>, FeedType>());
+        feedDaos = KeySafeMap.wrap(new ConcurrentHashMap<Class<? extends RestrictedFeed>,
+                Constructor<? extends FeedDao>>());
     }
 
     public FeedType[] getAllTypes() {
@@ -45,7 +47,7 @@
         }
     }
 
-    public FeedDao getFeedDao(Feed feed) {
+    public FeedDao getFeedDao(RestrictedFeed feed) {
         try {
             return feedDaos.get(feed.getClass()).newInstance(feed);
         } catch (InstantiationException e) {

Modified: trunk/src/action/org/jboss/blog/session/merge/FeedsServicePostsIterator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/merge/FeedsServicePostsIterator.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/merge/FeedsServicePostsIterator.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,7 +1,7 @@
 package org.jboss.blog.session.merge;
 
 import org.jboss.blog.model.feed.Feed;
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.service.FeedsService;
 
 import java.util.Iterator;
@@ -10,15 +10,15 @@
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
-public class FeedsServicePostsIterator implements PostsIterator {
+public class FeedsServicePostsIterator implements PostsIterator<RestrictedPost> {
     private FeedsService feedsService;
     private Feed feed;
 
     private int chunkSize;
     private int nextFrom;
-    private Post current;
+    private RestrictedPost current;
 
-    private Iterator<Post> iterator;
+    private Iterator<? extends RestrictedPost> iterator;
     private int lastChunkSize;
 
     public FeedsServicePostsIterator(FeedsService feedsService, Feed feed, int chunkSize) {
@@ -38,13 +38,13 @@
     }
 
     private void readNextChunk() {
-        List<Post> posts = feedsService.getPosts(feed, nextFrom, nextFrom+chunkSize);
+        List<? extends RestrictedPost> posts = feedsService.getPosts(feed, nextFrom, nextFrom+chunkSize);
         iterator = posts.iterator();
         lastChunkSize = posts.size();
         nextFrom += chunkSize;
     }
 
-    public Post getCurrent() {
+    public RestrictedPost getCurrent() {
         return current;
     }
 
@@ -52,7 +52,7 @@
         return current == null;
     }
 
-    public Post next() {
+    public RestrictedPost next() {
         if (iterator.hasNext()) {
             current = iterator.next();
         } else {

Modified: trunk/src/action/org/jboss/blog/session/merge/ListPostsIterator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/merge/ListPostsIterator.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/merge/ListPostsIterator.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,6 @@
 package org.jboss.blog.session.merge;
 
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 
 import java.util.Iterator;
 import java.util.List;
@@ -8,11 +8,11 @@
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
-public class ListPostsIterator implements PostsIterator {
-    private Iterator<Post> iterator;
-    private Post current;
+public class ListPostsIterator<T extends RestrictedPost> implements PostsIterator<T> {
+    private Iterator<? extends T> iterator;
+    private T current;
 
-    public ListPostsIterator(List<Post> posts) {
+    public ListPostsIterator(List<? extends T> posts) {
         iterator = posts.iterator();
 
         if (iterator.hasNext()) {
@@ -22,7 +22,7 @@
         }
     }
 
-    public Post getCurrent() {
+    public T getCurrent() {
         return current;
     }
 
@@ -30,7 +30,7 @@
         return current == null;
     }
 
-    public Post next() {
+    public T next() {
         if (iterator.hasNext()) {
             current = iterator.next();
         } else {

Modified: trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -3,6 +3,7 @@
 import org.jboss.blog.model.feed.Feed;
 import org.jboss.blog.model.Post;
 import org.jboss.blog.model.Enclosure;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.tools.GeneralTools;
 import org.jboss.blog.tools.StringTools;
@@ -48,6 +49,8 @@
             entityManager.persist(enc);
         }
 
+        entityManager.flush();
+
         Events.instance().raiseEvent("org.jboss.blog.post.added", post.getTitleAsId(), feed.getName());
     }
 
@@ -72,41 +75,43 @@
      * @param mergeTo Post to which to merge the changes.
      * @param mergeFrom Post from which to merge the changes.
      */
-    private void mergePosts(Feed feed, Post mergeTo, Post mergeFrom) {
+    private void mergePosts(Feed feed, Post mergeTo, RestrictedPost mergeFrom) {
         boolean changes = false;
 
-        if (!GeneralTools.objectsEquals(mergeTo.getAuthor(), mergeFrom.getAuthor())) {
+        if (!GeneralTools.objectsEqual(mergeTo.getAuthor(), mergeFrom.getAuthor())) {
             mergeTo.setAuthor(mergeFrom.getAuthor());
             changes = true;
         }
 
-        if (!GeneralTools.objectsEquals(mergeTo.getContent(), mergeFrom.getContent())) {
+        if (!GeneralTools.objectsEqual(mergeTo.getContent(), mergeFrom.getContent())) {
             mergeTo.setContent(mergeFrom.getContent());
             changes = true;
         }
 
-        if (!GeneralTools.objectsEquals(mergeTo.getLink(), mergeFrom.getLink())) {
+        if (!GeneralTools.objectsEqual(mergeTo.getLink(), mergeFrom.getLink())) {
             mergeTo.setLink(mergeFrom.getLink());
             changes = true;
         }
 
-        if (!GeneralTools.objectsEquals(mergeTo.getModified(), mergeFrom.getModified())) {
+        if (!GeneralTools.objectsEqual(mergeTo.getModified(), mergeFrom.getModified())) {
             mergeTo.setModified(mergeFrom.getModified());
             changes = true;
         }
 
-        if (!GeneralTools.objectsEquals(mergeTo.getTitle(), mergeFrom.getTitle())) {
+        if (!GeneralTools.objectsEqual(mergeTo.getTitle(), mergeFrom.getTitle())) {
             mergeTo.setTitle(mergeFrom.getTitle());
             changes = true;
         }
 
         if (changes) {
+            entityManager.flush();
+
             Events.instance().raiseEvent("org.jboss.blog.post.updated", mergeTo.getTitleAsId(), feed.getName());
         }
     }
 
     public void merge(Feed feed, List<Post> posts) {
-        ListPostsIterator mergeFrom = new ListPostsIterator(posts);
+        ListPostsIterator<Post> mergeFrom = new ListPostsIterator<Post>(posts);
         FeedsServicePostsIterator mergeTo = new FeedsServicePostsIterator(feedsService, feed, posts.size()+1);
 
         while (!mergeFrom.finished()) {
@@ -126,7 +131,7 @@
                     savePost(feed, mergeFrom.getCurrent());
                     mergeFrom.next();
                 } else if (compare == 0) {
-                    mergePosts(feed, mergeTo.getCurrent(), mergeFrom.getCurrent());
+                    mergePosts(feed, feedsService.getPost(mergeTo.getCurrent().getTitleAsId()), mergeFrom.getCurrent());
                     mergeFrom.next();
                     mergeTo.next();
                 } else {

Modified: trunk/src/action/org/jboss/blog/session/merge/PostsIterator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/merge/PostsIterator.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/merge/PostsIterator.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,12 +1,12 @@
 package org.jboss.blog.session.merge;
 
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
-public interface PostsIterator {
-    public Post getCurrent();
-    public Post next();
+public interface PostsIterator<T extends RestrictedPost> {
+    public T getCurrent();
+    public T next();
     public boolean finished();
 }

Modified: trunk/src/action/org/jboss/blog/session/update/UpdateHandlerImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/update/UpdateHandlerImpl.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/update/UpdateHandlerImpl.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,7 @@
 package org.jboss.blog.session.update;
 
 import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.Group;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.session.feed.type.FeedTypes;
 import org.jboss.seam.annotations.AutoCreate;
@@ -25,9 +26,11 @@
     private FeedTypes feedTypes;
 
     public void update(Date expiration, long interval) {
-        for (Feed feed : feedsService.getAllFeeds()) {
-            feedTypes.getFeedDao(feed).update();
-        } 
+        for (Group group : feedsService.getAllGroups()) {
+            for (Feed feed : group.getFeeds()) {
+                feedTypes.getFeedDao(feed).update();
+            }
+        }
     }
 
     @Remove

Modified: trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -2,6 +2,8 @@
 
 import org.jboss.blog.model.feed.Feed;
 import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
+import org.jboss.blog.model.Group;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.tools.StringTools;
 import org.jboss.seam.ScopeType;
@@ -24,7 +26,7 @@
     private Feed feed;
     private int from;
 
-    private List<Post> posts;
+    private List<? extends RestrictedPost> posts;
 
     public Feed getFeed() {
         return feed;
@@ -42,7 +44,7 @@
         this.from = from;
     }
 
-    public List<Post> getPosts() {
+    public List<? extends RestrictedPost> getPosts() {
         if (posts == null) {
             posts = feedsService.getPosts(feed, from, from+feed.getMaxPostsOnPage()+1);
         }
@@ -72,9 +74,11 @@
      * @Deprecated
      */
     public void fixHtml() {
-        for (Feed feed : feedsService.getAllFeeds()) {
-            for (Post post : feed.getPosts()) {
-                post.setContent(StringTools.fixHtml(post.getContent()));
+        for (Group group : feedsService.getAllGroups()) {
+            for (Feed feed : group.getFeeds()) {
+                for (Post post : feed.getPosts()) {
+                    post.setContent(StringTools.fixHtml(post.getContent()));
+                }
             }
         }
     }

Modified: trunk/src/action/org/jboss/blog/session/xml/velocity/VelocityXmlService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/xml/velocity/VelocityXmlService.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/action/org/jboss/blog/session/xml/velocity/VelocityXmlService.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -4,8 +4,8 @@
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 import org.jboss.blog.model.feed.Feed;
-import org.jboss.blog.model.Post;
 import org.jboss.blog.model.XmlType;
+import org.jboss.blog.model.RestrictedPost;
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.session.xml.XmlService;
 import org.jboss.blog.session.xml.content.ContentResponse;
@@ -73,13 +73,13 @@
             throw new InvalidTemplateTypeException(e);
         }
 
-        Feed feed = feedsService.getFeed(feedName, true);
+        Feed feed = feedsService.getFeed(feedName);
 
         if (feed.getTemplates().get(xmlType) == null) {
             throw new InvalidTemplateTypeException();
         }
 
-        List<Post> posts = feedsService.getPosts(feed, 0, feed.getMaxPostsInFeed());
+        List<? extends RestrictedPost> posts = feedsService.getPosts(feed, 0, feed.getMaxPostsInFeed());
 
         response.setContentType(xmlType.contentType());
         response.setCharacterEncoding("utf-8");

Modified: trunk/src/model/org/jboss/blog/model/Category.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Category.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/model/org/jboss/blog/model/Category.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -11,7 +11,7 @@
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Entity
-public class Category {
+public class Category implements RestrictedCategory {
     @Id
     @GeneratedValue
     @Column(updatable = false)

Modified: trunk/src/model/org/jboss/blog/model/Enclosure.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Enclosure.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/model/org/jboss/blog/model/Enclosure.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -9,7 +9,7 @@
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Entity
-public class Enclosure {
+public class Enclosure implements RestrictedEnclosure {
     @Id
     @GeneratedValue
     @Column(updatable = false)

Modified: trunk/src/model/org/jboss/blog/model/Post.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Post.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/model/org/jboss/blog/model/Post.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -19,7 +19,7 @@
  */
 @Entity
 @Indexed
-public class Post implements Comparable<Post> {
+public class Post implements RestrictedPost {
     @Id
     @GeneratedValue
     @Column(updatable = false)
@@ -177,7 +177,7 @@
         return result;
     }
 
-    public int compareTo(Post post2) {
+    public int compareTo(RestrictedPost post2) {
         int dateCompare = - GeneralTools.safeCompare(getPublished(), post2.getPublished());
         if (dateCompare == 0) {
             return GeneralTools.safeCompare(getLink(), post2.getLink());

Added: trunk/src/model/org/jboss/blog/model/RestrictedCategory.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/RestrictedCategory.java	                        (rev 0)
+++ trunk/src/model/org/jboss/blog/model/RestrictedCategory.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -0,0 +1,10 @@
+package org.jboss.blog.model;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface RestrictedCategory {
+    Integer getId();
+
+    String getName();
+}

Added: trunk/src/model/org/jboss/blog/model/RestrictedEnclosure.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/RestrictedEnclosure.java	                        (rev 0)
+++ trunk/src/model/org/jboss/blog/model/RestrictedEnclosure.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -0,0 +1,14 @@
+package org.jboss.blog.model;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface RestrictedEnclosure {
+    Integer getId();
+
+    String getUrl();
+
+    long getLength();
+
+    String getType();
+}

Added: trunk/src/model/org/jboss/blog/model/RestrictedPost.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/RestrictedPost.java	                        (rev 0)
+++ trunk/src/model/org/jboss/blog/model/RestrictedPost.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -0,0 +1,33 @@
+package org.jboss.blog.model;
+
+import org.jboss.blog.model.feed.RestrictedFeed;
+
+import java.util.List;
+import java.util.Date;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface RestrictedPost extends Comparable<RestrictedPost> {
+    Integer getId();
+
+    String getTitle();
+
+    String getTitleAsId();
+
+    String getContent();
+
+    String getLink();
+
+    String getAuthor();
+
+    List<? extends RestrictedCategory> getCategories();
+
+    Date getPublished();
+
+    Date getModified();
+
+    List<? extends RestrictedEnclosure> getEnclosures();
+
+    RestrictedFeed getFeed();
+}

Modified: trunk/src/model/org/jboss/blog/model/feed/Feed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/Feed.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/model/org/jboss/blog/model/feed/Feed.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -18,7 +18,7 @@
  */
 @Entity
 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
-public class Feed {
+public class Feed implements RestrictedFeed {
     @Id
     @GeneratedValue
     @Column(updatable = false)

Added: trunk/src/model/org/jboss/blog/model/feed/RestrictedFeed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/RestrictedFeed.java	                        (rev 0)
+++ trunk/src/model/org/jboss/blog/model/feed/RestrictedFeed.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -0,0 +1,29 @@
+package org.jboss.blog.model.feed;
+
+import org.jboss.blog.model.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface RestrictedFeed {
+    Integer getId();
+
+    String getName();
+
+    String getTitle();
+
+    String getAuthor();
+
+    String getLink();
+
+    String getDescription();
+
+    int getMaxPostsInFeed();
+
+    int getMaxPostsOnPage();
+
+    boolean isUseBlogAuthorInPosts();
+}

Modified: trunk/src/model/org/jboss/blog/model/post/PostFilter.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/post/PostFilter.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/model/org/jboss/blog/model/post/PostFilter.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,6 +1,6 @@
 package org.jboss.blog.model.post;
 
-import org.jboss.blog.model.Post;
+import org.jboss.blog.model.RestrictedPost;
 
 import java.io.Serializable;
 
@@ -8,5 +8,5 @@
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 public interface PostFilter extends Serializable {
-    public boolean filter(Post post);
+    public boolean filter(RestrictedPost post);
 }

Modified: trunk/src/services/org/jboss/blog/service/FeedsService.java
===================================================================
--- trunk/src/services/org/jboss/blog/service/FeedsService.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/services/org/jboss/blog/service/FeedsService.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -1,8 +1,10 @@
 package org.jboss.blog.service;
 
 import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.feed.RestrictedFeed;
 import org.jboss.blog.model.Post;
 import org.jboss.blog.model.Group;
+import org.jboss.blog.model.RestrictedPost;
 
 import javax.ejb.Local;
 import java.util.List;
@@ -14,17 +16,13 @@
 public interface FeedsService {
     List<Group> getAllGroups();
 
-    List<Feed> getAllFeeds();
+    // remove ? List<? extends RestrictedFeed> getAllFeeds();
 
     Post getPost(String titleAsId) throws PostNotFoundException;
 
-    Post getPost(String titleAsId, boolean writeable) throws PostNotFoundException;
-
     Feed getFeed(String feedName) throws FeedNotFoundException;
 
-    Feed getFeed(String feedName, boolean writeable) throws FeedNotFoundException;
+    List<? extends RestrictedPost> getPosts(RestrictedFeed feed, int from, int to);
 
-    List<Post> getPosts(Feed feed, int from, int to);
-
     void remove();
 }

Modified: trunk/src/tools/org/jboss/blog/tools/GeneralTools.java
===================================================================
--- trunk/src/tools/org/jboss/blog/tools/GeneralTools.java	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/src/tools/org/jboss/blog/tools/GeneralTools.java	2008-01-24 21:00:16 UTC (rev 181)
@@ -8,7 +8,7 @@
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 public class GeneralTools {
-    public static boolean objectsEquals(Object o1, Object o2) {
+    public static boolean objectsEqual(Object o1, Object o2) {
         if (o1 == null) {
             return o2 == null;
         } else {

Modified: trunk/view/home.xhtml
===================================================================
--- trunk/view/home.xhtml	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/view/home.xhtml	2008-01-24 21:00:16 UTC (rev 181)
@@ -15,12 +15,19 @@
         </p>
 
         <h3>Select a feed to view:</h3>
-        <ui:repeat var="feed" value="#{feedsService.allFeeds}">
-            <p>
-                <s:link view="/view/feed.xhtml" value="#{feed.title}" propagation="none">
-                    <f:param name="name" value="#{feed.name}"/>
-                </s:link>
-            </p>
+        
+        <ui:repeat var="group" value="#{feedsService.allGroups}">
+            <s:fragment rendered="#{group.feeds.size() > 1}">
+                <p>#{group.displayName}</p>
+            </s:fragment>
+
+            <ui:repeat var="feed" value="#{group.feeds}">
+                <p>
+                    <s:link view="/view/feed.xhtml" value="#{feed.title}" propagation="none">
+                        <f:param name="name" value="#{feed.name}"/>
+                    </s:link>
+                </p>
+            </ui:repeat>
         </ui:repeat>
     </ui:define>
 </ui:composition>

Modified: trunk/view/manage/index.xhtml
===================================================================
--- trunk/view/manage/index.xhtml	2008-01-23 21:48:27 UTC (rev 180)
+++ trunk/view/manage/index.xhtml	2008-01-24 21:00:16 UTC (rev 181)
@@ -19,25 +19,31 @@
         <s:link value="Re-index posts (for search)" action="#{postSearch.reindex}" /> <br /> <br />
 
         <s:link value="Temporary: fix html in all posts" action="#{feedView.fixHtml}" />
-        
+
         <h3>Current feeds:</h3>
 
-        <ui:repeat var="feed" value="#{feedsService.allFeeds}">
-            <p>
-                #{feed.title} (#{feed.name}, #{feedTypes.getFeedType(feed).name()}) <br />
-                <s:link view="/manage/feed_edit.xhtml" value="Edit common">
-                    <f:param name="name" value="#{feed.name}" />
-                </s:link>
-                <br />
-                <s:link view="#{feedTypes.getFeedType(feed).editPage()}" value="Edit specific">
-                    <f:param name="name" value="#{feed.name}" />
-                </s:link>
-                <br />
-                <s:link view="/manage/feed_delete.xhtml" action="#{feedMod.delete}" value="Delete"
-                        onclick="if (!confirm('Are you sure you want to delete this feed?')) return false">
-                    <f:param name="name" value="#{feed.name}" />
-                </s:link>
-            </p>
+        <ui:repeat var="group" value="#{feedsService.allGroups}">
+            <s:fragment rendered="#{group.feeds.size() > 1}">
+                <p>#{group.displayName}</p>
+            </s:fragment>
+
+            <ui:repeat var="feed" value="#{group.feeds}">
+                <p>
+                    #{feed.title} (#{feed.name}, #{feedTypes.getFeedType(feed).name()}) <br />
+                    <s:link view="/manage/feed_edit.xhtml" value="Edit common">
+                        <f:param name="name" value="#{feed.name}" />
+                    </s:link>
+                    <br />
+                    <s:link view="#{feedTypes.getFeedType(feed).editPage()}" value="Edit specific">
+                        <f:param name="name" value="#{feed.name}" />
+                    </s:link>
+                    <br />
+                    <s:link view="/manage/feed_delete.xhtml" action="#{feedMod.delete}" value="Delete"
+                            onclick="if (!confirm('Are you sure you want to delete this feed?')) return false">
+                        <f:param name="name" value="#{feed.name}" />
+                    </s:link>
+                </p>
+            </ui:repeat>
         </ui:repeat>
     </ui:define>
 </ui:composition>




More information about the jboss-cvs-commits mailing list