[jboss-cvs] JBossBlog SVN: r136 - in trunk: src/action/org/jboss/blog/session and 9 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat Nov 24 12:25:27 EST 2007
Author: adamw
Date: 2007-11-24 12:25:27 -0500 (Sat, 24 Nov 2007)
New Revision: 136
Added:
trunk/src/action/org/jboss/blog/session/converter/PostConverter.java
trunk/src/action/org/jboss/blog/session/view/
trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java
trunk/src/action/org/jboss/blog/session/view/PostViewBean.java
trunk/view/view/post.xhtml
Removed:
trunk/src/model/org/jboss/blog/model/FeedType.java
Modified:
trunk/resources/WEB-INF/pages.xml
trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
trunk/src/action/org/jboss/blog/session/manage/RemoteFeedModBean.java
trunk/src/action/org/jboss/blog/session/parser/ParserServiceImpl.java
trunk/src/model/org/jboss/blog/model/Blog.java
trunk/src/model/org/jboss/blog/model/Feed.java
trunk/src/model/org/jboss/blog/model/Post.java
trunk/view/home.xhtml
trunk/view/manage/feed_mod.xhtml
trunk/view/view/feed.xhtml
Log:
Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/resources/WEB-INF/pages.xml 2007-11-24 17:25:27 UTC (rev 136)
@@ -17,9 +17,14 @@
<!-- View feeds -->
<page view-id="/view/feed.xhtml">
- <param name="name" converterId="feedConverter" value="#{feed}" />
+ <param name="name" converterId="feedConverter" value="#{feedView.feed}" />
+ <param name="from" value="#{feedView.from}" />
</page>
+ <page view-id="/view/post.xhtml">
+ <param name="post" converterId="postConverter" value="#{postView.post}" />
+ </page>
+
<!-- Manage feeds -->
<page view-id="/manage/add.xhtml" conversation-required="true">
Copied: trunk/src/action/org/jboss/blog/session/converter/PostConverter.java (from rev 135, trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/converter/PostConverter.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/converter/PostConverter.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -0,0 +1,44 @@
+package org.jboss.blog.session.converter;
+
+import org.jboss.blog.model.Post;
+import org.jboss.blog.service.FeedNotFoundException;
+import org.jboss.seam.Component;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.annotations.faces.Converter;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+
+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>
+ */
+ at Name("postConverter")
+ at BypassInterceptors
+ at Converter
+public class PostConverter implements javax.faces.convert.Converter {
+ @Transactional
+ public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
+ EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");
+
+ entityManager.joinTransaction();
+
+ if (value != null) {
+ value = value.toLowerCase();
+ }
+
+ try {
+ return entityManager.createQuery("select post from Post post where post.titleAsId = ?1")
+ .setParameter(1, value).getSingleResult();
+ } catch (PersistenceException e) {
+ throw new FeedNotFoundException(value, e);
+ }
+ }
+
+ public String getAsString(FacesContext context, UIComponent cmp, Object value) {
+ return value == null ? null : ((Post) value).getTitleAsId();
+ }
+}
\ No newline at end of file
Modified: trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -2,8 +2,9 @@
import org.jboss.blog.model.Feed;
import org.jboss.blog.model.Post;
+import org.jboss.blog.service.FeedNotFoundException;
import org.jboss.blog.service.FeedsService;
-import org.jboss.blog.service.FeedNotFoundException;
+import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
@@ -18,6 +19,7 @@
*/
@Stateless
@Name("feedsService")
+ at AutoCreate
public class FeedsServiceImpl implements FeedsService {
@In
private EntityManager entityManager;
@@ -37,8 +39,8 @@
public List<Post> getPosts(Feed feed, int from, int to) {
return (List<Post>) entityManager.createQuery(
- "select post from Post post where post.blog = ?1 order by post.published")
- .setMaxResults(to-from).setFirstResult(from).getResultList();
+ "select post from Post post where post.blog = ?1 order by post.published desc")
+ .setParameter(1, feed.getBlog()).setMaxResults(to-from).setFirstResult(from).getResultList();
}
public List<Post> getPosts(String feedName, int from, int to) throws FeedNotFoundException {
Modified: trunk/src/action/org/jboss/blog/session/manage/RemoteFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/manage/RemoteFeedModBean.java 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/src/action/org/jboss/blog/session/manage/RemoteFeedModBean.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -71,7 +71,8 @@
RemoteFeed newRemoteFeed = new RemoteFeed();
newRemoteFeed.setLink(getLink());
newRemoteFeed.setBlog(blog);
- newRemoteFeed.setMaxPosts(10);
+ newRemoteFeed.setMaxPostsInFeed(10);
+ newRemoteFeed.setMaxPostsOnPage(10);
feed = newRemoteFeed;
} else {
Modified: trunk/src/action/org/jboss/blog/session/parser/ParserServiceImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/parser/ParserServiceImpl.java 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/src/action/org/jboss/blog/session/parser/ParserServiceImpl.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -66,7 +66,7 @@
post.setModified(
entry.getUpdatedDate() == null ? entry.getPublishedDate() : entry.getUpdatedDate());
post.setLink(entry.getLink());
- post.setGuid(entry.getUri());
+ post.setGuid(entry.getUri() == null ? entry.getLink() : entry.getUri());
blog.getPosts().add(post);
}
Added: trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -0,0 +1,66 @@
+package org.jboss.blog.session.view;
+
+import org.jboss.blog.model.Feed;
+import org.jboss.blog.model.Post;
+import org.jboss.blog.service.FeedsService;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("feedView")
+ at Scope(ScopeType.CONVERSATION)
+public class FeedViewBean {
+ @In
+ private FeedsService feedsService;
+
+ private Feed feed;
+ private int from;
+
+ private List<Post> posts;
+
+ public Feed getFeed() {
+ return feed;
+ }
+
+ public void setFeed(Feed feed) {
+ this.feed = feed;
+ }
+
+ public int getFrom() {
+ return from;
+ }
+
+ public void setFrom(int from) {
+ this.from = from;
+ }
+
+ public List<Post> getPosts() {
+ if (posts == null) {
+ posts = feedsService.getPosts(feed, from, from+feed.getMaxPostsOnPage()+1);
+ }
+
+ return posts;
+ }
+
+ public boolean getShowNext() {
+ return getPosts().size() == feed.getMaxPostsOnPage()+1;
+ }
+
+ public boolean getShowPrevious() {
+ return from != 0;
+ }
+
+ public int getNextFrom() {
+ return from + feed.getMaxPostsOnPage();
+ }
+
+ public int getPreviousFrom() {
+ return Math.max(0, from - feed.getMaxPostsOnPage());
+ }
+}
Added: trunk/src/action/org/jboss/blog/session/view/PostViewBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/PostViewBean.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/view/PostViewBean.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -0,0 +1,20 @@
+package org.jboss.blog.session.view;
+
+import org.jboss.blog.model.Post;
+import org.jboss.seam.annotations.Name;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("postView")
+public class PostViewBean {
+ private Post post;
+
+ public Post getPost() {
+ return post;
+ }
+
+ public void setPost(Post post) {
+ this.post = post;
+ }
+}
Modified: trunk/src/model/org/jboss/blog/model/Blog.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Blog.java 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/src/model/org/jboss/blog/model/Blog.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -29,6 +29,9 @@
@OneToMany(cascade = {CascadeType.REMOVE}, mappedBy = "blog")
private List<Post> posts;
+ @OneToOne(mappedBy = "blog")
+ private Feed feed;
+
@Lob
private String description;
@@ -79,5 +82,13 @@
public void setPosts(List<Post> posts) {
this.posts = posts;
}
+
+ public Feed getFeed() {
+ return feed;
+ }
+
+ public void setFeed(Feed feed) {
+ this.feed = feed;
+ }
}
Modified: trunk/src/model/org/jboss/blog/model/Feed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Feed.java 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/src/model/org/jboss/blog/model/Feed.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -38,11 +38,14 @@
private Map<RemoteFeedType, String> templates;
@Column
- private int maxPosts;
+ private int maxPostsInFeed;
@Column
private boolean useBlogAuthorInPosts;
+ @Column
+ private int maxPostsOnPage;
+
@Transient
public abstract String getType();
@@ -86,14 +89,22 @@
this.templates = templates;
}
- public int getMaxPosts() {
- return maxPosts;
+ public int getMaxPostsInFeed() {
+ return maxPostsInFeed;
}
- public void setMaxPosts(int maxPosts) {
- this.maxPosts = maxPosts;
+ public void setMaxPostsInFeed(int maxPostsInFeed) {
+ this.maxPostsInFeed = maxPostsInFeed;
}
+ public int getMaxPostsOnPage() {
+ return maxPostsOnPage;
+ }
+
+ public void setMaxPostsOnPage(int maxPostsOnPage) {
+ this.maxPostsOnPage = maxPostsOnPage;
+ }
+
public boolean isUseBlogAuthorInPosts() {
return useBlogAuthorInPosts;
}
Deleted: trunk/src/model/org/jboss/blog/model/FeedType.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/FeedType.java 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/src/model/org/jboss/blog/model/FeedType.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -1,9 +0,0 @@
-package org.jboss.blog.model;
-
-/**
- * @author <a href="mailto:adam at warski.org">Adam Warski</a>
- */
-public enum FeedType {
- ATOM,
- RSS2
-}
Modified: trunk/src/model/org/jboss/blog/model/Post.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Post.java 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/src/model/org/jboss/blog/model/Post.java 2007-11-24 17:25:27 UTC (rev 136)
@@ -29,7 +29,7 @@
@Pattern(regex = "^[a-z0-9_]*$")
@Column(unique = true)
// TODO: unique?
- private String titleAsLink;
+ private String titleAsId;
@Lob
private String content;
@@ -43,7 +43,7 @@
private String guid;
@Length(max = 256)
- @NotEmpty
+ // TODO: @NotEmpty
private String author;
@CollectionOfElements
@@ -74,16 +74,16 @@
}
public void setTitle(String title) {
- setTitleAsLink(StringTools.convertTitleToLink(title));
+ setTitleAsId(StringTools.convertTitleToLink(title));
this.title = title;
}
- public String getTitleAsLink() {
- return titleAsLink;
+ public String getTitleAsId() {
+ return titleAsId;
}
- public void setTitleAsLink(String titleAsLink) {
- this.titleAsLink = titleAsLink;
+ public void setTitleAsId(String titleAsId) {
+ this.titleAsId = titleAsId;
}
public String getContent() {
Modified: trunk/view/home.xhtml
===================================================================
--- trunk/view/home.xhtml 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/view/home.xhtml 2007-11-24 17:25:27 UTC (rev 136)
@@ -17,7 +17,7 @@
<h3>Select a feed to view:</h3>
<ui:repeat var="feed" value="#{feedsService.allFeeds}">
<p>
- <s:link view="/view/feed.xhtml" value="#{feed.name}" propagation="none">
+ <s:link view="/view/feed.xhtml" value="#{feed.displayName}" propagation="none">
<f:param name="name" value="#{feed.name}"/>
</s:link>
</p>
Modified: trunk/view/manage/feed_mod.xhtml
===================================================================
--- trunk/view/manage/feed_mod.xhtml 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/view/manage/feed_mod.xhtml 2007-11-24 17:25:27 UTC (rev 136)
@@ -84,20 +84,34 @@
</a:outputPanel>
</h:panelGroup>
- <h:outputLabel for="maxPosts">
+ <h:outputLabel for="maxPostsInFeed">
<span class="required">*</span> Maximum number of posts in a feed:
</h:outputLabel>
<h:panelGroup>
- <h:inputText id="maxPosts" value="#{feed.maxPosts}" required="true" size="16">
- <a:support event="onblur" reRender="maxPostsMessage" ajaxSingle="true" bypassUpdates="true"/>
+ <h:inputText id="maxPostsInFeed" value="#{feed.maxPostsInFeed}" required="true" size="16">
+ <a:support event="onblur" reRender="maxPostsInFeedMessage" ajaxSingle="true" bypassUpdates="true"/>
<s:validate />
</h:inputText>
- <a:outputPanel id="maxPostsMessage">
- <h:message for="maxPosts" styleClass="error" />
+ <a:outputPanel id="maxPostsInFeedMessage">
+ <h:message for="maxPostsInFeed" styleClass="error" />
</a:outputPanel>
</h:panelGroup>
+ <h:outputLabel for="maxPostsOnPage">
+ <span class="required">*</span> Maximum number of posts to display:
+ </h:outputLabel>
+ <h:panelGroup>
+ <h:inputText id="maxPostsOnPage" value="#{feed.maxPostsOnPage}" required="true" size="16">
+ <a:support event="onblur" reRender="maxPostsOnPageMessage" ajaxSingle="true" bypassUpdates="true"/>
+ <s:validate />
+ </h:inputText>
+
+ <a:outputPanel id="maxPostsOnPageMessage">
+ <h:message for="maxPostsOnPage" styleClass="error" />
+ </a:outputPanel>
+ </h:panelGroup>
+
<h:outputLabel for="useBlogAuthorInPosts">Overwrite post author with blog author in posts:</h:outputLabel>
<h:panelGroup>
<h:selectBooleanCheckbox id="useBlogAuthorInPosts" value="#{feed.useBlogAuthorInPosts}"
@@ -132,8 +146,8 @@
<h:outputText value="Title:" />
<h:outputText value="#{post.title}" />
- <h:outputText value="Title as link:" />
- <h:outputText value="#{post.titleAsLink}" />
+ <h:outputText value="Title as id:" />
+ <h:outputText value="#{post.titleAsId}" />
<h:outputText value="Author:" />
<h:outputText value="#{post.author}" />
@@ -155,7 +169,7 @@
</h:panelGroup>
<h:outputText value="Content:" />
- <h:outputText value="#{post.content}" />
+ <h:outputText value="#{post.content}" escape="false" />
</h:panelGrid>
</h:column>
</h:dataTable>
Modified: trunk/view/view/feed.xhtml
===================================================================
--- trunk/view/view/feed.xhtml 2007-11-23 17:57:59 UTC (rev 135)
+++ trunk/view/view/feed.xhtml 2007-11-24 17:25:27 UTC (rev 136)
@@ -6,10 +6,40 @@
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
+ xmlns:a="http://richfaces.org/a4j"
template="../layout/template.xhtml">
<ui:define name="body">
- <h1>View feed: #{feed.displayName}</h1>
+ <h1>View feed: #{feedView.feed.displayName}</h1>
-
+ <p>
+ <s:link view="/view/feed.xhtml" value="« Previous" rendered="#{feedView.showPrevious}"
+ propagation="none">
+ <f:param name="from" value="#{feedView.previousFrom}" />
+ </s:link>
+ </p>
+
+ <p>
+ <s:link view="/view/feed.xhtml" value="Next »" rendered="#{feedView.showNext}"
+ propagation="none">
+ <f:param name="from" value="#{feedView.nextFrom}" />
+ </s:link>
+ </p>
+
+ <a:repeat var="post" value="#{feedView.posts}" rows="#{feedView.feed.maxPostsOnPage}">
+ <rich:panel>
+ <f:facet name="header">
+ #{post.title}
+ </f:facet>
+ <s:link value="View on separate page »" view="/view/post.xhtml" propagation="none">
+ <f:param name="post" value="#{post.titleAsId}" />
+ </s:link>
+
+ <hr />
+
+ <!-- <h:outputText value="#{post.content}" escape="false" /> -->
+ </rich:panel>
+
+ <br />
+ </a:repeat>
</ui:define>
</ui:composition>
Added: trunk/view/view/post.xhtml
===================================================================
--- trunk/view/view/post.xhtml (rev 0)
+++ trunk/view/view/post.xhtml 2007-11-24 17:25:27 UTC (rev 136)
@@ -0,0 +1,29 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:rich="http://richfaces.org/rich"
+ xmlns:a="http://richfaces.org/a4j"
+ template="../layout/template.xhtml">
+ <ui:define name="body">
+ <h1>View post: #{postView.post.title}</h1>
+
+ <p>
+ Back to:
+ <s:link view="/view/feed.xhtml" value="#{post.blog.feed.displayName}" propagation="none">
+ <f:param name="name" value="#{post.blog.feed.name}"/>
+ </s:link>
+ </p>
+
+ <rich:panel>
+ <f:facet name="header">
+ #{post.title}
+ </f:facet>
+
+ <h:outputText value="#{post.content}" escape="false" />
+ </rich:panel>
+ </ui:define>
+</ui:composition>
More information about the jboss-cvs-commits
mailing list