[jboss-cvs] JBossBlog SVN: r146 - in trunk: src/action/org/jboss/blog/session/feed/aggregated and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 30 06:56:27 EST 2007


Author: adamw
Date: 2007-11-30 06:56:27 -0500 (Fri, 30 Nov 2007)
New Revision: 146

Modified:
   trunk/src/action/org/jboss/blog/session/feed/FeedModBean.java
   trunk/src/action/org/jboss/blog/session/feed/aggregated/AggregatedFeedModBean.java
   trunk/src/action/org/jboss/blog/session/feed/remote/RemoteFeedModBean.java
   trunk/src/action/org/jboss/blog/session/template/DatabaseResourceLoader.java
   trunk/src/action/org/jboss/blog/session/template/TemplateService.java
   trunk/src/action/org/jboss/blog/session/template/VelocityTemplateService.java
   trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java
   trunk/src/action/org/jboss/blog/session/view/PostViewBean.java
   trunk/src/model/org/jboss/blog/model/Feed.java
   trunk/view/home.xhtml
   trunk/view/manage/aggregated/aggregated_mod.xhtml
   trunk/view/manage/feed_mod.xhtml
Log:


Modified: trunk/src/action/org/jboss/blog/session/feed/FeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/FeedModBean.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/action/org/jboss/blog/session/feed/FeedModBean.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -2,6 +2,8 @@
 
 import org.jboss.blog.model.Feed;
 import org.jboss.blog.model.Post;
+import org.jboss.blog.model.TemplateType;
+import org.jboss.blog.model.Template;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.AutoCreate;
 import org.jboss.seam.annotations.In;
@@ -10,6 +12,8 @@
 import org.jboss.seam.core.Events;
 
 import javax.persistence.EntityManager;
+import java.io.Serializable;
+import java.util.HashMap;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -17,7 +21,7 @@
 @Scope(ScopeType.CONVERSATION)
 @Name("feedMod")
 @AutoCreate
-public class FeedModBean {
+public class FeedModBean implements Serializable {
     private Feed feed;
 
     @In
@@ -27,6 +31,7 @@
         this.feed = feed;
         feed.setMaxPostsInFeed(10);
         feed.setMaxPostsOnPage(10);
+        feed.setTemplates(new HashMap<TemplateType, Template>());
     }
 
     public Feed getFeed() {
@@ -37,6 +42,10 @@
         this.feed = feed;
     }
 
+    public TemplateType[] getTemplateTypes() {
+        return TemplateType.values();
+    }
+
     public void saveNew() {
         entityManager.persist(feed);
 

Modified: trunk/src/action/org/jboss/blog/session/feed/aggregated/AggregatedFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/aggregated/AggregatedFeedModBean.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/action/org/jboss/blog/session/feed/aggregated/AggregatedFeedModBean.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -6,13 +6,16 @@
 import org.jboss.blog.service.FeedsService;
 import org.jboss.blog.session.feed.FeedModBean;
 import org.jboss.blog.session.feed.InvalidFeedTypeException;
+import org.jboss.blog.tools.GeneralTools;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.Create;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Scope;
 
+import javax.faces.model.SelectItem;
 import javax.persistence.EntityManager;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -21,7 +24,7 @@
  */
 @Scope(ScopeType.CONVERSATION)
 @Name("aggregatedFeedMod")
-public class AggregatedFeedModBean {
+public class AggregatedFeedModBean implements Serializable {
     @In
     private FeedModBean feedMod;
 
@@ -33,8 +36,9 @@
 
     private AggregatedFeed aggregatedFeed;
 
-    private List<Feed> availableFeeds;
-    private List<Feed> selectedFeeds;
+    // We have to use SelectItem-s because of a bug with coerce in JSF RI.
+    private List<SelectItem> availableFeeds;
+    private List<String> selectedFeeds;
 
     public AggregatedFeed getAggregatedFeed() {
         if (aggregatedFeed == null) {
@@ -58,28 +62,38 @@
 
     @Create
     public void populateLists() {
-        availableFeeds = feedsService.getAllFeeds(); 
-        availableFeeds.remove(getAggregatedFeed());
+        availableFeeds = new ArrayList<SelectItem>();
+        for (Feed feed : feedsService.getAllFeeds()) {
+            if (!GeneralTools.objectsEquals(getAggregatedFeed().getName(), feed.getName())) {
+                availableFeeds.add(new SelectItem(feed.getName()));
+            }
+        }
 
-        selectedFeeds = getAggregatedFeed().getFeeds();
+        selectedFeeds = new ArrayList<String>();
+        for (Feed feed : getAggregatedFeed().getFeeds()) {
+            selectedFeeds.add(feed.getName());
+        }
     }
 
-    public List<Feed> getAvailableFeeds() {
+    public List<SelectItem> getAvailableFeeds() {
         return availableFeeds;
     }
 
-    public List<Feed> getSelectedFeeds() {
+    public List<String> getSelectedFeeds() {
         return selectedFeeds;
     }
 
-    public void setSelectedFeeds(List<Feed> selectedFeeds) {
+    public void setSelectedFeeds(List<String> selectedFeeds) {
         this.selectedFeeds = selectedFeeds;
     }
 
     private void save() {
         List<Feed> currentAggregatedFeeds = getAggregatedFeed().getFeeds();
         currentAggregatedFeeds.clear();
-        currentAggregatedFeeds.addAll(getSelectedFeeds());
+
+        for (String si : getSelectedFeeds()) {
+            currentAggregatedFeeds.add(feedsService.getFeed(si));
+        }
     }
 
     public void saveNew() {

Modified: trunk/src/action/org/jboss/blog/session/feed/remote/RemoteFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/remote/RemoteFeedModBean.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/action/org/jboss/blog/session/feed/remote/RemoteFeedModBean.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -12,13 +12,14 @@
 import org.jboss.seam.annotations.Scope;
 
 import javax.persistence.EntityManager;
+import java.io.Serializable;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Scope(ScopeType.CONVERSATION)
 @Name("remoteFeedMod")
-public class RemoteFeedModBean {
+public class RemoteFeedModBean implements Serializable {
     @In
     private ParserService parserService;
 

Modified: trunk/src/action/org/jboss/blog/session/template/DatabaseResourceLoader.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/template/DatabaseResourceLoader.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/action/org/jboss/blog/session/template/DatabaseResourceLoader.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -25,7 +25,6 @@
     }
 
     public InputStream getResourceStream(String name) throws ResourceNotFoundException {
-        System.out.println("get res: " + name);
         try {
             return new ByteArrayInputStream(getTemplate(name).getText().getBytes());
         } catch (NoResultException e) {
@@ -34,7 +33,6 @@
     }
 
     public boolean isSourceModified(Resource resource) {
-        System.out.println("is mod: " + resource.getName());
         try {
             return resource.getLastModified() != getLastModified(resource);
         } catch (NoResultException e) {
@@ -43,7 +41,6 @@
     }
 
     public long getLastModified(Resource resource) {
-        System.out.println("last mod: " + resource.getName());
         try {
             return getTemplate(resource.getName()).getLastModified().getTime();
         } catch (NoResultException e) {

Modified: trunk/src/action/org/jboss/blog/session/template/TemplateService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/template/TemplateService.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/action/org/jboss/blog/session/template/TemplateService.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -1,16 +1,23 @@
 package org.jboss.blog.session.template;
 
 import org.jboss.blog.model.Template;
+import org.jboss.blog.model.TemplateType;
 
+import javax.ejb.Local;
 import javax.servlet.ServletResponse;
 import java.util.List;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
+ at Local
 public interface TemplateService {
     void writeTemplate(String feedType, String feedName, ServletResponse response)
             throws Exception;
 
     List<Template> getAllTemplates();
+
+    List<Template> templatesOfType(TemplateType type);
+
+    void remove();
 }

Modified: trunk/src/action/org/jboss/blog/session/template/VelocityTemplateService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/template/VelocityTemplateService.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/action/org/jboss/blog/session/template/VelocityTemplateService.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -7,11 +7,15 @@
 import org.jboss.blog.model.Post;
 import org.jboss.blog.model.TemplateType;
 import org.jboss.blog.service.FeedsService;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.*;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
 
+import javax.ejb.Remove;
+import javax.ejb.Stateless;
 import javax.persistence.EntityManager;
 import javax.servlet.ServletResponse;
+import javax.annotation.PostConstruct;
 import java.util.List;
 import java.util.Properties;
 
@@ -19,7 +23,7 @@
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Name("templateService")
- at Scope(ScopeType.APPLICATION)
+ at Stateless
 @AutoCreate
 public class VelocityTemplateService implements TemplateService {
     @In
@@ -30,12 +34,16 @@
 
     private VelocityEngine engine;
 
-    @Create
-    public void initVeloctiy() throws Exception {
-        Properties props = new Properties();
-        props.load(this.getClass().getResourceAsStream("/velocity.properties"));
+    @PostConstruct
+    public void initVeloctiy() {
+        try {
+            Properties props = new Properties();
+            props.load(this.getClass().getResourceAsStream("/velocity.properties"));
         
-        engine = new VelocityEngine(props);
+            engine = new VelocityEngine(props);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
     public void writeTemplate(String feedType, String feedName, ServletResponse response)
@@ -64,4 +72,13 @@
     public List<org.jboss.blog.model.Template> getAllTemplates() {
         return entityManager.createQuery("select t from Template t order by t.name, t.type").getResultList();
     }
+
+    @SuppressWarnings("unchecked")
+    public List<org.jboss.blog.model.Template> templatesOfType(TemplateType type) {
+        return entityManager.createQuery("select t from Template t where t.type = ?1 order by t.name")
+                .setParameter(1, type).getResultList();
+    }
+
+    @Remove
+    public void remove() { }
 }

Modified: trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -9,13 +9,14 @@
 import org.jboss.seam.annotations.Scope;
 
 import java.util.List;
+import java.io.Serializable;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Name("feedView")
 @Scope(ScopeType.CONVERSATION)
-public class FeedViewBean {
+public class FeedViewBean implements Serializable {
     @In
     private FeedsService feedsService;
 

Modified: trunk/src/action/org/jboss/blog/session/view/PostViewBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/PostViewBean.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/action/org/jboss/blog/session/view/PostViewBean.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -3,11 +3,13 @@
 import org.jboss.blog.model.Post;
 import org.jboss.seam.annotations.Name;
 
+import java.io.Serializable;
+
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Name("postView")
-public class PostViewBean {
+public class PostViewBean implements Serializable {
     private Post post;
 
     public Post getPost() {

Modified: trunk/src/model/org/jboss/blog/model/Feed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Feed.java	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/src/model/org/jboss/blog/model/Feed.java	2007-11-30 11:56:27 UTC (rev 146)
@@ -1,13 +1,12 @@
 package org.jboss.blog.model;
 
-import org.hibernate.annotations.CollectionOfElements;
 import org.hibernate.validator.Length;
 import org.hibernate.validator.NotEmpty;
 import org.hibernate.validator.Pattern;
 
 import javax.persistence.*;
-import java.util.Map;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -43,8 +42,8 @@
     @Lob
     private String description;
 
-    @CollectionOfElements
-    private Map<TemplateType, String> templates;
+    @ManyToMany
+    private Map<TemplateType, Template> templates;
 
     @Column
     private int maxPostsInFeed;
@@ -116,11 +115,11 @@
         this.description = description;
     }
 
-    public Map<TemplateType, String> getTemplates() {
+    public Map<TemplateType, Template> getTemplates() {
         return templates;
     }
 
-    public void setTemplates(Map<TemplateType, String> templates) {
+    public void setTemplates(Map<TemplateType, Template> templates) {
         this.templates = templates;
     }
 

Modified: trunk/view/home.xhtml
===================================================================
--- trunk/view/home.xhtml	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/view/home.xhtml	2007-11-30 11:56:27 UTC (rev 146)
@@ -11,7 +11,7 @@
         <h1>Feeds central</h1>
 
         <p>
-            <s:link value="Manage feeds" view="/manage/index.xhtml" propagation="none" />
+            <s:link value="Manage" view="/manage/index.xhtml" propagation="none" />
         </p>
 
         <h3>Select a feed to view:</h3>

Modified: trunk/view/manage/aggregated/aggregated_mod.xhtml
===================================================================
--- trunk/view/manage/aggregated/aggregated_mod.xhtml	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/view/manage/aggregated/aggregated_mod.xhtml	2007-11-30 11:56:27 UTC (rev 146)
@@ -13,9 +13,7 @@
 
             <h:panelGroup>
                 <h:selectManyCheckbox value="#{aggregatedFeedMod.selectedFeeds}" layout="pageDirection">
-                    <s:selectItems var="feed" value="#{aggregatedFeedMod.availableFeeds}"
-                                   label="#{feed.title}" />
-                    <s:convertEntity />
+                    <f:selectItems value="#{aggregatedFeedMod.availableFeeds}" />
                 </h:selectManyCheckbox>
             </h:panelGroup>
 

Modified: trunk/view/manage/feed_mod.xhtml
===================================================================
--- trunk/view/manage/feed_mod.xhtml	2007-11-30 09:47:56 UTC (rev 145)
+++ trunk/view/manage/feed_mod.xhtml	2007-11-30 11:56:27 UTC (rev 146)
@@ -8,158 +8,174 @@
                 xmlns:rich="http://richfaces.org/rich"
                 xmlns:blog="http://jboss.org/blog/tags"
                 xmlns:a="http://richfaces.org/a4j">
-    <h:form>
-        <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="#{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>
+<h:form>
+<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="#{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>
 
-                <a:outputPanel id="nameMessage">
-                    <h:message for="name" styleClass="error" />
-                </a:outputPanel>
-            </h:panelGroup>
+    <a:outputPanel id="nameMessage">
+        <h:message for="name" styleClass="error" />
+    </a:outputPanel>
+</h:panelGroup>
 
-            <h:outputLabel for="title"><span class="required">*</span> Title:</h:outputLabel>
-            <h:panelGroup>
-                <h:inputText id="title" value="#{feedMod.feed.title}" required="true" size="32">
-                    <a:support event="onblur" reRender="titleMessage" ajaxSingle="true" bypassUpdates="true"/>
-                    <s:validate />
-                </h:inputText>
+<h:outputLabel for="title"><span class="required">*</span> Title:</h:outputLabel>
+<h:panelGroup>
+    <h:inputText id="title" value="#{feedMod.feed.title}" required="true" size="32">
+        <a:support event="onblur" reRender="titleMessage" ajaxSingle="true" bypassUpdates="true"/>
+        <s:validate />
+    </h:inputText>
 
-                <a:outputPanel id="titleMessage">
-                    <h:message for="title" styleClass="error" />
-                </a:outputPanel>
-            </h:panelGroup>
+    <a:outputPanel id="titleMessage">
+        <h:message for="title" styleClass="error" />
+    </a:outputPanel>
+</h:panelGroup>
 
-            <h:outputLabel for="author"><span class="required">*</span> Author:</h:outputLabel>
-            <h:panelGroup>
-                <h:inputText id="author" value="#{feedMod.feed.author}" required="true" size="32">
-                    <a:support event="onblur" reRender="authorMessage" ajaxSingle="true" bypassUpdates="true"/>
-                    <s:validate />
-                </h:inputText>
+<h:outputLabel for="author"><span class="required">*</span> Author:</h:outputLabel>
+<h:panelGroup>
+    <h:inputText id="author" value="#{feedMod.feed.author}" required="true" size="32">
+        <a:support event="onblur" reRender="authorMessage" ajaxSingle="true" bypassUpdates="true"/>
+        <s:validate />
+    </h:inputText>
 
-                <a:outputPanel id="authorMessage">
-                    <h:message for="author" styleClass="error" />
-                </a:outputPanel>
-            </h:panelGroup>
+    <a:outputPanel id="authorMessage">
+        <h:message for="author" styleClass="error" />
+    </a:outputPanel>
+</h:panelGroup>
 
-            <h:outputLabel for="description">Description:</h:outputLabel>
-            <h:panelGroup>
-                <h:inputTextarea id="description" value="#{feedMod.feed.description}" rows="4" cols="32">
-                    <a:support event="onblur" reRender="descriptionMessage" ajaxSingle="true" bypassUpdates="true"/>
-                    <s:validate />
-                </h:inputTextarea>
+<h:outputLabel for="description">Description:</h:outputLabel>
+<h:panelGroup>
+    <h:inputTextarea id="description" value="#{feedMod.feed.description}" rows="4" cols="32">
+        <a:support event="onblur" reRender="descriptionMessage" ajaxSingle="true" bypassUpdates="true"/>
+        <s:validate />
+    </h:inputTextarea>
 
-                <a:outputPanel id="descriptionMessage">
-                    <h:message for="description" styleClass="error" />
-                </a:outputPanel>
-            </h:panelGroup>
+    <a:outputPanel id="descriptionMessage">
+        <h:message for="description" styleClass="error" />
+    </a:outputPanel>
+</h:panelGroup>
 
-            <h:outputLabel for="link"><span class="required">*</span> Link to blog:</h:outputLabel>
-            <h:panelGroup>
-                <h:inputText id="link" value="#{feedMod.feed.link}" required="true" size="64">
-                    <a:support event="onblur" reRender="linkMessage" ajaxSingle="true" bypassUpdates="true"/>
-                    <s:validate />
-                </h:inputText>
+<h:outputLabel for="link"><span class="required">*</span> Link to blog:</h:outputLabel>
+<h:panelGroup>
+    <h:inputText id="link" value="#{feedMod.feed.link}" required="true" size="64">
+        <a:support event="onblur" reRender="linkMessage" ajaxSingle="true" bypassUpdates="true"/>
+        <s:validate />
+    </h:inputText>
 
-                <a:outputPanel id="linkMessage">
-                    <h:message for="link" styleClass="error" />
-                </a:outputPanel>
-            </h:panelGroup>
+    <a:outputPanel id="linkMessage">
+        <h:message for="link" styleClass="error" />
+    </a:outputPanel>
+</h:panelGroup>
 
-            <h:outputLabel for="maxPostsInFeed">
-                <span class="required">*</span> Maximum number of posts in a feed:
-            </h:outputLabel>
-            <h:panelGroup>
-                <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>
+<h:outputLabel for="maxPostsInFeed">
+    <span class="required">*</span> Maximum number of posts in a feed:
+</h:outputLabel>
+<h:panelGroup>
+    <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>
 
-                <a:outputPanel id="maxPostsInFeedMessage">
-                    <h:message for="maxPostsInFeed" styleClass="error" />
-                </a:outputPanel>
-            </h:panelGroup>
+    <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="#{feedMod.feed.maxPostsOnPage}" required="true" size="16">
-                    <a:support event="onblur" reRender="maxPostsOnPageMessage" ajaxSingle="true" bypassUpdates="true"/>
-                    <s:validate />
-                </h:inputText>
+<h:outputLabel for="maxPostsOnPage">
+    <span class="required">*</span> Maximum number of posts to display:
+</h:outputLabel>
+<h:panelGroup>
+    <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>
 
-                <a:outputPanel id="maxPostsOnPageMessage">
-                    <h:message for="maxPostsOnPage" styleClass="error" />
-                </a:outputPanel>
-            </h:panelGroup>
+    <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="#{feedMod.feed.useBlogAuthorInPosts}"
-                                         required="true">
-                    <a:support event="onblur" reRender="useBlogAuthorInPostsMessage" ajaxSingle="true"
-                               bypassUpdates="true"/>
-                    <s:validate />
-                </h:selectBooleanCheckbox>
+<h:outputLabel for="useBlogAuthorInPosts">Overwrite post author with blog author in posts:</h:outputLabel>
+<h:panelGroup>
+    <h:selectBooleanCheckbox id="useBlogAuthorInPosts" value="#{feedMod.feed.useBlogAuthorInPosts}"
+                             required="true">
+        <a:support event="onblur" reRender="useBlogAuthorInPostsMessage" ajaxSingle="true"
+                   bypassUpdates="true"/>
+        <s:validate />
+    </h:selectBooleanCheckbox>
 
-                <a:outputPanel id="useBlogAuthorInPostsMessage">
-                    <h:message for="useBlogAuthorInPosts" styleClass="error" />
-                </a:outputPanel>
-            </h:panelGroup>
+    <a:outputPanel id="useBlogAuthorInPostsMessage">
+        <h:message for="useBlogAuthorInPosts" styleClass="error" />
+    </a:outputPanel>
+</h:panelGroup>
 
-            <h:outputLabel />
-            <h:panelGroup>
-                <h:commandButton value="Add" action="#{feedMod.saveNew}" rendered="#{new}" />
-                <h:commandButton value="Save" action="#{feedMod.saveExisting}" rendered="#{!new}" />
-                <s:button value="Cancel" view="/manage/index.html" propagation="end" />
-            </h:panelGroup>
-        </h:panelGrid>
+<h:outputLabel for="useBlogAuthorInPosts"><span class="required">*</span> Templates:</h:outputLabel>
+<h:panelGroup>
+    <h:dataTable var="templateType" value="#{feedMod.templateTypes}">
+        <h:column>
+            #{templateType}:
+        </h:column>
+        <h:column>
+            <h:selectOneMenu value="#{feedMod.feed.templates[templateType]}">
+                <s:convertEntity />
+                <s:selectItems var="template" value="#{templateService.templatesOfType(templateType)}"
+                               label="#{template.name}" />
+            </h:selectOneMenu>
+        </h:column>
+    </h:dataTable>
+</h:panelGroup>
 
-        <h3>Posts preview:</h3>
+<h:outputLabel />
+<h:panelGroup>
+    <h:commandButton value="Add" action="#{feedMod.saveNew}" rendered="#{new}" />
+    <h:commandButton value="Save" action="#{feedMod.saveExisting}" rendered="#{!new}" />
+    <s:button value="Cancel" view="/manage/index.html" propagation="end" />
+</h:panelGroup>
+</h:panelGrid>
 
-        <h:panelGroup rendered="#{feedMod.feed.posts.size() == 0}">
-            This feed doesn't have any posts. Unable to preview.
-        </h:panelGroup>
-        <h:panelGroup rendered="#{feedMod.feed.posts.size() > 0}">
-            <h:dataTable value="#{feedMod.feed.posts}" var="post" rows="1">
-                <h:column>
-                    <h:panelGrid columns="2">
-                        <h:outputText value="Title:" />
-                        <h:outputText value="#{post.title}" />
+<h3>Posts preview:</h3>
 
-                        <h:outputText value="Title as id:" />
-                        <h:outputText value="#{post.titleAsId}" />
+<h:panelGroup rendered="#{feedMod.feed.posts.size() == 0}">
+    This feed doesn't have any posts. Unable to preview.
+</h:panelGroup>
+<h:panelGroup rendered="#{feedMod.feed.posts.size() > 0}">
+    <h:dataTable value="#{feedMod.feed.posts}" var="post" rows="1">
+        <h:column>
+            <h:panelGrid columns="2">
+                <h:outputText value="Title:" />
+                <h:outputText value="#{post.title}" />
 
-                        <h:outputText value="Author:" />
-                        <h:outputText value="#{post.author}" />
+                <h:outputText value="Title as id:" />
+                <h:outputText value="#{post.titleAsId}" />
 
-                        <h:outputText value="Published date:" />
-                        <h:outputText value="#{post.published}" />
+                <h:outputText value="Author:" />
+                <h:outputText value="#{post.author}" />
 
-                        <h:outputText value="Modified date:" />
-                        <h:outputText value="#{post.modified}" />
+                <h:outputText value="Published date:" />
+                <h:outputText value="#{post.published}" />
 
-                        <h:outputText value="Link:" />
-                        <h:outputText value="#{post.link}" />
+                <h:outputText value="Modified date:" />
+                <h:outputText value="#{post.modified}" />
 
-                        <h:outputText value="Categories:" />
-                        <h:panelGroup>
-                            <ui:repeat var="category" value="#{post.categories}">
-                                #{category}; 
-                            </ui:repeat>
-                        </h:panelGroup>
+                <h:outputText value="Link:" />
+                <h:outputText value="#{post.link}" />
 
-                        <h:outputText value="Content:" />
-                        <h:outputText value="#{post.content}" escape="false" />
-                    </h:panelGrid>
-                </h:column>
-            </h:dataTable>
-        </h:panelGroup>
-    </h:form>
+                <h:outputText value="Categories:" />
+                <h:panelGroup>
+                    <ui:repeat var="category" value="#{post.categories}">
+                        #{category};
+                    </ui:repeat>
+                </h:panelGroup>
+
+                <h:outputText value="Content:" />
+                <h:outputText value="#{post.content}" escape="false" />
+            </h:panelGrid>
+        </h:column>
+    </h:dataTable>
+</h:panelGroup>
+</h:form>
 </ui:composition>




More information about the jboss-cvs-commits mailing list