r152 - in trunk: cantharella.service/src/main/java/nc/ird/cantharella/service/model cantharella.service/src/main/java/nc/ird/cantharella/service/services cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl cantharella.service/src/test/java/nc/ird/cantharella/service/services cantharella.web/src/main/java/nc/ird/cantharella/web/pages cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search cantharella.web/src/main/resources
Author: echatellier Date: 2013-02-22 11:42:23 +0100 (Fri, 22 Feb 2013) New Revision: 152 Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/152 Log: Add search engine locale support. Added: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/MoleculeProvenanceBean.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchResult.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/SearchService.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java trunk/cantharella.service/src/test/java/nc/ird/cantharella/service/services/SearchServiceTest.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/TemplatePage.html trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/TemplatePage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java trunk/cantharella.web/src/main/resources/web_en.properties trunk/cantharella.web/src/main/resources/web_fr.properties Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/MoleculeProvenanceBean.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/MoleculeProvenanceBean.java 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/MoleculeProvenanceBean.java 2013-02-22 10:42:23 UTC (rev 152) @@ -39,10 +39,6 @@ * Simple bean object used as result for {@link MoleculeService#listMoleculeProvenances} * * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ */ public class MoleculeProvenanceBean implements DocumentAttachable { Added: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java (rev 0) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java 2013-02-22 10:42:23 UTC (rev 152) @@ -0,0 +1,91 @@ +/* + * #%L + * Cantharella :: Service + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2012 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below) + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package nc.ird.cantharella.service.model; + +import java.io.Serializable; + +/** + * Search bean. + * + * @author Eric Chatellier + */ +public class SearchBean implements Serializable { + + /** Search query. */ + protected String query; + + /** Search locale. */ + protected String locale; + + /** + * Constructor. + */ + public SearchBean() { + + } + + /** + * Constructor. + * @param query query + */ + public SearchBean(String query) { + this(); + this.query = query; + } + + /** + * Search query getter. + * + * @return query + */ + public String getQuery() { + return query; + } + + /** + * Search query setter. + * + * @param query query + */ + public void setQuery(String query) { + this.query = query; + } + + /** + * Search locale getter. + * + * @return locale + */ + public String getLocale() { + return locale; + } + + /** + * Search query setter. + * + * @param locale locale + */ + public void setLocale(String locale) { + this.locale = locale; + } +} Property changes on: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchResult.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchResult.java 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchResult.java 2013-02-22 10:42:23 UTC (rev 152) @@ -36,7 +36,7 @@ /** * Search result containing somes entities collections of various types. * - * @author echatellier + * @author Eric Chatellier */ public class SearchResult implements Serializable { Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/SearchService.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/SearchService.java 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/SearchService.java 2013-02-22 10:42:23 UTC (rev 152) @@ -23,6 +23,7 @@ package nc.ird.cantharella.service.services; import nc.ird.cantharella.data.model.Utilisateur; +import nc.ird.cantharella.service.model.SearchBean; import nc.ird.cantharella.service.model.SearchResult; import org.springframework.transaction.annotation.Transactional; @@ -47,5 +48,5 @@ * @return search result */ @Transactional(readOnly = true) - SearchResult search(String query, Utilisateur utilisateur); + SearchResult search(SearchBean search, Utilisateur utilisateur); } Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java 2013-02-22 10:42:23 UTC (rev 152) @@ -37,6 +37,7 @@ import nc.ird.cantharella.data.model.Specimen; import nc.ird.cantharella.data.model.Station; import nc.ird.cantharella.data.model.Utilisateur; +import nc.ird.cantharella.service.model.SearchBean; import nc.ird.cantharella.service.model.SearchResult; import nc.ird.cantharella.service.services.SearchService; @@ -105,7 +106,7 @@ /** {@inheritDoc} */ @Override @SuppressWarnings("unchecked") - public SearchResult search(String strQuery, Utilisateur utilisateur) { + public SearchResult search(SearchBean search, Utilisateur utilisateur) { SearchResult result = new SearchResult(); // get hibernate search session @@ -122,6 +123,17 @@ try { + // get lucene query + String strQuery = ""; + if (search.getQuery() != null) { + strQuery += search.getQuery(); + } + strQuery += " "; + if (search.getLocale() != null) { + strQuery += search.getLocale(); + } + strQuery = strQuery.trim(); + // default init to empty list if query is null or empty List<Specimen> specimens = Collections.EMPTY_LIST; List<Lot> lots = Collections.EMPTY_LIST; @@ -131,7 +143,7 @@ List<Station> resultatStations = Collections.EMPTY_LIST; List<Molecule> resultatMolecules = Collections.EMPTY_LIST; - if (StringUtils.isNotEmpty(strQuery)) { + if (!strQuery.isEmpty()) { // wrap Lucene query in a org.hibernate.Query org.hibernate.Query hibSpecimen = getQuery(fullTextSession, Specimen.class, strQuery, utilisateur); org.hibernate.Query hibLot = getQuery(fullTextSession, Lot.class, strQuery, utilisateur); Modified: trunk/cantharella.service/src/test/java/nc/ird/cantharella/service/services/SearchServiceTest.java =================================================================== --- trunk/cantharella.service/src/test/java/nc/ird/cantharella/service/services/SearchServiceTest.java 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.service/src/test/java/nc/ird/cantharella/service/services/SearchServiceTest.java 2013-02-22 10:42:23 UTC (rev 152) @@ -42,6 +42,7 @@ import nc.ird.cantharella.data.model.TypeExtrait; import nc.ird.cantharella.data.model.Utilisateur; import nc.ird.cantharella.service.AbstractServiceTest; +import nc.ird.cantharella.service.model.SearchBean; import org.junit.Assert; import org.junit.Before; @@ -122,11 +123,11 @@ Assert.assertEquals(2, specimenService.countSpecimens()); // search into lucene - List<Specimen> specimens = searchService.search("P175", defaultAdmin).getSpecimens(); + List<Specimen> specimens = searchService.search(new SearchBean("P175"), defaultAdmin).getSpecimens(); Assert.assertEquals(specimen1, specimens.get(0)); - specimens = searchService.search("P174", defaultAdmin).getSpecimens(); + specimens = searchService.search(new SearchBean("P174"), defaultAdmin).getSpecimens(); Assert.assertEquals(specimen2, specimens.get(0)); - specimens = searchService.search("P17?", defaultAdmin).getSpecimens(); + specimens = searchService.search(new SearchBean("P17?"), defaultAdmin).getSpecimens(); Assert.assertEquals(2, specimens.size()); } @@ -181,31 +182,31 @@ Assert.assertEquals(1, lotService.countLots()); // force sync // search into lucene - List<Lot> lots = searchService.search("MHO4", defaultAdmin).getLots(); + List<Lot> lots = searchService.search(new SearchBean("MHO4"), defaultAdmin).getLots(); Assert.assertEquals(lot1, lots.get(0)); - lots = searchService.search("Foo", defaultAdmin).getLots(); + lots = searchService.search(new SearchBean("Foo"), defaultAdmin).getLots(); Assert.assertTrue(lots.isEmpty()); // test de recherche sur les entités liées - lots = searchService.search("porifera", defaultAdmin).getLots(); + lots = searchService.search(new SearchBean("porifera"), defaultAdmin).getLots(); Assert.assertEquals(lot1, lots.get(0)); // update associated property specimen1.setEmbranchement("Niphatidae"); specimenService.updateSpecimen(specimen1); Assert.assertEquals(1, lotService.countLots()); // force sync - lots = searchService.search("porifera", defaultAdmin).getLots(); + lots = searchService.search(new SearchBean("porifera"), defaultAdmin).getLots(); //Assert.assertTrue(lots.isEmpty()); - lots = searchService.search("niphatidae", defaultAdmin).getLots(); + lots = searchService.search(new SearchBean("niphatidae"), defaultAdmin).getLots(); //Assert.assertEquals(lot1, lots.get(0)); // update direct entity lot1.setRef("P175-MT4+5"); lotService.updateLot(lot1); Assert.assertEquals(1, lotService.countLots()); // force sync - lots = searchService.search("porifera", defaultAdmin).getLots(); + lots = searchService.search(new SearchBean("porifera"), defaultAdmin).getLots(); Assert.assertTrue(lots.isEmpty()); - lots = searchService.search("niphatidae", defaultAdmin).getLots(); + lots = searchService.search(new SearchBean("niphatidae"), defaultAdmin).getLots(); Assert.assertEquals(lot1, lots.get(0)); } @@ -316,7 +317,8 @@ Assert.assertEquals(1, testBioService.countResultatsTestsBio()); // force sync // test search resultatbio - List<ResultatTestBio> resultatTestBios = searchService.search("BSM-PF1", defaultAdmin).getResultatTestBios(); + List<ResultatTestBio> resultatTestBios = searchService.search(new SearchBean("BSM-PF1"), defaultAdmin) + .getResultatTestBios(); Assert.assertFalse(resultatTestBios.isEmpty()); } } Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/TemplatePage.html =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/TemplatePage.html 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/TemplatePage.html 2013-02-22 10:42:23 UTC (rev 152) @@ -64,7 +64,7 @@ <form wicket:id="Search.FORM"> <div> <label for="search_txt" style="display: none"><wicket:message key="TemplatePage.Search.Label"/></label> - <input type="text" wicket:id="query" id="search_txt"/> + <input type="text" wicket:id="Search.query" id="search_txt"/> <input type="submit" id="search_submit" wicket:message="value:TemplatePage.Search, title:TemplatePage.Search.Launch" /> </div> </form> Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/TemplatePage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/TemplatePage.java 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/TemplatePage.java 2013-02-22 10:42:23 UTC (rev 152) @@ -28,6 +28,9 @@ import java.util.Locale; import java.util.MissingResourceException; +import nc.ird.cantharella.service.model.SearchBean; +import nc.ird.cantharella.utils.AssertTools; +import nc.ird.cantharella.utils.Pair; import nc.ird.cantharella.web.pages.domain.campagne.ListCampagnesPage; import nc.ird.cantharella.web.pages.domain.config.ListConfigurationPage; import nc.ird.cantharella.web.pages.domain.extraction.ListExtractionsPage; @@ -43,8 +46,6 @@ import nc.ird.cantharella.web.utils.security.AuthContainer; import nc.ird.cantharella.web.utils.security.AuthRole; import nc.ird.cantharella.web.utils.security.AuthSession; -import nc.ird.cantharella.utils.AssertTools; -import nc.ird.cantharella.utils.Pair; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; @@ -63,6 +64,7 @@ import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.value.ValueMap; @@ -202,16 +204,14 @@ private AuthContainer createUserSearch() { AuthContainer userSatellite = new AuthContainer("Search.USER", AuthRole.USER, AuthRole.ADMIN); - Form<ValueMap> searchForm = new Form<ValueMap>("Search.FORM", new CompoundPropertyModel<ValueMap>( - new ValueMap())) { + final Model<SearchBean> searchModel = Model.of(new SearchBean()); + Form<ValueMap> searchForm = new Form<ValueMap>("Search.FORM") { + @Override protected void onSubmit() { - ValueMap values = getModelObject(); - - String query = values.getString("query"); - setResponsePage(new SearchPage(query)); + setResponsePage(new SearchPage(searchModel.getObject())); } }; - searchForm.add(new TextField<String>("query").setType(String.class)); + searchForm.add(new TextField<String>("Search.query", new PropertyModel<String>(searchModel, "query"))); userSatellite.add(searchForm); return userSatellite; Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html 2013-02-22 10:42:23 UTC (rev 152) @@ -31,9 +31,20 @@ <form wicket:id="SearchPage.Form"> - <wicket:message key="SearchPage.QueryLabel" /> - <input type="text" wicket:id="query" /> - <input type="submit" wicket:message="value:SearchPage.Search" /> + <fieldset> + <legend><wicket:message key="SearchPage.Query" /></legend> + <div class="property"> + <label for="SearchPage.Query"><wicket:message key="SearchPage.Query" /></label> + <input type="text" wicket:id="SearchPage.Query" /> + </div> + <div class="property"> + <label for="SearchPage.Locale"><wicket:message key="SearchPage.Locale" /></label> + <select id="SearchPage.Locale" wicket:id="SearchPage.Locale" /> + </div> + <div class="actions"> + <input type="submit" wicket:message="value:SearchPage.Search" /> + </div> + </fieldset> </form> <h3><wicket:message key="SearchPage.Stations" /></h3> Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java 2013-02-22 10:42:23 UTC (rev 152) @@ -22,6 +22,7 @@ */ package nc.ird.cantharella.web.pages.domain.search; +import java.util.Date; import java.util.List; import nc.ird.cantharella.data.model.Extraction; @@ -33,6 +34,7 @@ import nc.ird.cantharella.data.model.Station; import nc.ird.cantharella.data.model.Utilisateur; import nc.ird.cantharella.service.model.MoleculeProvenanceBean; +import nc.ird.cantharella.service.model.SearchBean; import nc.ird.cantharella.service.model.SearchResult; import nc.ird.cantharella.service.services.ExtractionService; import nc.ird.cantharella.service.services.LotService; @@ -42,6 +44,7 @@ import nc.ird.cantharella.service.services.SpecimenService; import nc.ird.cantharella.service.services.StationService; import nc.ird.cantharella.service.services.TestBioService; +import nc.ird.cantharella.web.config.WebContext; import nc.ird.cantharella.web.pages.TemplatePage; import nc.ird.cantharella.web.pages.domain.extraction.ListExtractionsPage; import nc.ird.cantharella.web.pages.domain.lot.ListLotsPage; @@ -51,13 +54,16 @@ import nc.ird.cantharella.web.pages.domain.station.ListStationsPage; import nc.ird.cantharella.web.pages.domain.testBio.ListTestsBioPage; import nc.ird.cantharella.web.utils.CallerPage; +import nc.ird.cantharella.web.utils.renderers.MapChoiceRenderer; import nc.ird.cantharella.web.utils.security.AuthRole; import nc.ird.cantharella.web.utils.security.AuthRoles; import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable; +import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.apache.wicket.util.value.ValueMap; @@ -70,8 +76,8 @@ @AuthRoles( { AuthRole.ADMIN, AuthRole.USER }) public class SearchPage extends TemplatePage { - /** Form query. */ - protected String query; + /** Form query bean. */ + protected Model<SearchBean> queryModel; /** Search service. */ @SpringBean @@ -107,12 +113,18 @@ /** * Constructor. + */ + public SearchPage() { + this(null); + } + + /** + * Constructor. * - * @param query form query + * @param queryBean form query bean */ - public SearchPage(String query) { + public SearchPage(SearchBean queryBean) { super(SearchPage.class); - this.query = query; final CallerPage currentPage = new CallerPage(this); // ca sert a rien, mais wicket est pas content @@ -120,18 +132,24 @@ "http://lucene.apache.org/core/3_6_2/queryparsersyntax.html"); add(link); + // init query model + queryModel = Model.of(queryBean == null ? new SearchBean() : queryBean); + // search form Form<ValueMap> searchForm = new Form<ValueMap>(getResource() + ".Form") { protected void onSubmit() { - setResponsePage(new SearchPage(getQuery())); + setResponsePage(new SearchPage(queryModel.getObject())); } }; - searchForm.add(new TextField<String>("query", new PropertyModel<String>(this, "query")).setType(String.class)); + searchForm.add(new TextField<String>("SearchPage.Query", new PropertyModel<String>(queryModel, "query"))); + searchForm.add(new DropDownChoice<String>("SearchPage.Locale", new PropertyModel<String>(queryModel, "locale"), + WebContext.COUNTRY_CODES.get(getSession().getLocale()), new MapChoiceRenderer<String, String>( + WebContext.COUNTRIES.get(getSession().getLocale())))); add(searchForm); // search results Utilisateur utilisateur = getSession().getUtilisateur(); - SearchResult searchResult = searchService.search(query, utilisateur); + SearchResult searchResult = searchService.search(queryModel.getObject(), utilisateur); // Additional transformation for molecule provenances List<Molecule> molecules = searchResult.getMolecules(); List<MoleculeProvenanceBean> moleculeProvenances = moleculeService.listMoleculeProvenances(molecules, @@ -172,13 +190,4 @@ "SearchPage.Molecules.Results", currentPage, moleculeProvenances); add(moleculesDataTable); } - - /** - * Get current form query value. - * - * @return form query value - */ - public String getQuery() { - return query; - } } Modified: trunk/cantharella.web/src/main/resources/web_en.properties =================================================================== --- trunk/cantharella.web/src/main/resources/web_en.properties 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.web/src/main/resources/web_en.properties 2013-02-22 10:42:23 UTC (rev 152) @@ -293,7 +293,8 @@ SearchPage=Search SearchPage.Search=Search -SearchPage.QueryLabel=Query +SearchPage.Query=Query +SearchPage.Locale=Language SearchPage.Specimens=Specimens SearchPage.Lots=Samples SearchPage.Extractions=Extractions Modified: trunk/cantharella.web/src/main/resources/web_fr.properties =================================================================== --- trunk/cantharella.web/src/main/resources/web_fr.properties 2013-02-22 09:30:28 UTC (rev 151) +++ trunk/cantharella.web/src/main/resources/web_fr.properties 2013-02-22 10:42:23 UTC (rev 152) @@ -292,7 +292,8 @@ SearchPage=Recherche SearchPage.Search=Rechercher -SearchPage.QueryLabel=Requête +SearchPage.Query=Requête +SearchPage.Locale=Langue SearchPage.Specimens=Specimens SearchPage.Lots=Lots SearchPage.Extractions=Extractions
participants (1)
-
echatellier@users.forge.codelutin.com