[jboss-cvs] JBossBlog SVN: r299 - in trunk: src/action/org/jboss/blog/session/feed/dao and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon May 5 06:28:03 EDT 2008


Author: adamw
Date: 2008-05-05 06:28:03 -0400 (Mon, 05 May 2008)
New Revision: 299

Added:
   trunk/src/action/org/jboss/blog/session/feed/update/IndividualPostsFeedUpdate.java
   trunk/src/action/org/jboss/blog/session/merge/PostManager.java
Modified:
   trunk/resources/messages_en.properties
   trunk/src/action/org/jboss/blog/session/feed/dao/IndividualPostsFeedDao.java
   trunk/src/action/org/jboss/blog/session/feed/mod/IndividualFeedModBean.java
   trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java
   trunk/src/action/org/jboss/blog/session/view/PostViewBean.java
   trunk/view/manage/feed_mod.xhtml
   trunk/view/manage/individual/individual_edit.xhtml
   trunk/view/manage/individual/post_add.xhtml
Log:


Modified: trunk/resources/messages_en.properties
===================================================================
--- trunk/resources/messages_en.properties	2008-05-03 18:03:47 UTC (rev 298)
+++ trunk/resources/messages_en.properties	2008-05-05 10:28:03 UTC (rev 299)
@@ -117,8 +117,8 @@
   as it appears in the feed, can be always overwritten by the blog author (which is configurable later) or can be \
   replaced by the blog author only when the post author is missing (default).
 
-blog.feed.individual.post.added=Post added.
-blog.feed.individual.post.deleted=Post deleted.
+blog.feed.individual.post.added=Post '{0}' added.
+blog.feed.individual.post.deleted=Post '{0}' deleted.
 
 blog.feed.aggregated.updated=Aggregated feed {0} changed.
 

Modified: trunk/src/action/org/jboss/blog/session/feed/dao/IndividualPostsFeedDao.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/IndividualPostsFeedDao.java	2008-05-03 18:03:47 UTC (rev 298)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/IndividualPostsFeedDao.java	2008-05-05 10:28:03 UTC (rev 299)
@@ -4,6 +4,8 @@
 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.IndividualPostsFeedUpdate;
+import org.jboss.blog.session.update.UpdateException;
 import org.jboss.blog.model.security.RestrictedMode;
 import org.jboss.seam.Component;
 
@@ -29,7 +31,7 @@
                 individualPostsFeed, from, to);
     }
 
-    public void update() {
-
+    public void update() throws UpdateException {
+        ((IndividualPostsFeedUpdate) Component.getInstance("individualPostsFeedUpdate")).update(individualPostsFeed);
     }
 }
\ No newline at end of file

Modified: trunk/src/action/org/jboss/blog/session/feed/mod/IndividualFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/IndividualFeedModBean.java	2008-05-03 18:03:47 UTC (rev 298)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/IndividualFeedModBean.java	2008-05-05 10:28:03 UTC (rev 299)
@@ -15,6 +15,7 @@
 import org.jboss.blog.session.parser.ParserException;
 import org.jboss.blog.session.parser.ParserService;
 import org.jboss.blog.session.merge.MergeServiceBean;
+import org.jboss.blog.session.merge.PostManager;
 import org.jboss.blog.tools.GeneralTools;
 import org.jboss.blog.tools.StringTools;
 
@@ -51,6 +52,9 @@
     @In
     private MergeServiceBean mergeService;
 
+    @In
+    private PostManager postManager;
+
     private IndividualPostsFeed individualPostsFeed;
 
     private String address;
@@ -139,7 +143,7 @@
     }
 
     public int getPostsOnPage() {
-        return 3;
+        return 10;
     }
 
     public boolean getShowPrevious() {
@@ -162,7 +166,7 @@
         if (postInfos == null) {
             //noinspection unchecked
             postInfos = entityManager
-                    .createQuery("SELECT pi FROM IndividualPostInfo pi WHERE pi.feed = ?1 ORDER BY pi.post.published")
+                    .createQuery("SELECT pi FROM IndividualPostInfo pi WHERE pi.feed = ?1 ORDER BY pi.post.published DESC")
                     .setParameter(1, getIndividualPostsFeed())
                     .setFirstResult(from)
                     .setMaxResults(getPostsOnPage()+1)
@@ -177,6 +181,8 @@
     }
 
     public void setSelectedPostTitleAsId(String selectedPostTitleAsId) {
+        System.out.println("SETTING postTitleAsId");
+        
         this.selectedPostTitleAsId = selectedPostTitleAsId;
 
         if (parsedFeed != null) {
@@ -206,10 +212,10 @@
     }
 
     public void updateSelectedPost() {
-        if (GeneralTools.objectsEqual(postAuthor, parsedFeed.getAuthor())) {
-            if (!StringTools.isEmpty(selectedPost.getAuthor())) {
-                postAuthor = selectedPost.getAuthor();
-            }
+        System.out.println("Updating post author");
+        if (!StringTools.isEmpty(selectedPost.getAuthor())) {
+            System.out.println("To " + selectedPost.getAuthor());
+            postAuthor = selectedPost.getAuthor();
         }
     }
 
@@ -218,7 +224,7 @@
             parsedFeed = parserService.parse(getAddress());
 
             if (!postsValidator.validatePosts(parsedFeed.getPosts(), true, "address")) {
-               throw new ParserException("Posts are missing some information.");
+                throw new ParserException("Posts are missing some information.");
             }
 
             postAuthor = parsedFeed.getAuthor();
@@ -228,10 +234,15 @@
                 posts.add(new SelectItem(post.getTitleAsId(), post.getTitle()));
             }
 
+            if (parsedFeed.getPosts().size() > 0) {
+                selectedPost = parsedFeed.getPosts().get(0);
+                updateSelectedPost();
+            }
+
             setParseOk(true);
         } catch (ParserException e) {
             facesMessages.addToControlFromResourceBundle("parse", FacesMessage.SEVERITY_ERROR,
-                        "blog.feed.remote.parsenotok", e.getMessage());
+                    "blog.feed.remote.parsenotok", e.getMessage());
 
             setParseOk(false);
         }
@@ -242,10 +253,13 @@
         address = "";
         selectedPost = null;
         selectedPostTitleAsId = null;
+        postInfos = null;
     }
 
     @Restrict("#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}")
     public void addPost() throws InvalidFeedTypeException {
+        selectedPost.setAuthor(postAuthor);
+
         mergeService.savePost(individualPostsFeed, selectedPost);
 
         IndividualPostInfo postInfo = new IndividualPostInfo();
@@ -254,30 +268,28 @@
         postInfo.setRemoteFeedAddress(address);
 
         entityManager.persist(postInfo);
-       
+
         individualPostsFeed.getPostInfos().add(postInfo);
 
         entityManager.flush();
 
-        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.updated",
-                getIndividualPostsFeed().getName());
+        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.individual.post.added",
+                selectedPost.getTitle());
 
-        events.raiseEvent("blog.feed.individual.post.added");
+        events.raiseEvent("org.jboss.blog.feed.updated", individualPostsFeed);
 
         reset();
     }
 
     public void delete(IndividualPostInfo postInfo) throws InvalidFeedTypeException {
-        // TODO: delete post
-
         individualPostsFeed.getPostInfos().remove(postInfo);
         entityManager.remove(postInfo);
+        postManager.deletePost(postInfo.getPost());
 
         entityManager.flush();
 
-        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.updated",
-                getIndividualPostsFeed().getName());
+        events.raiseEvent("org.jboss.blog.feed.updated", individualPostsFeed);
 
-        events.raiseEvent("blog.feed.individual.post.deleted");
+        reset();
     }
 }

Added: trunk/src/action/org/jboss/blog/session/feed/update/IndividualPostsFeedUpdate.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/update/IndividualPostsFeedUpdate.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/update/IndividualPostsFeedUpdate.java	2008-05-05 10:28:03 UTC (rev 299)
@@ -0,0 +1,76 @@
+package org.jboss.blog.session.feed.update;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.ScopeType;
+import org.jboss.blog.session.parser.ParserService;
+import org.jboss.blog.session.parser.ParserException;
+import org.jboss.blog.session.merge.MergeServiceBean;
+import org.jboss.blog.session.feed.lock.FeedsLocksBean;
+import org.jboss.blog.session.update.UpdateException;
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.feed.IndividualPostsFeed;
+import org.jboss.blog.model.feed.IndividualPostInfo;
+import org.jboss.blog.model.Post;
+
+import javax.persistence.EntityManager;
+import java.util.concurrent.locks.Lock;
+import java.util.List;
+import java.util.Date;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Name("individualPostsFeedUpdate")
+ at Scope(ScopeType.STATELESS)
+public class IndividualPostsFeedUpdate {
+    @In
+    private EntityManager entityManager;
+
+    @In
+    private ParserService parserService;
+
+    @In
+    private MergeServiceBean mergeService;
+
+    @In
+    private FeedsLocksBean feedsLocks;
+
+    public void update(IndividualPostsFeed feed) throws UpdateException {
+        // We update only posts from the last week.
+        Date thresholdDate = new Date(System.currentTimeMillis() - 7*24*60*60*1000);
+
+        Lock feedLock = feedsLocks.getLockForFeed(feed.getName());
+        feedLock.lock();
+        try {
+            //noinspection unchecked
+            List<IndividualPostInfo> postInfosToUpdate = entityManager
+                    .createQuery(
+                            "SELECT pi FROM IndividualPostInfo pi WHERE pi.feed = ?1 AND pi.post.published > ?2")
+                    .setParameter(1, feed)
+                    .setParameter(2, thresholdDate)
+                    .getResultList();
+
+            for (IndividualPostInfo ipi : postInfosToUpdate) {
+                // Parsing the feed
+                Feed parsedFeed;
+                try {
+                    parsedFeed = parserService.parse(ipi.getRemoteFeedAddress());
+                } catch (ParserException e) {
+                    throw new UpdateException(e);
+                }
+
+                // Searching for the post
+                for (Post parsedPost : parsedFeed.getPosts()) {
+                    if (parsedPost.compareTo(ipi.getPost()) == 0) {
+                        mergeService.mergePosts(ipi.getPost(), parsedPost);
+                        break;
+                    }
+                }
+            }
+        } finally {
+            feedLock.unlock();
+        }
+    }
+}

Modified: trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java	2008-05-03 18:03:47 UTC (rev 298)
+++ trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java	2008-05-05 10:28:03 UTC (rev 299)
@@ -91,7 +91,7 @@
      * @param mergeTo Post to which to merge the changes.
      * @param mergeFrom Post from which to merge the changes.
      */
-    private void mergePosts(Post mergeTo, Post mergeFrom) {
+    public void mergePosts(Post mergeTo, Post mergeFrom) {
         boolean changes = false;
 
         if (!GeneralTools.objectsEqual(mergeTo.getAuthor(), mergeFrom.getAuthor())) {
@@ -116,7 +116,7 @@
             changes = true;
         }
 
-        if (mergeTo.getModified().getTime() != mergeFrom.getModified().getTime()) {
+        if (mergeTo.getModified().getTime()/1000 != mergeFrom.getModified().getTime()/1000) {
             log.debug("Post '#0' merge, changed modified date, new: '#1', old: '#2'.",
                     mergeTo.getTitleAsId(), mergeFrom.getModified().getTime(), mergeTo.getModified().getTime());
             mergeTo.setModified(mergeFrom.getModified());

Added: trunk/src/action/org/jboss/blog/session/merge/PostManager.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/merge/PostManager.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/merge/PostManager.java	2008-05-05 10:28:03 UTC (rev 299)
@@ -0,0 +1,40 @@
+package org.jboss.blog.session.merge;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.seam.core.Events;
+import org.jboss.blog.model.Post;
+
+import javax.faces.application.FacesMessage;
+import javax.persistence.EntityManager;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Name("postManager")
+ at Scope(ScopeType.STATELESS)
+ at AutoCreate
+public class PostManager {
+    @In
+    private EntityManager entityManager;
+
+    @In
+    private FacesMessages facesMessages;
+
+    @In
+    private Events events;
+
+    public void deletePost(Post post) {
+        events.raiseEvent("org.jboss.blog.post.before_delete", post);
+
+        entityManager.remove(entityManager.merge(post));
+
+        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.post.deleted", post.getTitle());
+
+        events.raiseEvent("org.jboss.blog.post.deleted", post);
+    }
+}

Modified: trunk/src/action/org/jboss/blog/session/view/PostViewBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/PostViewBean.java	2008-05-03 18:03:47 UTC (rev 298)
+++ trunk/src/action/org/jboss/blog/session/view/PostViewBean.java	2008-05-05 10:28:03 UTC (rev 299)
@@ -1,14 +1,11 @@
 package org.jboss.blog.session.view;
 
 import org.jboss.blog.model.Post;
+import org.jboss.blog.session.merge.PostManager;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.security.Restrict;
-import org.jboss.seam.faces.FacesMessages;
-import org.jboss.seam.core.Events;
 
-import javax.faces.application.FacesMessage;
-import javax.persistence.EntityManager;
 import java.io.Serializable;
 
 /**
@@ -17,11 +14,8 @@
 @Name("postView")
 public class PostViewBean implements Serializable {
     @In
-    private EntityManager entityManager;
+    private PostManager postManager;
 
-    @In
-    private FacesMessages facesMessages;
-
     private Post post;
 
     public Post getPost() {
@@ -35,12 +29,6 @@
     // TODO: the delete method shouldn't be here
     @Restrict("#{identity.hasPermission('post', 'delete', postView.post, postView.post.feed, postView.post.feed.group)}")
     public void delete() {
-        Events.instance().raiseEvent("org.jboss.blog.post.before_delete", post);
-
-        entityManager.remove(entityManager.merge(post));
-
-        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.post.deleted", post.getTitle());
-
-        Events.instance().raiseEvent("org.jboss.blog.post.deleted", post);
+        postManager.deletePost(post);
     }
 }

Modified: trunk/view/manage/feed_mod.xhtml
===================================================================
--- trunk/view/manage/feed_mod.xhtml	2008-05-03 18:03:47 UTC (rev 298)
+++ trunk/view/manage/feed_mod.xhtml	2008-05-05 10:28:03 UTC (rev 299)
@@ -158,13 +158,9 @@
 </h:panelGroup>
 <h:panelGroup rendered="#{advanced}" id="restrictedKeyForm">
     <s:div rendered="#{feedMod.feed.restricted}">
-        <h:inputText id="restrictedKey" value="#{feedMod.feed.restrictedKey}" size="26" disabled="true" />
-
-        <div>
-            <a:commandLink value="Generate new key" action="#{feedMod.reGenerateFeedKey}" reRender="restrictedKey"
-                           ajaxSingle="true" bypassUpdates="true"/>
-            <br />
-        </div>
+        #{feedMod.feed.restrictedKey}&#160;
+        <a:commandLink value="Generate new key" action="#{feedMod.reGenerateFeedKey}" reRender="restrictedKeyForm"
+                       ajaxSingle="true" bypassUpdates="true"/>
     </s:div>
 </h:panelGroup>
 

Modified: trunk/view/manage/individual/individual_edit.xhtml
===================================================================
--- trunk/view/manage/individual/individual_edit.xhtml	2008-05-03 18:03:47 UTC (rev 298)
+++ trunk/view/manage/individual/individual_edit.xhtml	2008-05-05 10:28:03 UTC (rev 299)
@@ -41,8 +41,7 @@
                                 </ui:include>
                             </td>
                             <td>
-                                <a:commandLink value="Delete" action="#{individualFeedMod.delete(postInfo)}"
-                                               reRender="postsTable" />
+                                <h:commandLink value="Delete" action="#{individualFeedMod.delete(postInfo)}" />
                             </td>
                         </tr>
                     </a:repeat>

Modified: trunk/view/manage/individual/post_add.xhtml
===================================================================
--- trunk/view/manage/individual/post_add.xhtml	2008-05-03 18:03:47 UTC (rev 298)
+++ trunk/view/manage/individual/post_add.xhtml	2008-05-05 10:28:03 UTC (rev 299)
@@ -40,7 +40,7 @@
                                          style="width: 500px">
                             <f:selectItems value="#{individualFeedMod.posts}" />
                             <s:validate />
-                            <a:support event="onchange" reRender="postAuthor,selectPostMessage" ajaxSingle="true"
+                            <a:support event="onchange" reRender="postAuthorEdit,selectPostMessage"
                                        action="#{individualFeedMod.updateSelectedPost}" />
                         </h:selectOneMenu>
                         <a:outputPanel id="selectPostMessage">
@@ -51,7 +51,7 @@
                     <h:outputLabel rendered="#{individualFeedMod.parseOk}">
                         <span class="required">*</span> Post author:
                     </h:outputLabel>
-                    <h:panelGroup rendered="#{individualFeedMod.parseOk}">
+                    <h:panelGroup rendered="#{individualFeedMod.parseOk}" id="postAuthorEdit">
                         <h:inputText id="postAuthor" value="#{individualFeedMod.postAuthor}" required="true" size="55"
                                      maxlength="64">
                             <s:validate />




More information about the jboss-cvs-commits mailing list