r1910 - in trunk: wao-persistence/src/main/java/fr/ifremer/wao wao-persistence/src/main/java/fr/ifremer/wao/entity wao-services/src/main/java/fr/ifremer/wao/services/service wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer wao-web/src/main/webapp wao-web/src/main/webapp/WEB-INF/content/obsmer
Author: bleny Date: 2014-04-29 11:24:03 +0200 (Tue, 29 Apr 2014) New Revision: 1910 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1910 Log: refs #4490 trying to use select2 in boat filter Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SearchBoatJsonAction.java Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp trunk/wao-web/src/main/webapp/endpoints-js.jsp trunk/wao-web/src/main/webapp/wao.js Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java 2014-04-28 15:08:03 UTC (rev 1909) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java 2014-04-29 09:24:03 UTC (rev 1910) @@ -54,6 +54,11 @@ protected String registrationCode; /** + * Filter on boat name or registration code (user can input one of them). + */ + protected String boatNameOrRegistrationCode; + + /** * Filter on boat ids. */ protected Set<String> boatIds; @@ -107,6 +112,14 @@ this.registrationCode = registrationCode; } + public String getBoatNameOrRegistrationCode() { + return boatNameOrRegistrationCode; + } + + public void setBoatNameOrRegistrationCode(String boatNameOrRegistrationCode) { + this.boatNameOrRegistrationCode = boatNameOrRegistrationCode; + } + public Set<String> getBoatIds() { return boatIds; } @@ -158,6 +171,7 @@ boolean equals = elligibleForSampleRowsFilter.equals(that.elligibleForSampleRowsFilter) && Objects.equals(boatName, that.boatName) && Objects.equals(registrationCode, that.registrationCode) + && Objects.equals(boatNameOrRegistrationCode, that.boatNameOrRegistrationCode) && WaoUtils.isEqualCollection(boatIds, that.boatIds) && WaoUtils.isEqualCollection(shipOwnerIds, that.shipOwnerIds) && WaoUtils.isEqualCollection(districtIds, that.districtIds) @@ -171,6 +185,7 @@ int hashCode = elligibleForSampleRowsFilter.hashCode(); hashCode = 31 * hashCode + Objects.hashCode(boatName); hashCode = 31 * hashCode + Objects.hashCode(registrationCode); + hashCode = 31 * hashCode + Objects.hashCode(boatNameOrRegistrationCode); hashCode = 31 * hashCode + WaoUtils.collectionHashcode(boatIds); hashCode = 31 * hashCode + WaoUtils.collectionHashcode(shipOwnerIds); hashCode = 31 * hashCode + WaoUtils.collectionHashcode(districtIds); @@ -183,6 +198,7 @@ public boolean isFilled() { boolean filled = StringUtils.isNoneBlank(boatName) || StringUtils.isNoneBlank(registrationCode) + || StringUtils.isNoneBlank(boatNameOrRegistrationCode) || CollectionUtils.isNotEmpty(boatIds) || CollectionUtils.isNotEmpty(shipOwnerIds) || CollectionUtils.isNotEmpty(districtIds) Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java 2014-04-28 15:08:03 UTC (rev 1909) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java 2014-04-29 09:24:03 UTC (rev 1910) @@ -103,6 +103,12 @@ query.addWhereClause("str(b." + Boat.PROPERTY_IMMATRICULATION + ") like :registrationCode", ImmutableMap.of("registrationCode", (Object) (filter.getRegistrationCode() + "%"))); } + if (StringUtils.isNotEmpty(filter.getBoatNameOrRegistrationCode())) { + query.addWhereClause( + "lower(b." + Boat.PROPERTY_NAME + ") like :boatNameOrRegistrationCode or str(b." + Boat.PROPERTY_IMMATRICULATION + ") like :boatNameOrRegistrationCode", + ImmutableMap.of("boatNameOrRegistrationCode", (Object) (filter.getBoatNameOrRegistrationCode().toLowerCase() + "%"))); + } + if (CollectionUtils.isNotEmpty(filter.getShipOwnerIds())) { query.addWhereClause( "b.topiaId IN (SELECT b2.topiaId FROM fr.ifremer.wao.entity.BoatImpl AS b2 JOIN b2.shipOwner AS shipOwner WHERE shipOwner.topiaId IN (:shipOwnerIds))", Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java 2014-04-28 15:08:03 UTC (rev 1909) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java 2014-04-29 09:24:03 UTC (rev 1910) @@ -240,4 +240,13 @@ } + public Collection<Boat> getBoats(BoatsFilter boatsFilter, int pageSize) { + + TopiaPagerBean pager = newBoatsPager(pageSize); + + List<Boat> boats = getBoatDao().find(boatsFilter, pager); + + return boats; + + } } Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SearchBoatJsonAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SearchBoatJsonAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SearchBoatJsonAction.java 2014-04-29 09:24:03 UTC (rev 1910) @@ -0,0 +1,71 @@ +package fr.ifremer.wao.web.action.obsmer; + +import com.google.common.base.Function; +import com.google.common.collect.Collections2; +import com.opensymphony.xwork2.Preparable; +import fr.ifremer.wao.BoatsFilter; +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.services.service.FilterOption; +import fr.ifremer.wao.services.service.ObsMerBoatsService; +import fr.ifremer.wao.web.WaoJsonActionSupport; + +import java.util.Collection; + +public class SearchBoatJsonAction extends WaoJsonActionSupport implements Preparable { + + protected static final Function<Boat, FilterOption> BOAT_TO_FILTER_OPTION_FUNCTION = new Function<Boat, FilterOption>() { + + @Override + public FilterOption apply(Boat boat) { + String value = boat.getTopiaId(); + String label = boat.getImmatriculation() + " " + boat.getName(); + return FilterOption.forValueAndLabel(value, label); + } + }; + + protected ObsMerBoatsService service; + + protected BoatsFilter filter; + + protected int pageSize; + + protected Collection<FilterOption> boatFilterOptions; + + public void setService(ObsMerBoatsService service) { + this.service = service; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public BoatsFilter getFilter() { + if (filter == null) { + prepare(); + } + return filter; + } + + @Override + public void prepare() { + + filter = service.newBoatsFilter(session.getAuthenticatedWaoUser()); + + } + + @Override + public String execute() { + + Collection<Boat> boats = service.getBoats(filter, pageSize); + + boatFilterOptions = Collections2.transform(boats, BOAT_TO_FILTER_OPTION_FUNCTION); + + return SUCCESS; + + } + + public Collection<FilterOption> getBoatFilterOptions() { + return boatFilterOptions; + } + +} Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp 2014-04-28 15:08:03 UTC (rev 1909) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp 2014-04-29 09:24:03 UTC (rev 1910) @@ -32,7 +32,8 @@ $(document).ready(function () { - var boatsFilterController = new FilterController(WAO.OBSMER_BOATS_FILTER_VALUES_JSON_URL, $('#boats-filters-form')); + var $boatsFiltersForm = $('#boats-filters-form'); + var boatsFilterController = new FilterController(WAO.OBSMER_BOATS_FILTER_VALUES_JSON_URL, $boatsFiltersForm); boatsFilterController.init(); var $boatDetails = $('#boat-details'); @@ -65,6 +66,46 @@ } }); + <%-- + $('.boat-selection').select2({ + minimumInputLength: 2, + multiple: true, + placeholder: "123456", + ajax: { + url: WAO.OBSMER_SEARCH_BOAT_JSON_URL, + data: function (term, page) { + var data = WAO.toData($boatsFiltersForm); + delete data['filter.boatIds']; + data['filter.boatNameOrRegistrationCode'] = term; + data['pageSize'] = 20; + return data; + }, + cache: false, + results: function (data, page) { + var results = []; + $(data.boatFilterOptions).each(function(key, boatFilterOption) { + var option = { + id: boatFilterOption.value, + text: boatFilterOption.label + }; + results.push(option); + }); + return { results: results, more: false }; + } + }, + /* + initSelection: function (element, callback) { + var results = []; + <s:iterator value="filter.boatIds" var="establishment" > + results.push({ id: '<s:property value="#establishment.topiaId" escapeJavaScript="true" escapeHtml="false" />', + text: '<s:property value="#establishment.finess" escapeJavaScript="true" escapeHtml="false" /> <s:property value="#establishment.name" escapeJavaScript="true" escapeHtml="false" />' }); + </s:iterator> + callback(results); + } + */ + }); + --%> + }); </script> @@ -125,6 +166,16 @@ label="%{getText('wao.ui.form.Boat.registrationCode')}" placeholder="%{getText('wao.ui.form.registrationCode.placeholder')}" cssClass=""/> + <%-- + <div class="control-group"> + <label class="control-label" for=""> + Immatriculation ou nom + </label> + <div class="controls"> + <input type="hidden" name="filter.boatIds" class="boat-selection"/> + </div> + </div> + --%> <s:select name="filter.districtIds" label="%{getText('wao.ui.field.Boat.district')}" Modified: trunk/wao-web/src/main/webapp/endpoints-js.jsp =================================================================== --- trunk/wao-web/src/main/webapp/endpoints-js.jsp 2014-04-28 15:08:03 UTC (rev 1909) +++ trunk/wao-web/src/main/webapp/endpoints-js.jsp 2014-04-29 09:24:03 UTC (rev 1910) @@ -28,11 +28,14 @@ // json WAO.OBSMER_SAMPLE_ROWS_FILTER_VALUES_JSON_URL = '<s:url namespace="/obsmer" action="sample-rows-filter-values-json"/>'; + + WAO.OBSMER_UPDATE_BOAT_INFOS_JSON_URL = '<s:url namespace="/obsmer" action="update-boat-infos-json"/>'; WAO.OBSMER_BOATS_FILTER_VALUES_JSON_URL = '<s:url namespace="/obsmer" action="boats-filter-values-json"/>'; - WAO.OBSMER_CONTACTS_FILTER_VALUES_JSON_URL = '<s:url namespace="/obsmer" action="contacts-filter-values-json"/>'; - WAO.OBSMER_UPDATE_BOAT_INFOS_JSON_URL = '<s:url namespace="/obsmer" action="update-boat-infos-json"/>'; WAO.OBSMER_GET_BOAT_CONTACTS_COUNT_JSON_URL = '<s:url namespace="/obsmer" action="get-boat-contacts-count-json"/>'; + WAO.OBSMER_SEARCH_BOAT_JSON_URL = '<s:url namespace="/obsmer" action="search-boat-json"/>'; + WAO.OBSMER_CONTACTS_FILTER_VALUES_JSON_URL = '<s:url namespace="/obsmer" action="contacts-filter-values-json"/>'; + // fragments WAO.OBSMER_BOAT_DETAILS_URL = '<s:url namespace="/obsmer" action="boat-details"/>'; Modified: trunk/wao-web/src/main/webapp/wao.js =================================================================== --- trunk/wao-web/src/main/webapp/wao.js 2014-04-28 15:08:03 UTC (rev 1909) +++ trunk/wao-web/src/main/webapp/wao.js 2014-04-29 09:24:03 UTC (rev 1910) @@ -236,7 +236,7 @@ this.toData = function ($form) { var data = {}; - $form.find('input, textarea').each(function (index, input) { + $form.find('input:not(.select2-input), textarea').each(function (index, input) { var $input = $(input); var parameterName = $input.prop('name'); if (parameterName.indexOf('__') === 0) {
participants (1)
-
bleny@users.forge.codelutin.com