[jboss-cvs] JBossBlog SVN: r298 - in trunk: resources/META-INF and 6 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat May 3 14:03:47 EDT 2008
Author: adamw
Date: 2008-05-03 14:03:47 -0400 (Sat, 03 May 2008)
New Revision: 298
Added:
trunk/src/action/org/jboss/blog/session/feed/dao/IndividualPostsFeedDao.java
trunk/src/action/org/jboss/blog/session/feed/mod/IndividualFeedModBean.java
trunk/src/model/org/jboss/blog/model/feed/IndividualPostInfo.java
trunk/src/model/org/jboss/blog/model/feed/IndividualPostsFeed.java
trunk/view/manage/individual/
trunk/view/manage/individual/individual_add.xhtml
trunk/view/manage/individual/individual_edit.xhtml
trunk/view/manage/individual/post_add.xhtml
Modified:
trunk/resources/META-INF/persistence-design.xml
trunk/resources/META-INF/persistence-dev.xml
trunk/resources/META-INF/persistence-prod.xml
trunk/resources/WEB-INF/pages.xml
trunk/resources/messages_en.properties
Log:
Modified: trunk/resources/META-INF/persistence-design.xml
===================================================================
--- trunk/resources/META-INF/persistence-design.xml 2008-04-30 12:50:33 UTC (rev 297)
+++ trunk/resources/META-INF/persistence-design.xml 2008-05-03 18:03:47 UTC (rev 298)
@@ -13,6 +13,8 @@
<class>org.jboss.blog.model.feed.RemoteFeed</class>
<class>org.jboss.blog.model.feed.AggregatedFeed</class>
<class>org.jboss.blog.model.feed.HighlightsFeed</class>
+ <class>org.jboss.blog.model.feed.IndividualPostsFeed</class>
+ <class>org.jboss.blog.model.feed.IndividualPostInfo</class>
<class>org.jboss.blog.model.Category</class>
<class>org.jboss.blog.model.Post</class>
<class>org.jboss.blog.model.Enclosure</class>
Modified: trunk/resources/META-INF/persistence-dev.xml
===================================================================
--- trunk/resources/META-INF/persistence-dev.xml 2008-04-30 12:50:33 UTC (rev 297)
+++ trunk/resources/META-INF/persistence-dev.xml 2008-05-03 18:03:47 UTC (rev 298)
@@ -12,7 +12,9 @@
<class>org.jboss.blog.model.feed.Feed</class>
<class>org.jboss.blog.model.feed.RemoteFeed</class>
<class>org.jboss.blog.model.feed.AggregatedFeed</class>
- <class>org.jboss.blog.model.feed.HighlightsFeed</class>
+ <class>org.jboss.blog.model.feed.HighlightsFeed</class>
+ <class>org.jboss.blog.model.feed.IndividualPostsFeed</class>
+ <class>org.jboss.blog.model.feed.IndividualPostInfo</class>
<class>org.jboss.blog.model.Category</class>
<class>org.jboss.blog.model.Post</class>
<class>org.jboss.blog.model.Enclosure</class>
Modified: trunk/resources/META-INF/persistence-prod.xml
===================================================================
--- trunk/resources/META-INF/persistence-prod.xml 2008-04-30 12:50:33 UTC (rev 297)
+++ trunk/resources/META-INF/persistence-prod.xml 2008-05-03 18:03:47 UTC (rev 298)
@@ -13,6 +13,8 @@
<class>org.jboss.blog.model.feed.RemoteFeed</class>
<class>org.jboss.blog.model.feed.AggregatedFeed</class>
<class>org.jboss.blog.model.feed.HighlightsFeed</class>
+ <class>org.jboss.blog.model.feed.IndividualPostsFeed</class>
+ <class>org.jboss.blog.model.feed.IndividualPostInfo</class>
<class>org.jboss.blog.model.Category</class>
<class>org.jboss.blog.model.Post</class>
<class>org.jboss.blog.model.Enclosure</class>
Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml 2008-04-30 12:50:33 UTC (rev 297)
+++ trunk/resources/WEB-INF/pages.xml 2008-05-03 18:03:47 UTC (rev 298)
@@ -261,6 +261,39 @@
</navigation>
</page>
+ <!-- Manage individual posts feeds -->
+
+ <page view-id="/manage/individual/individual_add.xhtml" login-required="true">
+ <begin-conversation flush-mode="manual" join="true" />
+ <!-- Initializing the new feed, if not yet initialized -->
+ <action execute="#{individualFeedMod.getIndividualPostsFeed}" />
+ <navigation from-action="#{feedMod.saveNew}">
+ <end-conversation before-redirect="true" />
+ <redirect view-id="/manage/individual/individual_edit.xhtml" />
+ </navigation>
+ </page>
+
+ <page view-id="/manage/individual/individual_edit.xhtml" login-required="true">
+ <begin-conversation flush-mode="manual" join="true" />
+ <param name="name" converterId="feedConverter" value="#{feedMod.feed}" />
+ <param name="from" value="#{individualFeedMod.from}" />
+ <restrict>#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}</restrict>
+ <navigation from-action="#{individualFeedMod.saveExisting}">
+ <end-conversation />
+ <redirect view-id="/manage/index.xhtml" />
+ </navigation>
+ </page>
+
+ <page view-id="/manage/individual/post_add.xhtml" login-required="true" conversation-required="true">
+ <restrict>#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}</restrict>
+ <navigation from-action="#{individualFeedMod.addPost}">
+ <redirect view-id="/manage/individual/individual_edit.xhtml" />
+ </navigation>
+ <navigation from-action="#{individualFeedMod.reset}">
+ <redirect view-id="/manage/individual/individual_edit.xhtml" />
+ </navigation>
+ </page>
+
<!-- Manage groups -->
<page view-id="/manage/group/group_list.xhtml" login-required="true">
Modified: trunk/resources/messages_en.properties
===================================================================
--- trunk/resources/messages_en.properties 2008-04-30 12:50:33 UTC (rev 297)
+++ trunk/resources/messages_en.properties 2008-05-03 18:03:47 UTC (rev 298)
@@ -117,6 +117,9 @@
as it appears in the feed, can be always overwritten by the blog author (which is configurable later) or can be \
replaced by the blog author only when the post author is missing (default).
+blog.feed.individual.post.added=Post added.
+blog.feed.individual.post.deleted=Post deleted.
+
blog.feed.aggregated.updated=Aggregated feed {0} changed.
blog.feed.new.invalidname=Feed name may only contain small latin letters, numbers and _.
Copied: trunk/src/action/org/jboss/blog/session/feed/dao/IndividualPostsFeedDao.java (from rev 297, trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/IndividualPostsFeedDao.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/IndividualPostsFeedDao.java 2008-05-03 18:03:47 UTC (rev 298)
@@ -0,0 +1,35 @@
+package org.jboss.blog.session.feed.dao;
+
+import org.jboss.blog.model.feed.IndividualPostsFeed;
+import org.jboss.blog.model.RestrictedPost;
+import org.jboss.blog.session.feed.posts.DatabaseFeedPosts;
+import org.jboss.blog.session.feed.type.FeedType;
+import org.jboss.blog.model.security.RestrictedMode;
+import org.jboss.seam.Component;
+
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at FeedType(
+ name = "individual posts",
+ addPage = "/manage/individual/individual_add.xhtml",
+ editPage = "/manage/individual/individual_edit.xhtml",
+ model = IndividualPostsFeed.class)
+public class IndividualPostsFeedDao implements FeedDao {
+ private IndividualPostsFeed individualPostsFeed;
+
+ public IndividualPostsFeedDao(IndividualPostsFeed individualPostsFeed) {
+ this.individualPostsFeed = individualPostsFeed;
+ }
+
+ public List<? extends RestrictedPost> getPosts(int from, int to, RestrictedMode restricted) {
+ return ((DatabaseFeedPosts) Component.getInstance("databaseFeedPosts")).getPosts(
+ individualPostsFeed, from, to);
+ }
+
+ public void update() {
+
+ }
+}
\ No newline at end of file
Added: trunk/src/action/org/jboss/blog/session/feed/mod/IndividualFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/IndividualFeedModBean.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/IndividualFeedModBean.java 2008-05-03 18:03:47 UTC (rev 298)
@@ -0,0 +1,283 @@
+package org.jboss.blog.session.feed.mod;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.core.Events;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.blog.model.feed.IndividualPostsFeed;
+import org.jboss.blog.model.feed.IndividualPostInfo;
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.Post;
+import org.jboss.blog.session.feed.InvalidFeedTypeException;
+import org.jboss.blog.session.parser.ParserException;
+import org.jboss.blog.session.parser.ParserService;
+import org.jboss.blog.session.merge.MergeServiceBean;
+import org.jboss.blog.tools.GeneralTools;
+import org.jboss.blog.tools.StringTools;
+
+import javax.persistence.EntityManager;
+import javax.faces.application.FacesMessage;
+import javax.faces.model.SelectItem;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Scope(ScopeType.CONVERSATION)
+ at Name("individualFeedMod")
+public class IndividualFeedModBean {
+ @In
+ private FeedModBean feedMod;
+
+ @In
+ private EntityManager entityManager;
+
+ @In
+ private FacesMessages facesMessages;
+
+ @In
+ private Events events;
+
+ @In
+ private ParserService parserService;
+
+ @In
+ private PostsValidator postsValidator;
+
+ @In
+ private MergeServiceBean mergeService;
+
+ private IndividualPostsFeed individualPostsFeed;
+
+ private String address;
+
+ private boolean parseOk;
+
+ private Feed parsedFeed;
+
+ private Post selectedPost;
+
+ private String selectedPostTitleAsId;
+
+ private String postAuthor;
+
+ private List<SelectItem> posts;
+
+ private List<IndividualPostInfo> postInfos;
+
+ private int from;
+
+ public IndividualPostsFeed getIndividualPostsFeed() throws InvalidFeedTypeException {
+ if (individualPostsFeed == null) {
+ if (feedMod.getFeed() == null) {
+ individualPostsFeed = new IndividualPostsFeed();
+ feedMod.initNewFeed(individualPostsFeed);
+
+ individualPostsFeed.setPostInfos(new ArrayList<IndividualPostInfo>());
+ } else {
+ if (feedMod.getFeed() instanceof IndividualPostsFeed) {
+ individualPostsFeed = (IndividualPostsFeed) feedMod.getFeed();
+ } else {
+ throw new InvalidFeedTypeException();
+ }
+ }
+ }
+
+ return individualPostsFeed;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public boolean isParseOk() {
+ return parseOk;
+ }
+
+ public void setParseOk(boolean parseOk) {
+ this.parseOk = parseOk;
+ }
+
+ public Feed getParsedFeed() {
+ return parsedFeed;
+ }
+
+ public void setParsedFeed(Feed parsedFeed) {
+ this.parsedFeed = parsedFeed;
+ }
+
+ public Post getSelectedPost() {
+ return selectedPost;
+ }
+
+ public void setSelectedPost(Post selectedPost) {
+ this.selectedPost = selectedPost;
+ }
+
+ public String getSelectedPostTitleAsId() {
+ return selectedPostTitleAsId;
+ }
+
+ public int getFrom() {
+ return from;
+ }
+
+ public void setFrom(int from) {
+ if (this.from != from) {
+ postInfos = null;
+ }
+
+ this.from = from;
+ }
+
+ public int getPostsOnPage() {
+ return 3;
+ }
+
+ public boolean getShowPrevious() {
+ return from != 0;
+ }
+
+ public boolean getShowNext() throws InvalidFeedTypeException {
+ return getPostInfos().size() == getPostsOnPage()+1;
+ }
+
+ public int getPreviousFrom() {
+ return Math.max(0, from - getPostsOnPage());
+ }
+
+ public int getNextFrom() {
+ return from + getPostsOnPage();
+ }
+
+ public List<IndividualPostInfo> getPostInfos() throws InvalidFeedTypeException {
+ if (postInfos == null) {
+ //noinspection unchecked
+ postInfos = entityManager
+ .createQuery("SELECT pi FROM IndividualPostInfo pi WHERE pi.feed = ?1 ORDER BY pi.post.published")
+ .setParameter(1, getIndividualPostsFeed())
+ .setFirstResult(from)
+ .setMaxResults(getPostsOnPage()+1)
+ .getResultList();
+ }
+
+ return postInfos;
+ }
+
+ public void setPostInfos(List<IndividualPostInfo> postInfos) {
+ this.postInfos = postInfos;
+ }
+
+ public void setSelectedPostTitleAsId(String selectedPostTitleAsId) {
+ this.selectedPostTitleAsId = selectedPostTitleAsId;
+
+ if (parsedFeed != null) {
+ for (Post post : parsedFeed.getPosts()) {
+ if (GeneralTools.objectsEqual(post.getTitleAsId(), selectedPostTitleAsId)) {
+ selectedPost = post;
+ break;
+ }
+ }
+ }
+ }
+
+ public String getPostAuthor() {
+ return postAuthor;
+ }
+
+ public void setPostAuthor(String postAuthor) {
+ this.postAuthor = postAuthor;
+ }
+
+ public List<SelectItem> getPosts() {
+ return posts;
+ }
+
+ public void setPosts(List<SelectItem> posts) {
+ this.posts = posts;
+ }
+
+ public void updateSelectedPost() {
+ if (GeneralTools.objectsEqual(postAuthor, parsedFeed.getAuthor())) {
+ if (!StringTools.isEmpty(selectedPost.getAuthor())) {
+ postAuthor = selectedPost.getAuthor();
+ }
+ }
+ }
+
+ public void parseFeed() {
+ try {
+ parsedFeed = parserService.parse(getAddress());
+
+ if (!postsValidator.validatePosts(parsedFeed.getPosts(), true, "address")) {
+ throw new ParserException("Posts are missing some information.");
+ }
+
+ postAuthor = parsedFeed.getAuthor();
+
+ posts = new ArrayList<SelectItem>();
+ for (Post post : parsedFeed.getPosts()) {
+ posts.add(new SelectItem(post.getTitleAsId(), post.getTitle()));
+ }
+
+ setParseOk(true);
+ } catch (ParserException e) {
+ facesMessages.addToControlFromResourceBundle("parse", FacesMessage.SEVERITY_ERROR,
+ "blog.feed.remote.parsenotok", e.getMessage());
+
+ setParseOk(false);
+ }
+ }
+
+ public void reset() {
+ parseOk = false;
+ address = "";
+ selectedPost = null;
+ selectedPostTitleAsId = null;
+ }
+
+ @Restrict("#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}")
+ public void addPost() throws InvalidFeedTypeException {
+ mergeService.savePost(individualPostsFeed, selectedPost);
+
+ IndividualPostInfo postInfo = new IndividualPostInfo();
+ postInfo.setPost(selectedPost);
+ postInfo.setFeed(individualPostsFeed);
+ postInfo.setRemoteFeedAddress(address);
+
+ entityManager.persist(postInfo);
+
+ individualPostsFeed.getPostInfos().add(postInfo);
+
+ entityManager.flush();
+
+ facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.updated",
+ getIndividualPostsFeed().getName());
+
+ events.raiseEvent("blog.feed.individual.post.added");
+
+ reset();
+ }
+
+ public void delete(IndividualPostInfo postInfo) throws InvalidFeedTypeException {
+ // TODO: delete post
+
+ individualPostsFeed.getPostInfos().remove(postInfo);
+ entityManager.remove(postInfo);
+
+ entityManager.flush();
+
+ facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.updated",
+ getIndividualPostsFeed().getName());
+
+ events.raiseEvent("blog.feed.individual.post.deleted");
+ }
+}
Added: trunk/src/model/org/jboss/blog/model/feed/IndividualPostInfo.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/IndividualPostInfo.java (rev 0)
+++ trunk/src/model/org/jboss/blog/model/feed/IndividualPostInfo.java 2008-05-03 18:03:47 UTC (rev 298)
@@ -0,0 +1,73 @@
+package org.jboss.blog.model.feed;
+
+import org.jboss.blog.model.Post;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+public class IndividualPostInfo {
+ @Id
+ @GeneratedValue
+ private int id;
+
+ @ManyToOne
+ private IndividualPostsFeed feed;
+
+ @ManyToOne
+ private Post post;
+
+ private String remoteFeedAddress;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public IndividualPostsFeed getFeed() {
+ return feed;
+ }
+
+ public void setFeed(IndividualPostsFeed feed) {
+ this.feed = feed;
+ }
+
+ public Post getPost() {
+ return post;
+ }
+
+ public void setPost(Post post) {
+ this.post = post;
+ }
+
+ public String getRemoteFeedAddress() {
+ return remoteFeedAddress;
+ }
+
+ public void setRemoteFeedAddress(String remoteFeedAddress) {
+ this.remoteFeedAddress = remoteFeedAddress;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof IndividualPostInfo)) return false;
+
+ IndividualPostInfo that = (IndividualPostInfo) o;
+
+ if (id != that.id) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id;
+ }
+}
Copied: trunk/src/model/org/jboss/blog/model/feed/IndividualPostsFeed.java (from rev 286, trunk/src/model/org/jboss/blog/model/feed/HighlightsFeed.java)
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/IndividualPostsFeed.java (rev 0)
+++ trunk/src/model/org/jboss/blog/model/feed/IndividualPostsFeed.java 2008-05-03 18:03:47 UTC (rev 298)
@@ -0,0 +1,27 @@
+package org.jboss.blog.model.feed;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.CascadeType;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+ at Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
+public class IndividualPostsFeed extends Feed {
+ @OneToMany(mappedBy = "feed", cascade = CascadeType.ALL)
+ private List<IndividualPostInfo> postInfos;
+
+ public List<IndividualPostInfo> getPostInfos() {
+ return postInfos;
+ }
+
+ public void setPostInfos(List<IndividualPostInfo> postInfos) {
+ this.postInfos = postInfos;
+ }
+}
\ No newline at end of file
Copied: trunk/view/manage/individual/individual_add.xhtml (from rev 293, trunk/view/manage/feed_add.xhtml)
===================================================================
--- trunk/view/manage/individual/individual_add.xhtml (rev 0)
+++ trunk/view/manage/individual/individual_add.xhtml 2008-05-03 18:03:47 UTC (rev 298)
@@ -0,0 +1,21 @@
+<!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="header">
+ Add a new individual posts feed - edit common data
+ </ui:define>
+
+ <ui:define name="body">
+ <ui:include src="../feed_mod.xhtml">
+ <ui:param name="new" value="true" />
+ <ui:param name="advanced" value="true" />
+ </ui:include>
+ </ui:define>
+</ui:composition>
Added: trunk/view/manage/individual/individual_edit.xhtml
===================================================================
--- trunk/view/manage/individual/individual_edit.xhtml (rev 0)
+++ trunk/view/manage/individual/individual_edit.xhtml 2008-05-03 18:03:47 UTC (rev 298)
@@ -0,0 +1,67 @@
+<!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="header">
+ Edit individual posts feed: #{feedMod.feed.name}
+ </ui:define>
+
+ <ui:define name="body">
+ <div class="blogFeedNav #{additionalStyle}">
+ <ul>
+ <ui:include src="../../common/next_previous_navigation.xhtml">
+ <ui:param name="viewId" value="/manage/individual/individual_edit.xhtml" />
+ <ui:param name="navigationBean" value="#{individualFeedMod}" />
+ <ui:param name="showColon" value="false" />
+ </ui:include>
+ </ul>
+ </div>
+
+ <h:form>
+ <s:div rendered="#{individualFeedMod.individualPostsFeed.postInfos.size == 0}">
+ There are no posts included.
+ </s:div>
+
+ <s:div id="postsTable">
+ <table class="basetablestyle" >
+ <a:repeat rowKeyVar="rowNumber" var="postInfo"
+ value="#{individualFeedMod.postInfos}" rows="#{individualFeedMod.postsOnPage}">
+ <tr class="#{(rowNumber%2 == 0) ? 'evenRow' : 'oddRow'}">
+ <td>
+ <ui:include src="../../common/post.xhtml">
+ <ui:param name="post" value="#{postInfo.post}" />
+ <ui:param name="showSummary" value="true" />
+ <ui:param name="showAddToHighlights" value="false" />
+ </ui:include>
+ </td>
+ <td>
+ <a:commandLink value="Delete" action="#{individualFeedMod.delete(postInfo)}"
+ reRender="postsTable" />
+ </td>
+ </tr>
+ </a:repeat>
+ </table>
+ </s:div>
+
+ <s:div styleClass="formbuttons">
+ <ul>
+ <li>
+ <s:button value="Return" view="/manage/index.xhtml" propagation="end" styleClass="submit" />
+ </li>
+ <li>
+ <s:button value="Add a new post" view="/manage/individual/post_add.xhtml" styleClass="submit" />
+ </li>
+ <li>
+ <ui:include src="../../common/ajax_status.xhtml" />
+ </li>
+ </ul>
+ </s:div>
+ </h:form>
+ </ui:define>
+</ui:composition>
Added: trunk/view/manage/individual/post_add.xhtml
===================================================================
--- trunk/view/manage/individual/post_add.xhtml (rev 0)
+++ trunk/view/manage/individual/post_add.xhtml 2008-05-03 18:03:47 UTC (rev 298)
@@ -0,0 +1,91 @@
+<!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="header">
+ Edit individual posts feed: #{feedMod.feed.name}
+ </ui:define>
+
+ <ui:define name="body">
+ <div class="adminforms">
+ <h:form>
+ <h:panelGrid columns="2" id="form_data">
+ <h:outputLabel><span class="required">*</span> Remote feed (atom/rss2) address:</h:outputLabel>
+ <h:panelGroup>
+ <h:inputText id="address" value="#{individualFeedMod.address}" required="true" size="55"
+ maxlength="64" disabled="#{individualFeedMod.parseOk}">
+ <s:validate />
+ </h:inputText>
+ <a:outputPanel id="addressMessage">
+ <h:message for="address" styleClass="error" />
+ </a:outputPanel>
+ </h:panelGroup>
+
+ <h:panelGroup />
+ <h:panelGroup id="parseStatus">
+ <h:message for="parse" infoClass="info" warnClass="error" errorClass="error" fatalClass="error" />
+ </h:panelGroup>
+
+ <h:outputLabel rendered="#{individualFeedMod.parseOk}">
+ <span class="required">*</span> Select post to include:
+ </h:outputLabel>
+ <h:panelGroup rendered="#{individualFeedMod.parseOk}">
+ <h:selectOneMenu id="selectPost" required="true" value="#{individualFeedMod.selectedPostTitleAsId}"
+ style="width: 500px">
+ <f:selectItems value="#{individualFeedMod.posts}" />
+ <s:validate />
+ <a:support event="onchange" reRender="postAuthor,selectPostMessage" ajaxSingle="true"
+ action="#{individualFeedMod.updateSelectedPost}" />
+ </h:selectOneMenu>
+ <a:outputPanel id="selectPostMessage">
+ <h:message for="selectPost" styleClass="error" />
+ </a:outputPanel>
+ </h:panelGroup>
+
+ <h:outputLabel rendered="#{individualFeedMod.parseOk}">
+ <span class="required">*</span> Post author:
+ </h:outputLabel>
+ <h:panelGroup rendered="#{individualFeedMod.parseOk}">
+ <h:inputText id="postAuthor" value="#{individualFeedMod.postAuthor}" required="true" size="55"
+ maxlength="64">
+ <s:validate />
+ </h:inputText>
+ <a:outputPanel id="postAuthorMessage">
+ <h:message for="postAuthor" styleClass="error" />
+ </a:outputPanel>
+ </h:panelGroup>
+ </h:panelGrid>
+
+ <s:div id="proceed" styleClass="formbuttons">
+ <ul>
+ <s:fragment rendered="#{!individualFeedMod.parseOk}">
+ <li>
+ <a:commandButton action="#{individualFeedMod.parseFeed}" value="Read and parse the feed"
+ styleClass="submit" id="parse"
+ reRender="form_data,proceed" />
+ </li>
+ </s:fragment>
+ <s:fragment rendered="#{individualFeedMod.parseOk}">
+ <li>
+ <h:commandButton value="Add post" action="#{individualFeedMod.addPost}"
+ styleClass="submit" />
+ </li>
+ </s:fragment>
+ <li>
+ <s:button value="Cancel" action="#{individualFeedMod.reset}" styleClass="submit" />
+ </li>
+ <li>
+ <ui:include src="../../common/ajax_status.xhtml" />
+ </li>
+ </ul>
+ </s:div>
+ </h:form>
+ </div>
+ </ui:define>
+</ui:composition>
More information about the jboss-cvs-commits
mailing list