[jboss-cvs] JBossBlog SVN: r154 - in trunk: lib and 16 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Dec 5 11:22:24 EST 2007
Author: adamw
Date: 2007-12-05 11:22:23 -0500 (Wed, 05 Dec 2007)
New Revision: 154
Added:
trunk/lib/jericho-html-2.5.jar
trunk/src/action/org/jboss/blog/session/search/
trunk/src/action/org/jboss/blog/session/search/PostSearchBean.java
trunk/src/action/org/jboss/blog/session/search/StripHtmlBridge.java
trunk/src/action/org/jboss/blog/session/search/SummaryBridge.java
trunk/src/test/org/jboss/blog/tools/
trunk/src/test/org/jboss/blog/tools/StripHtmlTest.java
trunk/view/common/
trunk/view/common/next_previous_navigation.xhtml
trunk/view/search/
trunk/view/search/search.xhtml
Modified:
trunk/blog.iml
trunk/build.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/view/FeedViewBean.java
trunk/src/action/org/jboss/blog/tools/StringTools.java
trunk/src/model/org/jboss/blog/model/Post.java
trunk/view/layout/menu.xhtml
trunk/view/manage/index.xhtml
trunk/view/view/feed.xhtml
Log:
Modified: trunk/blog.iml
===================================================================
--- trunk/blog.iml 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/blog.iml 2007-12-05 16:22:23 UTC (rev 154)
@@ -117,6 +117,26 @@
<SOURCES />
</library>
</orderEntry>
+ <orderEntry type="module-library">
+ <library name="search">
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/lib/lucene-core.jar!/" />
+ <root url="jar://$MODULE_DIR$/lib/hibernate-commons-annotations.jar!/" />
+ <root url="jar://$MODULE_DIR$/lib/hibernate-search.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/lib/jericho-html-2.5.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
<orderEntryProperties />
</component>
</module>
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/build.xml 2007-12-05 16:22:23 UTC (rev 154)
@@ -161,7 +161,12 @@
<include name="lib/richfaces-api*.jar" />
<include name="lib/rome*.jar" />
<include name="lib/jdom*.jar" />
+ <include name="lib/jericho-html-*.jar" />
+ <include name="lib/lucene-core.jar" />
+ <include name="lib/hibernate-search.jar" />
+ <include name="lib/hibernate-commons-annotations.jar" />
+
<!-- moved from the war goal -->
<include name="lib/richfaces-impl*.jar" />
<include name="lib/richfaces-ui*.jar" />
Added: trunk/lib/jericho-html-2.5.jar
===================================================================
(Binary files differ)
Property changes on: trunk/lib/jericho-html-2.5.jar
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/resources/META-INF/persistence-dev.xml
===================================================================
--- trunk/resources/META-INF/persistence-dev.xml 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/resources/META-INF/persistence-dev.xml 2007-12-05 16:22:23 UTC (rev 154)
@@ -1,22 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
-
- <persistence-unit name="blog">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <jta-data-source>java:/blogDatasource</jta-data-source>
- <properties>
- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
- <property name="hibernate.hbm2ddl.auto" value="update"/>
- <property name="hibernate.show_sql" value="false"/>
- <property name="hibernate.format_sql" value="true"/>
- <property name="jboss.entity.manager.factory.jndi.name" value="java:/blogEntityManagerFactory"/>
- <property name="hibernate.connection.useUnicode" value="true" />
- <property name="hibernate.connection.characterEncoding" value="UTF-8" />
- </properties>
- </persistence-unit>
-
+
+ <persistence-unit name="blog">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <jta-data-source>java:/blogDatasource</jta-data-source>
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
+ <property name="hibernate.hbm2ddl.auto" value="update"/>
+ <property name="hibernate.show_sql" value="false"/>
+ <property name="hibernate.format_sql" value="true"/>
+ <property name="jboss.entity.manager.factory.jndi.name" value="java:/blogEntityManagerFactory"/>
+ <property name="hibernate.connection.useUnicode" value="true" />
+ <property name="hibernate.connection.characterEncoding" value="UTF-8" />
+
+ <!-- Search -->
+ <!-- use a file system based index -->
+ <property name="hibernate.search.default.directory_provider"
+ value="org.hibernate.search.store.FSDirectoryProvider"/>
+ <!-- directory where the indexes will be stored -->
+ <property name="hibernate.search.default.indexBase"
+ value="/Users/adamwarski/jboss/blog-index"/>
+
+ <property name="hibernate.ejb.event.post-insert"
+ value="org.hibernate.search.event.FullTextIndexEventListener"/>
+ <property name="hibernate.ejb.event.post-update"
+ value="org.hibernate.search.event.FullTextIndexEventListener"/>
+ <property name="hibernate.ejb.event.post-delete"
+ value="org.hibernate.search.event.FullTextIndexEventListener"/>
+ </properties>
+ </persistence-unit>
+
</persistence>
Modified: trunk/resources/META-INF/persistence-prod.xml
===================================================================
--- trunk/resources/META-INF/persistence-prod.xml 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/resources/META-INF/persistence-prod.xml 2007-12-05 16:22:23 UTC (rev 154)
@@ -1,21 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for prod profile -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
-
- <persistence-unit name="blog">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <jta-data-source>java:/blogDatasource</jta-data-source>
- <properties>
- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
- <property name="hibernate.hbm2ddl.auto" value="update"/>
- <property name="hibernate.jdbc.batch_size" value="20"/>
- <property name="jboss.entity.manager.factory.jndi.name" value="java:/blogEntityManagerFactory"/>
- <property name="hibernate.connection.useUnicode" value="true" />
- <property name="hibernate.connection.characterEncoding" value="UTF-8" />
- </properties>
- </persistence-unit>
-
+
+ <persistence-unit name="blog">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <jta-data-source>java:/blogDatasource</jta-data-source>
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
+ <property name="hibernate.hbm2ddl.auto" value="update"/>
+ <property name="hibernate.jdbc.batch_size" value="20"/>
+ <property name="jboss.entity.manager.factory.jndi.name" value="java:/blogEntityManagerFactory"/>
+ <property name="hibernate.connection.useUnicode" value="true" />
+ <property name="hibernate.connection.characterEncoding" value="UTF-8" />
+
+ <!-- Search -->
+ <!-- use a file system based index -->
+ <property name="hibernate.search.default.directory_provider"
+ value="org.hibernate.search.store.FSDirectoryProvider"/>
+ <!-- directory where the indexes will be stored -->
+ <property name="hibernate.search.default.indexBase"
+ value="/home/awarski/blog/index"/>
+
+ <property name="hibernate.ejb.event.post-insert"
+ value="org.hibernate.search.event.FullTextIndexEventListener"/>
+ <property name="hibernate.ejb.event.post-update"
+ value="org.hibernate.search.event.FullTextIndexEventListener"/>
+ <property name="hibernate.ejb.event.post-delete"
+ value="org.hibernate.search.event.FullTextIndexEventListener"/>
+ </properties>
+ </persistence-unit>
+
</persistence>
Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/resources/WEB-INF/pages.xml 2007-12-05 16:22:23 UTC (rev 154)
@@ -30,6 +30,15 @@
</navigation>
</page>
+ <!-- Search -->
+
+ <page view-id="/search/search.xhtml">
+ <param name="query" value="#{postSearch.query}" />
+ <param name="from" value="#{postSearch.from}" />
+
+ <action execute="#{postSearch.search}" />
+ </page>
+
<!-- Manage feeds -->
<page view-id="/manage/add.xhtml" />
Modified: trunk/resources/messages_en.properties
===================================================================
--- trunk/resources/messages_en.properties 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/resources/messages_en.properties 2007-12-05 16:22:23 UTC (rev 154)
@@ -105,4 +105,7 @@
blog.template.new.existingname=A template with that name already exists.
-blog.post.deleted=Post '{0}' deleted.
\ No newline at end of file
+blog.post.deleted=Post '{0}' deleted.
+
+blog.search.exception=Malformed search query: {0}.
+blog.search.emptyquery=Your query is empty.
\ No newline at end of file
Added: trunk/src/action/org/jboss/blog/session/search/PostSearchBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/search/PostSearchBean.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/search/PostSearchBean.java 2007-12-05 16:22:23 UTC (rev 154)
@@ -0,0 +1,132 @@
+package org.jboss.blog.session.search;
+
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.queryParser.MultiFieldQueryParser;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.search.Query;
+import org.hibernate.search.jpa.FullTextEntityManager;
+import org.hibernate.search.jpa.FullTextQuery;
+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 org.jboss.seam.faces.FacesMessages;
+
+import javax.faces.application.FacesMessage;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("postSearch")
+ at Scope(ScopeType.CONVERSATION)
+public class PostSearchBean {
+ @In
+ private FullTextEntityManager entityManager;
+
+ @In
+ private FacesMessages facesMessages;
+
+ private String query;
+
+ private int from;
+
+ private List<Object[]> results;
+
+ private int resultsCount;
+
+ public String getQuery() {
+ return query;
+ }
+
+ public void setQuery(String query) {
+ this.query = query;
+ }
+
+ private int getNumberOfResultsPerPage() {
+ return 10;
+ }
+
+ public int getFrom() {
+ return from;
+ }
+
+ public void setFrom(int from) {
+ this.from = from;
+ }
+
+ public boolean getShowNext() {
+ return getNextFrom() < resultsCount;
+ }
+
+ public boolean getShowPrevious() {
+ return from != 0;
+ }
+
+ public int getNextFrom() {
+ return from + getNumberOfResultsPerPage();
+ }
+
+ public int getPreviousFrom() {
+ return Math.max(0, from - getNumberOfResultsPerPage());
+ }
+
+ public int getResultsCount() {
+ return resultsCount;
+ }
+
+ public List<Object[]> getResults() {
+ return results;
+ }
+
+ private FullTextQuery getFullTextQuery() throws ParseException {
+ MultiFieldQueryParser parser = new MultiFieldQueryParser(
+ new String[]{ "title", "content", "author" },
+ new StandardAnalyzer());
+ Query luceneQuery = parser.parse(getQuery());
+
+ FullTextQuery fullTextQuery = entityManager.createFullTextQuery(luceneQuery);
+ fullTextQuery.setProjection(FullTextQuery.SCORE, "title", "titleAsId", "summary");
+
+ return fullTextQuery;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void search() {
+ if (query == null || "".equals(query.trim())) {
+ facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.search.emptyquery");
+ results = new ArrayList<Object[]>();
+ resultsCount = 0;
+ return;
+ }
+
+ FullTextQuery fullTextQuery;
+ try {
+ fullTextQuery = getFullTextQuery();
+ } catch (ParseException e) {
+ facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_ERROR, "blog.search.exception",
+ e.getMessage());
+ results = new ArrayList<Object[]>();
+ resultsCount = 0;
+ return;
+ }
+
+ results = fullTextQuery.setFirstResult(getFrom()).setMaxResults(getNumberOfResultsPerPage())
+ .getResultList();
+ resultsCount = fullTextQuery.getResultSize();
+ }
+
+ public String formatScore(float f) {
+ return String.format("%.2f", f*100);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void reindex() {
+ List<Post> posts = entityManager.createQuery("select post from Post post").getResultList();
+ for (Post post : posts) {
+ entityManager.index(post);
+ }
+ }
+}
Added: trunk/src/action/org/jboss/blog/session/search/StripHtmlBridge.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/search/StripHtmlBridge.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/search/StripHtmlBridge.java 2007-12-05 16:22:23 UTC (rev 154)
@@ -0,0 +1,17 @@
+package org.jboss.blog.session.search;
+
+import org.hibernate.search.bridge.StringBridge;
+import org.jboss.blog.tools.StringTools;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class StripHtmlBridge implements StringBridge {
+ public String objectToString(Object o) {
+ if (o == null) {
+ return null;
+ }
+
+ return StringTools.stripHtml(o.toString());
+ }
+}
Added: trunk/src/action/org/jboss/blog/session/search/SummaryBridge.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/search/SummaryBridge.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/search/SummaryBridge.java 2007-12-05 16:22:23 UTC (rev 154)
@@ -0,0 +1,26 @@
+package org.jboss.blog.session.search;
+
+import org.hibernate.search.bridge.TwoWayStringBridge;
+import org.jboss.blog.tools.StringTools;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class SummaryBridge implements TwoWayStringBridge {
+ public String objectToString(Object o) {
+ if (o == null) {
+ return null;
+ }
+
+ String s = o.toString();
+ if (s.length() > 300) {
+ s = s.substring(0, 300);
+ }
+
+ return StringTools.stripHtml(s) + " ...";
+ }
+
+ public Object stringToObject(String s) {
+ return s;
+ }
+}
Modified: trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/src/action/org/jboss/blog/session/view/FeedViewBean.java 2007-12-05 16:22:23 UTC (rev 154)
@@ -49,19 +49,19 @@
return posts;
}
- public boolean getShowNext() {
+ public boolean getShowPrevious() {
return from != 0;
}
- public boolean getShowPrevious() {
+ public boolean getShowNext() {
return getPosts().size() == feed.getMaxPostsOnPage()+1;
}
- public int getNextFrom() {
+ public int getPreviousFrom() {
return Math.max(0, from - feed.getMaxPostsOnPage());
}
- public int getPreviousFrom() {
+ public int getNextFrom() {
return from + feed.getMaxPostsOnPage();
}
}
Modified: trunk/src/action/org/jboss/blog/tools/StringTools.java
===================================================================
--- trunk/src/action/org/jboss/blog/tools/StringTools.java 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/src/action/org/jboss/blog/tools/StringTools.java 2007-12-05 16:22:23 UTC (rev 154)
@@ -1,5 +1,7 @@
package org.jboss.blog.tools;
+import au.id.jericho.lib.html.Source;
+
/**
* @author <a href="mailto:adam at warski.org">Adam Warski</a>
*/
@@ -19,4 +21,12 @@
return title.toLowerCase().replaceAll("[^a-z0-9_]", "_");
}
+
+ public static String stripHtml(String html) {
+ Source source = new Source(html);
+
+ source.fullSequentialParse();
+
+ return source.getTextExtractor().toString();
+ }
}
Modified: trunk/src/model/org/jboss/blog/model/Post.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Post.java 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/src/model/org/jboss/blog/model/Post.java 2007-12-05 16:22:23 UTC (rev 154)
@@ -1,9 +1,12 @@
package org.jboss.blog.model;
+import org.hibernate.search.annotations.*;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Pattern;
+import org.jboss.blog.session.search.StripHtmlBridge;
+import org.jboss.blog.session.search.SummaryBridge;
import org.jboss.blog.tools.StringTools;
import javax.persistence.*;
@@ -14,22 +17,32 @@
* @author <a href="mailto:adam at warski.org">Adam Warski</a>
*/
@Entity
+ at Indexed
public class Post {
@Id
@GeneratedValue
@Column(updatable = false)
+ @DocumentId
private Integer id;
@NotEmpty
@Length(max = 512)
+ @Field(store = Store.YES)
+ @Boost(2)
private String title;
@NotEmpty
@Pattern(regex = "^[a-z0-9_]*$")
@Column(unique = true)
+ @Field(store = Store.YES, index = Index.UN_TOKENIZED)
private String titleAsId;
@Lob
+ @Fields( {
+ @Field(bridge = @FieldBridge(impl = StripHtmlBridge.class)),
+ @Field(name = "summary", index = Index.UN_TOKENIZED, store = Store.YES,
+ bridge = @FieldBridge(impl = SummaryBridge.class))
+ } )
private String content;
@Length(max = 512)
@@ -38,6 +51,7 @@
@Length(max = 256)
@NotEmpty
+ @Field
private String author;
@ManyToMany
Added: trunk/src/test/org/jboss/blog/tools/StripHtmlTest.java
===================================================================
--- trunk/src/test/org/jboss/blog/tools/StripHtmlTest.java (rev 0)
+++ trunk/src/test/org/jboss/blog/tools/StripHtmlTest.java 2007-12-05 16:22:23 UTC (rev 154)
@@ -0,0 +1,26 @@
+package org.jboss.blog.tools;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class StripHtmlTest {
+ @DataProvider(name = "texts")
+ public Object[][] getData() {
+ return new Object[][] {
+ { "<p>Some text.</p>", "Some text." },
+ { "This: < shouldn't get removed.", "This: < shouldn't get removed." },
+ { "<p>Non-terminated tags. <a> And now this!. >", "Non-terminated tags. And now this!. >" },
+ { "<p > Tags with spaces, and some <a > not terminated </a>.",
+ "Tags with spaces, and some not terminated ." }
+ };
+ }
+
+ @Test(dataProvider = "texts")
+ public void test(String original, String stripped) {
+ System.out.println(StringTools.stripHtml(original));
+ assert stripped.equals(StringTools.stripHtml(original));
+ }
+}
Added: trunk/view/common/next_previous_navigation.xhtml
===================================================================
--- trunk/view/common/next_previous_navigation.xhtml (rev 0)
+++ trunk/view/common/next_previous_navigation.xhtml 2007-12-05 16:22:23 UTC (rev 154)
@@ -0,0 +1,23 @@
+<!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">
+ <p>
+ <s:link view="#{viewId}" value="« Previous" rendered="#{navigationBean.showPrevious}"
+ propagation="none">
+ <f:param name="from" value="#{navigationBean.previousFrom}" />
+ </s:link>
+ </p>
+
+ <p>
+ <s:link view="#{viewId}" value="Next »" rendered="#{navigationBean.showNext}"
+ propagation="none">
+ <f:param name="from" value="#{navigationBean.nextFrom}" />
+ </s:link>
+ </p>
+</ui:composition>
\ No newline at end of file
Modified: trunk/view/layout/menu.xhtml
===================================================================
--- trunk/view/layout/menu.xhtml 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/view/layout/menu.xhtml 2007-12-05 16:22:23 UTC (rev 154)
@@ -9,8 +9,15 @@
<h:outputText value="#{projectName}:"/>
<s:link view="/home.xhtml" value="Home"/>
</rich:toolBarGroup>
- <!-- @newMenuItem@ -->
<rich:toolBarGroup location="right">
+ <h:form>
+ <h:inputText value="#{postSearch.query}" />
+ <h:commandButton value="Search" action="/search/search.xhtml">
+ <s:conversationPropagation value="none" />
+ </h:commandButton>
+ </h:form>
+ </rich:toolBarGroup>
+ <rich:toolBarGroup location="right">
<h:outputText value="Welcome, #{identity.username}!" rendered="#{identity.loggedIn}"/>
<s:link view="/login.xhtml" value="Login" rendered="#{not identity.loggedIn}"/>
<s:link view="/home.xhtml" action="#{identity.logout}" value="Logout" rendered="#{identity.loggedIn}"/>
Modified: trunk/view/manage/index.xhtml
===================================================================
--- trunk/view/manage/index.xhtml 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/view/manage/index.xhtml 2007-12-05 16:22:23 UTC (rev 154)
@@ -12,7 +12,9 @@
<s:link value="Manage templates" view="/manage/template/template_list.xhtml" /> <br /> <br />
- <s:link value="Add new feed" view="/manage/add.xhtml" />
+ <s:link value="Add new feed" view="/manage/add.xhtml" /> <br /> <br />
+
+ <s:link value="Re-index posts (for search)" action="#{postSearch.reindex}" />
<h3>Current feeds:</h3>
Added: trunk/view/search/search.xhtml
===================================================================
--- trunk/view/search/search.xhtml (rev 0)
+++ trunk/view/search/search.xhtml 2007-12-05 16:22:23 UTC (rev 154)
@@ -0,0 +1,40 @@
+<!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>Search</h1>
+
+ <s:div rendered="#{empty postSearch.results}">
+ <p>
+ Your search for: '#{postSearch.query}' didn't return any results.
+ </p>
+ </s:div>
+
+ <s:div rendered="#{not empty postSearch.results}">
+ <p>
+ Your search for: '#{postSearch.query}' returned #{postSearch.resultsCount} results.
+ </p>
+
+ <ui:include src="../common/next_previous_navigation.xhtml">
+ <ui:param name="viewId" value="/search/search.xhtml" />
+ <ui:param name="navigationBean" value="#{postSearch}" />
+ </ui:include>
+
+ <ui:repeat var="result" value="#{postSearch.results}">
+ <p>
+ <s:link view="/view/post.xhtml" value="#{result[1]}">
+ <f:param name="post" value="#{result[2]}" />
+ </s:link> (#{postSearch.formatScore(result[0])}%)
+ <br />
+ #{result[3]}
+ </p>
+ </ui:repeat>
+ </s:div>
+ </ui:define>
+</ui:composition>
Modified: trunk/view/view/feed.xhtml
===================================================================
--- trunk/view/view/feed.xhtml 2007-12-04 23:38:14 UTC (rev 153)
+++ trunk/view/view/feed.xhtml 2007-12-05 16:22:23 UTC (rev 154)
@@ -24,20 +24,11 @@
</s:link>
</p>
- <p>
- <s:link view="/view/feed.xhtml" value="« Next" rendered="#{feedView.showNext}"
- propagation="none">
- <f:param name="from" value="#{feedView.nextFrom}" />
- </s:link>
- </p>
+ <ui:include src="../common/next_previous_navigation.xhtml">
+ <ui:param name="viewId" value="/view/feed.xhtml" />
+ <ui:param name="navigationBean" value="#{feedView}" />
+ </ui:include>
- <p>
- <s:link view="/view/feed.xhtml" value="Previous »" rendered="#{feedView.showPrevious}"
- propagation="none">
- <f:param name="from" value="#{feedView.previousFrom}" />
- </s:link>
- </p>
-
<a:repeat var="post" value="#{feedView.posts}" rows="#{feedView.feed.maxPostsOnPage}">
<rich:panel>
<f:facet name="header">
More information about the jboss-cvs-commits
mailing list