From: <rv...@us...> - 2011-04-28 23:37:58
|
Revision: 813 http://treebase.svn.sourceforge.net/treebase/?rev=813&view=rev Author: rvos Date: 2011-04-28 23:37:52 +0000 (Thu, 28 Apr 2011) Log Message: ----------- This commit adds functionality for a simple search box that searches identifiers and names for studies, trees, matrices and taxa. Modified Paths: -------------- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/MatrixSearchController.java trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/StudySearchController.java trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/TaxonSearchController.java trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/TreeSearchController.java trunk/treebase-web/src/main/webapp/WEB-INF/treebase-servlet.xml Added Paths: ----------- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/MainSearchController.java trunk/treebase-web/src/main/webapp/WEB-INF/pages/search/mainSearch.jsp trunk/treebase-web/src/main/webapp/WEB-INF/pages/search/mainSimpleSearchForm.jsp Added: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/MainSearchController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/MainSearchController.java (rev 0) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/MainSearchController.java 2011-04-28 23:37:52 UTC (rev 813) @@ -0,0 +1,114 @@ +package org.cipres.treebase.web.controllers; + +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.cipres.treebase.TreebaseUtil; +import org.cipres.treebase.domain.matrix.Matrix; +import org.cipres.treebase.domain.search.MatrixSearchResults; +import org.cipres.treebase.domain.search.SearchResultsType; +import org.cipres.treebase.domain.search.StudySearchResults; +import org.cipres.treebase.domain.search.TaxonSearchResults; +import org.cipres.treebase.domain.search.TreeSearchResults; +import org.springframework.validation.BindException; +import org.springframework.web.servlet.ModelAndView; +import org.z3950.zing.cql.CQLNode; +import org.z3950.zing.cql.CQLParseException; +import org.z3950.zing.cql.CQLParser; + +import org.cipres.treebase.domain.study.Study; +import org.cipres.treebase.domain.taxon.Taxon; +import org.cipres.treebase.domain.tree.PhyloTree; +import org.cipres.treebase.web.controllers.TreeSearchController; +import org.cipres.treebase.web.controllers.TaxonSearchController; +import org.cipres.treebase.web.controllers.StudySearchController; +import org.cipres.treebase.web.controllers.MatrixSearchController; + +public class MainSearchController extends SearchController { + + @Override + protected ModelAndView handleQueryRequest(HttpServletRequest request, + HttpServletResponse response, BindException errors, String query) + throws CQLParseException, IOException, InstantiationException { + String anyQuery = "dcterms.identifier=" + query + " or dcterms.title=" + query; + CQLParser parser = new CQLParser(); + CQLNode root = parser.parse(anyQuery); + + StudySearchResults studyResults = new StudySearchResults(doDelegatedStudyQuery(root, request, response, errors)); + request.setAttribute("studyResults", studyResults); + + MatrixSearchResults matrixResults = new MatrixSearchResults(doDelegatedMatrixQuery(root, request, response, errors)); + request.setAttribute("matrixResults", matrixResults); + + TaxonSearchResults taxonResults = new TaxonSearchResults(doDelegatedTaxonQuery(root, request, response, errors)); + request.setAttribute("taxonResults", taxonResults); + + TreeSearchResults treeResults = new TreeSearchResults(doDelegatedTreeQuery(root, request, response, errors)); + request.setAttribute("treeResults",treeResults); + + return new ModelAndView("search/mainSearch"); + } + + protected ModelAndView onSubmit( + HttpServletRequest request, + HttpServletResponse response, + Object command, + BindException errors) throws Exception { + clearMessages(request); + String query = request.getParameter("query"); + if ( TreebaseUtil.isEmpty(query) || "".equals(query) ) { + addMessage(request,"You provided an empty search query"); + } + return this.handleQueryRequest(request, response, errors, query); + } + + private Set<Study> doDelegatedStudyQuery(CQLNode node, HttpServletRequest request, HttpServletResponse response, BindException errors) throws InstantiationException { + StudySearchController searcher = new StudySearchController(); + CQLNode normalized = searcher.normalizeParseTree(node); + Set<Study> results = new HashSet<Study>(); + return searcher.doCQLQuery(normalized, results, request, response, errors); + } + + private Set<Matrix> doDelegatedMatrixQuery(CQLNode node, HttpServletRequest request, HttpServletResponse response, BindException errors) throws InstantiationException { + MatrixSearchController searcher = new MatrixSearchController(); + CQLNode normalized = searcher.normalizeParseTree(node); + Set<Matrix> results = new HashSet<Matrix>(); + return searcher.doCQLQuery(normalized, results, request, response, errors); + } + + private Set<PhyloTree> doDelegatedTreeQuery(CQLNode node, HttpServletRequest request, HttpServletResponse response, BindException errors) throws InstantiationException { + TreeSearchController searcher = new TreeSearchController(); + CQLNode normalized = searcher.normalizeParseTree(node); + Set<PhyloTree> results = new HashSet<PhyloTree>(); + return searcher.doCQLQuery(normalized, results, request, response, errors); + } + + private Set<Taxon> doDelegatedTaxonQuery(CQLNode node, HttpServletRequest request, HttpServletResponse response, BindException errors) throws InstantiationException { + TaxonSearchController searcher = new TaxonSearchController(); + CQLNode normalized = searcher.normalizeParseTree(node); + Set<Taxon> results = new HashSet<Taxon>(); + return searcher.doCQLQuery(normalized, results, request); + } + + @Override + protected Map<String, String> getPredicateMapping() { + return new HashMap<String,String>(); + } + + @Override + public String getDefaultViewURL() { + return "mainSearch.html"; + } + + @Override + SearchResultsType currentSearchType() { + return SearchResultsType.MAIN; + } + +} Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/MatrixSearchController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/MatrixSearchController.java 2011-04-28 21:08:13 UTC (rev 812) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/MatrixSearchController.java 2011-04-28 23:37:52 UTC (rev 813) @@ -120,7 +120,7 @@ } } - private Set<Matrix> doCQLQuery( + protected Set<Matrix> doCQLQuery( CQLNode node, Set<Matrix> results, HttpServletRequest request, Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/StudySearchController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/StudySearchController.java 2011-04-28 21:08:13 UTC (rev 812) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/StudySearchController.java 2011-04-28 23:37:52 UTC (rev 813) @@ -149,7 +149,7 @@ } } - private Set<Study> doCQLQuery( + protected Set<Study> doCQLQuery( CQLNode node, Set<Study> results, HttpServletRequest request, Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/TaxonSearchController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/TaxonSearchController.java 2011-04-28 21:08:13 UTC (rev 812) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/TaxonSearchController.java 2011-04-28 23:37:52 UTC (rev 813) @@ -97,7 +97,7 @@ } } - private Set<Taxon> doCQLQuery(CQLNode node, Set<Taxon> results, HttpServletRequest request) { + protected Set<Taxon> doCQLQuery(CQLNode node, Set<Taxon> results, HttpServletRequest request) { if ( node instanceof CQLBooleanNode ) { Set<Taxon> resultsLeft = doCQLQuery(((CQLBooleanNode)node).left,results, request); Set<Taxon> resultsRight = doCQLQuery(((CQLBooleanNode)node).right,results, request); Modified: trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/TreeSearchController.java =================================================================== --- trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/TreeSearchController.java 2011-04-28 21:08:13 UTC (rev 812) +++ trunk/treebase-web/src/main/java/org/cipres/treebase/web/controllers/TreeSearchController.java 2011-04-28 23:37:52 UTC (rev 813) @@ -116,7 +116,7 @@ } } - private Set<PhyloTree> doCQLQuery( + protected Set<PhyloTree> doCQLQuery( CQLNode node, Set<PhyloTree> results, HttpServletRequest request, Added: trunk/treebase-web/src/main/webapp/WEB-INF/pages/search/mainSearch.jsp =================================================================== --- trunk/treebase-web/src/main/webapp/WEB-INF/pages/search/mainSearch.jsp (rev 0) +++ trunk/treebase-web/src/main/webapp/WEB-INF/pages/search/mainSearch.jsp 2011-04-28 23:37:52 UTC (rev 813) @@ -0,0 +1,36 @@ +<%@ include file="/common/taglibs.jsp"%> + +<title><fmt:message key="search.main"/></title> +<body id="s-main"/> + +<div id="wrap"> + <!-- these are the tabs that switch between search forms --> + <jsp:include page="/common/search-nav.jsp"/> + <div id="s-clear"></div> + + <c:set var="searchType" value="main" scope="request"/> + + <!-- this is the simple search box --> + <jsp:include page="mainSimpleSearchForm.jsp"/> + <div id="s-clear"></div> + + <!-- this contains any search warnings, e.g. if an empty query string was provided --> + <jsp:include page="searchMessages.jsp"/> + + <div id="searchResultsList"> + <c:set var="resultSet" value="${studyResults}"/> + <jsp:include page="studyList.jsp"/> + + <c:set var="resultSet" value="${matrixResults}"/> + <jsp:include page="matrixList.jsp"/> + + <c:set var="resultSet" value="${treeResults}"/> + <jsp:include page="treeList.jsp"/> + + <c:set var="resultSet" value="${taxonResults}"/> + <jsp:include page="taxonList.jsp"/> + </div> + + <div id="output"></div> + +</div> \ No newline at end of file Added: trunk/treebase-web/src/main/webapp/WEB-INF/pages/search/mainSimpleSearchForm.jsp =================================================================== --- trunk/treebase-web/src/main/webapp/WEB-INF/pages/search/mainSimpleSearchForm.jsp (rev 0) +++ trunk/treebase-web/src/main/webapp/WEB-INF/pages/search/mainSimpleSearchForm.jsp 2011-04-28 23:37:52 UTC (rev 813) @@ -0,0 +1,11 @@ +<%@ include file="/common/taglibs.jsp"%> +<form id="searchSimple" method="post"> + <fieldset> + <input type="hidden" name="formName" value="mainSimple"/> + <input type="text" class="textCell" style="width:150px" name="query" id="keyword" value="${query}"/> + <input type="submit" value="Search"> + <a href="#" class="openHelp" onclick="openHelp('mainSimpleSearchForm')"> + <img class="iconButton" src="<fmt:message key="icons.help"/>" /> + </a> + </fieldset> +</form> \ No newline at end of file Modified: trunk/treebase-web/src/main/webapp/WEB-INF/treebase-servlet.xml =================================================================== --- trunk/treebase-web/src/main/webapp/WEB-INF/treebase-servlet.xml 2011-04-28 21:08:13 UTC (rev 812) +++ trunk/treebase-web/src/main/webapp/WEB-INF/treebase-servlet.xml 2011-04-28 23:37:52 UTC (rev 813) @@ -742,11 +742,15 @@ <property name="taxonLabelService"><ref bean="taxonLabelService"></ref></property> <property name="searchService"><ref bean="searchService"></ref></property> </bean> + + <bean id="mainSearchController" parent="searchController" class="org.cipres.treebase.web.controllers.MainSearchController"> + <property name="formView"><value>search/mainSearch</value></property> + <property name="successView"><value>search/mainSearch</value></property> + </bean> <bean id="studySearchController" parent="searchController" class="org.cipres.treebase.web.controllers.StudySearchController"> <property name="formView"><value>search/studySearch</value></property> - <property name="successView"><value>search/studySearch</value></property> - + <property name="successView"><value>search/studySearch</value></property> </bean> <bean id="treeSearchController" parent="searchController" class="org.cipres.treebase.web.controllers.TreeSearchController"> @@ -1005,6 +1009,7 @@ <prop key="/search/treeTopSearch.html">treeTopSearchController</prop> <prop key="/search/matrixSearch.html">matrixSearchController</prop> <prop key="/search/taxonSearch.html">taxonSearchController</prop> + <prop key="/search/mainSearch.html">mainSearchController</prop> <!-- SEARCH RESULTS SECTION --> <prop key="/search/study/summary.html">searchSummaryController</prop> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |