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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 23 13:40:30 EST 2008


Author: adamw
Date: 2008-01-23 13:40:30 -0500 (Wed, 23 Jan 2008)
New Revision: 178

Added:
   trunk/src/action/org/jboss/blog/session/converter/GroupConverter.java
   trunk/src/action/org/jboss/blog/session/group/
   trunk/src/action/org/jboss/blog/session/group/GroupModBean.java
   trunk/src/action/org/jboss/blog/session/validator/UniqueGroupNameValidator.java
   trunk/src/model/org/jboss/blog/model/Group.java
   trunk/view/manage/group/
   trunk/view/manage/group/group_add.xhtml
   trunk/view/manage/group/group_edit.xhtml
   trunk/view/manage/group/group_list.xhtml
   trunk/view/manage/group/group_mod.xhtml
Modified:
   trunk/resources/META-INF/jbossblog.taglib.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
   trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
   trunk/src/model/org/jboss/blog/model/feed/Feed.java
   trunk/src/services/org/jboss/blog/service/FeedsService.java
   trunk/view/manage/index.xhtml
Log:


Modified: trunk/resources/META-INF/jbossblog.taglib.xml
===================================================================
--- trunk/resources/META-INF/jbossblog.taglib.xml	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/resources/META-INF/jbossblog.taglib.xml	2008-01-23 18:40:30 UTC (rev 178)
@@ -17,4 +17,10 @@
             <validator-id>uniqueTemplateNameValidator</validator-id>
         </validator>
     </tag>
+    <tag>
+        <tag-name>uniqueGroupNameValidator</tag-name>
+        <validator>
+            <validator-id>uniqueGroupNameValidator</validator-id>
+        </validator>
+    </tag>
 </facelet-taglib>
\ No newline at end of file

Modified: trunk/resources/META-INF/persistence-dev.xml
===================================================================
--- trunk/resources/META-INF/persistence-dev.xml	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/resources/META-INF/persistence-dev.xml	2008-01-23 18:40:30 UTC (rev 178)
@@ -8,6 +8,7 @@
     <persistence-unit name="blog">
         <provider>org.hibernate.ejb.HibernatePersistence</provider>
         <jta-data-source>java:/blogDatasource</jta-data-source>
+        <class>org.jboss.blog.model.Group</class>
         <class>org.jboss.blog.model.feed.Feed</class>
         <class>org.jboss.blog.model.feed.RemoteFeed</class>
         <class>org.jboss.blog.model.feed.AggregatedFeed</class>

Modified: trunk/resources/META-INF/persistence-prod.xml
===================================================================
--- trunk/resources/META-INF/persistence-prod.xml	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/resources/META-INF/persistence-prod.xml	2008-01-23 18:40:30 UTC (rev 178)
@@ -8,6 +8,7 @@
     <persistence-unit name="blog">
         <provider>org.hibernate.ejb.HibernatePersistence</provider>
         <jta-data-source>java:/blogDatasource</jta-data-source>
+        <class>org.jboss.blog.model.Group</class>
         <class>org.jboss.blog.model.feed.Feed</class>
         <class>org.jboss.blog.model.feed.RemoteFeed</class>
         <class>org.jboss.blog.model.feed.AggregatedFeed</class>

Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/resources/WEB-INF/pages.xml	2008-01-23 18:40:30 UTC (rev 178)
@@ -137,6 +137,53 @@
         </navigation>
     </page>
 
+    <!-- Manage groups -->
+
+    <page view-id="*">
+        <navigation from-action="#{groupMod.add}">
+            <begin-conversation nested="true" flush-mode="manual" />
+            <raise-event type="org.jboss.blog.captureView" />
+            <redirect view-id="/manage/group/group_add.xhtml" />
+        </navigation>
+        <navigation from-action="#{groupMod.cancel}">
+            <end-conversation />
+            <raise-event type="org.jboss.blog.restoreView" />
+        </navigation>
+    </page>
+
+    <page view-id="/manage/group/group_list.xhtml">
+        <param name="id" converterId="groupConverter" value="#{groupMod.group}" />
+        <navigation from-action="#{groupMod.edit}">
+            <begin-conversation nested="true" flush-mode="manual" />
+            <raise-event type="org.jboss.blog.captureView" />
+            <redirect view-id="/manage/group/group_edit.xhtml">
+                <param name="id" converterId="groupConverter" value="#{groupMod.group}" />
+            </redirect>
+        </navigation>
+    </page>
+
+    <page view-id="/manage/group/group_add.xhtml">
+        <navigation from-action="#{groupMod.saveNew}">
+            <end-conversation />
+            <raise-event type="org.jboss.blog.restoreView" />
+        </navigation>
+    </page>
+
+    <page view-id="/manage/group/group_edit.xhtml">
+        <param name="id" converterId="groupConverter" value="#{groupMod.group}" />
+        <navigation from-action="#{groupMod.saveExisting}">
+            <end-conversation />
+            <raise-event type="org.jboss.blog.restoreView" />
+        </navigation>
+    </page>
+
+    <page view-id="/manage/group/group_delete.xhtml">
+        <param name="id" converterId="groupConverter" value="#{groupMod.group}" />
+        <navigation from-action="#{groupMod.delete}">
+            <redirect view-id="/manage/group/group_list.xhtml" />
+        </navigation>
+    </page>
+
     <!-- Manage templates -->
 
     <page view-id="/manage/template/template_add.xhtml">

Modified: trunk/resources/messages_en.properties
===================================================================
--- trunk/resources/messages_en.properties	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/resources/messages_en.properties	2008-01-23 18:40:30 UTC (rev 178)
@@ -95,6 +95,7 @@
 blog.template.deleted=Template {0} of type {1} deleted.
 blog.template.updated=Template {0} of type {1} updated.
 blog.template.added=Template {0} of type {1} added.
+blog.template.new.existingname=A template with that name already exists.
 
 blog.feed.remote.updated=Remote feed's {0} address changed.
 
@@ -103,7 +104,11 @@
 blog.feed.new.invalidname=Feed name may only contain small latin letters, numbers, _ and /.
 blog.feed.new.existingname=A feed with that name already exists.
 
-blog.template.new.existingname=A template with that name already exists.
+blog.group.invalidname=Group name may only contain small latin letters, numbers, _ and /.
+blog.group.existingname=A group with that name already exists.
+blog.group.deleted=Group '{0}' ({1}) deleted.
+blog.group.updated=Group '{0}' ({1}) updated.
+blog.group.added=Group '{0}' ({1}) added.
 
 blog.post.deleted=Post '{0}' deleted.
 

Copied: trunk/src/action/org/jboss/blog/session/converter/GroupConverter.java (from rev 175, trunk/src/action/org/jboss/blog/session/converter/TemplateConverter.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/converter/GroupConverter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/converter/GroupConverter.java	2008-01-23 18:40:30 UTC (rev 178)
@@ -0,0 +1,41 @@
+package org.jboss.blog.session.converter;
+
+import org.jboss.blog.model.Group;
+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;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("groupConverter")
+ at BypassInterceptors
+ at Converter
+public class GroupConverter implements javax.faces.convert.Converter {
+    @Transactional
+    public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
+        EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");
+
+        entityManager.joinTransaction();
+
+        Integer id;
+        id = Integer.parseInt(value);
+
+        return entityManager.find(Group.class, id);
+    }
+
+    public String getAsString(FacesContext context, UIComponent cmp, Object value) {
+        if (value == null) {
+            return null;
+        }
+
+        Integer id = ((Group) value).getId();
+        return id == null ? null : id.toString();
+    }
+}
\ No newline at end of file

Modified: trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java	2008-01-23 18:40:30 UTC (rev 178)
@@ -40,6 +40,12 @@
     private Log log;
 
     @SuppressWarnings("unchecked")
+    public List<Feed> getAllGroups() {
+        // TODO: add caching
+        return entityManager.createQuery("select group from Group group order by group.name").getResultList();
+    }
+
+    @SuppressWarnings("unchecked")
     @Interceptors(FeedsServiceGetFeedsInterceptor.class)
     public List<Feed> getAllFeeds() {
         log.debug("Reading a list of all feeds from the DB.");

Added: trunk/src/action/org/jboss/blog/session/group/GroupModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/group/GroupModBean.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/group/GroupModBean.java	2008-01-23 18:40:30 UTC (rev 178)
@@ -0,0 +1,65 @@
+package org.jboss.blog.session.group;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.blog.model.Group;
+
+import javax.persistence.EntityManager;
+import javax.faces.application.FacesMessage;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("groupMod")
+public class GroupModBean {
+    @In
+    private EntityManager entityManager;
+
+    @In
+    private FacesMessages facesMessages;
+
+    private Group group;
+
+    public Group getGroup() {
+        if (group == null) {
+            group = new Group();
+        }
+
+        return group;
+    }
+
+    public void setGroup(Group group) {
+        this.group = group;
+    }
+
+    public void saveNew() {
+        entityManager.persist(group);
+        entityManager.flush();
+
+        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.group.added", group.getDisplayName(),
+                group.getName());
+    }
+
+    public void saveExisting() {
+        entityManager.flush();
+
+        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.group.updated", group.getDisplayName(),
+                group.getName());
+    }
+
+    public void delete() {
+        entityManager.remove(group);
+
+        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.group.deleted", group.getDisplayName(),
+                group.getName());
+    }
+
+    // Marker actions
+
+    public void add() { }
+
+    public void edit() { }
+
+    public void cancel() { }
+}

Added: trunk/src/action/org/jboss/blog/session/validator/UniqueGroupNameValidator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/validator/UniqueGroupNameValidator.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/validator/UniqueGroupNameValidator.java	2008-01-23 18:40:30 UTC (rev 178)
@@ -0,0 +1,62 @@
+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 org.jboss.seam.international.Messages;
+
+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("uniqueGroupNameValidator")
+public class UniqueGroupNameValidator 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);
+
+        Integer id;
+
+        if (StringTools.isEmpty(entityId)) {
+            id = null;
+        } else {
+            id = Integer.parseInt(entityId);
+        }
+
+        Query query;
+
+        if (id == null) {
+            query = entityManager.createQuery("select g.id from Group g where g.name = ?1")
+                    .setParameter(1, name);
+        } else {
+            query = entityManager.createQuery(
+                    "select g.id from Group g where g.name = ?1 and not (g.id = ?2)")
+                    .setParameter(1, name).setParameter(2, id);
+        }
+
+        if (query.getResultList().size() != 0) {
+            throw new ValidatorException(new FacesMessage(Messages.instance().get("blog.group.existingname")));
+        }
+    }
+}
\ No newline at end of file

Added: trunk/src/model/org/jboss/blog/model/Group.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Group.java	                        (rev 0)
+++ trunk/src/model/org/jboss/blog/model/Group.java	2008-01-23 18:40:30 UTC (rev 178)
@@ -0,0 +1,86 @@
+package org.jboss.blog.model;
+
+import org.jboss.blog.model.feed.Feed;
+import org.hibernate.validator.NotEmpty;
+import org.hibernate.validator.Pattern;
+import org.hibernate.validator.Length;
+
+import javax.persistence.*;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Entity
+ at Table(name = "FeedGroup")
+public class Group {
+    @Id
+    @GeneratedValue
+    @Column(updatable = false)
+    private Integer id;
+
+    @OneToMany(mappedBy = "group")
+    @OrderBy("name")
+    private List<Feed> feeds;
+
+    @NotEmpty
+    @Column(unique = true)
+    @Length(max = 32)
+    @Pattern(regex = "^[a-z0-9_]*$", message = "#{messages['blog.group.invalidname']}")
+    private String name;
+
+    @NotEmpty
+    @Length(max = 32)
+    private String displayName;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public List<Feed> getFeeds() {
+        return feeds;
+    }
+
+    public void setFeeds(List<Feed> feeds) {
+        this.feeds = feeds;
+    }
+
+    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 boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof Group)) return false;
+
+        Group group = (Group) o;
+
+        if (id != null ? !id.equals(group.id) : group.id != null) return false;
+        if (name != null ? !name.equals(group.name) : group.name != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = (id != null ? id.hashCode() : 0);
+        result = 31 * result + (name != null ? name.hashCode() : 0);
+        return result;
+    }
+}

Modified: trunk/src/model/org/jboss/blog/model/feed/Feed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/Feed.java	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/src/model/org/jboss/blog/model/feed/Feed.java	2008-01-23 18:40:30 UTC (rev 178)
@@ -3,9 +3,11 @@
 import org.hibernate.validator.Length;
 import org.hibernate.validator.NotEmpty;
 import org.hibernate.validator.Pattern;
+import org.hibernate.validator.NotNull;
 import org.jboss.blog.model.Post;
 import org.jboss.blog.model.XmlType;
 import org.jboss.blog.model.Template;
+import org.jboss.blog.model.Group;
 
 import javax.persistence.*;
 import java.util.List;
@@ -22,6 +24,10 @@
     @Column(updatable = false)
     private Integer id;
 
+    @NotNull
+    @ManyToOne
+    private Group group;
+
     @NotEmpty
     @Length(max = 16)
     @Column(unique = true)
@@ -65,6 +71,14 @@
         this.id = id;
     }
 
+    public Group getGroup() {
+        return group;
+    }
+
+    public void setGroup(Group group) {
+        this.group = group;
+    }
+
     public String getName() {
         return name;
     }

Modified: trunk/src/services/org/jboss/blog/service/FeedsService.java
===================================================================
--- trunk/src/services/org/jboss/blog/service/FeedsService.java	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/src/services/org/jboss/blog/service/FeedsService.java	2008-01-23 18:40:30 UTC (rev 178)
@@ -11,17 +11,19 @@
  */
 @Local
 public interface FeedsService {
-    public List<Feed> getAllFeeds();
+    List<Feed> getAllGroups();
 
-    public Post getPost(String titleAsId) throws PostNotFoundException;
+    List<Feed> getAllFeeds();
 
-    public Post getPost(String titleAsId, boolean writeable) throws PostNotFoundException;
+    Post getPost(String titleAsId) throws PostNotFoundException;
 
-    public Feed getFeed(String feedName) throws FeedNotFoundException;
+    Post getPost(String titleAsId, boolean writeable) throws PostNotFoundException;
 
-    public Feed getFeed(String feedName, boolean writeable) throws FeedNotFoundException;
+    Feed getFeed(String feedName) throws FeedNotFoundException;
 
-    public List<Post> getPosts(Feed feed, int from, int to);
+    Feed getFeed(String feedName, boolean writeable) throws FeedNotFoundException;
 
-    public void remove();
+    List<Post> getPosts(Feed feed, int from, int to);
+
+    void remove();
 }

Copied: trunk/view/manage/group/group_add.xhtml (from rev 175, trunk/view/manage/remote/remote_add.xhtml)
===================================================================
--- trunk/view/manage/group/group_add.xhtml	                        (rev 0)
+++ trunk/view/manage/group/group_add.xhtml	2008-01-23 18:40:30 UTC (rev 178)
@@ -0,0 +1,18 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:rich="http://richfaces.org/rich"
+                xmlns:a="http://richfaces.org/a4j"
+                template="../../layout/template.xhtml">
+    <ui:define name="body">
+        <h1>Add feed group</h1>
+
+        <ui:include src="group_mod.xhtml">
+            <ui:param name="new" value="true" />
+        </ui:include>
+    </ui:define>
+</ui:composition>

Copied: trunk/view/manage/group/group_edit.xhtml (from rev 175, trunk/view/manage/remote/remote_edit.xhtml)
===================================================================
--- trunk/view/manage/group/group_edit.xhtml	                        (rev 0)
+++ trunk/view/manage/group/group_edit.xhtml	2008-01-23 18:40:30 UTC (rev 178)
@@ -0,0 +1,18 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:rich="http://richfaces.org/rich"
+                xmlns:a="http://richfaces.org/a4j"
+                template="../../layout/template.xhtml">
+    <ui:define name="body">
+        <h1>Edit feed group: #{groupMod.group.displayName}</h1>
+
+        <ui:include src="group_mod.xhtml">
+            <ui:param name="new" value="false" />
+        </ui:include>
+    </ui:define>
+</ui:composition>

Added: trunk/view/manage/group/group_list.xhtml
===================================================================
--- trunk/view/manage/group/group_list.xhtml	                        (rev 0)
+++ trunk/view/manage/group/group_list.xhtml	2008-01-23 18:40:30 UTC (rev 178)
@@ -0,0 +1,32 @@
+<!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>Manage groups</h1>
+
+        <s:link value="Add new group" action="#{groupMod.add}" />
+
+        <h3>Current groups:</h3>
+
+        <ui:repeat var="group" value="#{feedsService.allGroups}">
+            <p>
+                #{group.displayName} (#{group.name})
+                <br />
+                <s:link action="#{groupMod.edit}" value="Edit">
+                    <f:param name="id" value="#{group.id}" />
+                </s:link>
+                <br />
+                <s:link view="/manage/group/group_delete.xhtml" action="#{groupMod.delete}" value="Delete"
+                        onclick="if (!confirm('Are you sure you want to delete this group?')) return false">
+                    <f:param name="id" value="#{group.id}" />
+                </s:link>
+            </p>
+        </ui:repeat>
+    </ui:define>
+</ui:composition>

Copied: trunk/view/manage/group/group_mod.xhtml (from rev 175, trunk/view/manage/remote/remote_mod.xhtml)
===================================================================
--- trunk/view/manage/group/group_mod.xhtml	                        (rev 0)
+++ trunk/view/manage/group/group_mod.xhtml	2008-01-23 18:40:30 UTC (rev 178)
@@ -0,0 +1,47 @@
+<!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: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="#{groupMod.group.name}" required="true" size="32">
+                    <blog:uniqueGroupNameValidator entityId="#{groupMod.group.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="#{groupMod.group.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 />
+            <h:panelGroup>
+                <h:commandButton value="Add" action="#{groupMod.saveNew}" rendered="#{new}" />
+                <h:commandButton value="Save" action="#{groupMod.saveExisting}" rendered="#{!new}" />
+                <s:button value="Cancel" action="#{groupMod.cancel}" />
+            </h:panelGroup>
+        </h:panelGrid>
+
+    </h:form>
+</ui:composition>

Modified: trunk/view/manage/index.xhtml
===================================================================
--- trunk/view/manage/index.xhtml	2008-01-21 20:19:33 UTC (rev 177)
+++ trunk/view/manage/index.xhtml	2008-01-23 18:40:30 UTC (rev 178)
@@ -12,6 +12,8 @@
 
         <s:link value="Manage templates" view="/manage/template/template_list.xhtml" /> <br /> <br />
 
+        <s:link value="Manage groups" view="/manage/group/group_list.xhtml" /> <br /> <br />
+
         <s:link value="Add new feed" view="/manage/add.xhtml" /> <br /> <br />
 
         <s:link value="Re-index posts (for search)" action="#{postSearch.reindex}" /> <br /> <br />




More information about the jboss-cvs-commits mailing list