[jboss-cvs] JBossBlog SVN: r171 - in trunk: src/action/org/jboss/blog/session/feed/mod and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jan 14 14:06:52 EST 2008


Author: adamw
Date: 2008-01-14 14:06:51 -0500 (Mon, 14 Jan 2008)
New Revision: 171

Added:
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/FilterAddBean.java
   trunk/src/tools/org/jboss/blog/tools/validator/
   trunk/src/tools/org/jboss/blog/tools/validator/Regexp.java
   trunk/src/tools/org/jboss/blog/tools/validator/RegexpValidator.java
   trunk/view/manage/aggregated/filter_add.xhtml
Modified:
   trunk/resources/WEB-INF/components.xml
   trunk/resources/WEB-INF/pages.xml
   trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java
   trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java
   trunk/src/action/org/jboss/blog/session/update/UpdateManager.java
   trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java
   trunk/view/manage/aggregated/aggregated_mod.xhtml
Log:


Modified: trunk/resources/WEB-INF/components.xml
===================================================================
--- trunk/resources/WEB-INF/components.xml	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/resources/WEB-INF/components.xml	2008-01-14 19:06:51 UTC (rev 171)
@@ -46,6 +46,13 @@
         <action execute="#{redirect.returnToCapturedView}"/>
     </event>
 
+    <event type="org.jboss.blog.captureView">
+        <action execute="#{redirect.captureCurrentView}"/>
+    </event>
+    <event type="org.jboss.blog.restoreView">
+        <action execute="#{redirect.returnToCapturedView}"/>
+    </event>
+
     <mail:mail-session host="localhost" port="2525" username="test" password="test" />
 
     <async:quartz-dispatcher />

Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/resources/WEB-INF/pages.xml	2008-01-14 19:06:51 UTC (rev 171)
@@ -91,6 +91,16 @@
         <navigation from-action="#{aggregatedFeedMod.saveNew}">
             <redirect view-id="/manage/feed_add.xhtml" />
         </navigation>
+
+        <!-- Should be done using a wildcard, but they aren't supported -->
+        <navigation from-action="#{filterAdd.addToList(aggregatedFeedMod.globalFilters)}">
+            <raise-event type="org.jboss.blog.captureView" />
+            <redirect view-id="/manage/aggregated/filter_add.xhtml" />
+        </navigation>
+        <navigation from-action="#{filterAdd.addToList(aggregatedFeedMod.selectedFeedsFilters[feed])}">
+            <raise-event type="org.jboss.blog.captureView" />
+            <redirect view-id="/manage/aggregated/filter_add.xhtml" />
+        </navigation>
     </page>
 
     <page view-id="/manage/aggregated/aggregated_edit.xhtml">
@@ -100,8 +110,33 @@
             <end-conversation />
             <redirect view-id="/manage/index.xhtml" />
         </navigation>
+
+        <!-- Should be done using a wildcard, but they aren't supported -->
+        <navigation from-action="#{filterAdd.addToList(aggregatedFeedMod.globalFilters)}">
+            <raise-event type="org.jboss.blog.captureView" />
+            <redirect view-id="/manage/aggregated/filter_add.xhtml" />
+        </navigation>
+        <navigation from-action="#{filterAdd.addToList(aggregatedFeedMod.selectedFeedsFilters[feed])}">
+            <raise-event type="org.jboss.blog.captureView" />
+            <redirect view-id="/manage/aggregated/filter_add.xhtml" />
+        </navigation>
     </page>
 
+    <!-- Add filters -->
+
+    <page view-id="/manage/aggregated/filter_add.xhtml" conversation-required="true">
+        <!-- Should be done using a wildcard, but they aren't supported -->
+        <navigation from-action="#{filterAdd.add(filterAdd.podcastFilter)}">
+            <raise-event type="org.jboss.blog.restoreView" />
+        </navigation>
+        <navigation from-action="#{filterAdd.add(filterAdd.notPodcastFilter)}">
+            <raise-event type="org.jboss.blog.restoreView" />
+        </navigation>
+        <navigation from-action="#{filterAdd.add(filterAdd.authorRegexpFilter)}">
+            <raise-event type="org.jboss.blog.restoreView" />
+        </navigation>
+    </page>
+
     <!-- Manage templates -->
 
     <page view-id="/manage/template/template_add.xhtml">
@@ -135,42 +170,42 @@
             <message>Not found</message>
         </redirect>
     </exception>
-    
+
     <exception class="javax.persistence.EntityNotFoundException">
         <redirect view-id="/error.xhtml">
             <message>Not found</message>
         </redirect>
     </exception>
-    
+
     <exception class="javax.persistence.OptimisticLockException">
         <end-conversation/>
         <redirect view-id="/error.xhtml">
             <message>Another user changed the same data, please try again</message>
         </redirect>
     </exception>
-    
+
     <exception class="org.jboss.seam.security.AuthorizationException">
         <redirect view-id="/error.xhtml">
             <message>You don't have permission to do this</message>
         </redirect>
     </exception>
-    
+
     <exception class="org.jboss.seam.security.NotLoggedInException">
         <redirect view-id="/login.xhtml">
             <message>Please log in first</message>
         </redirect>
     </exception>
-    
+
     <exception class="javax.faces.application.ViewExpiredException">
         <redirect view-id="/error.xhtml">
             <message>Your session has timed out, please try again</message>
         </redirect>
     </exception>
-     
+
     <exception>
         <redirect view-id="/error.xhtml">
             <message>Unexpected error, please try again</message>
         </redirect>
     </exception>
-    
+
 </pages>

Modified: trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -10,10 +10,7 @@
 import org.jboss.blog.session.view.LinkServiceBean;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.faces.FacesMessages;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.*;
 
 import javax.faces.application.FacesMessage;
 import javax.persistence.EntityManager;
@@ -143,6 +140,18 @@
         this.selectedFeeds = selectedFeeds;
     }
 
+    public Map<Feed, List<PostFilter>> getSelectedFeedsFilters() {
+        return selectedFeedsFilters;
+    }
+
+    public List<PostFilter> getGlobalFilters() {
+        return globalFilters;
+    }
+
+    public void removeFilter(List<PostFilter> filters, PostFilter filter) {
+        filters.remove(filter);
+    }
+
     private void save() {
         // Saving feeds and filters
         Map<Feed, PostFilter> currentAggregatedFeeds = getAggregatedFeed().getFeeds();

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -5,6 +5,7 @@
 
 import java.util.List;
 import java.util.ArrayList;
+import java.util.Iterator;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -39,4 +40,32 @@
 
         return true;
     }
+
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+        result.append("And(");
+        for (Iterator<PostFilter> iter = filters.iterator(); iter.hasNext();) {
+            result.append(iter.next().toString());
+            if (iter.hasNext()) {
+                result.append(", ");
+            }
+        }
+
+        return result.append(")").toString();
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof AndFilter)) return false;
+
+        AndFilter andFilter = (AndFilter) o;
+
+        if (filters != null ? !filters.equals(andFilter.filters) : andFilter.filters != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return (filters != null ? filters.hashCode() : 0);
+    }
 }

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -2,22 +2,64 @@
 
 import org.jboss.blog.model.Post;
 import org.jboss.blog.model.post.PostFilter;
+import org.jboss.blog.tools.validator.Regexp;
 
 import java.util.regex.Pattern;
+import java.io.IOException;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 public class AuthorRegexpFilter implements PostFilter {
     private static final long serialVersionUID = 2015864901762113142L;
-    
-    private Pattern pattern;
 
-    public AuthorRegexpFilter(String regexp) {
-        pattern = Pattern.compile(regexp);
+    @Regexp
+    private String regexp;
+
+    private transient Pattern pattern;
+
+    public String getRegexp() {
+        return regexp;
     }
 
+    public void setRegexp(String regexp) {
+        this.regexp = regexp;
+
+        pattern = Pattern.compile(this.regexp);
+    }
+
     public boolean filter(Post post) {
         return pattern.matcher(post.getAuthor()).matches();
     }
+
+    private void writeObject(java.io.ObjectOutputStream out)
+            throws IOException {
+        out.defaultWriteObject();
+    }
+
+    private void readObject(java.io.ObjectInputStream in)
+            throws IOException, ClassNotFoundException {
+        in.defaultReadObject();
+
+        setRegexp(getRegexp());
+    }
+
+    public String toString() {
+        return "Author matching regexp: " + regexp;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof AuthorRegexpFilter)) return false;
+
+        AuthorRegexpFilter that = (AuthorRegexpFilter) o;
+
+        if (regexp != null ? !regexp.equals(that.regexp) : that.regexp != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return (regexp != null ? regexp.hashCode() : 0);
+    }
 }

Added: trunk/src/action/org/jboss/blog/session/feed/posts/filter/FilterAddBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/FilterAddBean.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/FilterAddBean.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -0,0 +1,55 @@
+package org.jboss.blog.session.feed.posts.filter;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.ScopeType;
+import org.jboss.blog.model.post.PostFilter;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("filterAdd")
+ at Scope(ScopeType.CONVERSATION)
+public class FilterAddBean {
+    private List<PostFilter> addToList;
+
+    private PodcastFilter podcastFilter;
+
+    private NotPodcastFilter notPodcastFilter;
+
+    private AuthorRegexpFilter authorRegexpFilter;
+
+    public PodcastFilter getPodcastFilter() {
+        if (podcastFilter == null) {
+            podcastFilter = new PodcastFilter();
+        }
+
+        return podcastFilter;
+    }
+
+    public NotPodcastFilter getNotPodcastFilter() {
+        if (notPodcastFilter == null) {
+            notPodcastFilter =  new NotPodcastFilter();
+        }
+
+        return notPodcastFilter;
+    }
+
+    public AuthorRegexpFilter getAuthorRegexpFilter() {
+        if (authorRegexpFilter == null) {
+            authorRegexpFilter = new AuthorRegexpFilter();
+        }
+        
+        return authorRegexpFilter;
+    }
+
+    public void add(PostFilter filter) {
+        addToList.add(filter);
+    }
+
+    public void addToList(List<PostFilter> addToList) {
+        this.addToList = addToList;
+    }
+}

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -12,4 +12,19 @@
     public boolean filter(Post post) {
         return post.getEnclosures() == null || post.getEnclosures().size() == 0;
     }
+
+    public String toString() {
+        return "No enclosure (not a podcast entry)";
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof NotPodcastFilter)) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return NotPodcastFilter.class.hashCode();
+    }
 }

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -12,4 +12,19 @@
     public boolean filter(Post post) {
         return post.getEnclosures() != null && post.getEnclosures().size() != 0;
     }
+
+    public String toString() {
+        return "With enclosure (a podcast entry)";
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof PodcastFilter)) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return PodcastFilter.class.hashCode();
+    }
 }

Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -12,4 +12,19 @@
     public boolean filter(Post post) {
         return true;
     }
+
+    public String toString() {
+        return "Everything";
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof TotalFilter)) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return TotalFilter.class.hashCode();
+    }
 }

Modified: trunk/src/action/org/jboss/blog/session/update/UpdateManager.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/update/UpdateManager.java	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/update/UpdateManager.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -17,6 +17,6 @@
     @Observer("org.jboss.blog.postBlogInit")
     public void register() {
         // TODO: add monitor and configurable intervals
-        updateHandler.update(new Date(System.currentTimeMillis() + 3000), 60000 * 10);
+        // updateHandler.update(new Date(System.currentTimeMillis() + 3000), 60000 * 10);
     }
 }

Modified: trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -7,6 +7,7 @@
 
 import javax.persistence.Entity;
 import javax.persistence.Basic;
+import javax.persistence.Lob;
 import java.util.Map;
 
 /**
@@ -16,10 +17,12 @@
 public class AggregatedFeed extends Feed {
     @CollectionOfElements
     @MapKeyManyToMany
+    @Lob
     private Map<Feed, PostFilter> feeds;
 
     @NotNull
     @Basic
+    @Lob
     private PostFilter globalFilter;
 
     public Map<Feed, PostFilter> getFeeds() {

Added: trunk/src/tools/org/jboss/blog/tools/validator/Regexp.java
===================================================================
--- trunk/src/tools/org/jboss/blog/tools/validator/Regexp.java	                        (rev 0)
+++ trunk/src/tools/org/jboss/blog/tools/validator/Regexp.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -0,0 +1,16 @@
+package org.jboss.blog.tools.validator;
+
+import org.hibernate.validator.ValidatorClass;
+
+import java.lang.annotation.*;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at ValidatorClass(RegexpValidator.class)
+ at Target({ElementType.FIELD, ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface Regexp {
+    String message() default "must be a valid regular expression";
+}

Added: trunk/src/tools/org/jboss/blog/tools/validator/RegexpValidator.java
===================================================================
--- trunk/src/tools/org/jboss/blog/tools/validator/RegexpValidator.java	                        (rev 0)
+++ trunk/src/tools/org/jboss/blog/tools/validator/RegexpValidator.java	2008-01-14 19:06:51 UTC (rev 171)
@@ -0,0 +1,36 @@
+package org.jboss.blog.tools.validator;
+
+import org.hibernate.validator.PropertyConstraint;
+import org.hibernate.validator.Validator;
+import org.hibernate.mapping.Property;
+
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class RegexpValidator implements Validator<Regexp>, PropertyConstraint {
+    public void initialize(Regexp parameters) { }
+
+    public boolean isValid(Object value) {
+        if (value == null) {
+            return true;
+        }
+
+        if (!(value instanceof String)) {
+            return false;
+        }
+
+        String string = (String) value;
+
+        try {
+            Pattern.compile(string);
+            return true;
+        } catch (PatternSyntaxException e) {
+            return false;
+        }
+    }
+
+    public void apply(Property property) { }
+}
\ No newline at end of file

Modified: trunk/view/manage/aggregated/aggregated_mod.xhtml
===================================================================
--- trunk/view/manage/aggregated/aggregated_mod.xhtml	2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/view/manage/aggregated/aggregated_mod.xhtml	2008-01-14 19:06:51 UTC (rev 171)
@@ -7,29 +7,62 @@
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:rich="http://richfaces.org/rich"
                 xmlns:a="http://richfaces.org/a4j">
+
     <h:form>
         <h:panelGrid columns="1">
             <h:outputLabel>Please select feeds to include:</h:outputLabel>
 
             <h:panelGroup>
-                <h:dataTable value="#{aggregatedFeedMod.availableFeeds}" var="feed">
+                <h:dataTable value="#{aggregatedFeedMod.availableFeeds}" var="feed" id="availableFeedsTable">
                     <h:column>
-                        <h:selectBooleanCheckbox value="#{aggregatedFeedMod.selectedFeeds[feed]}" />
+                        <h:selectBooleanCheckbox value="#{aggregatedFeedMod.selectedFeeds[feed]}">
+                            <a:support event="onclick" reRender="availableFeedsTable" />
+                        </h:selectBooleanCheckbox>
                         #{feed.name}
                     </h:column>
                     <h:column>
-                        <h:panelGroup rendered="">
+                        <h:panelGroup rendered="#{aggregatedFeedMod.selectedFeeds[feed]}">
+                            <h5>Local filters, applied only to this feed:</h5>
+                            <h:dataTable value="#{aggregatedFeedMod.selectedFeedsFilters[feed]}" var="filter">
+                                <h:column>
+                                    #{filter}
+                                </h:column>
+                                <h:column>
+                                    <h:commandButton
+                                            action="#{aggregatedFeedMod.removeFilter(aggregatedFeedMod.selectedFeedsFilters[feed],filter)}"
+                                            value="Remove" />
+                                </h:column>
+                            </h:dataTable>
 
+                            <h:commandLink action="#{filterAdd.addToList(aggregatedFeedMod.selectedFeedsFilters[feed])}"
+                                           value="Add filter" />
                         </h:panelGroup>
                     </h:column>
                 </h:dataTable>
             </h:panelGroup>
 
+            <h3>Global filters, applied to all feeds; this feed will only contain entries, satisfying:</h3>
+
+            <h:panelGroup>
+                <h:dataTable value="#{aggregatedFeedMod.globalFilters}" var="filter">
+                    <h:column>
+                        #{filter}
+                    </h:column>
+                    <h:column>
+                        <h:commandButton
+                                action="#{aggregatedFeedMod.removeFilter(aggregatedFeedMod.globalFilters,filter)}"
+                                value="Remove" />
+                    </h:column>
+                </h:dataTable>
+
+                <h:commandLink action="#{filterAdd.addToList(aggregatedFeedMod.globalFilters)}" value="Add filter" />
+            </h:panelGroup>
+
             <h:panelGroup id="proceed">
                 <h:commandButton rendered="#{new}" value="Next &#187;"
-                          action="#{aggregatedFeedMod.saveNew}" />
+                                 action="#{aggregatedFeedMod.saveNew}" />
                 <h:commandButton rendered="#{!new}" value="Save"
-                          action="#{aggregatedFeedMod.saveExisting}" />
+                                 action="#{aggregatedFeedMod.saveExisting}" />
                 <s:button value="Cancel" view="/manage/index.xhtml" propagation="end" />
             </h:panelGroup>
         </h:panelGrid>

Added: trunk/view/manage/aggregated/filter_add.xhtml
===================================================================
--- trunk/view/manage/aggregated/filter_add.xhtml	                        (rev 0)
+++ trunk/view/manage/aggregated/filter_add.xhtml	2008-01-14 19:06:51 UTC (rev 171)
@@ -0,0 +1,49 @@
+<!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 a filter feed</h1>
+
+        <h:panelGroup>
+            <h5>Only entries with enclosures filter (podcast)</h5>
+            <h:form>
+                <h:commandButton value="Add" action="#{filterAdd.add(filterAdd.podcastFilter)}"/>
+            </h:form>
+        </h:panelGroup>
+
+        <h:panelGroup>
+            <h5>Only entries without enclosure filter (not-podcast)</h5>
+            <h:form>
+                <h:commandButton value="Add" action="#{filterAdd.add(filterAdd.notPodcastFilter)}"/>
+            </h:form>
+        </h:panelGroup>
+
+        <h:panelGroup>
+            <h5>Only entries whose author matches a regular expression</h5>
+            <h:form>
+                <h:panelGrid>
+                    <h:outputLabel for="author"><span class="required">*</span> Regular expression:</h:outputLabel>
+                    <h:panelGroup>
+                        <h:inputText id="author" value="#{filterAdd.authorRegexpFilter.regexp}" required="true" size="16">
+                            <a:support event="onblur" reRender="authorMessage" ajaxSingle="true" bypassUpdates="true"/>
+                            <s:validate />
+                        </h:inputText>
+
+                        <a:outputPanel id="authorMessage">
+                            <h:message for="author" styleClass="error" />
+                        </a:outputPanel>
+                    </h:panelGroup>
+
+                    <h:commandButton value="Add" action="#{filterAdd.add(filterAdd.authorRegexpFilter)}"/>
+                </h:panelGrid>
+            </h:form>
+        </h:panelGroup>
+    </ui:define>
+</ui:composition>




More information about the jboss-cvs-commits mailing list