[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