[Suiviobsmer-commits] r1143 - in trunk: wao-business/src/main/java/fr/ifremer/wao/bean wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/resources/i18n wao-business/src/main/xmi wao-ui/src/main/java/fr/ifremer/wao/ui/base wao-ui/src/main/java/fr/ifremer/wao/ui/components wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/resources/fr/ifremer/wao/ui/components wao-ui/src/main/webapp
Author: sletellier Date: 2011-04-06 14:09:38 +0000 (Wed, 06 Apr 2011) New Revision: 1143 Log: Continue refactor for boats Added: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/BoatFilterValuesImpl.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/BoatFilterManager.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/AbstractFilterComponent.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/BoatFilterComponent.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/BoatFilterComponent.tml Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterValuesImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/FilterManager.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/SamplingFilterManager.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/SamplingFilterComponent.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java trunk/wao-ui/src/main/webapp/Boats.tml Added: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/BoatFilterValuesImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/BoatFilterValuesImpl.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/BoatFilterValuesImpl.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -0,0 +1,8 @@ +package fr.ifremer.wao.bean; + +/** + * @author sletellier <letellier at codelutin.com> + */ +public class BoatFilterValuesImpl extends BoatFilterValues { + +} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterValuesImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterValuesImpl.java 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterValuesImpl.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -107,6 +107,7 @@ setFacadeNames(new ArrayList<String>()); } if (!containsFacadeNames(toAdd)) { + // Remove doublons super.addFacadeNames(toAdd); } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -35,10 +35,15 @@ import fr.ifremer.wao.WaoQueryBuilder; import fr.ifremer.wao.WaoQueryHelper; import fr.ifremer.wao.bean.BoatFilter; +import fr.ifremer.wao.bean.BoatFilterImpl; +import fr.ifremer.wao.bean.BoatFilterValues; +import fr.ifremer.wao.bean.BoatFilterValuesImpl; import fr.ifremer.wao.bean.CompanyBoatInfos; import fr.ifremer.wao.bean.CompanyBoatInfosImpl; import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.SamplingFilterValues; +import fr.ifremer.wao.bean.SamplingFilterValuesImpl; import fr.ifremer.wao.entity.ActivityCalendar; import fr.ifremer.wao.entity.ActivityCalendarDAO; import fr.ifremer.wao.entity.ActivityMonth; @@ -79,6 +84,8 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -689,4 +696,52 @@ File file = new File(filename); return new FileInputStream(file); } + + @Override + protected BoatFilterValues executeGetPossibleValuesForFilter(TopiaContext transaction, BoatFilter filter) throws Exception { + + // extract data + Map<Integer, Boat> integerBoatMap = executeGetBoatsByFilter(transaction, filter); + + logger.info("Starting extracting rows : " + new Date()); + // Extract sampleRows + List<SampleRow> rows = extractSampleRows(integerBoatMap.values()); + + logger.info("End of extracting rows : " + new Date()); + + // collect values + BoatFilterValues result = new BoatFilterValuesImpl(); + + result.fill(rows); + + return result; + } + + protected List<SampleRow> extractSampleRows(Collection<Boat> boats) { + List<SampleRow> result = new ArrayList<SampleRow>(); + for (Boat boat : boats) { + List<ElligibleBoat> elligibleBoats = boat.getElligibleBoat(); + for (ElligibleBoat elligibleBoat : elligibleBoats) { + result.add(elligibleBoat.getSampleRow()); + } + } + return result; + } + + @Override + protected BoatFilter executeNewBoatFilter(TopiaContext transaction, ConnectedUser connectedUser) throws Exception { + + BoatFilter boatFilter = new BoatFilterImpl(); + // Only rows which are not finished nearly one month + boatFilter.setNbMonthFinishedFromToday(-1); + boatFilter.setObsProgram(connectedUser.getProfile().getObsProgram()); + + // Very very important to do that at beginning + // Evo #2227 : Guest user has no default company filter + if (connectedUser.isCoordinatorOrObserver()) { + boatFilter.setCompany(connectedUser.getCompany()); + } + + return boatFilter; + } } Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-04-06 14:09:38 UTC (rev 1143) @@ -149,9 +149,11 @@ wao.error.serviceBoat.getCompanyBoatInfos= wao.error.serviceBoat.getLastActivityCalendar= wao.error.serviceBoat.getNbBoatsByFilter= +wao.error.serviceBoat.getPossibleValuesForFilter= wao.error.serviceBoat.getShipOwnerNamesContains= wao.error.serviceBoat.importActivityCalendarCsv= wao.error.serviceBoat.importBoatCsv= +wao.error.serviceBoat.newBoatFilter= wao.error.serviceCartography.exportContactMotifsStatisticsKml= wao.error.serviceCartography.exportContactStatisticsKml= wao.error.serviceCartography.importBoatDistrictKml= Modified: trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-04-06 14:09:38 UTC (rev 1143) @@ -149,9 +149,11 @@ wao.error.serviceBoat.getCompanyBoatInfos=Impossible de r\u00E9cup\u00E9rer les informations du navire immatricul\u00E9 %1$d pour la soci\u00E9t\u00E9 %2$s wao.error.serviceBoat.getLastActivityCalendar=Impossible de charger le dernier calendrier d'activit\u00E9 du navire %1$s (%2$d) wao.error.serviceBoat.getNbBoatsByFilter=Impossible de filtrer la liste des navires +wao.error.serviceBoat.getPossibleValuesForFilter= wao.error.serviceBoat.getShipOwnerNamesContains= wao.error.serviceBoat.importActivityCalendarCsv=Probl\u00E8me d'import du fichier CSV des calendriers d'activit\u00E9 wao.error.serviceBoat.importBoatCsv=Probl\u00E8me d'import du fichier CSV. V\u00E9rifiez l'en-t\u00EAte du fichier \: [ NAVS_COD,CARN_NOM,CARN_LONGUEUR_HT,CARN_ANNEE,QUARTIER_IMMA,PER_COD,PER_NOM,PER_PRENOM,NAVS_ACTIVE ]. Voir documentation pour plus de d\u00E9tails. +wao.error.serviceBoat.newBoatFilter= wao.error.serviceCartography.exportContactMotifsStatisticsKml= wao.error.serviceCartography.exportContactStatisticsKml= wao.error.serviceCartography.importBoatDistrictKml=Impossible d'importer les coordonn\u00E9es des quartiers des navires. V\u00E9rifiez la documentation pour le bon format du fichier Kml. Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/BoatFilterManager.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/BoatFilterManager.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/BoatFilterManager.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -0,0 +1,109 @@ +/* + * #%L + * Wao :: Web Interface + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2011 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% + */ +package fr.ifremer.wao.ui.base; + +import fr.ifremer.wao.bean.BoatFilter; +import fr.ifremer.wao.bean.BoatFilterValues; +import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.service.ServiceBoat; + +import java.util.List; + +/** + * @author sletellier <letellier at codelutin.com> + */ +public class BoatFilterManager extends FilterManager<BoatFilter> { + + protected ServiceBoat serviceBoat; + + /* + * Datas + */ + protected BoatFilterValues possibleValuesForFilter; + + protected SampleRow sampleRow; + + public BoatFilterManager(ConnectedUser user, + ServiceBoat serviceBoat) { + + super(user); + + this.serviceBoat = serviceBoat; + } + + @Override + protected boolean isAvailableDataForFiltersOnly() { + return false; + } + + @Override + public void resetFilter() { + sampleRow = null; + filter = serviceBoat.newBoatFilter(user); + } + + @Override + public void updateSearchFields() { + updatePossibleValuesForFilter(); + } + + public BoatFilterValues getPossibleValuesForFilter() { + return getPossibleValuesForFilter(false); + } + + public BoatFilterValues updatePossibleValuesForFilter() { + return getPossibleValuesForFilter(true); + } + + protected BoatFilterValues getPossibleValuesForFilter(boolean update) { + if (update || possibleValuesForFilter == null) { + possibleValuesForFilter = serviceBoat.getPossibleValuesForFilter(getFilter()); + } + return possibleValuesForFilter; + } + + public String[] getShipOwnerNamesContains(String input) { + List<String> results = serviceBoat.getShipOwnerNamesContains(input); + return results.toArray(new String[results.size()]); + } + + public String[] getBoatNamesStartWith(String input) { + List<String> results = serviceBoat.getBoatNamesStartWith(input); + return results.toArray(new String[results.size()]); + } + + public SampleRow getSampleRow() { + return sampleRow; + } + + public void setSampleRow(SampleRow sampleRow) { + getFilter().setSampleRow(sampleRow); + getFilter().setSampleRowExists(true); + } + + public boolean isSampleRowExists() { + return getFilter().isSampleRowExists(); + } +} Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/FilterManager.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/FilterManager.java 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/FilterManager.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -25,8 +25,6 @@ import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.SamplingFilter; -import fr.ifremer.wao.bean.SamplingFilterValues; -import fr.ifremer.wao.service.ServiceSampling; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,47 +40,23 @@ protected ConnectedUser user; - /* - * Services - */ - protected ServiceSampling serviceSampling; + protected E filter; - /* - * Datas - */ - protected SamplingFilterValues possibleValuesForFilter; - - public FilterManager(ConnectedUser user, - ServiceSampling serviceSampling) { - - this.serviceSampling = serviceSampling; + public FilterManager(ConnectedUser user) { this.user = user; - - // Initialize filter - resetFilter(); } - public SamplingFilterValues getPossibleValuesForFilter() { - return getPossibleValuesForFilter(false); + public ConnectedUser getUser() { + return user; } - public SamplingFilterValues updatePossibleValuesForFilter() { - return getPossibleValuesForFilter(true); - } - - protected SamplingFilterValues getPossibleValuesForFilter(boolean update) { - if (update || possibleValuesForFilter == null) { - possibleValuesForFilter = serviceSampling.getPossibleValuesForFilter(getFilter()); + public E getFilter() { + if (filter == null) { + resetFilter(); } - return possibleValuesForFilter; + return filter; } - public ConnectedUser getUser() { - return user; - } - - public abstract E getFilter(); - /** * Method to initialize filter, is call on constructor */ @@ -95,7 +69,8 @@ */ protected abstract boolean isAvailableDataForFiltersOnly(); - public void updateSearchFields() { - updatePossibleValuesForFilter(); - } + /** + * Used to update search fields + */ + public abstract void updateSearchFields(); } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/SamplingFilterManager.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/SamplingFilterManager.java 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/SamplingFilterManager.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -25,26 +25,30 @@ import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.bean.SamplingFilterValues; import fr.ifremer.wao.service.ServiceSampling; -import org.apache.tapestry5.annotations.Persist; /** * @author sletellier <letellier at codelutin.com> */ public class SamplingFilterManager extends FilterManager<SamplingFilter> { - @Persist - protected SamplingFilter filter; + /* + * Services + */ + protected ServiceSampling serviceSampling; + /* + * Datas + */ + protected SamplingFilterValues possibleValuesForFilter; + public SamplingFilterManager(ConnectedUser user, ServiceSampling serviceSampling) { - super(user, serviceSampling); - } + super(user); - @Override - public SamplingFilter getFilter() { - return filter; + this.serviceSampling = serviceSampling; } @Override @@ -56,4 +60,24 @@ public void resetFilter() { filter = serviceSampling.newSamplingFilter(user); } + + @Override + public void updateSearchFields() { + updatePossibleValuesForFilter(); + } + + public SamplingFilterValues getPossibleValuesForFilter() { + return getPossibleValuesForFilter(false); + } + + public SamplingFilterValues updatePossibleValuesForFilter() { + return getPossibleValuesForFilter(true); + } + + protected SamplingFilterValues getPossibleValuesForFilter(boolean update) { + if (update || possibleValuesForFilter == null) { + possibleValuesForFilter = serviceSampling.getPossibleValuesForFilter(getFilter()); + } + return possibleValuesForFilter; + } } Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/AbstractFilterComponent.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/AbstractFilterComponent.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/AbstractFilterComponent.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -0,0 +1,109 @@ +package fr.ifremer.wao.ui.components; + +import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.ui.base.FilterManager; +import org.apache.tapestry5.ComponentResources; +import org.apache.tapestry5.annotations.InjectComponent; +import org.apache.tapestry5.annotations.Parameter; +import org.apache.tapestry5.annotations.Persist; +import org.apache.tapestry5.corelib.components.Zone; +import org.apache.tapestry5.ioc.annotations.Inject; +import org.slf4j.Logger; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +/** + * @author sletellier <letellier at codelutin.com> + */ +public abstract class AbstractFilterComponent<E extends SamplingFilter, F extends FilterManager<E>> { + + @Inject + private Logger log; + + @Inject + private ComponentResources resources; + + @Parameter(required = true) + private F filterManager; + + @Parameter(required = false) + private Boolean visibleOnStartup; + + @InjectComponent + private Zone filtersZone; + + @Persist + private Boolean filtersVisible; + + public ComponentResources getResources() { + return resources; + } + + // True by default + public Boolean getVisibleOnStartup() { + if (visibleOnStartup == null) { + visibleOnStartup = true; + } + return visibleOnStartup; + } + + public Boolean getFiltersVisible() { + if (filtersVisible == null) { + filtersVisible = getVisibleOnStartup(); + } + return filtersVisible; + } + + public void setFiltersVisible(Boolean filtersVisible) { + this.filtersVisible = filtersVisible; + } + + public void switchFiltersVisible() { + filtersVisible = !filtersVisible; + } + + public Zone getFiltersZone() { + return filtersZone; + } + + public E getFilter() { + return filterManager.getFilter(); + } + + public F getFilterManager() { + return filterManager; + } + + public void setFilterManager(F filterManager) { + this.filterManager = filterManager; + } + + public DateFormat getDateFormat() { + return new SimpleDateFormat("MM/yyyy"); + } + + /** + * Activate reset filter + */ + private boolean reset; + private boolean refresh; + + public boolean isReset() { + return reset; + } + + public boolean isRefresh() { + return refresh; + } + + public void onSelectedFromReset() { + reset = true; + } + + public void onSelectedFromRefresh() { + refresh = true; + } + + public abstract Object onSuccessFromFiltersForm(); +} Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/BoatFilterComponent.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/BoatFilterComponent.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/BoatFilterComponent.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -0,0 +1,52 @@ +package fr.ifremer.wao.ui.components; + +import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.bean.BoatFilter; +import fr.ifremer.wao.bean.SamplingFilterValues; +import fr.ifremer.wao.ui.base.BoatFilterManager; +import org.apache.tapestry5.annotations.InjectComponent; + +/** + * @author sletellier <letellier at codelutin.com> + */ +public class BoatFilterComponent extends AbstractFilterComponent<BoatFilter, BoatFilterManager> { + + @InjectComponent + private FeedBack filterFeedback; + + public SamplingFilterValues getPossibleValuesForFilter() { + + // Manage sampleRow from context + if (getFilterManager().isSampleRowExists()) { + filterFeedback.addInfo("Vous êtes en cours de sélection d'un navire pour la ligne du plan " + getFilterManager().getSampleRow().getCode()); + } + + return getFilterManager().getPossibleValuesForFilter(); + } + + @Override + public Object onSuccessFromFiltersForm() { + if (isReset()) { + getFilterManager().resetFilter(); + } + + // Limite search panel + getFilterManager().updatePossibleValuesForFilter(); + + if (isRefresh()) { + // Refresh search panel + return this; + } else { + // Refresh owner + return getResources().getContainer(); + } + } + + public String[] onProvideCompletionsFromShipOwnerName(String input) { + return getFilterManager().getShipOwnerNamesContains(input); + } + + public String[] onProvideCompletionsFromBoatName(String input) throws WaoException { + return getFilterManager().getBoatNamesStartWith(input); + } +} Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/SamplingFilterComponent.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/SamplingFilterComponent.java 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/SamplingFilterComponent.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -25,67 +25,21 @@ import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.bean.SamplingFilterValues; -import fr.ifremer.wao.entity.SampleRow; -import fr.ifremer.wao.ui.base.FilterManager; -import org.apache.tapestry5.ComponentResources; -import org.apache.tapestry5.annotations.InjectComponent; +import fr.ifremer.wao.ui.base.SamplingFilterManager; import org.apache.tapestry5.annotations.Parameter; -import org.apache.tapestry5.annotations.Persist; -import org.apache.tapestry5.annotations.Property; -import org.apache.tapestry5.corelib.components.Form; -import org.apache.tapestry5.corelib.components.Zone; -import org.apache.tapestry5.ioc.annotations.Inject; import org.nuiton.util.PeriodDates; -import org.slf4j.Logger; -import java.text.DateFormat; -import java.text.SimpleDateFormat; - /** * @author sletellier <letellier at codelutin.com> */ -public class SamplingFilterComponent { +public class SamplingFilterComponent extends AbstractFilterComponent<SamplingFilter, SamplingFilterManager> { - @Inject - private Logger log; + @Parameter(required = false) + private Boolean showEstimatedTides; - @Inject - private ComponentResources resources; - - @InjectComponent - private Form filtersForm; - @Parameter(required = true) - private FilterManager<? extends SamplingFilter> filterManager; - - @Parameter(required = true) private String legendMsg; - @Parameter(required = false) - private Boolean visibleOnStartup; - - @Parameter(required = false) - private Boolean showEstimatedTides; - - @InjectComponent - private Zone filtersZone; - - @Persist - private Object owner; - - @Persist - private Boolean filtersVisible; - - /** - * Current SampleRow from loop - */ - @Property - private SampleRow row; - - public String getLegendMsg() { - return legendMsg; - } - // False by default public Boolean getShowEstimatedTides() { if (showEstimatedTides == null) { @@ -94,74 +48,22 @@ return showEstimatedTides; } - // True by default - public Boolean getVisibleOnStartup() { - if (visibleOnStartup == null) { - visibleOnStartup = true; - } - return visibleOnStartup; - } - - public Boolean getFiltersVisible() { - if (filtersVisible == null) { - filtersVisible = getVisibleOnStartup(); - } - return filtersVisible; - } - - public void setFiltersVisible(Boolean filtersVisible) { - this.filtersVisible = filtersVisible; - } - - public void switchFiltersVisible() { - filtersVisible = !filtersVisible; - } - - public Zone getFiltersZone() { - return filtersZone; - } - - public SamplingFilter getFilter() { - return filterManager.getFilter(); - } - public SamplingFilterValues getPossibleValuesForFilter() { - return filterManager.getPossibleValuesForFilter(); + return getFilterManager().getPossibleValuesForFilter(); } - public FilterManager getFilterManager() { - return filterManager; + public String getLegendMsg() { + return legendMsg; } - public void setFilterManager(FilterManager<? extends SamplingFilter> filterManager) { - this.filterManager = filterManager; - } - - public DateFormat getDateFormat() { - return new SimpleDateFormat("MM/yyyy"); - } - /** - * Activate reset filter - */ - private boolean reset; - private boolean refresh; - - public void onSelectedFromReset() { - reset = true; - } - - public void onSelectedFromRefresh() { - refresh = true; - } - - /** * Do filtering * * @return owner (for refresh) if filter is edited */ - Object onSuccessFromFiltersForm() { - if (reset) { + @Override + public Object onSuccessFromFiltersForm() { + if (isReset()) { // Don't reset period in filters PeriodDates period = getFilter().getPeriod(); getFilterManager().resetFilter(); @@ -171,12 +73,12 @@ // Limite search panel getFilterManager().updatePossibleValuesForFilter(); - if (refresh) { + if (isRefresh()) { // Refresh search panel - return filtersZone.getBody(); + return getFiltersZone().getBody(); } else { // Refresh owner - return resources.getContainer(); + return getResources().getContainer(); } } } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2011-04-06 14:09:38 UTC (rev 1143) @@ -44,6 +44,8 @@ import fr.ifremer.wao.service.ServiceSampling; import fr.ifremer.wao.service.ServiceUser; import fr.ifremer.wao.ui.base.AbstractFilteredPage; +import fr.ifremer.wao.ui.base.BoatFilterManager; +import fr.ifremer.wao.ui.components.BoatFilterComponent; import fr.ifremer.wao.ui.components.FeedBack; import fr.ifremer.wao.ui.components.Layout; import fr.ifremer.wao.ui.data.BoatDataSource; @@ -90,7 +92,7 @@ */ @RequiresAuthentication(allowedRoles = {UserRole.ADMIN, UserRole.COORDINATOR, UserRole.OBSERVER, UserRole.PROFESSIONAL}) @Import(stylesheet = "context:css/boats.css") -public class Boats extends AbstractFilteredPage { +public class Boats { @Inject private Logger log; @@ -102,6 +104,9 @@ @Property private ConnectedUser user; + @InjectComponent + private BoatFilterComponent filterComponent; + @Inject private ServiceReferential serviceReferential; @@ -117,13 +122,27 @@ @Inject private PropertyAccess propertyAccess; - @Property - private String sampleRowContextId; +// @Property +// private String sampleRowContextId; /** Selected boat immatriculation for showing boatInfos */ @Persist(PersistenceConstants.FLASH) private Integer boatSelectedImmatriculation; + @Persist + private BoatFilterManager filterManager; + + public BoatFilterManager getFilterManager() { + if (filterManager == null) { + filterManager = new BoatFilterManager(user, serviceBoat); + } + return filterManager; + } + + public void setFilterManager(BoatFilterManager filterManager) { + this.filterManager = filterManager; + } + public Integer getBoatSelectedImmatriculation() { return boatSelectedImmatriculation; } @@ -132,9 +151,6 @@ this.boatSelectedImmatriculation = boatSelectedImmatriculation; } - @InjectComponent - private FeedBack filterFeedback; - void setupRender() throws WaoException { if (boatSelectedImmatriculation != null && getBoatSelected() == null) { @@ -145,42 +161,29 @@ boatSelectedImmatriculation = null; } - sampleRow = null; - getSampleRow(); - - // Manage sampleRow from context - if (isSampleRowExists()) { - // Filters will be set and displayed - getFilter().setSampleRow(sampleRow); - filtersHidden = false; - boats = null; - filterFeedback.addInfo("Vous êtes en cours de sélection d'un navire pour la ligne du plan " + sampleRow.getCode()); - professionId = getSampleRow().getProfession().getTopiaId(); - } - // Initialize filters using AbstractFilteredPage superclass - initSelectFilters(false, false, false); - // The company of connected user will be contributed to abstractFilteredPage - initCompanyFilter(); +// initSelectFilters(false, false, false); +// // The company of connected user will be contributed to abstractFilteredPage +// initCompanyFilter(); companyBoatInfos = null; } - void onActivate(EventContext ec) { - sampleRowContextId = ec.get(String.class, 0); - if (ec.getCount() > 1) { - boatSelectedImmatriculation = ec.get(Integer.class, 1); - } +// void onActivate(EventContext ec) { +// sampleRowContextId = ec.get(String.class, 0); +// if (ec.getCount() > 1) { +// boatSelectedImmatriculation = ec.get(Integer.class, 1); +// } // boatSelectedImmatriculation = ec.get(Integer.class, 1); - } +// } // Object[] onPassivate() { // return new Object[] { sampleRowContextId, boatSelectedImmatriculation }; // } - String onPassivate() { - return sampleRowContextId; - } +// String onPassivate() { +// return sampleRowContextId; +// } /**************************** Import Forms ********************************/ @@ -320,75 +323,47 @@ /**************************** Filters Form *****************************************/ /** Filters to apply on boats list */ - @Persist - private BoatFilter boatFilter; +// @Persist +// private BoatFilter boatFilter; /** Current sampleRow from context */ - @Persist - private SampleRow sampleRow; +// @Persist +// private SampleRow sampleRow; /** Profession select */ - @Persist - private GenericSelectModel<Profession> professionSelectModel; +// @Persist +// private GenericSelectModel<Profession> professionSelectModel; +// +// @Property +// private String professionId; +// +// /** Used to manage view of filters zone */ +// @Persist +// private boolean filtersHidden; - @Property - private String professionId; +// @InjectComponent +// private Zone filtersZone; - /** Used to manage view of filters zone */ - @Persist - private boolean filtersHidden; - - @InjectComponent - private Zone filtersZone; - /** - * Filters to apply on boats list. Method used by AbstractFilteredPage superclass. + * Filters to apply on boats list. * * @return the current BoatFilter to apply * @throws WaoException - * @see AbstractFilteredPage */ - @Override +// @Override public SamplingFilter getFilter() throws WaoException { return getBoatFilter(); } public BoatFilter getBoatFilter() throws WaoException { - if (boatFilter == null) { - if (log.isDebugEnabled()) { - log.debug("Create filter"); - } - boatFilter = new BoatFilterImpl(); - // Only rows which are not finished nearly one month - boatFilter.setNbMonthFinishedFromToday(-1); - boatFilter.setObsProgram(user.getProfile().getObsProgram()); - } - return boatFilter; + return filterManager.getFilter(); } - @Override - protected boolean isAvailableDataForFiltersOnly() { - return true; - } +// @Override +// protected boolean isAvailableDataForFiltersOnly() { +// return true; +// } - /** - * Retrieve sampleRow from business with id from url context. The sampleRowId from context is set by SamplingPlan page. - * When the sampleRow is not null, the filters are disabled to optimize searching boats for this row. - * - * @return the sampleRow from business - * @throws WaoException - */ - public SampleRow getSampleRow() throws WaoException { - if (sampleRow == null && !StringUtils.isEmpty(sampleRowContextId)) { - sampleRow = serviceSampling.getSampleRow(sampleRowContextId); - } - return sampleRow; - } - - public boolean isSampleRowExists() throws WaoException { - return getSampleRow() != null; - } - // public GenericSelectModel<Profession> getProfessionSelectModel() throws WaoException { // if (professionSelectModel == null) { // List<Profession> professions = serviceReferential.getProfessions(); @@ -398,37 +373,31 @@ // return professionSelectModel; // } - public boolean isFiltersHidden() { - return filtersHidden; - } + /**************************** FILTERS *************************************/ - public String getHiddenStyle() { - return isFiltersHidden() ? "hidden" : ""; + public boolean isFiltersVisible() { + return filterComponent.getFiltersVisible(); } - Block onActionFromShowFilters() { - filtersHidden = false; - return filtersZone.getBody(); - } + Object onActionFromShowFilters() { - Block onActionFromHideFilters() { - filtersHidden = true; - return filtersZone.getBody(); - } + filterComponent.switchFiltersVisible(); - public String[] onProvideCompletionsFromShipOwnerName(String input) { - List<String> results = serviceBoat.getShipOwnerNamesContains(input); - return results.toArray(new String[results.size()]); + if (isFiltersVisible()) { + return filterComponent; + } else { + return filterComponent.getFiltersZone(); + } } /** * EVENT_SELECTED :: reset submit button for filtersForm. Reset filters and sampleRow from context. */ - void onSelectedFromReset() { +// void onSelectedFromReset() { // Suppress persistant boat filter and sampleRowId in url context. - boatFilter = null; - sampleRowContextId = null; - } +// boatFilter = null; +// sampleRowContextId = null; +// } /** * EVENT_SELECTED :: search sumit button for filtersForm. Get profession from selectModel to add it in filters. @@ -437,22 +406,22 @@ * @throws WaoException for business errors * @see AbstractFilteredPage#onSelectedFromSearch() */ - @Override - public void onSelectedFromSearch() throws WaoException { - super.onSelectedFromSearch(); - if (log.isDebugEnabled()) { - log.debug("FILTER : facadeName=" + boatFilter.getFacadeName()); - log.debug("FILTER : sectorName=" + boatFilter.getSectorName()); - log.debug("FILTER : sampleRow=" + boatFilter.getSampleRow()); -// log.debug("FILTER : profession=" + boatFilter.getProfession()); - log.debug("FILTER : boatName=" + boatFilter.getBoatName()); - log.debug("FILTER : boatImmatriculation=" + boatFilter.getBoatImmatriculation()); - log.debug("FILTER : boatDistrictCode=" + boatFilter.getBoatDistrictCode()); - log.debug("FILTER : company=" + boatFilter.getCompany()); - } +// @Override +// public void onSelectedFromSearch() throws WaoException { +// super.onSelectedFromSearch(); +// if (log.isDebugEnabled()) { +// log.debug("FILTER : facadeName=" + boatFilter.getFacadeName()); +// log.debug("FILTER : sectorName=" + boatFilter.getSectorName()); +// log.debug("FILTER : sampleRow=" + boatFilter.getSampleRow()); +//// log.debug("FILTER : profession=" + boatFilter.getProfession()); +// log.debug("FILTER : boatName=" + boatFilter.getBoatName()); +// log.debug("FILTER : boatImmatriculation=" + boatFilter.getBoatImmatriculation()); +// log.debug("FILTER : boatDistrictCode=" + boatFilter.getBoatDistrictCode()); +// log.debug("FILTER : company=" + boatFilter.getCompany()); +// } // Profession profession = getProfessionSelectModel().findObject(professionId); // boatFilter.setProfession(profession); - } +// } /** * EVENT_SUCCESS :: for filtersForm. Reset persitant data to have new data using filters selected. @@ -460,23 +429,23 @@ * @return the filtersZone if it's a refresh data for select, or the page otherwise * @throws WaoException for business errors */ - Object onSuccessFromFiltersForm() throws WaoException { - if (isEdited()) { - return filtersZone.getBody(); - } - // Suppress persistant boats list to get new one with filter - boats = null; - // Suppress persistant immatriculation for boat selected - boatSelectedImmatriculation = null; - // Suppress persistant boat informations for boat selected - companyBoatInfos = null; - return this; - } +// Object onSuccessFromFiltersForm() throws WaoException { +// if (isEdited()) { +// return filtersZone.getBody(); +// } +// // Suppress persistant boats list to get new one with filter +// boats = null; +// // Suppress persistant immatriculation for boat selected +// boatSelectedImmatriculation = null; +// // Suppress persistant boat informations for boat selected +// companyBoatInfos = null; +// return this; +// } /**************************** Boats List *****************************************/ /** DataSource containing the boats */ - @Persist +// @Persist private BoatDataSource boats; /** Current boat in the Grid */ @@ -533,7 +502,7 @@ } public boolean canCreateNewContactFromList() throws WaoException { - if (!user.isAdmin() && !user.isProfessional() && !user.isReadOnly() && isSampleRowExists()) { + if (!user.isAdmin() && !user.isProfessional() && !user.isReadOnly() && getFilterManager().isSampleRowExists()) { return boat.canCreateContact(user.getProfile().getObsProgram(), user.getCompany()); } return false; @@ -792,19 +761,19 @@ getCompanyBoatInfos(); return boatInfosZone.getBody(); } +// +// Block onActionFromEditBoatInfos() throws WaoException { +// if (canEditBoatInfos()) { +// boatInfosEditable = true; +// // WARNING :: Reset sampleRow select for edition mode, no limit for +// // showing sampleRows instead of filters +// getFilter().setNbMonthFinishedFromToday(null); +// resetSampleRowSelect(); +// getFilter().setNbMonthFinishedFromToday(-1); +// } +// return boatInfosZone.getBody(); +// } - Block onActionFromEditBoatInfos() throws WaoException { - if (canEditBoatInfos()) { - boatInfosEditable = true; - // WARNING :: Reset sampleRow select for edition mode, no limit for - // showing sampleRows instead of filters - getFilter().setNbMonthFinishedFromToday(null); - resetSampleRowSelect(); - getFilter().setNbMonthFinishedFromToday(-1); - } - return boatInfosZone.getBody(); - } - Block onActionFromCancelEditBoatInfos() throws WaoException { /*if (propertyChange.isChanged()) { if (log.isDebugEnabled()) { @@ -858,7 +827,7 @@ Object onActionFromAddNewContactFromBoat(int boatImmatriculation) throws WaoException { // Get selected sampleRow - sampleRow = getSampleRow(); + SampleRow sampleRow = getFilterManager().getSampleRow(); // Get boat from list boat = getBoats().get(boatImmatriculation); //contacts.createNewContact(boat, sampleRow); @@ -870,7 +839,9 @@ Object onActionFromAddNewContactFromSampleRow(String sampleRowCode) throws WaoException { // Get sampleRow from elligibleBoat list ElligibleBoat elligible = getCompanyBoatInfos().getElligibleBoat(sampleRowCode); - sampleRow = elligible.getSampleRow(); + SampleRow sampleRow = elligible.getSampleRow(); + // Keep it in manager + getFilterManager().setSampleRow(sampleRow); Contact newContact = serviceContact.getNewContact(user, sampleRow, getBoatSelected()); // contacts.createNewContact(getBoatSelected(), sampleRow); contacts.setContactSelectedId(newContact.getTopiaId()); Added: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/BoatFilterComponent.tml =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/BoatFilterComponent.tml (rev 0) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/BoatFilterComponent.tml 2011-04-06 14:09:38 UTC (rev 1143) @@ -0,0 +1,125 @@ +<!-- + #%L + Wao :: Web Interface + + $Id$ + $HeadURL$ + %% + Copyright (C) 2009 - 2011 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% + --> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> + <div t:type="zone" t:id="filtersZone" class="so-filters" t:visible="prop:filtersVisible" id="so-filters-form"> + <t:feedback t:id="filterFeedback" /> + + <form t:type="form" t:id="filtersForm" t:zone="so-filters-form" action="post"> + <t:errors /> + <div class="t-beaneditor"> + <div> + <!-- Sampling filter --> + <div style="float: left; margin-right: 15px;"> + <label for="sampleRow">${message:wao.ui.field.SampleRow.code} :</label> + <!--select t:type="select" t:id="sampleRow" t:disabled="sampleRowExists" t:model="sampleRowSelectModel" value="sampleRowId" /--> + <t:topiaEntitySelector t:id="sampleRow" + t:multiple="true" + t:clazzName="SampleRow" + t:labelPropertyName="code" + t:values="possibleValuesForFilter.sampleRowsAsList" + t:selectedValues="filter.sampleRows" + size="6"/> + <!--t:disabled="sampleRowExists" --> + + </div> + <label for="facadeName">${message:wao.ui.field.FishingZone.facadeName} :</label> + <t:simpleSelector t:id="facadeName" + t:values="possibleValuesForFilter.facadeNamesAsList" + t:selectedValue="filter.facadeName"/> + <!--select t:type="select" + t:id="facadeName" + t:model="facadeSelectModel" + value="filter.facadeName" /--> + + <!--input t:type="submit" + class="ico22px refresh" + t:id="refreshByFacade" + value="Refresh" + title="${message:wao.ui.filters.refresh}"/--> + + <label for="sectorName">${message:wao.ui.field.FishingZone.sectorName} :</label> + <t:simpleSelector t:id="sectorName" + t:values="possibleValuesForFilter.sectorsNamesAsList" + t:selectedValue="filter.sectorName"/> + <!--select t:type="select" + t:id="sectorName" + t:model="sectorSelectModel" + value="filter.sectorName" /--> + + <!--input t:type="submit" + class="ico22px refresh" + t:id="refreshBySector" + value="Refresh" + title="${message:wao.ui.filters.refresh}"/--> + + </div><p> </p> + <div> + <!-- Boat filter --> + <label for="boatName">${message:wao.ui.field.Boat.name} :</label> + <input t:type="textfield" + t:id="boatName" + class="width150" + t:value="filter.boatName" + t:mixins="Autocomplete" /> + + <span style="margin-left: 15px;">${message:wao.ui.field.Boat.immatriculation} :</span> + <input t:type="textfield" + t:id="boatImmatriculation" + class="width50" + t:value="filter.boatImmatriculation" /> + + <span style="margin-left: 15px;">${message:wao.ui.field.BoatDistrict.code} :</span> + <input t:type="textfield" + t:id="boatDistrictCode" + class="width50" + t:value="filter.boatDistrictCode" /> + + <span style="margin-left: 15px;">${message:wao.ui.field.Boat.shipOwner} :</span> + <input t:type="textfield" + t:id="shipOwnerName" + class="width150" + t:value="filter.shipOwnerName" + t:mixins="Autocomplete" /> + </div> + <div class="t-beaneditor-row aright"> + <input t:type="submit" class="ico22px refresh" t:id="refresh" + value="${message:wao.ui.filters.refresh}" + title="${message:wao.ui.filters.refresh}"/> + <input t:type="submit" + class="ico search-32px" + t:id="search" + value="Search" + title="${message:wao.ui.action.runSearch}" /> + + <input t:type="submit" + class="ico undo" + t:id="reset" + value="Reset" + title="${message:wao.ui.action.resetFields}" /> + </div> + </div> + </form> + </div> +</html> \ No newline at end of file Modified: trunk/wao-ui/src/main/webapp/Boats.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Boats.tml 2011-04-06 13:02:27 UTC (rev 1142) +++ trunk/wao-ui/src/main/webapp/Boats.tml 2011-04-06 14:09:38 UTC (rev 1143) @@ -30,8 +30,25 @@ <t:layout t:pageTitle="Navires" t:contentId="so-boats" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> + <div> + <fieldset> + <legend>${message:wao.ui.misc.advancedSearch}</legend> + <div class="aright"> + <a t:type="actionlink" t:id="showFilters"> + <t:if t:test="filtersVisible"> + <img src="${asset:context:}/img/downarrow.png" title="${message:wao.ui.action.showFilters}" /> + <p:else> + <img src="${asset:context:}/img/uparrow.png" title="${message:wao.ui.action.hideFilters}" /> + </p:else> + </t:if> + </a> + </div> + <t:boatFilterComponent t:id="filterComponent" + t:filterManager="filterManager"/> + </fieldset> + </div> <!--t:filters t:title="Filtres de recherche" t:mainId="so-boats-filters"--> - <div t:type="zone" class="so-filters" t:id="filtersZone" id="so-boats-filters"> + <!--div t:type="zone" class="so-filters" t:id="filtersZone" id="so-boats-filters"> <fieldset> <legend>${message:wao.ui.filters.filters}</legend> <div class="aright"> @@ -52,7 +69,7 @@ <t:errors /> <div class="t-beaneditor"> <div> - <!-- Sampling filter --> + <! - - Sampling filter - - > <label for="facadeName">${message:wao.ui.field.FishingZone.facadeName} :</label> <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" value="filter.facadeName" /> <input t:type="submit" class="ico22px refresh" t:id="refreshByFacade" value="Refresh" @@ -65,7 +82,7 @@ <select t:type="select" t:id="sampleRow" t:disabled="sampleRowExists" t:model="sampleRowSelectModel" value="sampleRowId" /> </div><p> </p> <div> - <!-- Boat filter --> + <! - - Boat filter - - > <label for="boatName">${message:wao.ui.field.Boat.name} :</label> <input t:type="textfield" t:id="boatName" class="width150" t:value="boatFilter.boatName" t:mixins="Autocomplete" /> <span style="margin-left: 15px;">${message:wao.ui.field.Boat.immatriculation} :</span> @@ -83,7 +100,7 @@ </form> </div> </fieldset> - </div> + </div--> <div t:type="zone" t:id="boatsZone" t:update="show" class="clearfix">
participants (1)
-
sletellier@users.labs.libre-entreprise.org