This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See http://git.codelutin.com/echobase.git commit 0a55d6167f1ba35fea568974370a0c7521da87b5 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jan 21 17:16:03 2015 +0100 mis en place filtrage des indicateurs a exporter par voyage --- .../services/service/UserDbPersistenceService.java | 107 ++++++++++++++++++++- .../echobase/ui/actions/dbeditor/GetEntities.java | 4 +- .../echobase/ui/actions/exportCoser/Configure.java | 24 +---- .../GetAvailableIndicatorsForMission.java | 77 +++++++++++++++ .../main/resources/config/struts-exportCoser.xml | 6 ++ .../webapp/WEB-INF/jsp/exportCoser/configure.jsp | 7 ++ echobase-ui/src/main/webapp/js/gridHelper.js | 69 ++++++++++++- 7 files changed, 267 insertions(+), 27 deletions(-) diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java index 8498c6c..9d7f942 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java @@ -55,6 +55,7 @@ import fr.ifremer.echobase.entities.references.AcousticInstrument; import fr.ifremer.echobase.entities.references.AgeCategory; import fr.ifremer.echobase.entities.references.AreaOfOperation; import fr.ifremer.echobase.entities.references.CellType; +import fr.ifremer.echobase.entities.references.CellTypes; import fr.ifremer.echobase.entities.references.DataMetadata; import fr.ifremer.echobase.entities.references.Mission; import fr.ifremer.echobase.entities.references.SampleDataType; @@ -62,11 +63,14 @@ import fr.ifremer.echobase.entities.references.SampleType; import fr.ifremer.echobase.entities.references.SexCategory; import fr.ifremer.echobase.entities.references.SizeCategory; import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.entities.references.Species2; import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ValueParser; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; @@ -86,8 +90,10 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -249,7 +255,7 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { public Set<CellType> getRegionCellTypes() { List<CellType> cellTypes = persistenceContext.getCellTypeDao().findAll(); - return Sets.newHashSet(Iterables.filter(cellTypes, fr.ifremer.echobase.EchoBasePredicates.IS_REGION_CELL_TYPE)); + return Sets.newHashSet(Iterables.filter(cellTypes, CellTypes.IS_REGION_CELL_TYPE)); } public CellType getCellType(String id) { @@ -875,6 +881,103 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { } + public static class RegionIndicators { + + final List<DataMetadata> communityDataMetadatasList; + + final List<DataMetadata> populationDataMetadatasList; + + public RegionIndicators(List<DataMetadata> communityDataMetadatasList, List<DataMetadata> populationDataMetadatasList) { + this.communityDataMetadatasList = communityDataMetadatasList; + this.populationDataMetadatasList = populationDataMetadatasList; + } + + public List<DataMetadata> getCommunityDataMetadatasList() { + return communityDataMetadatasList; + } + + public List<DataMetadata> getPopulationDataMetadatasList() { + return populationDataMetadatasList; + } + + } + + /** Logger. */ + private static final Log log = LogFactory.getLog(UserDbPersistenceService.class); + + public RegionIndicators getRegionIndicators(String missionId, List<DataMetadata> dataMetadatas) { + + if (log.isInfoEnabled()) { + for (DataMetadata dataMetadata : dataMetadatas) { + log.info("Possible indicator: " + dataMetadata.getName()); + } + } + + Predicate<Species> communityIndicatorSpeciesPredicate = Species2.newCommunityIndicatorSpeciesPredicate(); + Predicate<Species> populationIndicatorSpeciesPredicate = Species2.newPopulationIndicatorSpeciesPredicate(); + + Set<DataMetadata> communityDataMetadatasSet = new HashSet<>(); + Set<DataMetadata> populationDataMetadatasSet = new HashSet<>(); + + Mission mission = getMission(missionId); + List<Voyage> voyagesForMission = getVoyagesForMission(mission); + + for (Voyage voyage : voyagesForMission) { + + if (log.isInfoEnabled()) { + log.info("Scan voyage: " + voyage.getName()); + } + + for (Cell cell : voyage.getRegionCells()) { + + for (Result result : cell.getResult()) { + + Species species = result.getCategory().getSpeciesCategory().getSpecies(); + + if (communityIndicatorSpeciesPredicate.apply(species)) { + + communityDataMetadatasSet.add(result.getDataMetadata()); + + } else if (populationIndicatorSpeciesPredicate.apply(species)) { + + populationDataMetadatasSet.add(result.getDataMetadata()); + + } + + } + } + } + + List<DataMetadata> communityDataMetadatasList = new ArrayList<>(communityDataMetadatasSet); + if (log.isInfoEnabled()) { + for (DataMetadata dataMetadata : communityDataMetadatasList) { + boolean willUse = dataMetadatas.contains(dataMetadata); + if (willUse) { + log.info("Community indicator accepted: " + dataMetadata.getName()); + } else { + log.info("Community indicator rejected: " + dataMetadata.getName()); + } + } + } + communityDataMetadatasList.retainAll(dataMetadatas); + + List<DataMetadata> populationDataMetadatasList = new ArrayList<>(populationDataMetadatasSet); + if (log.isInfoEnabled()) { + for (DataMetadata dataMetadata : populationDataMetadatasList) { + boolean willUse = dataMetadatas.contains(dataMetadata); + if (willUse) { + log.info("Population indicator accepted: " + dataMetadata.getName()); + } else { + log.info("Population indicator rejected: " + dataMetadata.getName()); + } + } + } + populationDataMetadatasList.retainAll(dataMetadatas); + + return new RegionIndicators(communityDataMetadatasList, populationDataMetadatasList); + + } + private static class CountTableRows extends TopiaSqlQuery<Long> { public final String tableName; @@ -885,7 +988,7 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { @Override public PreparedStatement prepareQuery(Connection connection) throws SQLException { - String hql = "SELECT count(*) FROM "+tableName; + String hql = "SELECT count(*) FROM " + tableName; PreparedStatement result = connection.prepareStatement(hql); return result; } diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java index 7702e6f..bf3b693 100644 --- a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java +++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java @@ -24,9 +24,9 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; -import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.ImportLogs; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.services.service.DbEditorService; @@ -146,7 +146,7 @@ public class GetEntities extends AbstractJSONPaginedAction { Multimap<String, ImportLog> importLogsByVoyage = Multimaps.index( userDbPersistenceService.getImportLogs(), - EchoBaseFunctions.IMPORT_LOG_VOYAGE_ID); + ImportLogs.IMPORT_LOG_VOYAGE_ID); for (Map row : datas) { diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportCoser/Configure.java b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportCoser/Configure.java index 286046d..a9d37c0 100644 --- a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportCoser/Configure.java +++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportCoser/Configure.java @@ -23,7 +23,6 @@ package fr.ifremer.echobase.ui.actions.exportCoser; import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseTechnicalException; -import fr.ifremer.echobase.entities.references.DataMetadata; import fr.ifremer.echobase.entities.references.Mission; import fr.ifremer.echobase.persistence.JdbcConfiguration; import fr.ifremer.echobase.services.service.CoserApiService; @@ -39,9 +38,8 @@ import org.nuiton.util.FileUtil; import javax.inject.Inject; import java.io.File; import java.io.IOException; -import java.util.List; +import java.util.Collections; import java.util.Map; -import java.util.Set; /** * Created on 3/1/14. @@ -65,16 +63,6 @@ public class Configure extends AbstractConfigureAction<ExportCoserConfiguration> protected Map<String, String> missions; /** - * Universe of population indicators. - */ - protected Map<String, String> populationIndicators; - - /** - * Universe of community indicators. - */ - protected Map<String, String> communityIndicators; - - /** * Universe of facades (coming from Coser). */ protected Map<String, String> facades; @@ -107,11 +95,11 @@ public class Configure extends AbstractConfigureAction<ExportCoserConfiguration> } public Map<String, String> getPopulationIndicators() { - return populationIndicators; + return Collections.emptyMap(); } public Map<String, String> getCommunityIndicators() { - return communityIndicators; + return Collections.emptyMap(); } public boolean isCoserUnreachable() { @@ -181,11 +169,5 @@ public class Configure extends AbstractConfigureAction<ExportCoserConfiguration> zones = Maps.newHashMap(); } - // Get indicators names from Coser - Set<String> indicatorNames = coserApiService.getIndicators(); - - List<DataMetadata> dataMetadatas = userDbPersistenceService.getDataMetadatasInName(indicatorNames); - populationIndicators = decoratorService.sortAndDecorate(dataMetadatas, null); - communityIndicators = decoratorService.sortAndDecorate(dataMetadatas, null); } } diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportCoser/GetAvailableIndicatorsForMission.java b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportCoser/GetAvailableIndicatorsForMission.java new file mode 100644 index 0000000..0458637 --- /dev/null +++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportCoser/GetAvailableIndicatorsForMission.java @@ -0,0 +1,77 @@ +package fr.ifremer.echobase.ui.actions.exportCoser; + +import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.services.service.CoserApiService; +import fr.ifremer.echobase.services.service.DecoratorService; +import fr.ifremer.echobase.services.service.UserDbPersistenceService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.lang3.StringUtils; + +import javax.inject.Inject; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Created on 1/21/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.9 + */ +public class GetAvailableIndicatorsForMission extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + @Inject + protected transient UserDbPersistenceService userDbPersistenceService; + + @Inject + private transient CoserApiService coserApiService; + + @Inject + protected transient DecoratorService decoratorService; + + protected Map<String, String> communityIndicators; + + protected Map<String, String> populationIndicators; + + protected String missionId; + + public void setMissionId(String missionId) { + this.missionId = missionId; + } + + public Map<String, String> getCommunityIndicators() { + return communityIndicators; + } + + public Map<String, String> getPopulationIndicators() { + return populationIndicators; + } + + @Override + public String execute() throws Exception { + + if (StringUtils.isBlank(missionId)) { + + this.communityIndicators = Collections.emptyMap(); + this.populationIndicators = Collections.emptyMap(); + + } else { + + Set<String> indicatorNames = coserApiService.getIndicators(); + + List<DataMetadata> dataMetadatas = userDbPersistenceService.getDataMetadatasInName(indicatorNames); + + UserDbPersistenceService.RegionIndicators regionIndicators = userDbPersistenceService.getRegionIndicators(missionId, dataMetadatas); + + this.communityIndicators = decoratorService.sortAndDecorate(regionIndicators.getCommunityDataMetadatasList(), null); + this.populationIndicators = decoratorService.sortAndDecorate(regionIndicators.getPopulationDataMetadatasList(), null); + + } + + return super.execute(); + + } +} \ No newline at end of file diff --git a/echobase-ui/src/main/resources/config/struts-exportCoser.xml b/echobase-ui/src/main/resources/config/struts-exportCoser.xml index 6307d95..ee92572 100644 --- a/echobase-ui/src/main/resources/config/struts-exportCoser.xml +++ b/echobase-ui/src/main/resources/config/struts-exportCoser.xml @@ -77,6 +77,12 @@ <result type="json"/> </action> + <!-- Get available indicators for a given mission --> + <action name="getAvailableIndicatorsForMission" + class="fr.ifremer.echobase.ui.actions.exportCoser.GetAvailableIndicatorsForMission"> + <result type="json"/> + </action> + </package> </struts> diff --git a/echobase-ui/src/main/webapp/WEB-INF/jsp/exportCoser/configure.jsp b/echobase-ui/src/main/webapp/WEB-INF/jsp/exportCoser/configure.jsp index 3b08ed7..44b9cc3 100644 --- a/echobase-ui/src/main/webapp/WEB-INF/jsp/exportCoser/configure.jsp +++ b/echobase-ui/src/main/webapp/WEB-INF/jsp/exportCoser/configure.jsp @@ -62,6 +62,13 @@ '<s:property value="model.zone"/>' ); + $.autoSelectRegionIndicators( + $('#missionField'), + $('#communityIndicator'), + $('#populationIndicator'), + '<s:url action="getAvailableIndicatorsForMission" namespace="/exportCoser"/>', + '<s:property value="model.missionId"/>'); + var communityChangefunction = function () { changeExtractIndicator('#extractCommunityIndicator', 'communityIndicator'); }; $('#extractCommunityIndicator').change(communityChangefunction); communityChangefunction(); diff --git a/echobase-ui/src/main/webapp/js/gridHelper.js b/echobase-ui/src/main/webapp/js/gridHelper.js index 2afa7bd..55a8468 100644 --- a/echobase-ui/src/main/webapp/js/gridHelper.js +++ b/echobase-ui/src/main/webapp/js/gridHelper.js @@ -148,8 +148,35 @@ // call url to obtain datas to inject in target select box jQuery.getJSON(url, params, function (result) { + $.fillSelectBox(result, jsonTarget, target, true, callback); + + //// will contains selectBox html code + //var html = "<option/>"; + // + //// iterate on found datas (each data gives a select option) + //$.each(result[jsonTarget], function (propertyName, value) { + // html += '<option value="' + propertyName + '">' + value + '</option>' + //}); + // + //// change the target html code + //target.html(html); + // + //// calback + //if (callback) { + // callback(); + //} + }); + }, + + fillSelectBox: function (result, jsonTarget, target,addEmptyEntry, callback) { + // will contains selectBox html code - var html = "<option/>"; + var html = ""; + + if (addEmptyEntry) { + + html += "<option/>"; + } // iterate on found datas (each data gives a select option) $.each(result[jsonTarget], function (propertyName, value) { @@ -163,7 +190,6 @@ if (callback) { callback(); } - }); }, // Ajoute les classes even et odd à tous les tableaux de la page @@ -267,6 +293,39 @@ } ); } + }, + // auto-selection des indices (pour une mission donnee) + autoSelectRegionIndicators: function (missionSelectBox, communityIndicatorSelectBox, populationIndicatorSelectBox, getUrl, missionId) { + + missionSelectBox.change({communityIndicatorSelectBox: communityIndicatorSelectBox, + populationIndicatorSelectBox: populationIndicatorSelectBox, + getUrl: getUrl}, function (event) { + + // call url to obtain datas to inject in target select box + jQuery.getJSON(event.data.getUrl, {missionId: this.value}, function (result) { + + + $.fillSelectBox(result, 'communityIndicators', event.data.communityIndicatorSelectBox, false); + $.fillSelectBox(result, 'populationIndicators', event.data.populationIndicatorSelectBox, false); + + }); + + }); + + if (missionId) { + + missionSelectBox.change(missionId); + + // call url to obtain datas to inject in target select box + jQuery.getJSON(event.data.getUrl, event.data, function (result) { + + + $.fillSelectBox(result, 'communityIndicator', event.data.communityIndicatorSelectBox); + $.fillSelectBox(result, 'populationIndicator', event.data.populationIndicatorSelectBox); + + }); + + } } }); @@ -303,6 +362,9 @@ updateSelectBoxContent: function (url, params, jsonTarget, target, callback) { return $(document).updateSelectBoxContent(url, params, jsonTarget, target, callback); }, + fillSelectBox: function (result, jsonTarget, target, callback) { + return $(document).fillSelectBox(result, jsonTarget, target, callback); + }, addEvenAndOddClasses: function (gridId) { return $(document).addEvenAndOddClasses(gridId); }, @@ -314,6 +376,9 @@ }, autoSelectZones: function (facadeSelectBox, zoneSelectBox, getUrl, facadeId, zoneId) { return $(document).autoSelectZones(facadeSelectBox, zoneSelectBox, getUrl, facadeId, zoneId); + }, + autoSelectRegionIndicators: function (missionSelectBox, communityIndicatorSelectBox, populationIndicatorSelectBox, getUrl, missionId) { + return $(document).autoSelectRegionIndicators(missionSelectBox, communityIndicatorSelectBox, populationIndicatorSelectBox, getUrl, missionId); } }); })(jQuery); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.