[jboss-cvs] JBossBlog SVN: r137 - in trunk: src/action/org/jboss/blog/session/manage and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Nov 24 13:42:07 EST 2007


Author: adamw
Date: 2007-11-24 13:42:07 -0500 (Sat, 24 Nov 2007)
New Revision: 137

Added:
   trunk/src/action/org/jboss/blog/session/manage/FeedType.java
   trunk/src/action/org/jboss/blog/session/manage/FeedTypesBean.java
   trunk/src/action/org/jboss/blog/session/manage/remote/
   trunk/src/action/org/jboss/blog/session/manage/remote/RemoteFeedModBean.java
   trunk/src/action/org/jboss/blog/session/manage/remote/RemoteFeedTypeRegisterBean.java
   trunk/view/manage/feed_edit.xhtml
   trunk/view/manage/remote/
   trunk/view/manage/remote/remote_add.xhtml
Modified:
   trunk/resources/WEB-INF/pages.xml
   trunk/src/action/org/jboss/blog/session/manage/FeedModBean.java
   trunk/src/action/org/jboss/blog/session/validator/UniqueFeedNameValidator.java
   trunk/view/manage/add.xhtml
   trunk/view/manage/feed_mod.xhtml
   trunk/view/manage/index.xhtml
   trunk/view/view/feed.xhtml
Log:


Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml	2007-11-24 17:25:27 UTC (rev 136)
+++ trunk/resources/WEB-INF/pages.xml	2007-11-24 18:42:07 UTC (rev 137)
@@ -38,6 +38,14 @@
         </navigation>
     </page>
 
+    <page view-id="/manage/feed_edit.xhtml">
+        <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
+        <navigation from-action="#{feedMod.saveExisting}">
+            <end-conversation />
+            <redirect view-id="/manage/index.xhtml" />
+        </navigation>
+    </page>
+
     <page view-id="/manage/add*" conversation-required="true" />
 
     <exception class="org.jboss.seam.framework.EntityNotFoundException">

Modified: trunk/src/action/org/jboss/blog/session/manage/FeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/manage/FeedModBean.java	2007-11-24 17:25:27 UTC (rev 136)
+++ trunk/src/action/org/jboss/blog/session/manage/FeedModBean.java	2007-11-24 18:42:07 UTC (rev 137)
@@ -3,6 +3,7 @@
 import org.jboss.blog.model.Feed;
 import org.jboss.blog.model.Post;
 import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.AutoCreate;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Scope;
@@ -12,15 +13,29 @@
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
- at Scope(ScopeType.STATELESS)
+ at Scope(ScopeType.CONVERSATION)
 @Name("feedMod")
+ at AutoCreate
 public class FeedModBean {
-    @In
     private Feed feed;
 
     @In
     private EntityManager entityManager;
 
+    public void initNewFeed(Feed feed) {
+        this.feed = feed;
+        feed.setMaxPostsInFeed(10);
+        feed.setMaxPostsOnPage(10);
+    }
+
+    public Feed getFeed() {
+        return feed;
+    }
+
+    public void setFeed(Feed feed) {
+        this.feed = feed;
+    }
+
     public void saveNew() {
         entityManager.persist(feed.getBlog());
         

Added: trunk/src/action/org/jboss/blog/session/manage/FeedType.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/manage/FeedType.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/manage/FeedType.java	2007-11-24 18:42:07 UTC (rev 137)
@@ -0,0 +1,11 @@
+package org.jboss.blog.session.manage;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface FeedType {
+    public String getName();
+    public Class<?> getModelClass();
+    public String getAddPage();
+    public String getEditPage();
+}

Added: trunk/src/action/org/jboss/blog/session/manage/FeedTypesBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/manage/FeedTypesBean.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/manage/FeedTypesBean.java	2007-11-24 18:42:07 UTC (rev 137)
@@ -0,0 +1,40 @@
+package org.jboss.blog.session.manage;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("feedTypes")
+ at Scope(ScopeType.APPLICATION)
+ at AutoCreate
+public class FeedTypesBean {
+    private Map<String, FeedType> feedTypes;
+
+    public FeedTypesBean() {
+        feedTypes = new ConcurrentHashMap<String, FeedType>();
+    }
+
+    public void registerType(String name, FeedType feedType) {
+        feedTypes.put(name, feedType);
+    }
+
+    public FeedType[] getAllTypes() {
+        return feedTypes.values().toArray(new FeedType[feedTypes.size()]);
+    }
+
+    public FeedType getFeedType(String name) throws InvalidFeedTypeException {
+        FeedType entry = feedTypes.get(name);
+        if (name == null) {
+            throw new InvalidFeedTypeException();
+        }
+
+        return entry;
+    }
+}

Copied: trunk/src/action/org/jboss/blog/session/manage/remote/RemoteFeedModBean.java (from rev 136, trunk/src/action/org/jboss/blog/session/manage/RemoteFeedModBean.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/manage/remote/RemoteFeedModBean.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/manage/remote/RemoteFeedModBean.java	2007-11-24 18:42:07 UTC (rev 137)
@@ -0,0 +1,83 @@
+package org.jboss.blog.session.manage.remote;
+
+import org.hibernate.validator.NotEmpty;
+import org.jboss.blog.model.Blog;
+import org.jboss.blog.model.Feed;
+import org.jboss.blog.model.RemoteFeed;
+import org.jboss.blog.session.manage.FeedModBean;
+import org.jboss.blog.session.manage.InvalidFeedTypeException;
+import org.jboss.blog.session.parser.ParserException;
+import org.jboss.blog.session.parser.ParserService;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Scope(ScopeType.CONVERSATION)
+ at Name("remoteFeedMod")
+public class RemoteFeedModBean {
+    @In
+    private ParserService parserService;
+
+    @In
+    private FeedModBean feedMod;
+
+    @NotEmpty
+    private String link;
+
+    private boolean parseOk;
+    private Exception parseException;
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public boolean isParseOk() {
+        return parseOk;
+    }
+
+    public void setParseOk(boolean parseOk) {
+        this.parseOk = parseOk;
+    }
+
+    public Exception getParseException() {
+        return parseException;
+    }
+
+    public void setParseException(Exception parseException) {
+        this.parseException = parseException;
+    }
+
+    public void parseFeed() {
+        try {
+            Blog blog = parserService.parse(getLink());
+
+            if (feedMod.getFeed() == null) {
+                RemoteFeed newRemoteFeed = new RemoteFeed();
+                feedMod.initNewFeed(newRemoteFeed);
+
+                newRemoteFeed.setLink(getLink());
+                newRemoteFeed.setBlog(blog);
+            } else {
+                if (feedMod.getFeed() instanceof RemoteFeed) {
+                    RemoteFeed remoteFeed = (RemoteFeed) feedMod.getFeed();
+                    remoteFeed.setLink(getLink());
+                } else {
+                    throw new InvalidFeedTypeException();
+                }
+            }
+
+            setParseOk(true);
+        } catch (ParserException e) {
+            setParseException(e);
+            setParseOk(false);
+        }
+    }
+}

Added: trunk/src/action/org/jboss/blog/session/manage/remote/RemoteFeedTypeRegisterBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/manage/remote/RemoteFeedTypeRegisterBean.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/manage/remote/RemoteFeedTypeRegisterBean.java	2007-11-24 18:42:07 UTC (rev 137)
@@ -0,0 +1,38 @@
+package org.jboss.blog.session.manage.remote;
+
+import org.jboss.blog.model.RemoteFeed;
+import org.jboss.blog.session.manage.FeedType;
+import org.jboss.blog.session.manage.FeedTypesBean;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Observer;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("remoteFeedTypeRegister")
+public class RemoteFeedTypeRegisterBean implements FeedType {
+    public String getName() {
+        return "remote";
+    }
+
+    public Class<?> getModelClass() {
+        return RemoteFeed.class;
+    }
+
+    public String getAddPage() {
+        return "/manage/remote/remote_add.xhtml";
+    }
+
+    public String getEditPage() {
+        return "/manage/remote/remote_edit.xhtml";
+    }
+
+    @In
+    private FeedTypesBean feedTypes;
+
+    @Observer("org.jboss.seam.postInitialization")
+    public void register() {
+        feedTypes.registerType(getName(), this);
+    }
+}

Modified: trunk/src/action/org/jboss/blog/session/validator/UniqueFeedNameValidator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/validator/UniqueFeedNameValidator.java	2007-11-24 17:25:27 UTC (rev 136)
+++ trunk/src/action/org/jboss/blog/session/validator/UniqueFeedNameValidator.java	2007-11-24 18:42:07 UTC (rev 137)
@@ -35,12 +35,12 @@
             throws ValidatorException {
         String name = StringTools.safeToString(value);
 
-        Long id;
+        Integer id;
 
         if (StringTools.isEmpty(entityId)) {
             id = null;
         } else {
-            id = Long.parseLong(entityId);
+            id = Integer.parseInt(entityId);
         }
 
         Query query;

Modified: trunk/view/manage/add.xhtml
===================================================================
--- trunk/view/manage/add.xhtml	2007-11-24 17:25:27 UTC (rev 136)
+++ trunk/view/manage/add.xhtml	2007-11-24 18:42:07 UTC (rev 137)
@@ -15,9 +15,11 @@
         <h1>Add a new feed</h1>
         
         <ul>
-            <li>
-                <s:link value="Add a new remote feed" view="/manage/remote_add.xhtml" />
-            </li>
+            <ui:repeat var="feedType" value="#{feedTypes.allTypes}">
+                <li>
+                    <s:link value="Add a new #{feedType.name} feed" view="#{feedType.addPage}" />
+                </li>
+            </ui:repeat>
         </ul>
     </ui:define>
 </ui:composition>

Added: trunk/view/manage/feed_edit.xhtml
===================================================================
--- trunk/view/manage/feed_edit.xhtml	                        (rev 0)
+++ trunk/view/manage/feed_edit.xhtml	2007-11-24 18:42:07 UTC (rev 137)
@@ -0,0 +1,18 @@
+<!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>Edit feed: #{feedMod.feed.name}</h1>
+
+        <ui:include src="feed_mod.xhtml">
+            <ui:param name="new" value="false" />
+        </ui:include>
+    </ui:define>
+</ui:composition>

Modified: trunk/view/manage/feed_mod.xhtml
===================================================================
--- trunk/view/manage/feed_mod.xhtml	2007-11-24 17:25:27 UTC (rev 136)
+++ trunk/view/manage/feed_mod.xhtml	2007-11-24 18:42:07 UTC (rev 137)
@@ -12,8 +12,8 @@
         <h:panelGrid columns="2">
             <h:outputLabel for="name"><span class="required">*</span> Name (to use in URLs):</h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="name" value="#{feed.name}" required="true" size="16">
-                    <blog:uniqueFeedNameValidator entityId="#{feed.id}" />
+                <h:inputText id="name" value="#{feedMod.feed.name}" required="true" size="16">
+                    <blog:uniqueFeedNameValidator entityId="#{feedMod.feed.id}" />
                     <a:support event="onblur" reRender="nameMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -25,7 +25,7 @@
 
             <h:outputLabel for="displayName"><span class="required">*</span> Display name:</h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="displayName" value="#{feed.displayName}" required="true" size="32">
+                <h:inputText id="displayName" value="#{feedMod.feed.displayName}" required="true" size="32">
                     <a:support event="onblur" reRender="displayNameMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -37,7 +37,7 @@
 
             <h:outputLabel for="title"><span class="required">*</span> Title:</h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="title" value="#{feed.blog.title}" required="true" size="32">
+                <h:inputText id="title" value="#{feedMod.feed.blog.title}" required="true" size="32">
                     <a:support event="onblur" reRender="titleMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -49,7 +49,7 @@
 
             <h:outputLabel for="author"><span class="required">*</span> Author:</h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="author" value="#{feed.blog.author}" required="true" size="32">
+                <h:inputText id="author" value="#{feedMod.feed.blog.author}" required="true" size="32">
                     <a:support event="onblur" reRender="authorMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -61,7 +61,7 @@
 
             <h:outputLabel for="description">Description:</h:outputLabel>
             <h:panelGroup>
-                <h:inputTextarea id="description" value="#{feed.blog.description}" required="true" rows="4"
+                <h:inputTextarea id="description" value="#{feedMod.feed.blog.description}" required="true" rows="4"
                                  cols="32">
                     <a:support event="onblur" reRender="descriptionMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
@@ -74,7 +74,7 @@
 
             <h:outputLabel for="link"><span class="required">*</span> Link to blog:</h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="link" value="#{feed.blog.link}" required="true" size="64">
+                <h:inputText id="link" value="#{feedMod.feed.blog.link}" required="true" size="64">
                     <a:support event="onblur" reRender="linkMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -88,7 +88,7 @@
                 <span class="required">*</span> Maximum number of posts in a feed:
             </h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="maxPostsInFeed" value="#{feed.maxPostsInFeed}" required="true" size="16">
+                <h:inputText id="maxPostsInFeed" value="#{feedMod.feed.maxPostsInFeed}" required="true" size="16">
                     <a:support event="onblur" reRender="maxPostsInFeedMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -102,7 +102,7 @@
                 <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">
+                <h:inputText id="maxPostsOnPage" value="#{feedMod.feed.maxPostsOnPage}" required="true" size="16">
                     <a:support event="onblur" reRender="maxPostsOnPageMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -114,7 +114,7 @@
 
             <h:outputLabel for="useBlogAuthorInPosts">Overwrite post author with blog author in posts:</h:outputLabel>
             <h:panelGroup>
-                <h:selectBooleanCheckbox id="useBlogAuthorInPosts" value="#{feed.useBlogAuthorInPosts}"
+                <h:selectBooleanCheckbox id="useBlogAuthorInPosts" value="#{feedMod.feed.useBlogAuthorInPosts}"
                                          required="true">
                     <a:support event="onblur" reRender="useBlogAuthorInPostsMessage" ajaxSingle="true"
                                bypassUpdates="true"/>
@@ -136,11 +136,11 @@
 
         <h3>Posts preview:</h3>
 
-        <h:panelGroup rendered="#{feed.blog.posts.size() == 0}">
+        <h:panelGroup rendered="#{feedMod.feed.blog.posts.size() == 0}">
             This feed doesn't have any posts. Unable to preview.
         </h:panelGroup>
-        <h:panelGroup rendered="#{feed.blog.posts.size() > 0}">
-            <h:dataTable value="#{feed.blog.posts}" var="post" rows="1">
+        <h:panelGroup rendered="#{feedMod.feed.blog.posts.size() > 0}">
+            <h:dataTable value="#{feedMod.feed.blog.posts}" var="post" rows="1">
                 <h:column>
                     <h:panelGrid columns="2">
                         <h:outputText value="Title:" />

Modified: trunk/view/manage/index.xhtml
===================================================================
--- trunk/view/manage/index.xhtml	2007-11-24 17:25:27 UTC (rev 136)
+++ trunk/view/manage/index.xhtml	2007-11-24 18:42:07 UTC (rev 137)
@@ -16,7 +16,12 @@
 
         <ui:repeat var="feed" value="#{feedsService.allFeeds}">
             <p>
-                #{feed.name}
+                #{feed.displayName} (#{feed.type}) <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.type).editPage}" value="Edit specific" />
             </p>
         </ui:repeat>
     </ui:define>

Copied: trunk/view/manage/remote/remote_add.xhtml (from rev 134, trunk/view/manage/remote_add.xhtml)
===================================================================
--- trunk/view/manage/remote/remote_add.xhtml	                        (rev 0)
+++ trunk/view/manage/remote/remote_add.xhtml	2007-11-24 18:42:07 UTC (rev 137)
@@ -0,0 +1,52 @@
+<!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>Add a new remote feed</h1>
+
+        <h:form>
+            <h:panelGrid columns="2">
+                <h:outputLabel><span class="required">*</span> Remote feed address:</h:outputLabel> <br />
+                <h:panelGroup>
+                    <h:inputText id="link" value="#{remoteFeedMod.link}" required="true" size="64">
+                        <s:validate />
+                    </h:inputText>
+                    <a:outputPanel id="linkMessage">
+                        <h:message for="link" styleClass="error" />
+                    </a:outputPanel>
+                </h:panelGroup>
+
+                <h:panelGroup />
+                <h:panelGroup>
+                    <a:commandButton action="#{remoteFeedMod.parseFeed}" value="Read and parse the feed"
+                                     reRender="parseStatus,proceed,linkMessage,link" />
+                    <a:status stopText="" startText="Wait ..." />
+                </h:panelGroup>
+
+                <h:panelGroup />
+                <h:panelGroup id="parseStatus">
+                    <h:panelGroup rendered="#{remoteFeedMod.parseOk}">
+                        Parsing the feed was successfull! You can proceed.
+                    </h:panelGroup>
+                    <h:panelGroup rendered="#{!remoteFeedMod.parseOk and remoteFeedMod.parseException != null}">
+                        Parsing the feed failed, because of the following exception:
+                        #{newRemoteFeed.parseException.message}
+                    </h:panelGroup>
+                </h:panelGroup>
+
+                <h:panelGroup />
+                <h:panelGroup id="proceed">
+                    <s:button rendered="#{remoteFeedMod.parseOk}" value="Next &#187;"
+                              view="/manage/feed_add.xhtml" />
+                </h:panelGroup>
+            </h:panelGrid>
+        </h:form>
+    </ui:define>
+</ui:composition>

Modified: trunk/view/view/feed.xhtml
===================================================================
--- trunk/view/view/feed.xhtml	2007-11-24 17:25:27 UTC (rev 136)
+++ trunk/view/view/feed.xhtml	2007-11-24 18:42:07 UTC (rev 137)
@@ -36,7 +36,7 @@
 
                 <hr />
 
-                <!-- <h:outputText value="#{post.content}" escape="false" /> -->
+                <h:outputText value="#{post.content}" escape="false" />
             </rich:panel>
 
             <br />




More information about the jboss-cvs-commits mailing list