[jboss-cvs] JBossBlog SVN: r135 - in trunk: resources/META-INF and 12 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 23 12:58:00 EST 2007


Author: adamw
Date: 2007-11-23 12:57:59 -0500 (Fri, 23 Nov 2007)
New Revision: 135

Added:
   trunk/resources/META-INF/jbossblog.taglib.xml
   trunk/src/action/org/jboss/blog/service/
   trunk/src/action/org/jboss/blog/service/FeedNotFoundException.java
   trunk/src/action/org/jboss/blog/service/FeedsService.java
   trunk/src/action/org/jboss/blog/session/converter/
   trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java
   trunk/src/action/org/jboss/blog/session/feed/
   trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
   trunk/src/action/org/jboss/blog/session/validator/
   trunk/src/action/org/jboss/blog/session/validator/UniqueFeedNameValidator.java
   trunk/src/model/org/jboss/blog/model/RemoteFeedType.java
   trunk/view/view/
   trunk/view/view/feed.xhtml
Removed:
   trunk/src/action/org/jboss/blog/session/manage/NewRemoteFeedBean.java
   trunk/view/manage/add_remote.xhtml
Modified:
   trunk/blog.iml
   trunk/build.xml
   trunk/resources/WEB-INF/pages.xml
   trunk/src/action/org/jboss/blog/session/manage/FeedModBean.java
   trunk/src/model/org/jboss/blog/model/AggregatedFeed.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/src/model/org/jboss/blog/model/RemoteFeed.java
   trunk/view/home.xhtml
   trunk/view/manage/feed_mod.xhtml
   trunk/view/manage/index.xhtml
Log:


Modified: trunk/blog.iml
===================================================================
--- trunk/blog.iml	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/blog.iml	2007-11-23 17:57:59 UTC (rev 135)
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module relativePaths="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="jpa" name="JPA">
+      <configuration>
+        <setting name="validation-enabled" value="true" />
+        <datasource-mapping>
+          <factory-entry name="blog" value="Datasource3" />
+        </datasource-mapping>
+        <deploymentDescriptor name="persistence.xml" url="file://$MODULE_DIR$/resources/META-INF/persistence-dev.xml" optional="false" version="1.0" />
+      </configuration>
+    </facet>
+  </component>
   <component name="NewModuleRootManager" inherit-compiler-output="true">
     <exclude-output />
     <content url="file://$MODULE_DIR$">
@@ -38,6 +49,15 @@
           <root url="jar://$MODULE_DIR$/lib/hibernate-search.jar!/" />
           <root url="jar://$MODULE_DIR$/lib/hibernate.jar!/" />
           <root url="jar://$MODULE_DIR$/lib/hibernate-validator.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/commons-logging.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/commons-collections.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/commons-lang.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/commons-beanutils.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/cglib.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/commons-digester.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/asm.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/antlr.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/dom4j.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />

Modified: trunk/build.xml
===================================================================
--- trunk/build.xml	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/build.xml	2007-11-23 17:57:59 UTC (rev 135)
@@ -168,6 +168,7 @@
                         <fileset dir="${basedir}/resources/META-INF">
                                 <include name="application.xml" />
                                 <include name="jboss-app.xml" />
+                                <include name="jbossblog.taglib.xml" />
                         </fileset>
                 </copy>
         </target>

Added: trunk/resources/META-INF/jbossblog.taglib.xml
===================================================================
--- trunk/resources/META-INF/jbossblog.taglib.xml	                        (rev 0)
+++ trunk/resources/META-INF/jbossblog.taglib.xml	2007-11-23 17:57:59 UTC (rev 135)
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE facelet-taglib PUBLIC
+        "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+        "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+<facelet-taglib>
+    <namespace>http://jboss.org/blog/tags</namespace>
+
+    <tag>
+        <tag-name>uniqueFeedNameValidator</tag-name>
+        <validator>
+            <validator-id>uniqueFeedNameValidator</validator-id>
+        </validator>
+    </tag>
+</facelet-taglib>
\ No newline at end of file

Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/resources/WEB-INF/pages.xml	2007-11-23 17:57:59 UTC (rev 135)
@@ -14,6 +14,25 @@
         </navigation>
     </page>
 
+    <!-- View feeds -->
+
+    <page view-id="/view/feed.xhtml">
+        <param name="name" converterId="feedConverter" value="#{feed}" />
+    </page>
+
+    <!-- Manage feeds -->
+
+    <page view-id="/manage/add.xhtml" conversation-required="true">
+        <begin-conversation flush-mode="manual" join="true" />
+    </page>
+
+    <page view-id="/manage/feed_add.xhtml">
+        <navigation from-action="#{feedMod.saveNew}">
+            <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">

Added: trunk/src/action/org/jboss/blog/service/FeedNotFoundException.java
===================================================================
--- trunk/src/action/org/jboss/blog/service/FeedNotFoundException.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/service/FeedNotFoundException.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -0,0 +1,21 @@
+package org.jboss.blog.service;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class FeedNotFoundException extends RuntimeException {
+    public FeedNotFoundException() {
+    }
+
+    public FeedNotFoundException(String message) {
+        super(message);
+    }
+
+    public FeedNotFoundException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public FeedNotFoundException(Throwable cause) {
+        super(cause);
+    }
+}

Added: trunk/src/action/org/jboss/blog/service/FeedsService.java
===================================================================
--- trunk/src/action/org/jboss/blog/service/FeedsService.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/service/FeedsService.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -0,0 +1,24 @@
+package org.jboss.blog.service;
+
+import org.jboss.blog.model.Feed;
+import org.jboss.blog.model.Post;
+import org.jboss.blog.service.FeedNotFoundException;
+
+import javax.ejb.Local;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Local
+public interface FeedsService {
+    public List<Feed> getAllFeeds();
+
+    public Feed getFeed(String feedName) throws FeedNotFoundException;
+
+    public List<Post> getPosts(String feedName, int from, int to) throws FeedNotFoundException;
+
+    public List<Post> getPosts(Feed feed, int from, int to);
+
+    public void remove();
+}

Added: trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/converter/FeedConverter.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -0,0 +1,44 @@
+package org.jboss.blog.session.converter;
+
+import org.jboss.blog.model.Feed;
+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("feedConverter")
+ at BypassInterceptors
+ at Converter
+public class FeedConverter 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 feed from Feed feed where feed.name = ?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 : ((Feed) value).getName();
+    }
+}

Added: trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -0,0 +1,50 @@
+package org.jboss.blog.session.feed;
+
+import org.jboss.blog.model.Feed;
+import org.jboss.blog.model.Post;
+import org.jboss.blog.service.FeedsService;
+import org.jboss.blog.service.FeedNotFoundException;
+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.persistence.NoResultException;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Stateless
+ at Name("feedsService")
+public class FeedsServiceImpl implements FeedsService {
+    @In
+    private EntityManager entityManager;
+
+    public List<Feed> getAllFeeds() {
+        return entityManager.createQuery("select feed from Feed feed order by feed.name").getResultList();
+    }
+
+    public Feed getFeed(String feedName) throws FeedNotFoundException {
+        try {
+            return (Feed) entityManager.createQuery("select feed from Feed feed where feed.name = ?1")
+                    .setParameter(1, feedName).getSingleResult();
+        } catch (NoResultException e) {
+            throw new FeedNotFoundException();
+        }
+    }
+
+    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();
+    }
+
+    public List<Post> getPosts(String feedName, int from, int to) throws FeedNotFoundException {
+        return getPosts(getFeed(feedName), from, to);
+    }
+
+    @Remove
+    public void remove() { }
+}

Modified: trunk/src/action/org/jboss/blog/session/manage/FeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/manage/FeedModBean.java	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/src/action/org/jboss/blog/session/manage/FeedModBean.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -1,25 +1,39 @@
 package org.jboss.blog.session.manage;
 
 import org.jboss.blog.model.Feed;
+import org.jboss.blog.model.Post;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Scope;
 
+import javax.persistence.EntityManager;
+
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
- at Scope(ScopeType.CONVERSATION)
+ at Scope(ScopeType.STATELESS)
 @Name("feedMod")
 public class FeedModBean {
     @In
     private Feed feed;
 
-    public Feed getFeed() {
-        return feed;
+    @In
+    private EntityManager entityManager;
+
+    public void saveNew() {
+        entityManager.persist(feed.getBlog());
+        
+        entityManager.persist(feed);
+
+        for (Post p : feed.getBlog().getPosts()) {   
+            entityManager.persist(p);
+        }
+
+        entityManager.flush();
     }
 
-    public void setFeed(Feed feed) {
-        this.feed = feed;
+    public void saveExisting() {
+        entityManager.flush();
     }
 }

Deleted: trunk/src/action/org/jboss/blog/session/manage/NewRemoteFeedBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/manage/NewRemoteFeedBean.java	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/src/action/org/jboss/blog/session/manage/NewRemoteFeedBean.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -1,60 +0,0 @@
-package org.jboss.blog.session.manage;
-
-import org.hibernate.validator.NotEmpty;
-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("newRemoteFeed")
-public class NewRemoteFeedBean {
-    @In
-    private ParserService parserService;
-
-    @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 {
-            System.out.println("getLink() = " + getLink());
-            parserService.parse(getLink());
-            setParseOk(true);
-        } catch (ParserException e) {
-            setParseException(e);
-            setParseOk(false);
-        }
-    }
-}

Added: trunk/src/action/org/jboss/blog/session/validator/UniqueFeedNameValidator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/validator/UniqueFeedNameValidator.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/validator/UniqueFeedNameValidator.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -0,0 +1,61 @@
+package org.jboss.blog.session.validator;
+
+import org.jboss.blog.tools.StringTools;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.faces.Validator;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.ValidatorException;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Validator
+ at Name("uniqueFeedNameValidator")
+public class UniqueFeedNameValidator implements javax.faces.validator.Validator {
+    @In
+    private EntityManager entityManager;
+
+    private String entityId;
+
+    public String getEntityId() {
+        return entityId;
+    }
+
+    public void setEntityId(String entityId) {
+        this.entityId = entityId;
+    }
+
+    public void validate(FacesContext context, UIComponent cmp, Object value)
+            throws ValidatorException {
+        String name = StringTools.safeToString(value);
+
+        Long id;
+
+        if (StringTools.isEmpty(entityId)) {
+            id = null;
+        } else {
+            id = Long.parseLong(entityId);
+        }
+
+        Query query;
+
+        if (id == null) {
+            query = entityManager.createQuery("select feed.id from Feed feed where feed.name = ?1")
+                    .setParameter(1, name);
+        } else {
+            query = entityManager.createQuery(
+                    "select feed.id from Feed feed where feed.name = ?1 and not (feed.id = ?2)")
+                    .setParameter(1, name).setParameter(2, id);
+        }
+
+        if (query.getResultList().size() != 0) {
+            throw new ValidatorException(new FacesMessage("A feed with that name already exists."));
+        }
+    }
+}

Modified: trunk/src/model/org/jboss/blog/model/AggregatedFeed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/AggregatedFeed.java	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/src/model/org/jboss/blog/model/AggregatedFeed.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -2,6 +2,7 @@
 
 import javax.persistence.Entity;
 import javax.persistence.ManyToMany;
+import javax.persistence.Transient;
 import java.util.List;
 
 /**
@@ -19,4 +20,10 @@
     public void setFeeds(List<Feed> feeds) {
         this.feeds = feeds;
     }
+
+    @Transient
+    @Override
+    public String getType() {
+        return "aggregated";
+    }
 }

Modified: trunk/src/model/org/jboss/blog/model/Blog.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Blog.java	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/src/model/org/jboss/blog/model/Blog.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -2,8 +2,6 @@
 
 import org.hibernate.validator.Length;
 import org.hibernate.validator.NotEmpty;
-import org.hibernate.validator.Pattern;
-import org.jboss.blog.tools.StringTools;
 
 import javax.persistence.*;
 import java.util.List;
@@ -21,11 +19,6 @@
     @Length(max = 512)
     private String title;
 
-    @NotEmpty
-    @Pattern(regex = "^[a-z0-9_]$")
-    @Column(unique = true)
-    private String titleAsLink;
-
     @Length(max = 256)
     private String author;
 
@@ -33,7 +26,7 @@
     @NotEmpty
     private String link;
 
-    @OneToMany(cascade = {CascadeType.REMOVE})
+    @OneToMany(cascade = {CascadeType.REMOVE}, mappedBy = "blog")
     private List<Post> posts;
 
     @Lob
@@ -52,18 +45,9 @@
     }
 
     public void setTitle(String title) {
-        setTitleAsLink(StringTools.convertTitleToLink(title));
         this.title = title;
     }
 
-    public String getTitleAsLink() {
-        return titleAsLink;
-    }
-
-    public void setTitleAsLink(String titleAsLink) {
-        this.titleAsLink = titleAsLink;
-    }
-
     public String getAuthor() {
         return author;
     }

Modified: trunk/src/model/org/jboss/blog/model/Feed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Feed.java	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/src/model/org/jboss/blog/model/Feed.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -1,7 +1,10 @@
 package org.jboss.blog.model;
 
 import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotEmpty;
 import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Pattern;
 
 import javax.persistence.*;
 import java.util.Map;
@@ -17,12 +20,22 @@
     @Column(updatable = false)
     private Integer id;
 
+    @NotEmpty
+    @Length(max = 16)
+    @Column(unique = true)
+    @Pattern(regex = "^[a-z0-9_/]*$", message = "Feed name may only contain small latin letters, number, _ and /.")
+    private String name;
+
+    @NotEmpty
+    @Length(max = 64)
+    private String displayName;
+
     @OneToOne(cascade = CascadeType.REMOVE)
     @NotNull
     private Blog blog;
 
     @CollectionOfElements
-    private Map<FeedType, String> templates;
+    private Map<RemoteFeedType, String> templates;
 
     @Column
     private int maxPosts;
@@ -30,6 +43,9 @@
     @Column
     private boolean useBlogAuthorInPosts;
 
+    @Transient
+    public abstract String getType();
+
     public Integer getId() {
         return id;
     }
@@ -38,6 +54,22 @@
         this.id = id;
     }
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDisplayName() {
+        return displayName;
+    }
+
+    public void setDisplayName(String displayName) {
+        this.displayName = displayName;
+    }
+
     public Blog getBlog() {
         return blog;
     }
@@ -46,11 +78,11 @@
         this.blog = blog;
     }
 
-    public Map<FeedType, String> getTemplates() {
+    public Map<RemoteFeedType, String> getTemplates() {
         return templates;
     }
 
-    public void setTemplates(Map<FeedType, String> templates) {
+    public void setTemplates(Map<RemoteFeedType, String> templates) {
         this.templates = templates;
     }
 

Modified: trunk/src/model/org/jboss/blog/model/Post.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Post.java	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/src/model/org/jboss/blog/model/Post.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -26,8 +26,9 @@
     private String title;
 
     @NotEmpty
-    @Pattern(regex = "^[a-z0-9_]$")
+    @Pattern(regex = "^[a-z0-9_]*$")
     @Column(unique = true)
+    // TODO: unique?
     private String titleAsLink;
 
     @Lob

Modified: trunk/src/model/org/jboss/blog/model/RemoteFeed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/RemoteFeed.java	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/src/model/org/jboss/blog/model/RemoteFeed.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -4,6 +4,7 @@
 import org.hibernate.validator.NotEmpty;
 
 import javax.persistence.Entity;
+import javax.persistence.Transient;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -21,4 +22,10 @@
     public void setLink(String link) {
         this.link = link;
     }
+
+    @Transient
+    @Override
+    public String getType() {
+        return "remote";
+    }
 }

Copied: trunk/src/model/org/jboss/blog/model/RemoteFeedType.java (from rev 132, trunk/src/model/org/jboss/blog/model/FeedType.java)
===================================================================
--- trunk/src/model/org/jboss/blog/model/RemoteFeedType.java	                        (rev 0)
+++ trunk/src/model/org/jboss/blog/model/RemoteFeedType.java	2007-11-23 17:57:59 UTC (rev 135)
@@ -0,0 +1,9 @@
+package org.jboss.blog.model;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public enum RemoteFeedType {
+    ATOM,
+    RSS2
+}

Modified: trunk/view/home.xhtml
===================================================================
--- trunk/view/home.xhtml	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/view/home.xhtml	2007-11-23 17:57:59 UTC (rev 135)
@@ -8,6 +8,19 @@
                 xmlns:rich="http://richfaces.org/rich"
                 template="layout/template.xhtml">
     <ui:define name="body">
-        <s:link value="Manage feeds" view="/manage/index.xhtml" propagation="none" />
+        <h1>Feeds central</h1>
+
+        <p>
+            <s:link value="Manage feeds" view="/manage/index.xhtml" propagation="none" />
+        </p>
+
+        <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">
+                    <f:param name="name" value="#{feed.name}"/>
+                </s:link>
+            </p>
+        </ui:repeat>
     </ui:define>
 </ui:composition>

Deleted: trunk/view/manage/add_remote.xhtml
===================================================================
--- trunk/view/manage/add_remote.xhtml	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/view/manage/add_remote.xhtml	2007-11-23 17:57:59 UTC (rev 135)
@@ -1,46 +0,0 @@
-<!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">
-
-        <h:messages globalOnly="true" styleClass="message"/>
-
-        <h1>Add a new remote feed</h1>
-
-        <h:form>
-            <h:outputLabel>Remote feed address:</h:outputLabel> <br />
-            <h:inputText id="link" value="#{newRemoteFeed.link}" required="true">
-                <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>
-            <br />
-            <a:commandButton action="#{newRemoteFeed.parseFeed}" value="Read the feed"
-                             reRender="parseStatus" /> <br />
-
-            Status: <a:status stopText="n/a" startText="Wait ..." /> <br />
-            <h:panelGroup id="parseStatus">
-                <h:panelGroup rendered="#{newRemoteFeed.parseOk}">
-                    Parsing the feed was successfull! You can proceed.
-                </h:panelGroup>
-                <h:panelGroup rendered="#{!newRemoteFeed.parseOk and newRemoteFeed.parseException != null}">
-                    Parsing the feed failed, because of the following exception:
-                    #{newRemoteFeed.parseException.message}
-                </h:panelGroup>
-                <br />
-
-                <h:commandButton disabled="#{!newRemoteFeed.parseOk}" value="Next" />
-            </h:panelGroup>
-        </h:form>
-    </ui:define>
-</ui:composition>

Modified: trunk/view/manage/feed_mod.xhtml
===================================================================
--- trunk/view/manage/feed_mod.xhtml	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/view/manage/feed_mod.xhtml	2007-11-23 17:57:59 UTC (rev 135)
@@ -6,12 +6,38 @@
                 xmlns:f="http://java.sun.com/jsf/core"
                 xmlns:h="http://java.sun.com/jsf/html"
                 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="#{feed.name}" required="true" size="16">
+                    <blog:uniqueFeedNameValidator entityId="#{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>
+
+            <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">
+                    <a:support event="onblur" reRender="displayNameMessage" ajaxSingle="true" bypassUpdates="true"/>
+                    <s:validate />
+                </h:inputText>
+
+                <a:outputPanel id="displayNameMessage">
+                    <h:message for="displayName" 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.blog.title}" required="true" size="32">
+                <h:inputText id="title" value="#{feed.blog.title}" required="true" size="32">
                     <a:support event="onblur" reRender="titleMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -23,7 +49,7 @@
 
             <h:outputLabel for="author"><span class="required">*</span> Author:</h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="author" value="#{feedMod.feed.blog.author}" required="true" size="32">
+                <h:inputText id="author" value="#{feed.blog.author}" required="true" size="32">
                     <a:support event="onblur" reRender="authorMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -35,7 +61,7 @@
 
             <h:outputLabel for="description">Description:</h:outputLabel>
             <h:panelGroup>
-                <h:inputTextarea id="description" value="#{feedMod.feed.blog.description}" required="true" rows="4"
+                <h:inputTextarea id="description" value="#{feed.blog.description}" required="true" rows="4"
                                  cols="32">
                     <a:support event="onblur" reRender="descriptionMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
@@ -48,7 +74,7 @@
 
             <h:outputLabel for="link"><span class="required">*</span> Link to blog:</h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="link" value="#{feedMod.feed.blog.link}" required="true" size="64">
+                <h:inputText id="link" value="#{feed.blog.link}" required="true" size="64">
                     <a:support event="onblur" reRender="linkMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -62,7 +88,7 @@
                 <span class="required">*</span> Maximum number of posts in a feed:
             </h:outputLabel>
             <h:panelGroup>
-                <h:inputText id="maxPosts" value="#{feedMod.feed.maxPosts}" required="true" size="16">
+                <h:inputText id="maxPosts" value="#{feed.maxPosts}" required="true" size="16">
                     <a:support event="onblur" reRender="maxPostsMessage" ajaxSingle="true" bypassUpdates="true"/>
                     <s:validate />
                 </h:inputText>
@@ -74,7 +100,7 @@
 
             <h:outputLabel for="useBlogAuthorInPosts">Overwrite post author with blog author in posts:</h:outputLabel>
             <h:panelGroup>
-                <h:selectBooleanCheckbox id="useBlogAuthorInPosts" value="#{feedMod.feed.useBlogAuthorInPosts}"
+                <h:selectBooleanCheckbox id="useBlogAuthorInPosts" value="#{feed.useBlogAuthorInPosts}"
                                          required="true">
                     <a:support event="onblur" reRender="useBlogAuthorInPostsMessage" ajaxSingle="true"
                                bypassUpdates="true"/>
@@ -88,22 +114,27 @@
 
             <h:outputLabel />
             <h:panelGroup>
-                <s:button value="Add" />
+                <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>
 
         <h3>Posts preview:</h3>
 
-        <h:panelGroup rendered="#{feedMod.feed.blog.posts.size() == 0}">
+        <h:panelGroup rendered="#{feed.blog.posts.size() == 0}">
             This feed doesn't have any posts. Unable to preview.
         </h:panelGroup>
-        <h:panelGroup rendered="#{feedMod.feed.blog.posts.size() > 0}">
-            <h:dataTable value="#{feedMod.feed.blog.posts}" var="post" rows="1">
+        <h:panelGroup rendered="#{feed.blog.posts.size() > 0}">
+            <h:dataTable value="#{feed.blog.posts}" var="post" rows="1">
                 <h:column>
                     <h:panelGrid columns="2">
                         <h:outputText value="Title:" />
                         <h:outputText value="#{post.title}" />
 
+                        <h:outputText value="Title as link:" />
+                        <h:outputText value="#{post.titleAsLink}" />
+
                         <h:outputText value="Author:" />
                         <h:outputText value="#{post.author}" />
 

Modified: trunk/view/manage/index.xhtml
===================================================================
--- trunk/view/manage/index.xhtml	2007-11-22 19:39:39 UTC (rev 134)
+++ trunk/view/manage/index.xhtml	2007-11-23 17:57:59 UTC (rev 135)
@@ -11,5 +11,13 @@
         <h1>Manage feeds</h1>
 
         <s:link value="Add new feed" view="/manage/add.xhtml" propagation="begin" />
+
+        <h3>Current feeds:</h3>
+
+        <ui:repeat var="feed" value="#{feedsService.allFeeds}">
+            <p>
+                #{feed.name}
+            </p>
+        </ui:repeat>
     </ui:define>
 </ui:composition>

Added: trunk/view/view/feed.xhtml
===================================================================
--- trunk/view/view/feed.xhtml	                        (rev 0)
+++ trunk/view/view/feed.xhtml	2007-11-23 17:57:59 UTC (rev 135)
@@ -0,0 +1,15 @@
+<!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"
+                template="../layout/template.xhtml">
+    <ui:define name="body">
+        <h1>View feed: #{feed.displayName}</h1>
+
+        
+    </ui:define>
+</ui:composition>




More information about the jboss-cvs-commits mailing list