[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="&#171; 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 &#187;" 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 &#187;" 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