[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} 
+ <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