Coser-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- 1258 discussions
r1045 - in trunk: coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources/i18n coser-ui/src/main/java/fr/ifremer/coser/ui/option
by echatellier@users.forge.codelutin.com 14 Aug '12
by echatellier@users.forge.codelutin.com 14 Aug '12
14 Aug '12
Author: echatellier
Date: 2012-08-14 15:16:42 +0200 (Tue, 14 Aug 2012)
New Revision: 1045
Url: http://forge.codelutin.com/repositories/revision/coser/1045
Log:
fixes #1321: Ajouter un warning sur les tailles aberrantes par esp?\195?\168ce
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java
trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties
trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationView.jaxx
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2012-08-14 12:37:26 UTC (rev 1044)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2012-08-14 13:16:42 UTC (rev 1045)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -158,6 +158,14 @@
setOption(CoserBusinessOption.CONTROL_TYPE_FISH.key, controlTypeFish);
}
+ public void setStandardDeviationToAverage(int deviationToAverage) {
+ setOption(CoserBusinessOption.CONTROL_STANDARD_DEVIATION_TO_AVERAGE.key, String.valueOf(deviationToAverage));
+ }
+
+ public int getStandardDeviationToAverage() {
+ return getOptionAsInt(CoserBusinessOption.CONTROL_STANDARD_DEVIATION_TO_AVERAGE.key);
+ }
+
public double getSelectionOccurrenceFilter() {
double result = getOptionAsDouble(CoserBusinessOption.SELECTION_FILTER_OCCURRENCE.key);
return result;
@@ -229,95 +237,57 @@
return emails;
}
- public static enum CoserBusinessOption implements OptionDef {
+ public static enum CoserBusinessOption {
- DATABASE_DIRECTORY("coser.database.directory", _("coser.config.database.directory.description"), "${user.home}" + File.separator + "coser", String.class, false, false),
- PROJECTS_DIRECTORY("coser.projects.directory", _("coser.config.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "projects", String.class, false, false),
- VALIDATOR_DIRECTORY("coser.validator.directory", _("coser.config.validator.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "validators", String.class, false, false),
+ DATABASE_DIRECTORY("coser.database.directory", _("coser.config.database.directory.description"), "${user.home}" + File.separator + "coser"),
+ PROJECTS_DIRECTORY("coser.projects.directory", _("coser.config.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "projects"),
+ VALIDATOR_DIRECTORY("coser.validator.directory", _("coser.config.validator.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "validators"),
- SMTP_HOST("coser.smtp.host", _("coser.config.smtp.host.description"), "smtp", String.class, false, false),
- LOCALE("coser.locale", _("coser.config.locale.description"), Locale.FRANCE.toString(), Locale.class, false, false),
+ SMTP_HOST("coser.smtp.host", _("coser.config.smtp.host.description"), "smtp"),
+ LOCALE("coser.locale", _("coser.config.locale.description"), Locale.FRANCE.toString()),
- REFERENCE_SPECIES("coser.reference.species", _("coser.config.reference.species.description"), "", String.class, false, false),
- REFERENCE_TYPE_ESPECES("coser.reference.typeSpecies", _("coser.config.reference.typeSpecies.description"), "", String.class, false, false),
+ REFERENCE_SPECIES("coser.reference.species", _("coser.config.reference.species.description"), ""),
+ REFERENCE_TYPE_ESPECES("coser.reference.typeSpecies", _("coser.config.reference.typeSpecies.description"), ""),
- CONTROL_NOBSMIN("coser.control.nobsmin", _("coser.config.control.nobsmin.description"), "1.0", Double.class, false, false),
- CONTROL_DIFF_CATCH_LENGTH("coser.control.diffcatchlength", _("coser.config.control.diffcatchlength.description"), "5.0", Double.class, false, false),
- CONTROL_TYPE_FISH("coser.control.typeFish", _("coser.config.control.typeFish.description"), "Pisces + Agnatha", String.class, false, false),
- SELECTION_FILTER_OCCURRENCE("coser.selection.occurrenceFilter", _("coser.config.selection.occurrenceFilter.description"), "5.0", Double.class, false, false),
- SELECTION_FILTER_DENSITY("coser.selection.densityFilter", _("coser.config.selection.densityFilter.description"), "5.0", Double.class, false, false),
+ CONTROL_NOBSMIN("coser.control.nobsmin", _("coser.config.control.nobsmin.description"), "1.0"),
+ CONTROL_DIFF_CATCH_LENGTH("coser.control.diffcatchlength", _("coser.config.control.diffcatchlength.description"), "5.0"),
+ CONTROL_TYPE_FISH("coser.control.typeFish", _("coser.config.control.typeFish.description"), "Pisces + Agnatha"),
+ CONTROL_STANDARD_DEVIATION_TO_AVERAGE("coser.control.standarddeviationtoaverage", _("coser.config.control.standarddeviationtoaverage.description"), "3"),
+ SELECTION_FILTER_OCCURRENCE("coser.selection.occurrenceFilter", _("coser.config.selection.occurrenceFilter.description"), "5.0"),
+ SELECTION_FILTER_DENSITY("coser.selection.densityFilter", _("coser.config.selection.densityFilter.description"), "5.0"),
/** Client side. */
- WEB_FRONT_END("coser.web.frontend", _("coser.config.web.frontend.description"), "http://www.ifremer.fr/SIH-indices-campagnes", String.class, false, false),
- WEB_UPLOAD_URL("coser.web.uploadurl", _("coser.config.web.uploadurl.description"), "${" + WEB_FRONT_END.key + "}/upload-result.action", String.class, false, false),
+ WEB_FRONT_END("coser.web.frontend", _("coser.config.web.frontend.description"), "http://www.ifremer.fr/SIH-indices-campagnes"),
+ WEB_UPLOAD_URL("coser.web.uploadurl", _("coser.config.web.uploadurl.description"), "${" + WEB_FRONT_END.key + "}/upload-result.action"),
/** Server side. */
- WEB_PROPERTIES_FILE("coser.web.properties.file", _("coser.config.web.properties.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "web.properties", String.class, false, false),
- WEB_INDICATORS_PROJECTS_DIRECTORY("coser.web.indicators.projects.directory", _("coser.config.web.indicators.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicatorsprojects", String.class, false, false),
- WEB_MAPS_PROJECTS_DIRECTORY("coser.web.maps.projects.directory", _("coser.config.web.maps.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webmapsprojects", String.class, false, false),
- WEB_INDICATORS("coser.web.indicators.file", _("coser.config.web.indicators.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicators.csv", String.class, false, false),
- WEB_ZONES("coser.web.zones.file", _("coser.config.web.zones.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webzones.csv", String.class, false, false),
- WEB_PUBLICATION_EMAIL("coser.web.newresult.emails", _("coser.config.web.newresult.emails.description"), null, String.class, false, false);
+ WEB_PROPERTIES_FILE("coser.web.properties.file", _("coser.config.web.properties.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "web.properties"),
+ WEB_INDICATORS_PROJECTS_DIRECTORY("coser.web.indicators.projects.directory", _("coser.config.web.indicators.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicatorsprojects"),
+ WEB_MAPS_PROJECTS_DIRECTORY("coser.web.maps.projects.directory", _("coser.config.web.maps.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webmapsprojects"),
+ WEB_INDICATORS("coser.web.indicators.file", _("coser.config.web.indicators.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicators.csv"),
+ WEB_ZONES("coser.web.zones.file", _("coser.config.web.zones.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webzones.csv"),
+ WEB_PUBLICATION_EMAIL("coser.web.newresult.emails", _("coser.config.web.newresult.emails.description"), null);
protected String key;
protected String description;
protected String defaultValue;
- protected Class<?> type;
- protected boolean isTransient;
- protected boolean isFinal;
- private CoserBusinessOption(String key, String description, String defaultValue, Class<?> type, boolean isTransient, boolean isFinal) {
+ private CoserBusinessOption(String key, String description, String defaultValue) {
this.key = key;
this.description = description;
this.defaultValue = defaultValue;
- this.type = type;
- this.isTransient = isTransient;
- this.isFinal = isFinal;
}
- @Override
- public boolean isFinal() {
- return isFinal;
- }
-
- @Override
- public boolean isTransient() {
- return isTransient;
- }
-
- @Override
public String getDefaultValue() {
return defaultValue;
}
- @Override
public String getDescription() {
return description;
}
- @Override
public String getKey() {
return key;
}
-
- @Override
- public Class<?> getType() {
- return type;
- }
-
- @Override
- public void setDefaultValue(String defaultValue) {
- this.defaultValue = defaultValue;
- }
-
- @Override
- public void setTransient(boolean isTransient) {
- this.isTransient = isTransient;
- }
-
- @Override
- public void setFinal(boolean isFinal) {
- this.isFinal = isFinal;
- }
}
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-08-14 12:37:26 UTC (rev 1044)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-08-14 13:16:42 UTC (rev 1045)
@@ -967,7 +967,7 @@
log.debug(String.format("Species %s, avg=%f, deviation=%f, value=%f", species, avg, deviation, nombre));
}
- if (Math.abs(nombre - avg) > deviation * 3) {
+ if (Math.abs(nombre - avg) > deviation * config.getStandardDeviationToAverage()) {
String lineNumber = tuple[AbstractDataEntity.INDEX_LINE];
ControlError error = new ControlError();
Modified: trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties
===================================================================
--- trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2012-08-14 12:37:26 UTC (rev 1044)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2012-08-14 13:16:42 UTC (rev 1045)
@@ -142,6 +142,7 @@
coser.business.uploadresult.sendzip=Sending zip archive…
coser.config.control.diffcatchlength.description=Percentage difference allowed between catch and length (in percent, for example 5% set 5.0)
coser.config.control.nobsmin.description=Minimal observation number
+coser.config.control.standarddeviationtoaverage.description=Length outliers (how many strandard deviation to average)
coser.config.control.typeFish.description=Fish species code type
coser.config.database.directory.description=Coser database directory (all Coser data)
coser.config.locale.description=Application's locale
Modified: trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties
===================================================================
--- trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2012-08-14 12:37:26 UTC (rev 1044)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2012-08-14 13:16:42 UTC (rev 1045)
@@ -142,6 +142,7 @@
coser.business.uploadresult.sendzip=Envoi de l'archive zip…
coser.config.control.diffcatchlength.description=Pourcentage d'écart toléré entre les captures et les tailles (en pourcent, par exemple pour 5% mettre 5.0)
coser.config.control.nobsmin.description=Nombre minimal d'observation
+coser.config.control.standarddeviationtoaverage.description=Tailles aberrantes (combien de fois l'écart type par rapport à la moyenne)
coser.config.control.typeFish.description=Nom du type d'espèces correspondant aux poissons
coser.config.database.directory.description=Emplacement du dossier de toutes les données relatives à Coser
coser.config.locale.description=Langue de l'application
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationHandler.java 2012-08-14 12:37:26 UTC (rev 1044)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationHandler.java 2012-08-14 13:16:42 UTC (rev 1045)
@@ -121,6 +121,13 @@
}
config.setControlTypeFish(configurationView.getControlTypeFishField().getText());
try {
+ config.setStandardDeviationToAverage(Integer.parseInt(configurationView.getControlStandardDeviationField().getText()));
+ } catch (NumberFormatException ex) {
+ if (log.isWarnEnabled()) {
+ log.warn("Can't parse number", ex);
+ }
+ }
+ try {
config.setSelectionDensityFilter(Double.parseDouble(configurationView.getSelectionFilterDensityField().getText()));
} catch (NumberFormatException ex) {
if (log.isWarnEnabled()) {
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationView.jaxx 2012-08-14 12:37:26 UTC (rev 1044)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationView.jaxx 2012-08-14 13:16:42 UTC (rev 1045)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric
+ Copyright (C) 2011 - 2012 Ifremer, Codelutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -136,6 +136,14 @@
</row>
<row>
<cell fill="horizontal">
+ <JLabel text="{CoserBusinessOption.CONTROL_STANDARD_DEVIATION_TO_AVERAGE.getDescription()}" />
+ </cell>
+ <cell fill="horizontal">
+ <JTextField id="controlStandardDeviationField" text="{String.valueOf(config.getStandardDeviationToAverage())}" />
+ </cell>
+ </row>
+ <row>
+ <cell fill="horizontal">
<JLabel text="{CoserBusinessOption.SELECTION_FILTER_OCCURRENCE.getDescription()}" />
</cell>
<cell fill="horizontal">
1
0
r1044 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui/selection/replay
by echatellier@users.forge.codelutin.com 14 Aug '12
by echatellier@users.forge.codelutin.com 14 Aug '12
14 Aug '12
Author: echatellier
Date: 2012-08-14 14:37:26 +0200 (Tue, 14 Aug 2012)
New Revision: 1044
Url: http://forge.codelutin.com/repositories/revision/coser/1044
Log:
refs #1331: Gestion du display esp?\195?\168ce dans l'etape 'rejouer une selection"
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/replay/SelectionReplayHandler.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-14 12:26:07 UTC (rev 1043)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-14 12:37:26 UTC (rev 1044)
@@ -602,6 +602,7 @@
for (String speciesCode : selection.getSelectedSpecies()) {
speciesBuilder.append(separator);
speciesBuilder.append(project.getDisplaySpeciesText(speciesCode));
+ separator = ",";
}
// partie resumé de selection
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/replay/SelectionReplayHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/replay/SelectionReplayHandler.java 2012-08-14 12:26:07 UTC (rev 1043)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/replay/SelectionReplayHandler.java 2012-08-14 12:37:26 UTC (rev 1044)
@@ -27,6 +27,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.SortedMap;
@@ -42,6 +43,7 @@
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserException;
+import fr.ifremer.coser.CoserUtils;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.bean.Selection;
import fr.ifremer.coser.command.Command;
@@ -49,6 +51,7 @@
import fr.ifremer.coser.services.ProjectService;
import fr.ifremer.coser.ui.CoserFrame;
import fr.ifremer.coser.ui.common.CommonHandler;
+import fr.ifremer.coser.ui.common.SpeciesListRenderer;
import fr.ifremer.coser.ui.util.CoserListSelectionModel;
/**
@@ -248,16 +251,26 @@
}
// init next step
+ LinkedHashMap<String, String> reftaxSpecies = project.getRefTaxSpeciesMap();
List<String> currentSpecies = projectService.getProjectSpecies(selection, project, null);
+ currentSpecies = CoserUtils.sortCollectionWithMapKeys(reftaxSpecies, currentSpecies);
+
view.getSelectedSpeciesListModel().setSpecies(currentSpecies);
+ view.getSelectedSpeciesList().setCellRenderer(new SpeciesListRenderer(reftaxSpecies));
((CoserListSelectionModel)view.getSelectedSpeciesList().getSelectionModel()).setSelectedObjects(replayedSelection.getSelectedSpecies());
// affichage d'un message si la selection de liste n'est pas
// cohérente
Collection<String> remaindSpecies = CollectionUtils.subtract(replayedSelection.getSelectedSpecies(), currentSpecies);
if (!remaindSpecies.isEmpty()) {
- String speciesAsString = StringUtils.join(remaindSpecies, ", ");
- String message = _("coser.ui.selection.replay.missingspecies", speciesAsString);
+ String separator = "";
+ StringBuilder speciesBuilder = new StringBuilder(256);
+ for (String species : remaindSpecies) {
+ speciesBuilder.append(separator);
+ speciesBuilder.append(project.getDisplaySpeciesText(species));
+ separator = ",";
+ }
+ String message = _("coser.ui.selection.replay.missingspecies", speciesBuilder.toString());
view.getMessageArea5().setText(message);
}
1
0
r1043 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources/i18n coser-ui/src/main/java/fr/ifremer/coser/ui/selection coser-ui/src/main/resources/i18n
by echatellier@users.forge.codelutin.com 14 Aug '12
by echatellier@users.forge.codelutin.com 14 Aug '12
14 Aug '12
Author: echatellier
Date: 2012-08-14 14:26:07 +0200 (Tue, 14 Aug 2012)
New Revision: 1043
Url: http://forge.codelutin.com/repositories/revision/coser/1043
Log:
fixes #1325: Pouvoir renommer une esp?\195?\168ce depuis l'interface de s?\195?\169lection
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties
trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesFusionDialog.jaxx
trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties
trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-14 09:26:57 UTC (rev 1042)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-14 12:26:07 UTC (rev 1043)
@@ -63,6 +63,7 @@
import org.apache.commons.collections.ListUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -2154,7 +2155,18 @@
while (itTuple.hasNext() && !result) {
String[] tuple = itTuple.next();
// "C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa"
- String specyCode = tuple[3];
+ String specyCode = null;
+ switch (project.getStorageSpeciesType()) {
+ case C_PERM:
+ specyCode = tuple[0];
+ break;
+ case C_Valide:
+ specyCode = tuple[3];
+ break;
+ case L_Valide:
+ specyCode = tuple[4];
+ break;
+ }
if (specyCode.equals(newSpeciesName)) {
result = true;
}
@@ -2178,9 +2190,19 @@
public Project mergeSpecies(Project project, Selection selection, String newSpeciesName, String comment, String... speciesNames) throws CoserBusinessException {
if (!isSpeciesNameExist(project, newSpeciesName)) {
- throw new CoserBusinessException(_("Species %s doesn't exist in referential", newSpeciesName));
+ throw new CoserBusinessException(_("Species %s doesn't exist in referential",
+ project.getDisplaySpeciesText(newSpeciesName)));
}
+ // check if new species name is not present in current selection
+ // species list (collision)
+ List<String> selectionSpecies = getProjectSpecies(selection, project, null);
+ if (selectionSpecies.contains(newSpeciesName) &&
+ !ArrayUtils.contains(speciesNames, newSpeciesName)) {
+ throw new CoserBusinessException(_("Species %s already exists in current selection",
+ project.getDisplaySpeciesText(newSpeciesName)));
+ }
+
MergeSpeciesCommand command = new MergeSpeciesCommand();
command.setNewSpecyName(newSpeciesName);
command.setSpeciesNames(speciesNames);
Modified: trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties
===================================================================
--- trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2012-08-14 09:26:57 UTC (rev 1042)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2012-08-14 12:26:07 UTC (rev 1043)
@@ -16,6 +16,7 @@
Project\ %s\ doesn't\ exists\ \!=
Selection\ %s\ already\ exists=
Selection\ %s\ doesn't\ exists\ \!=
+Species\ %s\ already\ exists\ in\ current\ selection=Species %s already exists in current selection.\nYou have to perform merge with this species.
Species\ %s\ doesn't\ exist\ in\ referential=
Wrong\ header\ detected\ in\ file\ %s.\ Found\ \:\ %s,\ expected\ %s=Wrong header detected in file %s.\n\nFound \:\n\t%s\nexpected\n\t%s
Wrong\ header\ detected\ in\ file\ %s.\ Found\ \:\ %s,\ expected\ %s\ or\ %s=Wrong header detected in file %s.\n\nFound \:\n\t%s\nexpected\n\t%s\nor\n\t%s
Modified: trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties
===================================================================
--- trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2012-08-14 09:26:57 UTC (rev 1042)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2012-08-14 12:26:07 UTC (rev 1043)
@@ -16,6 +16,7 @@
Project\ %s\ doesn't\ exists\ \!=Le projet %s n'existe pas \!
Selection\ %s\ already\ exists=La sélection %s existe déjà \!
Selection\ %s\ doesn't\ exists\ \!=La sélection %s n'existe pas \!
+Species\ %s\ already\ exists\ in\ current\ selection=L'espèce %s existe déjà dans la sélection.\nVous devez effectuer la fusion avec l'espèce déjà présente.
Species\ %s\ doesn't\ exist\ in\ referential=L'espèce %s n'existe pas dans le référentiel
Wrong\ header\ detected\ in\ file\ %s.\ Found\ \:\ %s,\ expected\ %s=Mauvais entête de fichier détecté dans\n%s. Corrigez les entêtes et relancez la création du projet.\n\nTrouvé \:\n\t%s\nAttendu \:\n\t%s.
Wrong\ header\ detected\ in\ file\ %s.\ Found\ \:\ %s,\ expected\ %s\ or\ %s=Mauvais entête de fichier détecté dans %s. Corrigez les entêtes et relancez la création du projet.\n\nTrouvé \:\n\t%s\nAttendu \:\n\t%s\nou \:\n\t%s.
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-14 09:26:57 UTC (rev 1042)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-14 12:26:07 UTC (rev 1043)
@@ -56,6 +56,7 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.combobox.ListComboBoxModel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.nuiton.math.matrix.MatrixND;
@@ -653,7 +654,7 @@
// affiche le menu contextuel si au moins 2 especes selectionnées
int[] selectedRows = view.getFilteredSpeciesList().getSelectedIndices();
- if (selectedRows.length > 1) {
+ if (selectedRows.length > 0) {
// merge menu
JMenuItem fusionMenu = new JMenuItem(_("coser.ui.selection.speciesMenuFusion"));
fusionMenu.addActionListener(new ActionListener() {
@@ -663,9 +664,7 @@
}
});
popupMenu.add(fusionMenu);
- }
-
- if (selectedRows.length > 0) {
+
// graph
JMenuItem graphMenu = new JMenuItem(_("coser.ui.selection.details.displayDiffCatchLengthGraph"));
graphMenu.addActionListener(new ActionListener() {
@@ -688,8 +687,6 @@
});
popupMenu.add(selectAllMenu);
-
-
// unselect all menu
JMenuItem unselectAllMenu = new JMenuItem(_("coser.ui.common.unselectAll"));
unselectAllMenu.addActionListener(new ActionListener() {
@@ -761,17 +758,23 @@
*
* @param view parent view
*/
- protected void showSpeciesMergeDialog(SelectionDetailsView view) {
+ public void showSpeciesMergeDialog(SelectionDetailsView view) {
+ Project project = view.getContextValue(Project.class);
SpeciesFusionDialog speciesFusionDialog = new SpeciesFusionDialog(view);
speciesFusionDialog.setHandler(SelectionHandler.this);
- // pre fill new speci name with first selected species name
+ // fill species combo box with reftax species list
+ Map<String, String> reftaxSpecies = project.getRefTaxSpeciesMap();
+ ListComboBoxModel<String> speciesComboModel = new ListComboBoxModel<String>(new ArrayList<String>(reftaxSpecies.keySet()));
+ speciesFusionDialog.getSpeciesCombo().setModel(speciesComboModel);
+ speciesFusionDialog.getSpeciesCombo().setRenderer(new SpeciesListRenderer(reftaxSpecies));
+
+ // init selected element
String firstSelected = (String)view.getFilteredSpeciesList().getSelectedValue();
- speciesFusionDialog.getNewSpeciesNameField().setText(firstSelected);
+ speciesFusionDialog.getSpeciesCombo().setSelectedItem(firstSelected);
speciesFusionDialog.setLocationRelativeTo(view);
speciesFusionDialog.setVisible(true);
-
}
/**
@@ -1041,41 +1044,36 @@
// TODO echatellier 20101021 attention a ce que la selection
// ne change pas (la fenetre est modale pour l'instant)
- String newSpeciesName = view.getNewSpeciesNameField().getText();
+ String newSpeciesCode = (String)view.getSpeciesCombo().getSelectedItem();
String comment = view.getCommentField().getText();
Project project = view.getContextValue(Project.class);
Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
- boolean newSpeciesExist = projectService.isSpeciesNameExist(project, newSpeciesName);
- if (!newSpeciesExist) {
- JOptionPane.showMessageDialog(view, _("coser.ui.selection.invalidFusionName"),
- _("coser.ui.selection.fusionError"), JOptionPane.ERROR_MESSAGE);
- view.getNewSpeciesNameField().requestFocus();
+ SelectionDetailsView parent = view.getContextValue(SelectionDetailsView.class, JAXXUtil.PARENT);
+ Object[] selectedSpecies = parent.getFilteredSpeciesList().getSelectedValues();
+ String[] speciesCodes = new String[selectedSpecies.length];
+ for (int i = 0 ; i < selectedSpecies.length ; ++i) {
+ String singleSelectedSpecies = (String)selectedSpecies[i];
+ speciesCodes[i] = singleSelectedSpecies;
}
- else {
- SelectionDetailsView parent = view.getContextValue(SelectionDetailsView.class, JAXXUtil.PARENT);
- Object[] selectedSpecies = parent.getFilteredSpeciesList().getSelectedValues();
- String[] speciesNames = new String[selectedSpecies.length];
- for (int i = 0 ; i < selectedSpecies.length ; ++i) {
- String singleSelectedSpecies = (String)selectedSpecies[i];
- speciesNames[i] = singleSelectedSpecies;
- }
- try {
- projectService.mergeSpecies(project, selection, newSpeciesName, comment, speciesNames);
- }
- catch (CoserBusinessException ex) {
- throw new CoserException("Can't merge species", ex);
- }
+ try {
+ projectService.mergeSpecies(project, selection, newSpeciesCode, comment, speciesCodes);
updateSelectionSpecies(parent);
// supprime la selection apres fusion (demande utilisateur)
parent.getFilteredSpeciesListSelectionModel().clearSelection();
- view.dispose();
+
JOptionPane.showMessageDialog(view, _("coser.ui.selection.speciesMerged"),
_("coser.ui.selection.selectionTitle"), JOptionPane.INFORMATION_MESSAGE);
}
+ catch (CoserBusinessException ex) {
+ JOptionPane.showMessageDialog(view, ex.getMessage(),
+ _("coser.ui.selection.fusion.title"), JOptionPane.ERROR_MESSAGE);
+ }
+
+ view.dispose();
}
/**
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesFusionDialog.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesFusionDialog.jaxx 2012-08-14 09:26:57 UTC (rev 1042)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesFusionDialog.jaxx 2012-08-14 12:26:07 UTC (rev 1043)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric
+ Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -35,7 +35,7 @@
<JLabel text="coser.ui.selection.fusion.name" />
</cell>
<cell weightx="1" fill="horizontal">
- <JTextField id="newSpeciesNameField" />
+ <JComboBox id="speciesCombo" />
</cell>
</row>
<row>
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-14 09:26:57 UTC (rev 1042)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-14 12:26:07 UTC (rev 1043)
@@ -228,8 +228,6 @@
coser.ui.selection.fusion.description=Species merge. Fill new species name with name existing in referential.
coser.ui.selection.fusion.name=New name \:
coser.ui.selection.fusion.title=Merge
-coser.ui.selection.fusionError=Merge error
-coser.ui.selection.invalidFusionName=Selection fusion name not found in referential \!
coser.ui.selection.maturitySpecies=L4 \: Species with maturity (%d/%d)
coser.ui.selection.nonJustifiedMaturity=Maturity species list is not all selected.\nYou must justify this selection with a comment.
coser.ui.selection.nonJustifiedOccurenceDensity=Filtered list selection doesn't match filter selection.\nYou must justify this selection with a comment.
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-14 09:26:57 UTC (rev 1042)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-14 12:26:07 UTC (rev 1043)
@@ -228,8 +228,6 @@
coser.ui.selection.fusion.description=Fusion d'espèces. Veuillez renseigner un nouveau nom présent dans le référentiel.
coser.ui.selection.fusion.name=Nouveau nom \:
coser.ui.selection.fusion.title=Fusion
-coser.ui.selection.fusionError=Erreur de fusion
-coser.ui.selection.invalidFusionName=Le nom de fusion choisit n'est pas présent de le référentiel \!
coser.ui.selection.maturitySpecies=L4 \: Espèces avec maturité (%d/%d)
coser.ui.selection.nonJustifiedMaturity=La liste espèces avec maturité n'est pas entièrement sélectionnée.\nVous devez justifier cette sélection par un commentaire.
coser.ui.selection.nonJustifiedOccurenceDensity=La sélection de la liste filtrée ne correspond pas à la sélection opérée par le filtre.\nVous devez justifier cette sélection par un commentaire.
1
0
r1042 - in trunk: coser-business/src/main/java/fr/ifremer/coser/bean coser-business/src/main/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/project coser-ui/src/main/java/fr/ifremer/coser/ui/result coser-ui/src/main/java/fr/ifremer/coser/ui/selection coser-ui/src/main/resources/i18n
by echatellier@users.forge.codelutin.com 14 Aug '12
by echatellier@users.forge.codelutin.com 14 Aug '12
14 Aug '12
Author: echatellier
Date: 2012-08-14 11:26:57 +0200 (Tue, 14 Aug 2012)
New Revision: 1042
Url: http://forge.codelutin.com/repositories/revision/coser/1042
Log:
fixes #1327: Am?\195?\169liorer la gestion des ?\194?\171 autres fichiers ?\194?\187 lors de la modification
Added:
trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserExceptionHandler.java
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectOpenView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultTableModel.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionEditResultDialog.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties
trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -25,7 +25,9 @@
package fr.ifremer.coser.bean;
+import java.io.File;
import java.util.Date;
+import java.util.List;
import java.util.Properties;
/**
@@ -66,8 +68,8 @@
/** Utilisé seulement dans l'ui de visu des resultats (presence de carte ou non). */
protected boolean mapsAvailable;
- /** Utilisé seulement dans l'ui de visu des resultats (presence d'autres fichiers ou non). */
- protected boolean otherFilesAvailable;
+ /** Liste des nom de fichiers/dossier present dans other files */
+ protected List<File> otherFiles;
/** Result publiable. */
protected boolean publiableResult;
@@ -186,12 +188,12 @@
this.mapsAvailable = mapsAvailable;
}
- public boolean isOtherFilesAvailable() {
- return otherFilesAvailable;
+ public List<File> getOtherFiles() {
+ return otherFiles;
}
- public void setOtherFilesAvailable(boolean otherFilesAvailable) {
- this.otherFilesAvailable = otherFilesAvailable;
+ public void setOtherFiles(List<File> otherFiles) {
+ this.otherFiles = otherFiles;
}
public void setPubliableResult(boolean publiableResult) {
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -538,7 +538,13 @@
// other files dir
File othersDir = new File(resultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
- rsufiResult.setOtherFilesAvailable(othersDir.isDirectory());
+ List<File> otherFiles = new ArrayList<File>();
+ if (othersDir.isDirectory()) {
+ for (File file : othersDir.listFiles()) {
+ otherFiles.add(file);
+ }
+ }
+ rsufiResult.setOtherFiles(otherFiles);
}
}
}
@@ -1101,8 +1107,7 @@
// save it
if (rsufiResultDirectory.exists()) {
throw new CoserBusinessException(_("coser.business.result.rsufiResultAlreadyExists", rsufiResult.getName()));
- }
- else {
+ } else {
rsufiResultDirectory.mkdirs();
// ensure creation date (modifiable par l'ui)
@@ -1131,8 +1136,7 @@
for (File othersFile : othersFiles) {
if (othersFile.isDirectory()) {
FileUtils.copyDirectoryToDirectory(othersFile, otherFilesDirectory);
- }
- else {
+ } else {
FileUtils.copyFileToDirectory(othersFile, otherFilesDirectory);
}
}
@@ -1148,9 +1152,15 @@
File mapsDir = new File(rsufiResultDirectory, CoserConstants.STORAGE_MAPS_DIRECTORY);
rsufiResult.setMapsAvailable(mapsDir.isDirectory());
- // other files dir
+ // update other files list
File othersDir = new File(rsufiResultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
- rsufiResult.setOtherFilesAvailable(othersDir.isDirectory());
+ List<File> otherFiles = new ArrayList<File>();
+ if (othersDir.isDirectory()) {
+ for (File file : othersDir.listFiles()) {
+ otherFiles.add(file);
+ }
+ }
+ rsufiResult.setOtherFiles(otherFiles);
List<RSufiResult> results = selection.getRsufiResults();
results.add(rsufiResult);
@@ -1160,14 +1170,14 @@
}
/**
- * Save existing rsufi result (just save property file)
+ * Save existing rsufi result.
*
* @param project project
* @param selection selection
* @param rsufiResult new result to save
* @throws CoserBusinessException
*/
- public void saveRsufiResults(Project project, Selection selection, RSufiResult rsufiResult) throws CoserBusinessException {
+ public void editRsufiResults(Project project, Selection selection, RSufiResult rsufiResult, List<File> othersFile) throws CoserBusinessException {
File projectsDirectory = config.getProjectsDirectory();
File projectDirectory = new File(projectsDirectory, project.getName());
@@ -1175,13 +1185,45 @@
File selectionDirectory = new File(selectionsDirectory, selection.getName());
File resultsDirectory = new File(selectionDirectory, CoserConstants.STORAGE_RESULTS_DIRECTORY);
File rsufiResultDirectory = new File(resultsDirectory, rsufiResult.getName());
+ File otherFilesDirectory = new File(rsufiResultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
// property file
- saveRSufiResult(rsufiResultDirectory, rsufiResult);
+ try {
+ saveRSufiResult(rsufiResultDirectory, rsufiResult);
+
+ // remove some files
+ Collection<File> toDeletes = CollectionUtils.subtract(rsufiResult.getOtherFiles(), othersFile);
+ for (File toDelete : toDeletes) {
+ FileUtils.deleteQuietly(toDelete);
+ }
+ // copy new file
+ for (File otherFile : othersFile) {
+ // non modified result, skipping it
+ if (!otherFile.getAbsolutePath().startsWith(otherFilesDirectory.getAbsolutePath())) {
+ if (otherFile.isDirectory()) {
+ FileUtils.copyDirectoryToDirectory(otherFile, otherFilesDirectory);
+ } else {
+ FileUtils.copyFileToDirectory(otherFile, otherFilesDirectory);
+ }
+ }
+ }
+ // update other files list
+ File othersDir = new File(rsufiResultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
+ List<File> otherFiles = new ArrayList<File>();
+ if (othersDir.isDirectory()) {
+ for (File file : othersDir.listFiles()) {
+ otherFiles.add(file);
+ }
+ }
+ rsufiResult.setOtherFiles(otherFiles);
- List<RSufiResult> results = selection.getRsufiResults();
- // this way to fire change event (do not remove)
- selection.setRsufiResults(results);
+ List<RSufiResult> results = selection.getRsufiResults();
+ // this way to fire change event (do not remove)
+ selection.setRsufiResults(results);
+
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't edit result", ex);
+ }
}
/**
@@ -1205,7 +1247,7 @@
log.debug("Saving result properties file : " + propertiesFile);
}
} catch (IOException ex) {
- throw new CoserBusinessException("Can't save result properties file", ex);
+ throw new CoserBusinessException("Can't save result", ex);
} finally {
IOUtils.closeQuietly(outputStream);
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -25,7 +25,6 @@
package fr.ifremer.coser;
import java.io.File;
-import java.util.Map;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
@@ -42,14 +41,12 @@
import com.bbn.openmap.MapBean;
-import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.services.CommandService;
import fr.ifremer.coser.services.ControlService;
import fr.ifremer.coser.services.ProjectService;
import fr.ifremer.coser.services.PublicationService;
import fr.ifremer.coser.services.WebService;
import fr.ifremer.coser.ui.CoserFrame;
-import fr.ifremer.coser.ui.util.ErrorHelper;
/**
* Coser main class.
@@ -64,6 +61,8 @@
private static final Log log = LogFactory.getLog(Coser.class);
+ protected static CoserConfig coserConfig;
+
/**
* Coser main method.
*
@@ -72,7 +71,7 @@
public static void main(String... args) {
// init config
- final CoserConfig coserConfig = new CoserConfig();
+ coserConfig = new CoserConfig();
try {
coserConfig.parse(args);
} catch (ArgumentsParserException ex) {
@@ -87,15 +86,9 @@
// catch wall application exception
launch(coserConfig);
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
- public void uncaughtException(Thread t, Throwable ex) {
- if (log.isErrorEnabled()) {
- log.error("Global application exception", ex);
- }
- ErrorHelper errorHelper = new ErrorHelper(coserConfig);
- errorHelper.showErrorDialog(null, ex.getMessage(), ex);
- }
- });
+ // catch uncaught exceptions
+ Thread.setDefaultUncaughtExceptionHandler(new CoserExceptionHandler());
+ System.setProperty("sun.awt.exception.handler", CoserExceptionHandler.class.getName());
}
/**
Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserExceptionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserExceptionHandler.java (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserExceptionHandler.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -0,0 +1,65 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.coser;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import fr.ifremer.coser.ui.util.ErrorHelper;
+
+/**
+ * Coser global exception handler.
+ *
+ * Catch all application uncaught and display it in a custom JoptionPane
+ * or JXErrorPane.
+ *
+ * See http://stackoverflow.com/a/4448569/1165234 for details.
+ *
+ * @author echatellier
+ * @since 1.3
+ */
+public class CoserExceptionHandler implements UncaughtExceptionHandler {
+
+ private static final Log log = LogFactory.getLog(CoserExceptionHandler.class);
+
+ @Override
+ public void uncaughtException(Thread t, Throwable ex) {
+ handleException(t.getName(), ex);
+ }
+
+ public void handle(Throwable thrown) {
+ // for EDT exceptions
+ handleException(Thread.currentThread().getName(), thrown);
+ }
+
+ protected void handleException(String tname, Throwable ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Global application exception", ex);
+ }
+ ErrorHelper errorHelper = new ErrorHelper(Coser.coserConfig);
+ errorHelper.showErrorDialog(null, ex.getMessage(), ex);
+ }
+}
Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserExceptionHandler.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -427,8 +427,6 @@
setMainComponent(selectionView);
} catch (CoserBusinessException ex) {
- JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.selection.createError"),
- JOptionPane.ERROR_MESSAGE);
throw new CoserException("Can't create new selection", ex);
}
finally {
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectHandler.java 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectHandler.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -25,6 +25,7 @@
import static org.nuiton.i18n.I18n._;
+import java.awt.event.MouseEvent;
import java.io.File;
import java.util.HashMap;
import java.util.List;
@@ -307,7 +308,7 @@
*
* @param projectView view
*/
- public void loadProject(final ProjectOpenView projectView) {
+ public void loadProject(ProjectOpenView projectView) {
int selectedIndex = projectView.getProjectsList().getSelectedIndex();
String projectName = (String)projectView.getProjectsList().getModel().getElementAt(selectedIndex);
@@ -329,4 +330,20 @@
setDefaultCursor(projectView);
}
}
+
+ /**
+ * Reload project (name selected in ui).
+ *
+ * @param projectView view
+ * @param event mouse event
+ */
+ public void loadProjectOnDoubleClick(ProjectOpenView projectView, MouseEvent event) {
+
+ if (event.getButton() == MouseEvent.BUTTON1 && event.getClickCount() == 2) {
+ int selectedIndex = projectView.getProjectsList().getSelectedIndex();
+ if (selectedIndex >= 0) {
+ loadProject(projectView);
+ }
+ }
+ }
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectOpenView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectOpenView.jaxx 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectOpenView.jaxx 2012-08-14 09:26:57 UTC (rev 1042)
@@ -38,7 +38,8 @@
<cell fill="both" weightx="1">
<JScrollPane>
<JList id="projectsList" selectionMode="{javax.swing.ListSelectionModel.SINGLE_SELECTION}"
- model="{new fr.ifremer.coser.ui.project.ProjectNamesListModel(this)}" />
+ model="{new fr.ifremer.coser.ui.project.ProjectNamesListModel(this)}"
+ onMouseClicked="getHandler().loadProjectOnDoubleClick(this, event)" />
</JScrollPane>
</cell>
</row>
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
@@ -55,23 +55,29 @@
public List<File> getOtherFiles() {
return otherFiles;
}
+
+ public void setOtherFiles(List<File> otherFiles) {
+ this.otherFiles = otherFiles;
+ fireContentsChanged(this, 0, otherFiles.size() - 1);
+ }
public void add(File file) {
otherFiles.add(file);
fireIntervalAdded(this, otherFiles.size() - 1, otherFiles.size() - 1);
}
- /*
- * @see javax.swing.ListModel#getSize()
- */
+ public void remove(File file) {
+ int index = otherFiles.indexOf(file);
+ if (otherFiles.remove(file)) {
+ fireIntervalRemoved(this, index, index);
+ }
+ }
+
@Override
public int getSize() {
return otherFiles.size();
}
- /*
- * @see javax.swing.ListModel#getElementAt(int)
- */
@Override
public Object getElementAt(int index) {
return otherFiles.get(index);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultTableModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultTableModel.java 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultTableModel.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -131,7 +131,7 @@
result = rsufiResult.isMapsAvailable();
break;
case 6:
- result = rsufiResult.isOtherFilesAvailable();
+ result = !rsufiResult.getOtherFiles().isEmpty();
break;
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx 2012-08-14 09:26:57 UTC (rev 1042)
@@ -149,7 +149,7 @@
</cell>
</row>
<row>
- <cell columns="3" fill="horizontal">
+ <cell columns="3" fill="horizontal" insets="0">
<Table>
<row>
<cell>
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionEditResultDialog.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionEditResultDialog.jaxx 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionEditResultDialog.jaxx 2012-08-14 09:26:57 UTC (rev 1042)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric
+ Copyright (C) 2011 - 2012 Ifremer, Codelutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -22,7 +22,7 @@
<http://www.gnu.org/licenses/gpl-3.0.html>.
#L%
-->
-<JDialog title="coser.ui.result.newResult" modal="true">
+<JDialog title="coser.ui.result.editResult" modal="true">
<Table>
<fr.ifremer.coser.ui.selection.SelectionHandler id="handler" javaBean="null" />
@@ -78,10 +78,43 @@
</cell>
</row>
<row>
- <cell columns="2" anchor="east">
- <JButton id="saveResultButton" text="coser.ui.result.validEditResult"
- onActionPerformed="getHandler().performEditResult(this)"/>
+ <cell anchor="west" columns="2">
+ <JLabel text="coser.ui.result.otherDataFile" />
</cell>
</row>
+ <row>
+ <cell columns="2" weighty="1" fill="both">
+ <JScrollPane>
+ <OtherDataFileListModel id="otherDataFileListModel" />
+ <JList id="otherDataFileList" model="{otherDataFileListModel}"/>
+ <ListSelectionModel javaBean="otherDataFileList.getSelectionModel()"
+ onValueChanged="removeOtherFile.setEnabled(getOtherDataFileList().getSelectedIndex() != -1)" />
+ </JScrollPane>
+ </cell>
+ </row>
+ <row>
+ <cell columns="2" fill="horizontal" weightx="1">
+ <Table>
+ <row>
+ <cell>
+ <JButton text="coser.ui.result.addOtherDataFile"
+ onActionPerformed="getHandler().selectResultFileOrDirectory(this, otherDataFileList)"/>
+ </cell>
+ <cell>
+ <JButton id="removeOtherFile" text="coser.ui.result.removeOtherDataFile"
+ onActionPerformed="getHandler().removeSelectedFile(this)"/>
+ </cell>
+ <cell weightx="1" anchor="east">
+ <JButton text="coser.ui.result.cancel"
+ onActionPerformed="dispose()"/>
+ </cell>
+ <cell>
+ <JButton id="saveResultButton" text="coser.ui.result.validEditResult"
+ onActionPerformed="getHandler().performEditResult(this)"/>
+ </cell>
+ </row>
+ </Table>
+ </cell>
+ </row>
</Table>
</JDialog>
\ No newline at end of file
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-14 09:26:57 UTC (rev 1042)
@@ -33,7 +33,6 @@
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -1320,27 +1319,6 @@
}
/**
- * Show rsufi result edit dialog with selected rsufiresult.
- *
- * @param view view
- */
- public void showEditResultDialog(SelectionRsufiView view) {
-
- // get selected rsufi result
- int selectedRow = view.getSelectionResultsTable().getSelectedRow();
- RSufiResult result = view.getSelectionResultsTableModel().getValue(selectedRow);
-
- SelectionEditResultDialog editResultView = new SelectionEditResultDialog(view);
- // TODO chatellier 20101121 il ne faudrait pas que ca soit le
- // meme, sinon meme en annulant il est modifié
- editResultView.setRsufiResult(result);
- editResultView.setHandler(this);
- editResultView.pack();
- editResultView.setLocationRelativeTo(view);
- editResultView.setVisible(true);
- }
-
- /**
* Save new result after clicking "ok" button on SelectionAddResultDialog
* opened by {@link #showAddResultDialog(SelectionRsufiView)}.
*
@@ -1362,7 +1340,6 @@
}
catch (CoserBusinessException ex) {
JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.result.saveError"), JOptionPane.ERROR_MESSAGE);
- throw new CoserException("Can't save result", ex);
}
finally {
setDefaultCursor(view);
@@ -1371,6 +1348,28 @@
}
/**
+ * Show rsufi result edit dialog with selected rsufiresult.
+ *
+ * @param view view
+ */
+ public void showEditResultDialog(SelectionRsufiView view) {
+
+ // get selected rsufi result
+ int selectedRow = view.getSelectionResultsTable().getSelectedRow();
+ RSufiResult result = view.getSelectionResultsTableModel().getValue(selectedRow);
+
+ SelectionEditResultDialog editResultView = new SelectionEditResultDialog(view);
+ // TODO chatellier 20101121 il ne faudrait pas que ca soit le
+ // meme, sinon meme en annulant il est modifié
+ editResultView.setRsufiResult(result);
+ editResultView.getOtherDataFileListModel().setOtherFiles(new ArrayList<File>(result.getOtherFiles()));
+ editResultView.setHandler(this);
+ editResultView.pack();
+ editResultView.setLocationRelativeTo(view);
+ editResultView.setVisible(true);
+ }
+
+ /**
* Save edited result (only save properties file).
*
* @param view view
@@ -1382,11 +1381,11 @@
RSufiResult editedResult = view.getRsufiResult();
try {
- projectService.saveRsufiResults(project, selection, editedResult);
+ List<File> newOthersFile = view.getOtherDataFileListModel().getOtherFiles();
+ projectService.editRsufiResults(project, selection, editedResult, newOthersFile);
}
catch (CoserBusinessException ex) {
JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.result.saveError"), JOptionPane.ERROR_MESSAGE);
- throw new CoserException("Can't save result", ex);
}
view.dispose();
}
@@ -1500,7 +1499,7 @@
textComponent.setText(selectedFile.getAbsolutePath());
}
}
-
+
/**
* Select other files (file or directory).
*
@@ -1520,6 +1519,35 @@
}
/**
+ * Select other files (file or directory).
+ *
+ * @param view view
+ * @param listComponent list component to set selected file
+ */
+ public void selectResultFileOrDirectory(SelectionEditResultDialog view, JList listComponent) {
+ CoserConfig config = view.getContextValue(CoserConfig.class);
+ JFileChooser selectFileChooser = getFileChooserInstance(config.getProjectsDirectory());
+ selectFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+
+ int result = selectFileChooser.showOpenDialog(view);
+ if (result == JFileChooser.APPROVE_OPTION) {
+ File selectedFile = selectFileChooser.getSelectedFile();
+ view.getOtherDataFileListModel().add(selectedFile);
+ }
+ }
+
+ /**
+ * Remove selected file in other file list.
+ *
+ * @param view
+ * @since 1.3
+ */
+ public void removeSelectedFile(SelectionEditResultDialog view) {
+ File selectedFile = (File)view.getOtherDataFileList().getSelectedValue();
+ view.getOtherDataFileListModel().remove(selectedFile);
+ }
+
+ /**
* Genere le log des modifications faites lors du control en HTML
* et l'ouvre dans le navigateur systeme.
*
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-14 09:26:57 UTC (rev 1042)
@@ -164,6 +164,7 @@
coser.ui.result.newResult=New Result
coser.ui.result.otherDataFile=Other files \:
coser.ui.result.publiableResult=Publiable \:
+coser.ui.result.removeOtherDataFile=Remove file
coser.ui.result.requiredestComIndPath=
coser.ui.result.requiredestPopIndPath=
coser.ui.result.requiredname=
@@ -184,7 +185,6 @@
coser.ui.result.zone=Zone \:
coser.ui.selection.allSpecies=L1 \: All species (%d/%d)
coser.ui.selection.comment=Comment \:
-coser.ui.selection.createError=Creation error
coser.ui.selection.detail.confirmcontrolreload=Are you sure you want to reload controled data ?\nAll modifications done on current selection will be lost.
coser.ui.selection.detail.controldatareloaded=Controled data reloaded.
coser.ui.selection.detail.mainAccordion=Details
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-13 15:28:17 UTC (rev 1041)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-14 09:26:57 UTC (rev 1042)
@@ -164,6 +164,7 @@
coser.ui.result.newResult=Nouveau résultat
coser.ui.result.otherDataFile=Autre fichiers \:
coser.ui.result.publiableResult=Publiable \:
+coser.ui.result.removeOtherDataFile=Supprimer le fichier
coser.ui.result.requiredestComIndPath=
coser.ui.result.requiredestPopIndPath=
coser.ui.result.requiredname=
@@ -184,7 +185,6 @@
coser.ui.result.zone=Zone \:
coser.ui.selection.allSpecies=L1 \: Toutes les espèces (%d/%d)
coser.ui.selection.comment=Commentaire \:
-coser.ui.selection.createError=Erreur de créaction
coser.ui.selection.detail.confirmcontrolreload=Êtes vous sûr de vouloir recharger les données contrôlées ?\nToutes les modifications de la sélection en cours seront perdues.
coser.ui.selection.detail.controldatareloaded=Données contrôlées rechargées.
coser.ui.selection.detail.mainAccordion=Détails
1
0
r1041 - trunk/coser-business/src/main/java/fr/ifremer/coser/services
by echatellier@users.forge.codelutin.com 13 Aug '12
by echatellier@users.forge.codelutin.com 13 Aug '12
13 Aug '12
Author: echatellier
Date: 2012-08-13 17:28:17 +0200 (Mon, 13 Aug 2012)
New Revision: 1041
Url: http://forge.codelutin.com/repositories/revision/coser/1041
Log:
Remove fixed fixme
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-13 15:15:19 UTC (rev 1040)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-13 15:28:17 UTC (rev 1041)
@@ -881,7 +881,6 @@
}
else {
// ajout de la traduction du nom de liste plus le numéro
- // FIXME fix locale
if ("fr".equals(locale.getLanguage())) {
chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1);
} else if ("es".equals(locale.getLanguage())) {
1
0
r1040 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/test/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui/selection coser-ui/src/main/resources/i18n
by echatellier@users.forge.codelutin.com 13 Aug '12
by echatellier@users.forge.codelutin.com 13 Aug '12
13 Aug '12
Author: echatellier
Date: 2012-08-13 17:15:19 +0200 (Mon, 13 Aug 2012)
New Revision: 1040
Url: http://forge.codelutin.com/repositories/revision/coser/1040
Log:
fixes #1326 : Pouvoir supprimer un r?\195?\169sultat depuis l'interface
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx
trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties
trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-13 14:09:34 UTC (rev 1039)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-13 15:15:19 UTC (rev 1040)
@@ -1191,7 +1191,7 @@
* @param rsufiResult rsufi result
* @throws CoserBusinessException
*/
- public void saveRSufiResult(File rsufiResultDirectory, RSufiResult rsufiResult) throws CoserBusinessException {
+ protected void saveRSufiResult(File rsufiResultDirectory, RSufiResult rsufiResult) throws CoserBusinessException {
OutputStream outputStream = null;
try {
@@ -1212,6 +1212,35 @@
}
/**
+ * Delete a rsufi result.
+ *
+ * @param project project
+ * @param selection selection
+ * @param rsufiResult rsufi result to delete
+ * @throws CoserBusinessException
+ * @since 1.3
+ */
+ public void deleteRSufiResult(Project project, Selection selection, RSufiResult rsufiResult) throws CoserBusinessException {
+
+ try {
+ File projectsDirectory = config.getProjectsDirectory();
+ File projectDirectory = new File(projectsDirectory, project.getName());
+ File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY);
+ File selectionDirectory = new File(selectionsDirectory, selection.getName());
+ File resultsDirectory = new File(selectionDirectory, CoserConstants.STORAGE_RESULTS_DIRECTORY);
+ File rsufiResultDirectory = new File(resultsDirectory, rsufiResult.getName());
+
+ FileUtils.deleteDirectory(rsufiResultDirectory);
+ List<RSufiResult> results = selection.getRsufiResults();
+ results.remove(rsufiResult);
+ // this way to fire change event (do not remove)
+ selection.setRsufiResults(results);
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't delete directory", ex);
+ }
+ }
+
+ /**
* Sauve une liste ordonnées de commande dans le fichier specifié.
*
* @param props proparties to add command to
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2012-08-13 14:09:34 UTC (rev 1039)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2012-08-13 15:15:19 UTC (rev 1040)
@@ -183,4 +183,19 @@
project = projectService.loadControlData(project);
return project;
}
+
+ /**
+ * Util method used to build path for test.
+ *
+ * @param root root dir
+ * @param paths path sub component
+ * @return file
+ */
+ protected File getFile(File root, String... paths) {
+ File localFile = root;
+ for (String path : paths) {
+ localFile = new File(localFile, path);
+ }
+ return localFile;
+ }
}
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2012-08-13 14:09:34 UTC (rev 1039)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2012-08-13 15:15:19 UTC (rev 1040)
@@ -96,16 +96,16 @@
public void testCreateProject() throws CoserBusinessException {
Project project = createTestProject(projectService, false);
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "original" + File.separator + "testcatch.csv").exists());
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "original" + File.separator + "testhaul.csv").exists());
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "original" + File.separator + "teststrata.csv").exists());
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "original" + File.separator + "testlength.csv").exists());
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "reftaxSpecies.csv").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(), project.getName(),
+ "original", "testcatch.csv").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(), project.getName(),
+ "original", "testhaul.csv").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(),
+ project.getName(), "original", "teststrata.csv").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(),
+ project.getName(), "original", "testlength.csv").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(),
+ project.getName(), "reftaxSpecies.csv").exists());
}
/**
@@ -149,8 +149,8 @@
Project project = createTestProject(projectService, false);
projectService.saveProjectControl(project);
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "control" + File.separator + "testcatch_co.csv").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(),
+ project.getName(), "control", "testcatch_co.csv").exists());
}
/**
@@ -165,8 +165,8 @@
projectService.validControl(project);
Assert.assertTrue(project.getControl().isValidated());
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "control" + File.separator + "control.pdf").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(),
+ project.getName(), "control", "control.pdf").exists());
}
/**
@@ -184,9 +184,9 @@
projectService.validSelection(project, selection);
Assert.assertTrue(selection.isValidated());
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "selections" + File.separator +
- "titi" + File.separator + "selection.pdf").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(),
+ project.getName(), "selections",
+ "titi", "selection.pdf").exists());
}
/**
@@ -201,9 +201,9 @@
selection.setName("titi");
projectService.createProjectSelection(project, selection);
- Assert.assertTrue(new File(config.getProjectsDirectory(),
- project.getName() + File.separator + "selections" + File.separator +
- "titi" + File.separator + "testcatch_se.csv").exists());
+ Assert.assertTrue(getFile(config.getProjectsDirectory(),
+ project.getName(), "selections",
+ "titi", "testcatch_se.csv").exists());
}
/**
@@ -601,4 +601,24 @@
Assert.assertEquals(2, selection.getSelectedSpeciesSizeAllYear().size());
Assert.assertEquals(1, selection.getSelectedSpeciesMaturity().size());
}
+
+ /**
+ * Test de creation et de suppression de resultat.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testDeleteResult() throws CoserBusinessException {
+ Project project = openTestProject(projectService, "projectctrvalidated");
+ Selection selection = project.getSelections().get("testselection1");
+
+ RSufiResult rsufiResult = selection.getRsufiResults().get(0);
+ Assert.assertTrue(getFile(config.getProjectsDirectory(), project.getName(),
+ "selections", "testselection1", "results", rsufiResult.getName(),
+ "result.properties").exists());
+
+ projectService.deleteRSufiResult(project, selection, rsufiResult);
+ Assert.assertFalse(getFile(config.getProjectsDirectory(), project.getName(),
+ "selections", "testselection1", "results", rsufiResult.getName()).exists());
+ }
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-13 14:09:34 UTC (rev 1039)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-13 15:15:19 UTC (rev 1040)
@@ -33,6 +33,7 @@
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -1391,6 +1392,34 @@
}
/**
+ * Supprime le résultat après confirmation par l'utilisateur.
+ *
+ * @param view view
+ */
+ public void deleteResult(SelectionRsufiView view) {
+ // get selected rsufi result
+ int selectedRow = view.getSelectionResultsTable().getSelectedRow();
+ RSufiResult result = view.getSelectionResultsTableModel().getValue(selectedRow);
+
+ int confirm = JOptionPane.showConfirmDialog(view,
+ _("coser.ui.result.confirmDeleteResult", result.getName()),
+ _("coser.ui.result.resultTitle"), JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE);
+ if (confirm == JOptionPane.YES_OPTION) {
+ Project project = view.getContextValue(Project.class);
+ Selection selection = view.getContextValue(Selection.class);
+ ProjectService projectService = view.getContextValue(ProjectService.class);
+ try {
+ projectService.deleteRSufiResult(project, selection, result);
+ // le model ecoute directement le changement sur la liste
+ // de resultat (auto refresh)
+ } catch (CoserBusinessException ex) {
+ throw new CoserException("Can't delete result", ex);
+ }
+ }
+ }
+
+ /**
* Selectionne le dossier d'extraction.
*
* @param view view
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx 2012-08-13 14:09:34 UTC (rev 1039)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx 2012-08-13 15:15:19 UTC (rev 1040)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -64,18 +64,22 @@
<cell weightx="1" weighty="2" fill="both">
<Table border='{BorderFactory.createTitledBorder(_("coser.ui.result.availableDataTitle"))}'>
<row>
- <cell columns="2" weightx="1" weighty="1" fill="both">
+ <cell columns="3" weightx="1" weighty="1" fill="both">
<JScrollPane>
<fr.ifremer.coser.ui.result.ResultTableModel id="selectionResultsTableModel"
javaBean="new fr.ifremer.coser.ui.result.ResultTableModel(this)" />
<JTable id="selectionResultsTable" model="{getSelectionResultsTableModel()}"/>
<ListSelectionModel javaBean="selectionResultsTable.getSelectionModel()"
- onValueChanged="editResultButton.setEnabled(getSelectionResultsTable().getSelectedRow() != -1)" />
+ onValueChanged="editResultButton.setEnabled(getSelectionResultsTable().getSelectedRow() != -1);deleteResultButton.setEnabled(getSelectionResultsTable().getSelectedRow() != -1)" />
</JScrollPane>
</cell>
</row>
<row>
<cell weightx="1" anchor="east">
+ <JButton id="deleteResultButton" text="coser.ui.result.deleteResult" enabled="false"
+ onActionPerformed="getHandler().deleteResult(this)" />
+ </cell>
+ <cell>
<JButton id="editResultButton" text="coser.ui.result.editResult" enabled="false"
onActionPerformed="getHandler().showEditResultDialog(this)" />
</cell>
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-13 14:09:34 UTC (rev 1039)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-13 15:15:19 UTC (rev 1040)
@@ -151,7 +151,9 @@
coser.ui.result.addOtherDataFile=Add file
coser.ui.result.availableDataTitle=Available results \:
coser.ui.result.cancel=Cancel
+coser.ui.result.confirmDeleteResult=Do you want to delete result %s ?
coser.ui.result.creationDate=Result date \:
+coser.ui.result.deleteResult=Delete result
coser.ui.result.editResult=Modify result
coser.ui.result.estComIndFile=ESTCOMind file \:
coser.ui.result.estPopIndFile=ESTPOPind file \:
@@ -167,6 +169,7 @@
coser.ui.result.requiredname=
coser.ui.result.requiredrsufiVersion=
coser.ui.result.resultName=Result name \:
+coser.ui.result.resultTitle=Result
coser.ui.result.rsufiVersion=RSufi version \:
coser.ui.result.saveError=Save error
coser.ui.result.table.estComIndFile=ESTCOMind file
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-13 14:09:34 UTC (rev 1039)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-13 15:15:19 UTC (rev 1040)
@@ -151,7 +151,9 @@
coser.ui.result.addOtherDataFile=Ajouter un fichier
coser.ui.result.availableDataTitle=Résultats disponibles
coser.ui.result.cancel=Annuler
+coser.ui.result.confirmDeleteResult=Êtes vous sûr de vouloir supprimer le résultat %s ?
coser.ui.result.creationDate=Date du résultats \:
+coser.ui.result.deleteResult=Supprimer le résultat
coser.ui.result.editResult=Modifier le résultat
coser.ui.result.estComIndFile=Fichier ESTCOMind \:
coser.ui.result.estPopIndFile=Fichier ESTPOPind \:
@@ -167,6 +169,7 @@
coser.ui.result.requiredname=
coser.ui.result.requiredrsufiVersion=
coser.ui.result.resultName=Nom du résultat \:
+coser.ui.result.resultTitle=Résultat
coser.ui.result.rsufiVersion=Version de RSufi \:
coser.ui.result.saveError=Erreur de sauvegarde
coser.ui.result.table.estComIndFile=Fichier ESTCOMind
1
0
Author: echatellier
Date: 2012-08-13 16:09:34 +0200 (Mon, 13 Aug 2012)
New Revision: 1039
Url: http://forge.codelutin.com/repositories/revision/coser/1039
Log:
Update libs
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-13 13:53:02 UTC (rev 1038)
+++ trunk/pom.xml 2012-08-13 14:09:34 UTC (rev 1039)
@@ -6,7 +6,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>3.3.4</version>
+ <version>3.3.6</version>
</parent>
<groupId>fr.ifremer</groupId>
@@ -117,27 +117,27 @@
<dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-utils</artifactId>
- <version>2.5.2</version>
+ <version>2.5.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-validator</artifactId>
- <version>2.5.2</version>
+ <version>2.5.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.nuiton.matrix</groupId>
<artifactId>nuiton-matrix</artifactId>
- <version>2.3-SNAPSHOT</version>
+ <version>2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.nuiton.matrix</groupId>
<artifactId>nuiton-matrix-gui</artifactId>
- <version>2.3-SNAPSHOT</version>
+ <version>2.3</version>
<scope>compile</scope>
</dependency>
@@ -346,7 +346,7 @@
<license.organizationName>Ifremer, Codelutin</license.organizationName>
<!-- Versions -->
- <jaxx.version>2.5.3</jaxx.version>
+ <jaxx.version>2.5.4</jaxx.version>
<i18n.version>2.4.1</i18n.version>
<!-- 2.3.1.1 fails to validate fields in jnlp -->
<struts.version>2.3.4</struts.version>
1
0
r1038 - in trunk: coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/control coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/test/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui/control coser-ui/src/main/java/fr/ifremer/coser/ui/selection
by echatellier@users.forge.codelutin.com 13 Aug '12
by echatellier@users.forge.codelutin.com 13 Aug '12
13 Aug '12
Author: echatellier
Date: 2012-08-13 15:53:02 +0200 (Mon, 13 Aug 2012)
New Revision: 1038
Url: http://forge.codelutin.com/repositories/revision/coser/1038
Log:
fixes #1331: Gestion des derniers rendu affichage traduction code esp?\195?\168ce
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
trunk/coser-business/src/main/java/fr/ifremer/coser/control/SpeciesControlError.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/ControlServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphFrame.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/GlobalControlErrorModel.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2012-08-13 13:53:02 UTC (rev 1038)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 - 2011 Codelutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Codelutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -44,7 +44,6 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/control/SpeciesControlError.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/control/SpeciesControlError.java 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/control/SpeciesControlError.java 2012-08-13 13:53:02 UTC (rev 1038)
@@ -44,10 +44,20 @@
protected String species;
+ /**
+ * Get species code (untranslated).
+ *
+ * @param species species code
+ */
public String getSpecies() {
return species;
}
+ /**
+ * Get species code (untranslated).
+ *
+ * @param species species code
+ */
public void setSpecies(String species) {
this.species = species;
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-08-13 13:53:02 UTC (rev 1038)
@@ -218,7 +218,7 @@
for (Category category : Category.values()) {
if (category.isDataCategory()) {
// validation de la category seule (generique)
- List<ControlError> categoryErrors = validateCategoryXWork(control, category, progress);
+ List<ControlError> categoryErrors = validateCategoryXWork(project, control, category, progress);
if (categoryErrors != null) {
validationErrors.addAll(categoryErrors);
}
@@ -227,7 +227,7 @@
}
// validation specifique de la category
- List<ControlError> specificErrors = validateCategorySpecific(control, category, progress);
+ List<ControlError> specificErrors = validateCategorySpecific(project, control, category, progress);
if (specificErrors != null) {
validationErrors.addAll(specificErrors);
}
@@ -238,7 +238,7 @@
}
// validation entre catch et length (specific)
- List<? extends ControlError> diffCatchLengthErrors = validateDiffCatchLength(control, progress);
+ List<? extends ControlError> diffCatchLengthErrors = validateDiffCatchLength(project, control, progress);
if (progress != null) {
progress.nextStep();
}
@@ -269,33 +269,14 @@
/**
* Valide une category entière d'un project.
*
+ * @param project project
* @param control control a valider
* @param category category a valider
* @param progress progress monitor (can be null)
- * @return les erreurs de validation
- */
- public List<ControlError> validateCategory(Control control, Category category, ProgressMonitor progress) {
-
- // validation de la category seule (generique)
- List<ControlError> errors = validateCategoryXWork(control, category, progress);
- // validation specifique de la category
- List<ControlError> specificErrors = validateCategorySpecific(control, category, progress);
- if (specificErrors != null) {
- errors.addAll(specificErrors);
- }
-
- return errors;
- }
-
- /**
- * Valide une category entière d'un project.
- *
- * @param control control a valider
- * @param category category a valider
- * @param progress progress monitor (can be null)
* @return les erreurs de validation (not null)
*/
- public List<ControlError> validateCategoryXWork(Control control, Category category, ProgressMonitor progress) {
+ public List<ControlError> validateCategoryXWork(Project project, Control control,
+ Category category, ProgressMonitor progress) {
// instance des bean utilisé lors de la validation
Catch beanCatch = new Catch();
@@ -369,7 +350,7 @@
// check for duplicated lines
String lineNumber = line[AbstractDataEntity.INDEX_LINE];
- String uniqueDataKey = getSignificantData(category, line);
+ String uniqueDataKey = getSignificantData(project, category, line);
if (uniqueDataKeys.containsKey(uniqueDataKey)) {
// make a single ControlError instance pour the same
@@ -423,19 +404,22 @@
* TRAITS
* Vérifier l'unicité sur : "Campagne", "Annee", "Trait", "Mois"
*
+ * @param project project
* @param category category
* @param data data
* @return string key
*/
- protected String getSignificantData(Category category, String[] data) {
+ protected String getSignificantData(Project project, Category category, String[] data) {
StringBuilder sb = new StringBuilder();
for (int index = 0 ; index < data.length ; ++index) {
// never count index line
if (index != AbstractDataEntity.INDEX_LINE) {
switch (category) {
case CATCH:
- if (index == Catch.INDEX_SURVEY || index == Catch.INDEX_YEAR || index == Catch.INDEX_HAUL || index == Catch.INDEX_SPECIES) {
+ if (index == Catch.INDEX_SURVEY || index == Catch.INDEX_YEAR || index == Catch.INDEX_HAUL) {
sb.append(data[index]).append('|');
+ } else if (index == Catch.INDEX_SPECIES) {
+ sb.append(project.getDisplaySpeciesText(data[index])).append('|');
}
break;
case HAUL:
@@ -445,8 +429,10 @@
break;
case LENGTH:
if (index == Length.INDEX_SURVEY || index == Length.INDEX_YEAR || index == Length.INDEX_HAUL ||
- index == Length.INDEX_SPECIES || index == Length.INDEX_SEX || index == Length.INDEX_MATURITY || index == Length.INDEX_LENGTH) {
+ index == Length.INDEX_SEX || index == Length.INDEX_MATURITY || index == Length.INDEX_LENGTH) {
sb.append(data[index]).append('|');
+ } else if (index == Length.INDEX_SPECIES) {
+ sb.append(project.getDisplaySpeciesText(data[index])).append('|');
}
break;
case STRATA:
@@ -465,27 +451,28 @@
/**
* Effectue un calcul global, mais specific a chaque categorie.
*
+ * @param project project
* @param control control
* @param category category
* @param progress progress monitor
* @return error list for category (can be {@code null})
*/
- protected List<ControlError> validateCategorySpecific(Control control,
+ protected List<ControlError> validateCategorySpecific(Project project, Control control,
Category category, ProgressMonitor progress) {
List<ControlError> validationErrors = null;
switch (category) {
case CATCH:
- validationErrors = validateCategorySpecificCatch(control, progress);
+ validationErrors = validateCategorySpecificCatch(project, control, progress);
break;
case HAUL:
- validationErrors = validateCategorySpecificHaul(control, progress);
+ validationErrors = validateCategorySpecificHaul(project, control, progress);
break;
case LENGTH:
- validationErrors = validateCategorySpecificLength(control, progress);
+ validationErrors = validateCategorySpecificLength(project, control, progress);
break;
case STRATA:
- validationErrors = validateCategorySpecificStrata(control, progress);
+ validationErrors = validateCategorySpecificStrata(project, control, progress);
break;
}
return validationErrors;
@@ -494,11 +481,12 @@
/**
* Alerte si Somme(CAPTURES$Nombre par CAPTURES$Annee|Strate|Espece) < nobsmin.
*
+ * @param project project
* @param control control
* @param progress progress monitor (can be null)
* @return error list
*/
- protected List<ControlError> validateCategorySpecificCatch(
+ protected List<ControlError> validateCategorySpecificCatch(Project project,
Control control, ProgressMonitor progress) {
List<ControlError> validationErrors = new ArrayList<ControlError>();
@@ -531,9 +519,10 @@
// compute key
StringBuffer sb = new StringBuffer();
for (int tupleIndex = 0 ; tupleIndex < tuple.length; ++tupleIndex) {
- if (tupleIndex == Catch.INDEX_YEAR || tupleIndex == Catch.INDEX_HAUL ||
- tupleIndex == Catch.INDEX_SPECIES) {
+ if (tupleIndex == Catch.INDEX_YEAR || tupleIndex == Catch.INDEX_HAUL) {
sb.append(tuple[tupleIndex]).append(';');
+ } else if (tupleIndex == Catch.INDEX_SPECIES) {
+ sb.append(project.getDisplaySpeciesText(tuple[tupleIndex])).append(';');
}
}
@@ -588,6 +577,7 @@
* Detecte des différences entre les nombres dans captures
* et les nombres dans taille.
*
+ * @param project project
* @param control data container
* @param progress progress (can be null)
*
@@ -596,7 +586,8 @@
*
* @return errors
*/
- protected List<? extends ControlError> validateDiffCatchLength(Control control, ProgressMonitor progress) {
+ protected List<? extends ControlError> validateDiffCatchLength(Project project,
+ Control control, ProgressMonitor progress) {
int total = control.getCatch().size() - 1 + control.getLength().size() - 1;
if (progress != null) {
@@ -730,7 +721,8 @@
error.setSpecies(species);
error.setLevel(ValidationLevel.WARNING);
error.setMessage(_("coser.business.control.error.diffCatchLengthMissingYear"));
- error.setDetailMessage(_("coser.business.control.error.diffCatchLengthMissingYearDetail", species));
+ error.setDetailMessage(_("coser.business.control.error.diffCatchLengthMissingYearDetail",
+ project.getDisplaySpeciesText(species)));
validationErrors.add(error);
missingYearLengthSpecies.add(species);
} else {
@@ -746,7 +738,8 @@
error.setSpecies(species);
error.setLevel(ValidationLevel.WARNING);
error.setMessage(_("coser.business.control.error.diffCatchLength"));
- error.setDetailMessage(_("coser.business.control.error.diffCatchLengthDetail", species, year));
+ error.setDetailMessage(_("coser.business.control.error.diffCatchLengthDetail",
+ project.getDisplaySpeciesText(species), year));
validationErrors.add(error);
}
}
@@ -769,13 +762,14 @@
* <li>seconde passe pour détecter les valeurs abérentes (> ecart type)
* </ul>
*
- * L'ecarty étant : racine( somme (x - moyenne)^2 / n)
+ * L'ecart étant : racine( somme (x - moyenne)^2 / n)
*
+ * @param project project
* @param control control
* @param progress progress (can be null)
* @return error list
*/
- protected List<ControlError> validateCategorySpecificLength(
+ protected List<ControlError> validateCategorySpecificLength(Project project,
Control control, ProgressMonitor progress) {
List<ControlError> validationErrors = new ArrayList<ControlError>();
@@ -981,7 +975,8 @@
error.setLevel(ValidationLevel.WARNING);
error.addLineNumber(lineNumber);
error.setMessage(_("coser.business.control.error.lengthOutliers", avg, deviation));
- error.setDetailMessage(_("coser.business.control.error.lengthOutliersDetail", species, avg, deviation, lengthValue));
+ error.setDetailMessage(_("coser.business.control.error.lengthOutliersDetail",
+ project.getDisplaySpeciesText(species), avg, deviation, lengthValue));
validationErrors.add(error);
}
}
@@ -1000,23 +995,25 @@
/**
* Specific validation for Haul category.
*
+ * @param project
* @param control control
* @param progress progress
* @return {@code null}
*/
- protected List<ControlError> validateCategorySpecificHaul(Control control,
- ProgressMonitor progress) {
+ protected List<ControlError> validateCategorySpecificHaul(Project project,
+ Control control, ProgressMonitor progress) {
return null;
}
/**
* Specific validation for Strata category.
*
+ * @param project project
* @param control control
* @param progress progress
* @return {@code null}
*/
- protected List<ControlError> validateCategorySpecificStrata(
+ protected List<ControlError> validateCategorySpecificStrata(Project project,
Control control, ProgressMonitor progress) {
return null;
}
@@ -1153,16 +1150,18 @@
}
String[] catchData = itCatch.next();
+ String species = catchData[Catch.INDEX_SPECIES];
surveyNames.add(catchData[Catch.INDEX_SURVEY]);
catchYear.add(catchData[Catch.INDEX_YEAR]);
- catchYearHaulSpecies.add(catchData[Catch.INDEX_YEAR] + "|" + catchData[Catch.INDEX_HAUL] + "|" + catchData[Catch.INDEX_SPECIES]);
+ catchYearHaulSpecies.add(catchData[Catch.INDEX_YEAR] + "|" +
+ catchData[Catch.INDEX_HAUL] + "|" + project.getDisplaySpeciesText(species));
catchYearHaul.add(catchData[Catch.INDEX_YEAR] + "|" + catchData[Catch.INDEX_HAUL]);
catchHaulNames.add(catchData[Catch.INDEX_HAUL]);
- catchSpeciesNames.add(catchData[Catch.INDEX_SPECIES]);
+ catchSpeciesNames.add(species);
// Contrôle des noms d'espèces dans fichiers CAPTURES et TAILLES qui
// doivent être dans le référentiel "reftax": CAPTURES$Espece et
- // TAILLES$Espece doivent exister dans REFTAX$ C_VALIDE
+ // TAILLES$Espece doivent exister dans REFTAX$C_VALIDE
if (!refTaxSpecies.containsKey(catchData[Catch.INDEX_SPECIES])) {
ControlError error = new ControlError();
error.setCategory(Category.CATCH);
@@ -1188,14 +1187,15 @@
String species = lengthData[Length.INDEX_SPECIES];
surveyNames.add(lengthData[Length.INDEX_SURVEY]);
lengthYear.add(lengthData[Length.INDEX_YEAR]);
- lengthYearHaulSpecies.add(lengthData[Length.INDEX_YEAR] + "|" + lengthData[Length.INDEX_HAUL] + "|" + species);
+ lengthYearHaulSpecies.add(lengthData[Length.INDEX_YEAR] + "|" +
+ lengthData[Length.INDEX_HAUL] + "|" + project.getDisplaySpeciesText(species));
lengthYearHaul.add(lengthData[Length.INDEX_YEAR] + "|" + lengthData[Length.INDEX_HAUL]);
lengthHaulNames.add(lengthData[Length.INDEX_HAUL]);
lengthSpeciesNames.add(species);
// Contrôle des noms d'espèces dans fichiers CAPTURES et TAILLES qui
// doivent être dans le référentiel "reftax": CAPTURES$Espece et
- // TAILLES$Espece doivent exister dans REFTAX$ C_VALIDE
+ // TAILLES$Espece doivent exister dans REFTAX$C_VALIDE
if (!refTaxSpecies.containsKey(species)) {
ControlError error = new ControlError();
error.setCategory(Category.LENGTH);
@@ -1233,7 +1233,8 @@
error.addLineNumber(lengthData[Length.INDEX_LINE]);
error.setLevel(ValidationLevel.WARNING);
error.setMessage(_("coser.business.control.error.invalidLengthLengthStep"));
- error.setDetailMessage(_("coser.business.control.error.invalidLengthLengthStepDetail", lengthData[Length.INDEX_LENGTH], species));
+ error.setDetailMessage(_("coser.business.control.error.invalidLengthLengthStepDetail",
+ lengthData[Length.INDEX_LENGTH], project.getDisplaySpeciesText(species)));
error.setTipMessage(_("coser.business.control.error.invalidLengthLengthStepTip"));
crossFilesErrors.add(error);
}
@@ -1386,7 +1387,8 @@
error.setLevel(ValidationLevel.FATAL);
error.setSpecies(missingCatchSpeciesName);
error.setMessage(_("coser.business.control.error.missingCatchSpeciesFromLength"));
- error.setDetailMessage(_("coser.business.control.error.missingCatchSpeciesFromLengthDetail", missingCatchSpeciesName));
+ error.setDetailMessage(_("coser.business.control.error.missingCatchSpeciesFromLengthDetail",
+ project.getDisplaySpeciesText(missingCatchSpeciesName)));
error.setTipMessage(_("coser.business.control.error.missingCatchSpeciesFromLengthTip"));
crossFilesErrors.add(error);
}
@@ -1400,7 +1402,8 @@
error.setLevel(ValidationLevel.WARNING);
error.setSpecies(missingLengthSpeciesName);
error.setMessage(_("coser.business.control.error.missingLengthSpeciesFromCatch"));
- error.setDetailMessage(_("coser.business.control.error.missingLengthSpeciesFromCatchDetail", missingLengthSpeciesName));
+ error.setDetailMessage(_("coser.business.control.error.missingLengthSpeciesFromCatchDetail",
+ project.getDisplaySpeciesText(missingLengthSpeciesName)));
error.setTipMessage(_("coser.business.control.error.missingLengthSpeciesFromCatchTip"));
crossFilesErrors.add(error);
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-13 13:53:02 UTC (rev 1038)
@@ -250,7 +250,8 @@
}
}
- JFreeChart chart = displayGraph(dataset, _("coser.business.chart.compareCatchLengthNumberTitle", species));
+ JFreeChart chart = displayGraph(dataset, _("coser.business.chart.compareCatchLengthNumberTitle",
+ project.getDisplaySpeciesText(species)));
charts.put(species, chart);
}
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ControlServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ControlServiceTest.java 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ControlServiceTest.java 2012-08-13 13:53:02 UTC (rev 1038)
@@ -135,23 +135,6 @@
}
/**
- * Test, si un poids est renseigné, la capture doit l'etre.
- */
- @Test
- public void testWeigthWithNonCapture() {
- Control control = new Control();
- DataStorage dataCatch = new MemoryDataStorage();
- dataCatch.add(new String[]{"Line", "Campagne","Annee","Trait","Espece","Nombre","Poids"});
- dataCatch.add(new String[]{"1", "Test survey","1999","Testtrait","Test sp","0","12"});
- control.setCatch(dataCatch);
- List<ControlError> errors = controlService.validateCategory(control, Category.CATCH, null);
- if (log.isDebugEnabled()) {
- log.debug("Validation errors = " + errors);
- }
- Assert.assertEquals(2, errors.size());
- }
-
- /**
* Test si le pas de longueur est valid pour les poissons.
*/
@Test
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphFrame.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphFrame.jaxx 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphFrame.jaxx 2012-08-13 13:53:02 UTC (rev 1038)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric
+ Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -32,8 +32,9 @@
<JLabel text="coser.ui.control.graph.species"/>
</cell>
<cell fill="horizontal">
- <SpecyComboModel id="specyComboModel" />
- <JComboBox model="{specyComboModel}" onActionPerformed="getHandler().updateCompareNumberCatchGraph(this)" />
+ <SpecyComboModel id="speciesComboModel" />
+ <JComboBox id="speciesCombo" model="{speciesComboModel}"
+ onActionPerformed="getHandler().updateCompareNumberCatchGraph(this)" />
</cell>
</row>
<row fill="both" weightx="1" weighty="1" columns="2">
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2012-08-13 13:53:02 UTC (rev 1038)
@@ -81,6 +81,7 @@
import fr.ifremer.coser.CoserConstants.Category;
import fr.ifremer.coser.CoserConstants.ValidationLevel;
import fr.ifremer.coser.CoserException;
+import fr.ifremer.coser.CoserUtils;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.command.Command;
import fr.ifremer.coser.control.ControlError;
@@ -438,7 +439,7 @@
view.getGlobalControlErrorTable().setAutoCreateColumnsFromModel(false);
List<ControlError> errors = get();
- view.getGlobalControlErrorModel().setControlErrors(errors);
+ view.getGlobalControlErrorModel().setControlErrors(project, errors);
// set errors list in each table model
ControlDuplicatedLineTableModel catchModel = (ControlDuplicatedLineTableModel)view.getControlDataTableCatch().getModel();
@@ -987,8 +988,9 @@
SwingSession session = view.getContextValue(SwingSession.class);
// get matrix (form context by method #checkData)
+ Project project = view.getContextValue(Project.class);
Map<String, JFreeChart> charts = view.getContextValue(Map.class, "CompareCatchLengthGraph");
- List<String> species = new ArrayList<String>(charts.keySet());
+ List<String> species = CoserUtils.sortCollectionWithMapKeys(project.getRefTaxSpeciesMap(), charts.keySet());
// close previous opened
JFrame previousFrame = (JFrame)view.getContextValue(JFrame.class, "comparenumberframe");
@@ -999,11 +1001,12 @@
ControlGraphFrame frame = new ControlGraphFrame(view);
frame.setHandler(ControlHandler.this);
frame.setContextValue(charts);
- frame.getSpecyComboModel().setSpecy(species);
+ frame.getSpeciesComboModel().setSpecy(species);
if (selectedSpecies != null) {
- frame.getSpecyComboModel().setSelectedItem(selectedSpecies);
+ frame.getSpeciesComboModel().setSelectedItem(selectedSpecies);
updateCompareNumberCatchGraph(frame);
}
+ frame.getSpeciesCombo().setRenderer(new SpeciesListRenderer(project.getRefTaxSpeciesMap()));
frame.pack();
frame.setLocationRelativeTo(view);
session.add(frame); // session restore
@@ -1032,7 +1035,7 @@
* @param view view
*/
public void updateCompareNumberCatchGraph(ControlGraphFrame view) {
- String specyName = (String)view.getSpecyComboModel().getSelectedItem();
+ String specyName = (String)view.getSpeciesCombo().getSelectedItem();
Map<String, JFreeChart> charts = view.getContextValue(Map.class, "CompareCatchLengthGraph");
JFreeChart chart = charts.get(specyName);
view.getControlGraphPanel().removeAll();
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/GlobalControlErrorModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/GlobalControlErrorModel.java 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/GlobalControlErrorModel.java 2012-08-13 13:53:02 UTC (rev 1038)
@@ -36,6 +36,7 @@
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
import fr.ifremer.coser.CoserConstants.ValidationLevel;
+import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.control.ControlError;
import fr.ifremer.coser.control.ControlErrorGroup;
import fr.ifremer.coser.control.DiffCatchLengthControlError;
@@ -58,9 +59,9 @@
super(null);
}
- public void setControlErrors(List<ControlError> controlErrors) {
+ public void setControlErrors(Project project, List<ControlError> controlErrors) {
this.controlErrors = controlErrors;
- buildGlobalControlErrorTreeModel(controlErrors);
+ buildGlobalControlErrorTreeModel(project, controlErrors);
checkedControlErrors = new HashSet<Object>();
}
@@ -74,7 +75,7 @@
*
* @param errors errors list to render
*/
- protected void buildGlobalControlErrorTreeModel(List<ControlError> validationErrors) {
+ protected void buildGlobalControlErrorTreeModel(Project project, List<ControlError> validationErrors) {
Map<Object, DefaultMutableTreeTableNode> nodeCache = new HashMap<Object, DefaultMutableTreeTableNode>();
DefaultMutableTreeTableNode root = new DefaultMutableTreeTableNode(null);
@@ -106,7 +107,8 @@
if (validationError instanceof DiffCatchLengthControlError) {
DiffCatchLengthControlError diffCatchError = (DiffCatchLengthControlError)validationError;
String species = diffCatchError.getSpecies();
- String speciesCategory = _("coser.ui.control.error.diffcatchlenghtspecies", species);
+ String speciesCategory = _("coser.ui.control.error.diffcatchlenghtspecies",
+ project.getDisplaySpeciesText(species));
ControlErrorGroup group = new ControlErrorGroup(validationError.getCategory(), validationError.getLevel(), speciesCategory);
DefaultMutableTreeTableNode newParent = nodeCache.get(speciesCategory);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-13 12:52:49 UTC (rev 1037)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-13 13:53:02 UTC (rev 1038)
@@ -3,7 +3,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 Codelutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
@@ -53,7 +53,6 @@
import jaxx.runtime.JAXXUtil;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -1154,7 +1153,8 @@
ControlGraphFrame frame = new ControlGraphFrame(view);
frame.setHandler(new ControlHandler());
frame.setContextValue(charts);
- frame.getSpecyComboModel().setSpecy(species);
+ frame.getSpeciesComboModel().setSpecy(species);
+ frame.getSpeciesCombo().setRenderer(new SpeciesListRenderer(project.getRefTaxSpeciesMap()));
frame.pack();
frame.setLocationRelativeTo(view);
session.add(frame); // session restore
1
0
r1037 - in trunk: coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/bean coser-business/src/main/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui/control coser-ui/src/main/java/fr/ifremer/coser/ui/selection
by echatellier@users.forge.codelutin.com 13 Aug '12
by echatellier@users.forge.codelutin.com 13 Aug '12
13 Aug '12
Author: echatellier
Date: 2012-08-13 14:52:49 +0200 (Mon, 13 Aug 2012)
New Revision: 1037
Url: http://forge.codelutin.com/repositories/revision/coser/1037
Log:
Ajout d'une m?\195?\169thode utilitaire pour trier les listes d'esp?\195?\168ces.
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2012-08-10 16:10:16 UTC (rev 1036)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2012-08-13 12:52:49 UTC (rev 1037)
@@ -29,6 +29,7 @@
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
@@ -43,6 +44,7 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
@@ -232,17 +234,30 @@
* @param map map to sort
* @return sorted map
*/
- public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
+ public static <K, V extends Comparable<? super V>> LinkedHashMap<K, V> sortByValue(Map<K, V> map) {
List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
Collections.sort( list, new Comparator<Map.Entry<K, V>>() {
public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 ) {
return (o1.getValue()).compareTo( o2.getValue() );
}
});
- Map<K, V> result = new LinkedHashMap<K, V>();
+ LinkedHashMap<K, V> result = new LinkedHashMap<K, V>();
for (Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
+
+ /**
+ * Sort a collection with order defined by a LinkedHashMap keySet.
+ *
+ * @param map map containing order in keys
+ * @param list list to sort
+ * @return list sorted
+ */
+ public static <K> List<K> sortCollectionWithMapKeys(LinkedHashMap<K, ?> map, Collection<K> list) {
+ List<K> keys = new ArrayList<K>(map.keySet());
+ keys.retainAll(list);
+ return keys;
+ }
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-10 16:10:16 UTC (rev 1036)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-13 12:52:49 UTC (rev 1037)
@@ -29,6 +29,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -114,7 +115,7 @@
protected DataStorage refTaxSpecies;
/** Map de cache entre les codes especes et la visualisation utilisateur. */
- protected Map<String, String> refTaxSpeciesMap;
+ protected LinkedHashMap<String, String> refTaxSpeciesMap;
/** Type especes */
protected DataStorage typeEspeces;
@@ -293,7 +294,7 @@
* @return refTax species map
* @since 1.3
*/
- public Map<String, String> getRefTaxSpeciesMap() {
+ public LinkedHashMap<String, String> getRefTaxSpeciesMap() {
return this.refTaxSpeciesMap;
}
@@ -303,7 +304,7 @@
* @param refTaxSpeciesMap new map
* @since 1.3
*/
- public void setRefTaxSpeciesMap(Map<String, String> refTaxSpeciesMap) {
+ public void setRefTaxSpeciesMap(LinkedHashMap<String, String> refTaxSpeciesMap) {
this.refTaxSpeciesMap = refTaxSpeciesMap;
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-10 16:10:16 UTC (rev 1036)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-13 12:52:49 UTC (rev 1037)
@@ -47,6 +47,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -262,7 +263,7 @@
// creation de la map de cache des assossiation entre les code especes
// utilisé, et les noms réels visualisé par l'utilisateur
- Map<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false);
+ LinkedHashMap<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false);
project.setRefTaxSpeciesMap(reftaxSpecies);
return project;
@@ -305,7 +306,7 @@
// creation de la map de cache des assossiation entre les code especes
// utilisé, et les noms réels visualisé par l'utilisateur
- Map<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false);
+ LinkedHashMap<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false);
project.setRefTaxSpeciesMap(reftaxSpecies);
}
@@ -505,7 +506,7 @@
// creation de la map de cache des assossiation entre les code especes
// utilisé, et les noms réels visualisé par l'utilisateur
- Map<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false);
+ LinkedHashMap<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false);
project.setRefTaxSpeciesMap(reftaxSpecies);
return project;
@@ -3042,7 +3043,7 @@
* pour le champ de sortie
* @since 1.3
*/
- public Map<String, String> getReftaxSpeciesDisplayFieldMap(Project project, boolean outputField) {
+ public LinkedHashMap<String, String> getReftaxSpeciesDisplayFieldMap(Project project, boolean outputField) {
Map<String, String> speciesMap = new HashMap<String, String>();
// "C_Perm";"NumSys";"NivSys";"C_VALIDE";"L_VALIDE";"AA_VALIDE";"C_TxPère";"Taxa"
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-10 16:10:16 UTC (rev 1036)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-13 12:52:49 UTC (rev 1037)
@@ -595,12 +595,20 @@
// partie detail
extractProjectReport(project, out);
+ // transcription des code especes
+ StringBuilder speciesBuilder = new StringBuilder(256);
+ String separator = "";
+ for (String speciesCode : selection.getSelectedSpecies()) {
+ speciesBuilder.append(separator);
+ speciesBuilder.append(project.getDisplaySpeciesText(speciesCode));
+ }
+
// partie resumé de selection
out.write("<h2>" + _("coser.business.publication.selectionchoices") + "</h2>");
out.write("<ul>");
out.write("<li>" + _("coser.business.common.years") + " : " + StringUtils.join(selection.getSelectedYears(), ", ") + "</li>");
out.write("<li>" + _("coser.business.common.strata") + " : " + StringUtils.join(selection.getSelectedStrata(), ", ") + "</li>");
- out.write("<li>" + _("coser.business.common.species") + " : " + StringUtils.join(selection.getSelectedSpecies(), ", ") + "</li>");
+ out.write("<li>" + _("coser.business.common.species") + " : " + speciesBuilder + "</li>");
out.write("</ul>");
// partie specific : commandes
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2012-08-10 16:10:16 UTC (rev 1036)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2012-08-13 12:52:49 UTC (rev 1037)
@@ -831,15 +831,15 @@
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(
1, 1, 1, 1), 0, 0));
+ // combo box used to choose for species in list
if ((category == Category.CATCH && fieldIndex == Catch.INDEX_SPECIES) ||
(category == Category.LENGTH && fieldIndex == Length.INDEX_SPECIES)) {
- // combo box used to choose for species in list
Project project = view.getContextValue(Project.class);
Map<String, String> reftaxSpecies = project.getRefTaxSpeciesMap();
List<String> domain = new ArrayList<String>(reftaxSpecies.keySet());
// ajout de la valeur pour que même si elle n'existe pas
// elle soit sélectionnée
- if (reftaxSpecies.containsKey(fieldValue)) {
+ if (!reftaxSpecies.containsKey(fieldValue)) {
domain.add(0, fieldValue);
}
ListComboBoxModel<String> speciesComboModel = new ListComboBoxModel<String>(domain);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-10 16:10:16 UTC (rev 1036)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-13 12:52:49 UTC (rev 1037)
@@ -66,6 +66,7 @@
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConfig;
import fr.ifremer.coser.CoserException;
+import fr.ifremer.coser.CoserUtils;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.bean.RSufiResult;
import fr.ifremer.coser.bean.Selection;
@@ -522,7 +523,7 @@
// code pour que la liste des ids d'especes soit trié
// comme celle de visualisation de l'utilisateur (vue triée du rendu)
- filteredSpecies = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), filteredSpecies));
+ filteredSpecies = CoserUtils.sortCollectionWithMapKeys(project.getRefTaxSpeciesMap(), filteredSpecies);
// ne fait pas apparaitre les especes deja selectionnées
List<String> selectedSpecies = view.getSelectedSpeciesListModel().getSpecies();
@@ -1201,7 +1202,7 @@
// code pour que la liste des ids d'especes soit trié
// comme celle de visualisation de l'utilisateur (vue triée du rendu)
- selectedSpeciesList = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), selectedSpeciesList));
+ selectedSpeciesList = CoserUtils.sortCollectionWithMapKeys(project.getRefTaxSpeciesMap(), selectedSpeciesList);
view.getSelectedSpeciesListModel().setSpecies(selectedSpeciesList);
@@ -1230,7 +1231,7 @@
// code pour que la liste des ids d'especes soit trié
// comme celle de visualisation de l'utilisateur (vue triée du rendu)
- filteredSpecies = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), filteredSpecies));
+ filteredSpecies = CoserUtils.sortCollectionWithMapKeys(project.getRefTaxSpeciesMap(), filteredSpecies);
// met à jour la liste des especes selectionnées
view.getSelectedSpeciesListModel().setSpecies(selectedSpecies);
1
0
r1036 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/common coser-ui/src/main/java/fr/ifremer/coser/ui/selection
by echatellier@users.forge.codelutin.com 10 Aug '12
by echatellier@users.forge.codelutin.com 10 Aug '12
10 Aug '12
Author: echatellier
Date: 2012-08-10 18:10:16 +0200 (Fri, 10 Aug 2012)
New Revision: 1036
Url: http://forge.codelutin.com/repositories/revision/coser/1036
Log:
Add species renderer in selection ui
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesListOccDensRenderer.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-10 15:32:19 UTC (rev 1035)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-10 16:10:16 UTC (rev 1036)
@@ -1990,14 +1990,26 @@
// filtering is optionnal
if (project != null && filterSpecyType != null) {
// load map SpecyName > numSys
- Map<String, Integer> map = new HashMap<String, Integer>();
+ Map<String, Integer> speciesNumSys = new HashMap<String, Integer>();
Iterator<String[]> refTaxIterator = project.getRefTaxSpecies().iterator(true);
while (refTaxIterator.hasNext()) {
// "C_Perm";"NumSys";"NivSys";"C_VALIDE";"L_VALIDE";"AA_VALIDE";"C_TxPère";"Taxa"
String[] tuple = refTaxIterator.next();
- String specyName = tuple[3];
Integer iNumSys = Integer.valueOf(tuple[1]);
- map.put(specyName, iNumSys);
+
+ String specyId = null;
+ switch (project.getStorageSpeciesType()) {
+ case C_PERM:
+ specyId = tuple[0];
+ break;
+ case C_Valide:
+ specyId = tuple[3];
+ break;
+ case L_Valide:
+ specyId = tuple[4];
+ break;
+ }
+ speciesNumSys.put(specyId, iNumSys);
}
// load specy type map SpecyTypeName > [min, max]
@@ -2020,7 +2032,7 @@
Iterator<String> itSpecies = result.iterator();
while (itSpecies.hasNext()) {
String specy = itSpecies.next();
- Integer specyNumSys = map.get(specy);
+ Integer specyNumSys = speciesNumSys.get(specy);
if (specyNumSys == null) {
// ca ne peut pas arriver, ce cs est valider
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-08-10 15:32:19 UTC (rev 1035)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-08-10 16:10:16 UTC (rev 1036)
@@ -414,7 +414,7 @@
SelectionHandler handler = new SelectionHandler();
selectionView.setHandler(handler);
- handler.initView(selectionView.getSelectionDetailsTab());
+ handler.initView(selectionView);
handler.initSelection(selectionView);
// restore session size
@@ -488,7 +488,7 @@
SelectionHandler handler = new SelectionHandler();
selectionView.setHandler(handler);
- handler.initView(selectionView.getSelectionDetailsTab());
+ handler.initView(selectionView);
handler.reloadSelection(selectionView);
// restore session size
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java 2012-08-10 15:32:19 UTC (rev 1035)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java 2012-08-10 16:10:16 UTC (rev 1036)
@@ -50,12 +50,12 @@
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
- String speciesId = (String)value;
- if (reftaxSpecies.containsKey(speciesId)) {
- speciesId = reftaxSpecies.get(speciesId);
+ String speciesText = (String)value;
+ if (reftaxSpecies.containsKey(speciesText)) {
+ speciesText = reftaxSpecies.get(speciesText);
}
- return super.getListCellRendererComponent(list, speciesId, index, isSelected,
+ return super.getListCellRendererComponent(list, speciesText, index, isSelected,
cellHasFocus);
}
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-10 15:32:19 UTC (rev 1035)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-10 16:10:16 UTC (rev 1036)
@@ -53,6 +53,7 @@
import jaxx.runtime.JAXXUtil;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -71,6 +72,7 @@
import fr.ifremer.coser.services.ProjectService;
import fr.ifremer.coser.services.PublicationService;
import fr.ifremer.coser.ui.common.DataHandler;
+import fr.ifremer.coser.ui.common.SpeciesListRenderer;
import fr.ifremer.coser.ui.control.ControlGraphFrame;
import fr.ifremer.coser.ui.control.ControlHandler;
import fr.ifremer.coser.ui.result.SelectionAddResultDialog;
@@ -110,25 +112,25 @@
Component selectedComponent = view.getSelectedComponent();
if (selectedComponent instanceof SelectionListsView) {
SelectionListsView selectionListsView = (SelectionListsView)selectedComponent;
-
+
if (log.isDebugEnabled()) {
log.debug("List details tab selected");
}
-
+
Selection selection = view.getContextValue(Selection.class);
// si la selection n'est pas la même que que celle de la sélection
// on met à jour la liste de "Toutes les especes" (L1)
-
+
List<String> currentList = selectionListsView.getSelectionAllSpeciesListModel().getSpecies();
List<String> selectionSpeciesList = selection.getSelectedSpecies();
-
+
if (!selectionSpeciesList.equals(currentList)) {
-
+
if (log.isDebugEnabled()) {
log.debug("Data changed, fill default selection");
}
-
+
// on calcul également les matrices de d'occurence, densité
Project project = view.getContextValue(Project.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
@@ -138,41 +140,41 @@
density.meanOverDim(1); // moyenne sur les années
Collection<String> speciesAllYear = projectService.getSpeciesWithSizeAllYears(selection);
Collection<String> speciesWithMaturity = projectService.getSpeciesWithMaturity(selection);
-
+
// set matrix on list model
selectionListsView.getSelectionOccurrenceDensityListModel().setOccurrence(occurrence);
selectionListsView.getSelectionOccurrenceDensityListModel().setDensity(density);
-
+
// useless line but fix a event update bug
- // can take huge time becasue somes event are fired
+ // can take huge time because somes event are fired
selectionListsView.getSelectionAllSpeciesList().clearSelection();
-
+
// fill all species data (at final)
selectionListsView.getSelectionAllSpeciesListModel().setSpecies(selectionSpeciesList);
((CoserListSelectionModel)selectionListsView.getSelectionAllSpeciesList().getSelectionModel()).fillSelection();
selectionListsView.getSelectionSizeAllYearListModel().setSizeAllYearSpecies(speciesAllYear);
selectionListsView.getSelectionMaturityListModel().setMaturitySpecies(speciesWithMaturity);
-
+
// rechargement de la selection sauvegardée
// si aucune des autres listes n'est vide
if (!selection.getSelectedSpeciesOccDens().isEmpty() ||
!selection.getSelectedSpeciesSizeAllYear().isEmpty() ||
!selection.getSelectedSpeciesMaturity().isEmpty()) {
-
+
selectionListsView.getSelectionFilterOccurrenceField().setText(String.valueOf(selection.getOccurrenceFilter()));
selectionListsView.getSelectionFilterDensityField().setText(String.valueOf(selection.getDensityFilter()));
-
+
// restauration de la selection sauvegardée
((CoserListSelectionModel)selectionListsView.getSelectionOccurrenceDensityList().getSelectionModel()).setSelectedObjects(selection.getSelectedSpeciesOccDens());
((CoserListSelectionModel)selectionListsView.getSelectionSizeAllYearList().getSelectionModel()).setSelectedObjects(selection.getSelectedSpeciesSizeAllYear());
((CoserListSelectionModel)selectionListsView.getSelectionMaturityList().getSelectionModel()).setSelectedObjects(selection.getSelectedSpeciesMaturity());
}
else {
-
+
if (log.isDebugEnabled()) {
log.debug("Apply occurrence/density filter");
}
-
+
// select all list (not to do for reload)
// init allSize and maturity before (select all with updateOccurrenceDensityFilter)
updateOccurrenceDensityFilter(selectionListsView);
@@ -386,8 +388,19 @@
*
* @param view view
*/
- public void initView(SelectionDetailsView view) {
+ public void initView(SelectionView view) {
+ // init specific tab
+ initView(view.getSelectionDetailsTab());
+ initView(view.getSelectionListsView());
+ }
+ /**
+ * Init detail tab view
+ *
+ * @param view view
+ */
+ protected void initView(SelectionDetailsView view) {
+
// add layers
Project project = view.getContextValue(Project.class);
view.getStrataMap().initMap(project, view.getStataMapInfo());
@@ -399,7 +412,26 @@
int count = view.getTypeSpeciesModel().getSize();
view.getTypeSpeciesList().addSelectionInterval(0, count - 1);
+ // init species renderer
+ SpeciesListRenderer renderer = new SpeciesListRenderer(project.getRefTaxSpeciesMap());
+ view.getFilteredSpeciesList().setCellRenderer(renderer);
+ view.getSelectedSpeciesList().setCellRenderer(renderer);
}
+
+ /**
+ * Init selection list tab view.
+ *
+ * @param view view
+ */
+ protected void initView(SelectionListsView view) {
+ Project project = view.getContextValue(Project.class);
+ Map<String, String> reftaxSpecies = project.getRefTaxSpeciesMap();
+ SpeciesListRenderer renderer = new SpeciesListRenderer(reftaxSpecies);
+ view.getSelectionAllSpeciesList().setCellRenderer(renderer);
+ view.getSelectionOccurrenceDensityList().setCellRenderer(new SpeciesListOccDensRenderer(reftaxSpecies));
+ view.getSelectionSizeAllYearList().setCellRenderer(renderer);
+ view.getSelectionMaturityList().setCellRenderer(renderer);
+ }
/**
* Appelé lorsque la selection de la liste des strate a changé.
@@ -488,6 +520,10 @@
List<String> filteredSpecies = projectService.getProjectSpecies(selection, project, speciesTypes);
+ // code pour que la liste des ids d'especes soit trié
+ // comme celle de visualisation de l'utilisateur (vue triée du rendu)
+ filteredSpecies = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), filteredSpecies));
+
// ne fait pas apparaitre les especes deja selectionnées
List<String> selectedSpecies = view.getSelectedSpeciesListModel().getSpecies();
filteredSpecies.removeAll(selectedSpecies);
@@ -808,38 +844,6 @@
}
/**
- * Sauvegarde la sélection (partie listes de selection).
- *
- * @param view parent view
- * @return {@code true} is slection has been saved
- */
- protected boolean saveProjectSelection(SelectionListsView view) {
- boolean saved = false;
-
- Project project = view.getContextValue(Project.class);
- Selection selection = view.getContextValue(Selection.class);
- ProjectService service = view.getContextValue(ProjectService.class);
- SelectionView selectionView = view.getParentContainer(SelectionView.class);
-
- saveSelectionLists(view, selection);
-
- try {
- service.saveProjectSelection(project, selection);
- saved = true;
- }
- catch (CoserBusinessException ex) {
- if (log.isErrorEnabled()) {
- log.error("Can't save selection", ex);
- }
- JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.selection.saveError"), JOptionPane.ERROR_MESSAGE);
- }
-
- // enable tabs
- selectionView.setEnabledAt(2, selection.isValidated()); // selection lists
- return saved;
- }
-
- /**
* Sauve les éléments selectionnés dans la sélection.
*
* @param view view containing jlist
@@ -888,10 +892,14 @@
boolean canBeValidated = checkSelectionListComments(view, selection);
if (canBeValidated) {
try {
+ saveSelectionLists(view, selection);
service.validSelection(project, selection);
- selection.setValidated(true);
JOptionPane.showMessageDialog(view, _("coser.ui.selection.selectionValidated"),
_("coser.ui.selection.selectionTitle"), JOptionPane.INFORMATION_MESSAGE);
+
+ // enable tabs
+ SelectionView selectionView = view.getParentContainer(SelectionView.class);
+ selectionView.setEnabledAt(2, true); // selection lists
} catch (CoserBusinessException ex) {
if (log.isErrorEnabled()) {
log.error("Can't save selection", ex);
@@ -1176,7 +1184,8 @@
* @param view view
*/
public void addSelectedFilteredSpecies(SelectionDetailsView view) {
-
+ Project project = view.getContextValue(Project.class);
+
// get selected species
Object[] selectedFilteredSpecies = view.getFilteredSpeciesList().getSelectedValues();
Set<String> selectedSpecies = new HashSet<String>();
@@ -1189,7 +1198,11 @@
// met a jour le liste des especes selectionnées
List<String> selectedSpeciesList = new ArrayList<String>(selectedSpecies);
- Collections.sort(selectedSpeciesList);
+
+ // code pour que la liste des ids d'especes soit trié
+ // comme celle de visualisation de l'utilisateur (vue triée du rendu)
+ selectedSpeciesList = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), selectedSpeciesList));
+
view.getSelectedSpeciesListModel().setSpecies(selectedSpeciesList);
// met a jour la liste filtrée (retrait des especes selectionnées)
@@ -1205,6 +1218,7 @@
* @param view view
*/
public void removeSelectedSpecies(SelectionDetailsView view) {
+ Project project = view.getContextValue(Project.class);
List<String> filteredSpecies = new ArrayList<String>(view.getFilteredSpeciesListModel().getSpecies());
List<String> selectedSpecies = new ArrayList<String>(view.getSelectedSpeciesListModel().getSpecies());
@@ -1213,9 +1227,11 @@
selectedSpecies.remove((String)singleSelectedSelectedSpecies);
filteredSpecies.add((String)singleSelectedSelectedSpecies);
}
- Collections.sort(selectedSpecies);
- Collections.sort(filteredSpecies);
+ // code pour que la liste des ids d'especes soit trié
+ // comme celle de visualisation de l'utilisateur (vue triée du rendu)
+ filteredSpecies = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), filteredSpecies));
+
// met à jour la liste des especes selectionnées
view.getSelectedSpeciesListModel().setSpecies(selectedSpecies);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2012-08-10 15:32:19 UTC (rev 1035)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2012-08-10 16:10:16 UTC (rev 1036)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric
+ Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -141,7 +141,6 @@
<OccurrenceDensitySpeciesListModel id="selectionOccurrenceDensityListModel"
onContentsChanged='occurrenceDensitySpeciesLabel.setTitle(_("coser.ui.selection.occurrenceDensitySpecies", selectionOccurrenceDensityList.getSelectedIndices().length, selectionOccurrenceDensityList.getModel().getSize()))' />
<JList id="selectionOccurrenceDensityList" model="{selectionOccurrenceDensityListModel}"
- cellRenderer="{new SpeciesListOccDensRenderer()}"
selectionModel="{new CoserListSelectionModel(selectionOccurrenceDensityList.getSelectionModel(), selectionOccurrenceDensityListModel)}"
onValueChanged='applyOccDensFilter.setEnabled(true); occurrenceDensitySpeciesLabel.setTitle(_("coser.ui.selection.occurrenceDensitySpecies", selectionOccurrenceDensityList.getSelectedIndices().length, selectionOccurrenceDensityList.getModel().getSize()))' />
</JScrollPane>
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesListOccDensRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesListOccDensRenderer.java 2012-08-10 15:32:19 UTC (rev 1035)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesListOccDensRenderer.java 2012-08-10 16:10:16 UTC (rev 1036)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
@@ -28,11 +28,13 @@
import static org.nuiton.i18n.I18n._;
import java.awt.Component;
+import java.util.Map;
import javax.swing.JList;
import org.jdesktop.swingx.renderer.DefaultListRenderer;
+import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.ui.selection.model.OccurrenceDensitySpeciesListModel;
/**
@@ -49,6 +51,12 @@
/** serialVersionUID. */
private static final long serialVersionUID = -5404111064519251687L;
+ protected Map<String, String> reftaxSpecies;
+
+ public SpeciesListOccDensRenderer(Map<String, String> reftaxSpecies) {
+ this.reftaxSpecies = reftaxSpecies;
+ }
+
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
@@ -58,7 +66,12 @@
double occurrence = model.getOccurrence(species);
double density = model.getDensity(species);
- String stringValue = _("coser.ui.selection.occurrencedensityrenderer", species, occurrence, density);
+
+ String speciesText = (String)species;
+ if (reftaxSpecies.containsKey(species)) {
+ speciesText = reftaxSpecies.get(species);
+ }
+ String stringValue = _("coser.ui.selection.occurrencedensityrenderer", speciesText, occurrence, density);
return super.getListCellRendererComponent(list, stringValue, index, isSelected, cellHasFocus);
}
1
0