Author: tchemit Date: 2014-04-01 17:13:11 +0200 (Tue, 01 Apr 2014) New Revision: 1791 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1791 Log: refs-30 #4490 Added: 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/BoatsFilterValues.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsList.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java trunk/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerBoatsServiceTest.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoJsonActionSupport.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsFilterValuesJsonAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportBoatsAction.java trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp Removed: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/json/WaoJsonActionSupport.java Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/SampleRowsFilter.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowsFilterValues.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SampleRowsFilterValuesJsonAction.java trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp trunk/wao-web/src/main/webapp/wao.js Added: trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java (rev 0) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,163 @@ +package fr.ifremer.wao; + +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; + +import java.io.Serializable; +import java.util.Objects; +import java.util.Set; + +/** + * Created on 4/1/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class BoatsFilter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * SampleRows filter on facade, zone, linecode. + */ + protected SampleRowsFilter elligibleBoatsFilter; + + /** + * Filter on boat name. + */ + protected String boatName; + + /** + * filter on registration code. + */ + protected String registrationCode; + + /** + * Filter on boat ids. + */ + protected Set<String> boatIds; + + /** + * Filter on shipOwners. + */ + protected Set<String> shipOwnerIds; + + /** + * Filter on some districts. + */ + protected Set<String> districtIds; + + /** + * Filter on some ports of registry. + */ + protected Set<String> portOfRegistryIds; + + /** + * Filter on some fleets. + */ + protected Set<String> fleetIds; + + public BoatsFilter() { + elligibleBoatsFilter = new SampleRowsFilter(); + } + + public SampleRowsFilter getElligibleBoatsFilter() { + return elligibleBoatsFilter; + } + + public void setElligibleBoatsFilter(SampleRowsFilter elligibleBoatsFilter) { + this.elligibleBoatsFilter = elligibleBoatsFilter; + } + + public String getBoatName() { + return boatName; + } + + public void setBoatName(String boatName) { + this.boatName = boatName; + } + + public String getRegistrationCode() { + return registrationCode; + } + + public void setRegistrationCode(String registrationCode) { + this.registrationCode = registrationCode; + } + + public Set<String> getBoatIds() { + return boatIds; + } + + public void setBoatIds(Set<String> boatIds) { + this.boatIds = boatIds; + } + + public Set<String> getShipOwnerIds() { + return shipOwnerIds; + } + + public void setShipOwnerIds(Set<String> shipOwnerIds) { + this.shipOwnerIds = shipOwnerIds; + } + + public Set<String> getDistrictIds() { + return districtIds; + } + + public void setDistrictIds(Set<String> districtIds) { + this.districtIds = districtIds; + } + + public Set<String> getPortOfRegistryIds() { + return portOfRegistryIds; + } + + public void setPortOfRegistryIds(Set<String> portOfRegistryIds) { + this.portOfRegistryIds = portOfRegistryIds; + } + + public Set<String> getFleetIds() { + return fleetIds; + } + + public void setFleetIds(Set<String> fleetIds) { + this.fleetIds = fleetIds; + } + + @Override + public boolean equals(Object o) { + + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + BoatsFilter that = (BoatsFilter) o; + + boolean equals = elligibleBoatsFilter.equals(that.elligibleBoatsFilter) + && Objects.equals(boatName, that.boatName) + && Objects.equals(registrationCode, that.registrationCode) + && WaoUtils.isEqualCollection(boatIds, that.boatIds) + && WaoUtils.isEqualCollection(shipOwnerIds, that.shipOwnerIds) + && WaoUtils.isEqualCollection(districtIds, that.districtIds) + && WaoUtils.isEqualCollection(portOfRegistryIds, that.portOfRegistryIds) + && WaoUtils.isEqualCollection(fleetIds, that.fleetIds); + return equals; + } + + @Override + public int hashCode() { + int hashCode = elligibleBoatsFilter.hashCode(); + hashCode = 31 * hashCode + Objects.hashCode(boatName); + hashCode = 31 * hashCode + Objects.hashCode(registrationCode); + hashCode = 31 * hashCode + WaoUtils.collectionHashcode(boatIds); + hashCode = 31 * hashCode + WaoUtils.collectionHashcode(shipOwnerIds); + hashCode = 31 * hashCode + WaoUtils.collectionHashcode(districtIds); + hashCode = 31 * hashCode + WaoUtils.collectionHashcode(portOfRegistryIds); + hashCode = 31 * hashCode + WaoUtils.collectionHashcode(fleetIds); + return hashCode; + } + + @Override + public String toString() { + return ReflectionToStringBuilder.reflectionToString(this); + } +} Property changes on: trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/SampleRowsFilter.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/SampleRowsFilter.java 2014-04-01 15:02:59 UTC (rev 1790) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/SampleRowsFilter.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -182,6 +182,9 @@ this.sampleRowIds = sampleRowIds; } + public boolean isFilled() { + return false; + } @Override public boolean equals(Object o) { Added: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java (rev 0) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,109 @@ +package fr.ifremer.wao.entity; + + +import com.google.common.collect.ImmutableMap; +import fr.ifremer.wao.BoatsFilter; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.HqlAndParametersBuilder; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.pager.TopiaPagerBean; + +import java.util.List; + +public class BoatTopiaDao extends AbstractBoatTopiaDao<Boat> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(BoatTopiaDao.class); + + public TopiaPagerBean newPager(BoatsFilter filter, + int pageSize, + int pageIndex, + String sortProperty, + boolean sortAscendant) { + + HqlAndParametersBuilder<Boat> query = toSampleRowHqlAndParametersBuilder(filter); + + TopiaPagerBean pager = newPager(query.getHql(), query.getHqlParameters(), pageSize); + pager.setPageIndex(pageIndex); + pager.setSortColumn(sortProperty); + pager.setSortAscendant(sortAscendant); + return pager; + } + + public List<Boat> findAll(BoatsFilter filter) { + + HqlAndParametersBuilder<Boat> query = toSampleRowHqlAndParametersBuilder(filter); + + List<Boat> boats = findAll(query.getHql(), query.getHqlParameters()); + return boats; + } + + public List<Boat> find(BoatsFilter filter, TopiaPagerBean pager) { + + HqlAndParametersBuilder<Boat> query = toSampleRowHqlAndParametersBuilder(filter); + + List<Boat> boats = find(query.getHql(), query.getHqlParameters(), pager); + return boats; + } + + protected HqlAndParametersBuilder<Boat> toSampleRowHqlAndParametersBuilder(BoatsFilter filter) { + + HqlAndParametersBuilder<Boat> query = newHqlAndParametersBuilder(); + + query.setAlias("b"); + + SampleRowTopiaDao sampleRowTopiaDao = + topiaDaoSupplier.getDao(SampleRow.class, SampleRowTopiaDao.class); + HqlAndParametersBuilder<SampleRow> sampleRowsQuery = + sampleRowTopiaDao.toSampleRowHqlAndParametersBuilder( + filter.getElligibleBoatsFilter() + ); + query.addWhereClause("b.topiaId IN (SELECT eb.boat.topiaId FROM fr.ifremer.wao.entity.ElligibleBoatImpl eb WHERE eb.sampleRow.topiaId IN ( select sr.topiaId " + sampleRowsQuery.getHql() + " ))", + sampleRowsQuery.getHqlParameters()); + + if (CollectionUtils.isNotEmpty(filter.getBoatIds())) { + query.addIn(TopiaEntity.PROPERTY_TOPIA_ID, filter.getBoatIds()); + } + + if (StringUtils.isNotEmpty(filter.getBoatName())) { + query.addLike(Boat.PROPERTY_NAME, filter.getBoatName() + "%"); + } + + if (StringUtils.isNotEmpty(filter.getRegistrationCode())) { + //FIXME ! + query.addLike(Boat.PROPERTY_IMMATRICULATION + "::text", filter.getRegistrationCode() + "%"); + } + 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 district WHERE shipOwner.topiaId IN (:shipOwnerIds))", + ImmutableMap.of("shipOwnerIds", (Object) filter.getShipOwnerIds())); + } + + if (CollectionUtils.isNotEmpty(filter.getDistrictIds())) { + query.addWhereClause( + "b.topiaId IN (SELECT b2.topiaId FROM fr.ifremer.wao.entity.BoatImpl AS b2 JOIN b2.district AS district WHERE district.topiaId IN (:districtIds))", + ImmutableMap.of("districtIds", (Object) filter.getDistrictIds())); + } + + if (CollectionUtils.isNotEmpty(filter.getPortOfRegistryIds())) { + query.addWhereClause( + "b.topiaId IN (SELECT b2.topiaId FROM fr.ifremer.wao.entity.BoatImpl AS b2 JOIN b2.portOfRegistry AS portOfRegistry WHERE portOfRegistry.topiaId IN (:portOfRegistryIds))", + ImmutableMap.of("portOfRegistryIds", (Object) filter.getPortOfRegistryIds())); + } + + if (CollectionUtils.isNotEmpty(filter.getFleetIds())) { + query.addWhereClause( + "b.topiaId IN (SELECT b2.topiaId FROM fr.ifremer.wao.entity.BoatImpl AS b2 JOIN b2.fleet AS district WHERE fleet.topiaId IN (:fleetIds))", + ImmutableMap.of("fleetIds", (Object) filter.getFleetIds())); + } + + if (log.isTraceEnabled()) { + log.trace("query to filter sample rows for " + filter + " is " + query.getHql() + " " + query.getHqlParameters()); + } + + return query; + } +} Property changes on: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValues.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValues.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValues.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,102 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.BoatsFilter; +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.ElligibleBoat; +import fr.ifremer.wao.entity.Fleet; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.entity.ShipOwner; +import fr.ifremer.wao.entity.TerrestrialLocation; + +import java.io.Serializable; +import java.util.Locale; +import java.util.SortedSet; +import java.util.TreeSet; + +/** + * Bean to hold all values that user can select to fill {@link BoatsFilter}. + * Created on 4/1/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class BoatsFilterValues implements Serializable { + + private static final long serialVersionUID = 1L; + + protected Locale locale; + + protected SampleRowsFilterValues elligibleBoatsFilterValues; + + protected SortedSet<FilterOption> shipOwners = new TreeSet<>(); + + protected SortedSet<FilterOption> districts = new TreeSet<>(); + + protected SortedSet<FilterOption> portsOfRegistry = new TreeSet<>(); + + protected SortedSet<FilterOption> fleets = new TreeSet<>(); + + public BoatsFilterValues(Locale locale) { + this(locale, new SampleRowsFilterValues(locale)); + } + + public BoatsFilterValues(Locale locale, SampleRowsFilterValues elligibleBoatsFilterValues) { + this.locale = locale; + this.elligibleBoatsFilterValues = elligibleBoatsFilterValues; + } + + public void addBoat(Boat boat) { + + ShipOwner shipOwner = boat.getShipOwner(); + shipOwners.add(FilterOption.forValueAndLabel( + shipOwner.getTopiaId(), + shipOwner.getFirstName() + " - " + shipOwner.getLastName())); + + TerrestrialLocation district = boat.getDistrict(); + if (district != null) { + districts.add(FilterOption.forValueAndLabel( + district.getTopiaId(), + district.getDescription())); + } + + TerrestrialLocation portOfRegistry = boat.getPortOfRegistry(); + if (portOfRegistry != null) { + portsOfRegistry.add(FilterOption.forValueAndLabel( + portOfRegistry.getTopiaId(), + portOfRegistry.getDescription()) + ); + } + + Fleet fleet = boat.getFleet(); + if (fleet != null) { + fleets.add(FilterOption.forValueAndLabel( + fleet.getTopiaId(), + fleet.getDescription())); + } + + for (ElligibleBoat elligibleBoat : boat.getElligibleBoat()) { + SampleRow sampleRow = elligibleBoat.getSampleRow(); + elligibleBoatsFilterValues.addSampleRow(sampleRow); + } + } + + public SampleRowsFilterValues getElligibleBoatsFilterValues() { + return elligibleBoatsFilterValues; + } + + public SortedSet<FilterOption> getShipOwners() { + return shipOwners; + } + + public SortedSet<FilterOption> getDistricts() { + return districts; + } + + public SortedSet<FilterOption> getPortsOfRegistry() { + return portsOfRegistry; + } + + public SortedSet<FilterOption> getFleets() { + return fleets; + } +} Property changes on: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValues.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsList.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsList.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsList.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,48 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.entity.Boat; +import org.nuiton.topia.persistence.pager.TopiaPagerBean; + +import java.io.Serializable; +import java.util.List; + +/** + * Created on 4/1/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class ObsMerBoatsList implements Serializable { + + private static final long serialVersionUID = 1L; + + protected TopiaPagerBean pager; + + protected List<Boat> boats; + + protected BoatsFilterValues filterValues; + + public TopiaPagerBean getPager() { + return pager; + } + + public void setPager(TopiaPagerBean pager) { + this.pager = pager; + } + + public List<Boat> getBoats() { + return boats; + } + + public void setBoats(List<Boat> boats) { + this.boats = boats; + } + + public BoatsFilterValues getFilterValues() { + return filterValues; + } + + public void setFilterValues(BoatsFilterValues filterValues) { + this.filterValues = filterValues; + } +} Property changes on: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsList.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: 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 (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,128 @@ +package fr.ifremer.wao.services.service; + +import com.google.common.base.Charsets; +import com.google.common.collect.Sets; +import fr.ifremer.wao.BoatsFilter; +import fr.ifremer.wao.SampleRowsFilter; +import fr.ifremer.wao.WaoTechnicalException; +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.BoatTopiaDao; +import fr.ifremer.wao.services.AuthenticatedWaoUser; +import fr.ifremer.wao.services.service.csv.BoatImportExportModel; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Export; +import org.nuiton.csv.ExportModel; +import org.nuiton.topia.persistence.pager.TopiaPagerBean; + +import java.io.InputStream; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; + +/** + * Created on 4/1/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class ObsMerBoatsService extends WaoServiceSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ObsMerBoatsService.class); + + public BoatsFilterValues getBoatsFilterValues(BoatsFilter filter) { + + BoatTopiaDao dao = getBoatDao(); + List<Boat> boats = dao.findAll(filter); + + BoatsFilterValues boatsFilterValues = new BoatsFilterValues(serviceContext.getLocale()); + + for (Boat boat : boats) { + boatsFilterValues.addBoat(boat); + } + + return boatsFilterValues; + } + + public ObsMerBoatsList getBoatsList(BoatsFilter filter, + int pageSize, + int pageIndex, + String sortProperty, + boolean sortAscendant) { + + BoatTopiaDao dao = getBoatDao(); + + TopiaPagerBean pager = dao.newPager(filter, + pageSize, + pageIndex, + sortProperty, + sortAscendant); + + List<Boat> boats = dao.find(filter, pager); + + BoatsFilterValues boatsFilterValues = getBoatsFilterValues(filter); + + ObsMerBoatsList obsMerBoatsList = new ObsMerBoatsList(); + obsMerBoatsList.setBoats(boats); + obsMerBoatsList.setPager(pager); + obsMerBoatsList.setFilterValues(boatsFilterValues); + return obsMerBoatsList; + } + + public BoatsFilter newBoatsFilter(AuthenticatedWaoUser authenticatedWaoUser) { + + SampleRowsFilter sampleRowsFilter = new SampleRowsFilter(); + + BoatsFilter boatsFilter = new BoatsFilter(); + + sampleRowsFilter.setObsProgram(authenticatedWaoUser.getObsProgram()); + + if (authenticatedWaoUser.isProfessional()) { + // Pour le profesionnel, on restreint d'office à la liste des bateaux qu'il peut voir + Collection<Boat> canReadBoats = authenticatedWaoUser.getWaoUser().getCanReadBoats(); + + if (CollectionUtils.isEmpty(canReadBoats)) { + if (log.isWarnEnabled()) { + log.warn("user " + authenticatedWaoUser.getWaoUser() + " is professional but can't read any boat"); + } + } else { + boatsFilter.setBoatIds(new HashSet<>(authenticatedWaoUser.getWaoUser().getCanReadBoatsTopiaIds())); + } + } + + if (authenticatedWaoUser.isCoordinatorOrObserver()) { + + sampleRowsFilter.setCompanyIds(Sets.newHashSet(authenticatedWaoUser.getCompany().getTopiaId())); + } + + boatsFilter.setElligibleBoatsFilter(sampleRowsFilter); + return boatsFilter; + } + + public InputStream exportBoats(BoatsFilter filter) { + + BoatTopiaDao dao = getBoatDao(); + + List<Boat> sampleRows = dao.findAll(filter); + + ExportModel<Boat> exportModel = + new BoatImportExportModel(); + + Export<Boat> export = Export.newExport(exportModel, sampleRows); + + try { + + String csvContent = export.toString(Charsets.UTF_8); + + InputStream csvInputStream = IOUtils.toInputStream(csvContent, Charsets.UTF_8); + + return csvInputStream; + + } catch (Exception e) { + throw new WaoTechnicalException(e); + } + } +} Property changes on: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowsFilterValues.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowsFilterValues.java 2014-04-01 15:02:59 UTC (rev 1790) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowsFilterValues.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -1,5 +1,6 @@ package fr.ifremer.wao.services.service; +import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.DCF5Code; import fr.ifremer.wao.entity.FishingGearDCF; import fr.ifremer.wao.entity.FishingZone; @@ -57,7 +58,11 @@ } sampleRowCodes.add(FilterOption.forString(sampleRow.getCode())); programNames.add(FilterOption.forString(sampleRow.getProgramName())); - companies.add(FilterOption.forValueAndLabel(sampleRow.getCompany().getTopiaId(), sampleRow.getCompany().getName())); + + Company company = sampleRow.getCompany(); + if (company != null) { + companies.add(FilterOption.forValueAndLabel(company.getTopiaId(), company.getName())); + } samplingStrategies.add(FilterOption.forEnum(sampleRow.getSamplingStrategy())); if (sampleRow.getObsProgram().isObsVente()) { TerrestrialLocation terrestrialDistrict = sampleRow.getTerrestrialLocation(); Added: trunk/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerBoatsServiceTest.java =================================================================== --- trunk/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerBoatsServiceTest.java (rev 0) +++ trunk/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerBoatsServiceTest.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,49 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.BoatsFilter; +import fr.ifremer.wao.services.AbstractWaoServiceTest; +import fr.ifremer.wao.services.ObsMerFixtures; +import org.junit.Before; +import org.junit.Test; + +/** + * Created on 4/1/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class ObsMerBoatsServiceTest extends AbstractWaoServiceTest { + + protected ObsMerBoatsService service; + + protected ObsMerFixtures fixtures; + + @Before + public void setUp() { + service = newService(ObsMerBoatsService.class); + fixtures = new ObsMerFixtures(newServiceContext()); + } + + protected boolean isDatabaseWithReferential() { + return true; + } + + @Test + public void testGetBoatsFilterValues() { + + BoatsFilter filter = service.newBoatsFilter(fixtures.admin()); + + BoatsFilterValues boatsFilterValues = service.getBoatsFilterValues(filter); + + } + + @Test + public void testGetBoatsList() { + + BoatsFilter filter = service.newBoatsFilter(fixtures.admin()); + + ObsMerBoatsList boatsList = service.getBoatsList(filter, 50, 0, null, false); + + } + +} \ No newline at end of file Property changes on: trunk/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerBoatsServiceTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoJsonActionSupport.java (from rev 1786, trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/json/WaoJsonActionSupport.java) =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoJsonActionSupport.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoJsonActionSupport.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,34 @@ +package fr.ifremer.wao.web; + +/* + * #%L + * Wao :: Web + * %% + * Copyright (C) 2009 - 2014 Ifremer + * %% + * 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% + */ + +import org.apache.struts2.convention.annotation.Result; +import org.apache.struts2.convention.annotation.Results; + +@Results({ + @Result(name="success", type="json") +}) +public class WaoJsonActionSupport extends WaoActionSupport { + + private static final long serialVersionUID = 1L; + +} Deleted: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/json/WaoJsonActionSupport.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/json/WaoJsonActionSupport.java 2014-04-01 15:02:59 UTC (rev 1790) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/json/WaoJsonActionSupport.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -1,35 +0,0 @@ -package fr.ifremer.wao.web.action.json; - -/* - * #%L - * Wao :: Web - * %% - * Copyright (C) 2009 - 2014 Ifremer - * %% - * 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% - */ - -import fr.ifremer.wao.web.WaoActionSupport; -import org.apache.struts2.convention.annotation.Result; -import org.apache.struts2.convention.annotation.Results; - -@Results({ - @Result(name="success", type="json") -}) -public class WaoJsonActionSupport extends WaoActionSupport { - - private static final long serialVersionUID = 1L; - -} Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,95 @@ +package fr.ifremer.wao.web.action.obsmer; + +import com.opensymphony.xwork2.Preparable; +import fr.ifremer.wao.BoatsFilter; +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.services.service.BoatsFilterValues; +import fr.ifremer.wao.services.service.ObsMerBoatsList; +import fr.ifremer.wao.services.service.ObsMerBoatsService; +import fr.ifremer.wao.web.WaoJspActionSupport; +import org.nuiton.topia.persistence.pager.TopiaPagerBean; + +import java.util.List; + +/** + * Created on 4/1/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class BoatsAction extends WaoJspActionSupport implements Preparable { + + private static final long serialVersionUID = 1L; + + protected transient ObsMerBoatsService service; + + protected BoatsFilter filter; + + protected int pageIndex = 0; + + protected int pageSize = 50; + + protected String sortProperty; + + protected boolean sortAscendant; + + protected ObsMerBoatsList boatList; + + public void setPageIndex(int pageIndex) { + this.pageIndex = pageIndex; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public void setSortProperty(String sortProperty) { + this.sortProperty = sortProperty; + } + + public void setSortAscendant(boolean sortAscendant) { + this.sortAscendant = sortAscendant; + } + + public void setService(ObsMerBoatsService service) { + this.service = service; + } + + public BoatsFilter getFilter() { + if (filter == null) { + prepare(); + } + return filter; + } + + public List<Boat> getBoats() { + return boatList.getBoats(); + } + + public TopiaPagerBean getPager() { + return boatList.getPager(); + } + + public BoatsFilterValues getFilterValues() { + return boatList.getFilterValues(); + } + + @Override + public void prepare() { + + filter = service.newBoatsFilter(getAuthenticatedWaoUser()); + } + + @Override + public String execute() { + + boatList = service.getBoatsList(filter, + pageSize, + pageIndex, + sortProperty, + sortAscendant); + + return SUCCESS; + } + +} Property changes on: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsFilterValuesJsonAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsFilterValuesJsonAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsFilterValuesJsonAction.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,53 @@ +package fr.ifremer.wao.web.action.obsmer; + +import com.opensymphony.xwork2.Preparable; +import fr.ifremer.wao.BoatsFilter; +import fr.ifremer.wao.services.service.BoatsFilterValues; +import fr.ifremer.wao.services.service.ObsMerBoatsService; +import fr.ifremer.wao.web.WaoJsonActionSupport; + +/** + * Created on 4/1/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class BoatsFilterValuesJsonAction extends WaoJsonActionSupport implements Preparable { + + private static final long serialVersionUID = 1L; + + protected transient ObsMerBoatsService service; + + protected BoatsFilter filter; + + protected BoatsFilterValues filterValues; + + public void setService(ObsMerBoatsService service) { + this.service = service; + } + + public BoatsFilter getFilter() { + if (filter == null) { + prepare(); + } + return filter; + } + + public BoatsFilterValues getFilterValues() { + return filterValues; + } + + @Override + public void prepare() { + + filter = service.newBoatsFilter(session.getAuthenticatedWaoUser()); + } + + @Override + public String execute() { + + filterValues = service.getBoatsFilterValues(filter); + return SUCCESS; + } + +} \ No newline at end of file Property changes on: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsFilterValuesJsonAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportBoatsAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportBoatsAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportBoatsAction.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,57 @@ +package fr.ifremer.wao.web.action.obsmer; + +import com.opensymphony.xwork2.Preparable; +import fr.ifremer.wao.BoatsFilter; +import fr.ifremer.wao.services.service.ObsMerBoatsService; +import fr.ifremer.wao.web.action.AbstractDownloadCsvAction; + +import java.io.InputStream; +import java.util.Date; + +/** + * Created on 4/1/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class ExportBoatsAction extends AbstractDownloadCsvAction implements Preparable { + + private static final long serialVersionUID = 1L; + + protected transient ObsMerBoatsService service; + + protected BoatsFilter filter; + + public void setService(ObsMerBoatsService service) { + this.service = service; + } + + public BoatsFilter getFilter() { + if (filter == null) { + prepare(); + } + return filter; + } + + @Override + public void prepare() { + + filter = service.newBoatsFilter(getAuthenticatedWaoUser()); + + } + + @Override + public String getFileName() { + + return "boats_" + getObsProgram().name() + "_" + dateFormat.format(new Date()) + ".csv"; + + } + + @Override + public InputStream getInputStream() { + + return service.exportBoats(filter); + + } + +} \ No newline at end of file Property changes on: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportBoatsAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SampleRowsFilterValuesJsonAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SampleRowsFilterValuesJsonAction.java 2014-04-01 15:02:59 UTC (rev 1790) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/SampleRowsFilterValuesJsonAction.java 2014-04-01 15:13:11 UTC (rev 1791) @@ -5,7 +5,7 @@ import fr.ifremer.wao.services.service.ObsMerSamplingPlan; import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; import fr.ifremer.wao.services.service.SampleRowsFilterValues; -import fr.ifremer.wao.web.action.json.WaoJsonActionSupport; +import fr.ifremer.wao.web.WaoJsonActionSupport; public class SampleRowsFilterValuesJsonAction extends WaoJsonActionSupport implements Preparable { Modified: trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-04-01 15:02:59 UTC (rev 1790) +++ trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-04-01 15:13:11 UTC (rev 1791) @@ -88,11 +88,18 @@ wao.ui.boatList=List of %s boats wao.ui.boatinfo.title=Infos about %s wao.ui.boats.associatedLine=Sample row(s) associated with this boat +wao.ui.boats.boatLength=Length +wao.ui.boats.boatName=Name +wao.ui.boats.buildYear=Build year +wao.ui.boats.district=District wao.ui.boats.nbObservations=%s observation(s), %s with your company (all programs considered) +wao.ui.boats.portOfRegistry=Port wao.ui.boats.portOfRegistry.description=It's the main operating port of the boat wao.ui.boats.portOfRegistry.header=Port +wao.ui.boats.registrationCode=Registration code wao.ui.boats.selecting=You are currently selecting a boat for the row %s wao.ui.boats.substitutes=Substitutes for this boat +wao.ui.boats.title=Liste de %s navires wao.ui.cartography.help=Click on the graphs to get the details. wao.ui.cartography.title=Dispatching of the contacts among boat districts wao.ui.cartography.title.company=Dispatching of the contacts among boat districts for company %s @@ -218,6 +225,8 @@ wao.ui.filters.filters=Search filters wao.ui.filters.refresh=Refresh filters wao.ui.forgotPassword=Forgot password ? +wao.ui.form.Boat.name=Name +wao.ui.form.Boat.registrationCode=Registration number wao.ui.form.Company.error.nameMustBeUnique=Company name must be unique wao.ui.form.Company.title.creation=Create a new company wao.ui.form.Company.title.edition=Edit company %s @@ -252,6 +261,7 @@ wao.ui.form.authentication.error.wrongCredentials=Incorrect credentials wao.ui.form.authentication.title=WAO authentication wao.ui.form.boardingFrom=Boardings since +wao.ui.form.boatName.placeholder=Name of boat wao.ui.form.contactsFile=Contacts file wao.ui.form.definePasswordManually=Define password manually wao.ui.form.editComment=Edit comment @@ -270,6 +280,7 @@ wao.ui.form.program=Program wao.ui.form.programEvaluation=Program evaluation wao.ui.form.readOnly=read-only +wao.ui.form.registrationCode.placeholder=Registration number wao.ui.form.removeRole=remove this role wao.ui.form.repeatPassword=Repeat password wao.ui.form.roles=Roles Modified: trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-04-01 15:02:59 UTC (rev 1790) +++ trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-04-01 15:13:11 UTC (rev 1791) @@ -88,11 +88,18 @@ wao.ui.boatList=Liste de %s navires wao.ui.boatinfo.title=Informations sur %s wao.ui.boats.associatedLine=Ligne(s) du plan associée(s) à ce navire +wao.ui.boats.boatLength=Longueur +wao.ui.boats.boatName=nom +wao.ui.boats.buildYear=Année de construction +wao.ui.boats.district=Quatier maritime wao.ui.boats.nbObservations=%s observation(s) dont %s avec votre société +wao.ui.boats.portOfRegistry=Port wao.ui.boats.portOfRegistry.description=Il s'agit du port d'exploitation principal du navire wao.ui.boats.portOfRegistry.header=Port +wao.ui.boats.registrationCode=Immatriculation wao.ui.boats.selecting=Vous êtes en cours de sélection d'un navire pour la ligne du plan %s wao.ui.boats.substitutes=Substituts du navire +wao.ui.boats.title=Liste de %s navires wao.ui.cartography.help=Cliquez sur les graphiques pour avoir le détail. wao.ui.cartography.title=Répartition des contacts par quartier des navires wao.ui.cartography.title.company=Répartition des contacts par quartier des navires pour la société %s @@ -218,6 +225,8 @@ wao.ui.filters.filters=Filtres de recherche wao.ui.filters.refresh=Rafraîchir les champs du filtre wao.ui.forgotPassword=Mot de passe oublié ? +wao.ui.form.Boat.name=Nom +wao.ui.form.Boat.registrationCode=Immatriculation wao.ui.form.Company.error.nameMustBeUnique=Le nom de la société doit être unique wao.ui.form.Company.title.creation=Création d'une société wao.ui.form.Company.title.edition=Modification de la société %s @@ -252,6 +261,7 @@ wao.ui.form.authentication.error.wrongCredentials=Les informations d'authenfication ne sont pas correctes wao.ui.form.authentication.title=Identification WAO wao.ui.form.boardingFrom=Sollicitations du navire depuis le +wao.ui.form.boatName.placeholder=Nom du bateau wao.ui.form.contactsFile=Fichier des contacts wao.ui.form.definePasswordManually=définir manuellement wao.ui.form.editComment=Commentaire sur la modification @@ -262,7 +272,7 @@ wao.ui.form.generatePassword=Générer le mot de passe wao.ui.form.mapType=Carte wao.ui.form.otherBoatInfos=Autres informations sur le navire -wao.ui.form.period=Période +wao.ui.form.period=Périodewao.ui.field.Boat.fleet wao.ui.form.period.from=du wao.ui.form.period.to=au wao.ui.form.periodFrom=Période du @@ -270,6 +280,7 @@ wao.ui.form.program=Programme wao.ui.form.programEvaluation=Évaluation programme wao.ui.form.readOnly=lecture seule +wao.ui.form.registrationCode.placeholder=Immatriculation wao.ui.form.removeRole=retirer ce role wao.ui.form.repeatPassword=Répéter le mot de passe wao.ui.form.roles=Rôles Added: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp (rev 0) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp 2014-04-01 15:13:11 UTC (rev 1791) @@ -0,0 +1,182 @@ +<%-- + #%L + Wao :: Web + %% + Copyright (C) 2009 - 2014 Ifremer + %% + 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% + --%> +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%@taglib uri="/struts-tags" prefix="s" %> + +<html> + +<head> + <title> + <s:text name="wao.ui.page.Boats.title"/> + </title> + + <script> + + var BOATS_FILTER_VALUES_JSON_URL = '<s:url action="boats-filter-values-json" />'; + + $(document).ready(function () { + + var boatsFilterController = new FilterController(BOATS_FILTER_VALUES_JSON_URL, $('#boats-filters-form')); + boatsFilterController.init(); + }); + + </script> + +</head> + +<content tag="mainClass">large</content> + +<s:form method="GET" id="boats-filters-form" cssClass="filters-form"> + + <fieldset> + + <s:select name="filter.elligibleBoatsFilter.fishingZoneFacadeNames" + label="%{getText('wao.ui.field.FishingZone.facadeName')}" + list="filterValues.elligibleBoatsFilterValues.fishingZoneFacadeNames" + listKey="value" + listValue="label" + multiple="true" + dataBinding="elligibleBoatsFilterValues.fishingZoneFacadeNames"/> + + <s:select name="filter.elligibleBoatsFilter.fishingZoneSectorNames" + label="%{getText('wao.ui.field.FishingZone.sectorName')}" + list="filterValues.elligibleBoatsFilterValues.fishingZoneSectorNames" + listKey="value" + listValue="label" + multiple="true" + dataBinding="elligibleBoatsFilterValues.fishingZoneSectorNames"/> + + <s:select name="filter.elligibleBoatsFilter.sampleRowCodes" + label="%{getText('wao.ui.field.SampleRow.code')}" + list="filterValues.elligibleBoatsFilterValues.sampleRowCodes" + listKey="value" + listValue="label" + multiple="true" + dataBinding="elligibleBoatsFilterValues.sampleRowCodes"/> + + </fieldset> + + <fieldset> + + <s:textfield name="filter.boatName" + label="%{getText('wao.ui.form.Boat.name')}" + placeholder="%{getText('wao.ui.form.boatName.placeholder')}" + cssClass=""/> + + <s:textfield name="filter.registrationCode" + label="%{getText('wao.ui.form.Boat.registrationCode')}" + placeholder="%{getText('wao.ui.form.registrationCode.placeholder')}" + cssClass=""/> + + </fieldset> + + <fieldset> + + <s:select name="filter.districtIds" + label="%{getText('wao.ui.field.Boat.district')}" + list="filterValues.districts" + listKey="value" + listValue="label" + multiple="true" + dataBinding="districts"/> + + <s:select name="filter.shipOwnerIds" + label="%{getText('wao.ui.field.Boat.shipOwner')}" + list="filterValues.shipOwners" + listKey="value" + listValue="label" + multiple="true" + dataBinding="shipOwners"/> + + <s:select name="filter.portOfRegistryIds" + label="%{getText('wao.ui.field.Boat.portOfRegistry')}" + list="filterValues.portsOfRegistry" + listKey="value" + listValue="label" + multiple="true" + dataBinding="portsOfRegistry"/> + </fieldset> + + <div class="form-actions"> + + <s:url action="boats" id="boatsUrl"/> + <s:a href="%{boatsUrl}" cssClass="btn"> + <i class="icon-reset"></i> <s:text name="wao.ui.action.reset"/> + </s:a> + + <s:submit type="button" cssClass="btn"> + <i class="icon-filter"></i> <s:text name="wao.ui.action.filter"/> + </s:submit> + + <s:submit action="export-boats" type="button" cssClass="btn"> + <i class="icon-download"></i> <s:text name="wao.ui.action.csvExport"/> + </s:submit> + + </div> + +</s:form> + +<h3> + <s:text name="wao.ui.boats.title"> + <s:param value="%{pager.records}"/> + </s:text> +</h3> + +<%--TODO Pagination--%> +<table id="boat-list" class="large-table boat-list"> + <thead> + <tr> + <th> + <s:text name="wao.ui.boats.boatName"/> + </th> + <th> + <s:text name="wao.ui.boats.registrationCode"/> + </th> + <th> + <s:text name="wao.ui.boats.boatLength"/> + </th> + <th> + <s:text name="wao.ui.boats.buildYear"/> + </th> + <th> + <s:text name="wao.ui.boats.district"/> + </th> + <th> + <s:text name="wao.ui.boats.portOfRegistry"/> + </th> + </tr> + </thead> + <tbody> + + <s:iterator value="boats" var="boat"> + <tr class="boat-row"> + <td><s:property value="name"/></td> + <td><s:property value="immatriculation"/></td> + <td><s:property value="boatLength"/></td> + <td><s:property value="year"/></td> + <td><s:property value="district.code"/></td> + <td><s:property value="portOfRegistry.code"/></td> + </tr> + </s:iterator> + </todby> +</table> + +</html> Property changes on: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp 2014-04-01 15:02:59 UTC (rev 1790) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp 2014-04-01 15:13:11 UTC (rev 1791) @@ -34,7 +34,7 @@ $(document).ready(function () { - var sampleRowsFilterController = new SampleRowsFilterController(SAMPLE_ROWS_FILTER_VALUES_JSON_URL, $('#sampling-plan-filters-form')); + var sampleRowsFilterController = new FilterController(SAMPLE_ROWS_FILTER_VALUES_JSON_URL, $('#sampling-plan-filters-form')); sampleRowsFilterController.init(); $('#switch-estimated-real').click(function () { Modified: trunk/wao-web/src/main/webapp/wao.js =================================================================== --- trunk/wao-web/src/main/webapp/wao.js 2014-04-01 15:02:59 UTC (rev 1790) +++ trunk/wao-web/src/main/webapp/wao.js 2014-04-01 15:13:11 UTC (rev 1791) @@ -19,7 +19,7 @@ * #L% */ -var SampleRowsFilterModel = function (filterValuesUrl) { +var FilterModel = function (filterValuesUrl) { var self = this; @@ -40,7 +40,7 @@ }; -var SampleRowsFilterView = function (sampleRowsFilterModel, $filtersForm) { +var FilterView = function (sampleRowsFilterModel, $filtersForm) { var self = this; @@ -62,8 +62,8 @@ }); this.$inputs.each(function (index, input) { var $input = $(input); - var parameterName = $(input).prop('name'); - var parameterValue = $(input).prop('value'); + var parameterName = $input.prop('name'); + var parameterValue = $input.prop('value'); filter[parameterName] = parameterValue; }); return filter; @@ -78,7 +78,7 @@ var name = $select.prop('name'); // FIXME brendan 26/03/14 should be data-binding but freemarker break the template :-( var binding = $select.attr('databinding'); - var options = filterValues[binding]; + var options = WAO.getData(binding, filterValues); $.each(options, function (index, option) { var optionHtml = '<option value="' + option.value + '">' + option.label + '</option>'; $select.append(optionHtml); @@ -89,7 +89,7 @@ }); }); this.$filtersForm.effect( "highlight", "slow" ); - } + }; $(this.model).on('updated', function () { self.refreshFilterValues(); @@ -97,12 +97,12 @@ }; -var SampleRowsFilterController = function (filterValuesUrl, $filtersForm) { +var FilterController = function (filterValuesUrl, $filtersForm) { var self = this; - this.model = new SampleRowsFilterModel(filterValuesUrl); - this.view = new SampleRowsFilterView(this.model, $filtersForm); + this.model = new FilterModel(filterValuesUrl); + this.view = new FilterView(this.model, $filtersForm); this.updateFilterValues = function () { var filter = this.view.getFilter(); @@ -113,13 +113,13 @@ var markChange = function () { $(this).data('value-changed', true); - } + }; var updateFilterValuesIfValueChanged = function () { if ($(this).data('value-changed')) { $(this).data('value-changed', false); self.updateFilterValues(); } - } + }; this.view.$selects.change(markChange); this.view.$inputs.change(markChange); @@ -139,24 +139,24 @@ this.info = function (message) { this._notify('info', message); - } + }; this.warn = function (message) { this._notify('warn', message); - } + }; this.error = function (message) { this._notify('error', message); - } + }; this.success = function (message) { this._notify('success', message); - } + }; this._notify = function (level, message) { var cssClasses = 'alert alert-' + level; if (level === 'warn') { - var cssClasses = 'alert'; + cssClasses = 'alert'; } var html = '<div class="' + cssClasses + '">' + ' <button type="button" class="close" data-dismiss="alert">×</button>' @@ -165,7 +165,7 @@ this.$notifications.append(html); } -} +}; var Wao = function () { @@ -173,8 +173,13 @@ this.notifications = new Notifications(); -} + this.getData = function(path, data) { + return path.split('.').reduce(function(prev, prop){ + return prev && prev[prop] + }, data) + }; +}; $(document).ready(function () {