diff --git a/zanata-war/src/main/java/org/zanata/action/ProjectSearch.java b/zanata-war/src/main/java/org/zanata/action/ZanataSearch.java similarity index 66% rename from zanata-war/src/main/java/org/zanata/action/ProjectSearch.java rename to zanata-war/src/main/java/org/zanata/action/ZanataSearch.java index df988fc416..d27faeda8d 100644 --- a/zanata-war/src/main/java/org/zanata/action/ProjectSearch.java +++ b/zanata-war/src/main/java/org/zanata/action/ZanataSearch.java @@ -1,6 +1,7 @@ package org.zanata.action; import java.io.Serializable; +import java.util.Collections; import java.util.List; import javax.faces.model.DataModel; @@ -8,7 +9,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import org.apache.commons.lang.StringUtils; import org.apache.lucene.queryParser.ParseException; @@ -21,26 +21,32 @@ import org.zanata.dao.ProjectDAO; import org.zanata.model.HAccount; import org.zanata.model.HProject; -import org.zanata.security.ZanataIdentity; import com.google.common.collect.Lists; import org.zanata.ui.AbstractAutocomplete; +import org.zanata.ui.AbstractListFilter; +import org.zanata.ui.InMemoryListFilter; import org.zanata.util.ServiceLocator; /** * This will search both projects and people. */ -@Name("projectSearch") +@Name("zanataSearch") @Scope(ScopeType.CONVERSATION) @AutoCreate -public class ProjectSearch implements Serializable { +public class ZanataSearch implements Serializable { private static final long serialVersionUID = 1L; private final static int DEFAULT_PAGE_SIZE = 30; + private final boolean includeObsolete = false; + + @In + private ProjectDAO projectDAO; + @Getter - private ProjectAutocomplete projectAutocomplete = new ProjectAutocomplete(); + private ProjectUserAutocomplete autocomplete = new ProjectUserAutocomplete(); private QueryProjectPagedListDataModel queryProjectPagedListDataModel = new QueryProjectPagedListDataModel(DEFAULT_PAGE_SIZE); @@ -72,7 +78,7 @@ public boolean isUserNull() { } } - private class ProjectAutocomplete extends + private class ProjectUserAutocomplete extends AbstractAutocomplete { private ProjectDAO projectDAO = @@ -92,7 +98,6 @@ public List suggest() { } try { String searchQuery = getQuery().trim(); - boolean includeObsolete = false; List searchResult = projectDAO.searchProjects(searchQuery, INITIAL_RESULT_COUNT, 0, includeObsolete); @@ -128,4 +133,45 @@ public void setQuery(String query) { super.setQuery(query); } } + + @Getter + private final AbstractListFilter projectTabProjectFilter = + new InMemoryListFilter() { + + private ProjectDAO projectDAO = ServiceLocator.instance() + .getInstance(ProjectDAO.class); + + @Override + protected List fetchAll() { + if(StringUtils.isEmpty(getAutocomplete().getQuery())) { + return Collections.emptyList(); + } + try { + return projectDAO + .searchProjects(getAutocomplete().getQuery(), -1, 0, + includeObsolete); + } catch (ParseException pe) { + return Collections.emptyList(); + } + } + + @Override + protected boolean include(HProject elem, String filter) { + return StringUtils.containsIgnoreCase(elem.getSlug(), filter) || + StringUtils.containsIgnoreCase(elem.getName(), filter); + } + }; + + public int getTotalProjectCount() { + try { + return projectDAO.getQueryProjectSize(getAutocomplete().getQuery(), + includeObsolete); + } catch (ParseException pe) { + return 0; + } + } + + public int getTotalUserCount() { + return 0; + } } diff --git a/zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java b/zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java index d8e8030eec..3891f0885d 100644 --- a/zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java +++ b/zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java @@ -258,7 +258,10 @@ public List searchProjects(@Nonnull String searchQuery, int maxResult, int firstResult, boolean includeObsolete) throws ParseException { FullTextQuery query = buildSearchQuery(searchQuery, includeObsolete); - return query.setMaxResults(maxResult).setFirstResult(firstResult) + if(maxResult > 0) { + query.setMaxResults(maxResult); + } + return query.setFirstResult(firstResult) .getResultList(); } diff --git a/zanata-war/src/main/resources/messages.properties b/zanata-war/src/main/resources/messages.properties index 5752b652a4..9ae4717182 100644 --- a/zanata-war/src/main/resources/messages.properties +++ b/zanata-war/src/main/resources/messages.properties @@ -85,6 +85,7 @@ jsf.Login=Log In jsf.Signup=Sign up jsf.Menu=Menu jsf.Account=Account +jsf.Users=Users #--- Authentication Messages --- jsf.auth.KerberosNotice.label=It looks like you don't have a valid Kerberos ticket. Please log in with your Kerberos credentials. diff --git a/zanata-war/src/main/webapp/WEB-INF/pages.xml b/zanata-war/src/main/webapp/WEB-INF/pages.xml index 5029940e90..c4894cc83a 100644 --- a/zanata-war/src/main/webapp/WEB-INF/pages.xml +++ b/zanata-war/src/main/webapp/WEB-INF/pages.xml @@ -17,7 +17,7 @@ - + diff --git a/zanata-war/src/main/webapp/WEB-INF/template/banner.xhtml b/zanata-war/src/main/webapp/WEB-INF/template/banner.xhtml index 9eed467930..6f14c48df7 100644 --- a/zanata-war/src/main/webapp/WEB-INF/template/banner.xhtml +++ b/zanata-war/src/main/webapp/WEB-INF/template/banner.xhtml @@ -32,7 +32,7 @@ #{msgs['jsf.Search']} - Search Zanata for - '#{projectSearch.projectAutocomplete.query}' - + '#{zanataSearch.autocomplete.query}' + diff --git a/zanata-war/src/main/webapp/search.xhtml b/zanata-war/src/main/webapp/search.xhtml index 8f59000018..c6618aa6fc 100644 --- a/zanata-war/src/main/webapp/search.xhtml +++ b/zanata-war/src/main/webapp/search.xhtml @@ -6,18 +6,139 @@ xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" - template="./WEB-INF/template/template_2x.xhtml"> + xmlns:a4j="http://richfaces.org/a4j" + xmlns:zanata="http://java.sun.com/jsf/composite/zanata" + template="/WEB-INF/template/template.xhtml"> #{msgs.format('jsf.SearchResultsForProjectSearch', - projectSearch.projectAutocomplete.query)} + zanataSearch.autocomplete.query)} -

#{msgs.format('jsf.projectSearch.searchQuery.title', - projectSearch.projectAutocomplete.query)}

+
+
+

+ #{msgs.format('jsf.projectSearch.searchQuery.title', zanataSearch.autocomplete.query)} +

+ + +
+
+ + + + + + + + +

#{msgs.format('jsf.projectSearch.searchQuery.title', zanataSearch.autocomplete.query)}

@@ -54,8 +175,8 @@
+ rows="#{zanataSearch.projectPagedListDataModel.pageSize}" + value="#{zanataSearch.getProjectPagedListDataModel()}" var="project"> #{msgs['jsf.ProjectName']}
-