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
r173 - trunk/coser-ui/src/main/java/fr/ifremer/coser
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
05 Nov '10
Author: chatellier
Date: 2010-11-05 11:34:40 +0000 (Fri, 05 Nov 2010)
New Revision: 173
Log:
Unused import
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2010-11-05 11:34:21 UTC (rev 172)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2010-11-05 11:34:40 UTC (rev 173)
@@ -24,8 +24,6 @@
*/
package fr.ifremer.coser;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.SwingUtilities;
1
0
r172 - in trunk/coser-ui/src/main/java/fr/ifremer/coser: . ui
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
05 Nov '10
Author: chatellier
Date: 2010-11-05 11:34:21 +0000 (Fri, 05 Nov 2010)
New Revision: 172
Log:
Add swing session to restore main frame state
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2010-11-05 10:00:25 UTC (rev 171)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2010-11-05 11:34:21 UTC (rev 172)
@@ -24,6 +24,10 @@
*/
package fr.ifremer.coser;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
@@ -34,6 +38,7 @@
import org.nuiton.i18n.I18n;
import org.nuiton.i18n.init.DefaultI18nInitializer;
import org.nuiton.util.ArgumentsParserException;
+import org.nuiton.widget.SwingSession;
import fr.ifremer.coser.services.ChartService;
import fr.ifremer.coser.services.ImportService;
@@ -124,15 +129,24 @@
}
}
- // define unique context globale values
+ File coserConfigDirectory = new File(coserConfig.getUserConfigDirectory(), "coser");
+ coserConfigDirectory.mkdirs();
+ File mainFrameFile = new File(coserConfigDirectory, "session.xml");
+ SwingSession session = new SwingSession(mainFrameFile, true);
+
+ // define unique context global values
DefaultApplicationContext context = new DefaultApplicationContext();
context.setContextValue(coserConfig);
+ context.setContextValue(session);
context.setContextValue(new ProjectService(coserConfig));
context.setContextValue(new ImportService(coserConfig));
context.setContextValue(new ValidationService(coserConfig));
context.setContextValue(new ChartService(coserConfig));
+
+ // init frame with session reloading
CoserFrame frame = new CoserFrame(context);
frame.setLocationRelativeTo(null);
+ session.add(frame);
frame.setVisible(true);
}
});
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx 2010-11-05 10:00:25 UTC (rev 171)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx 2010-11-05 11:34:21 UTC (rev 172)
@@ -23,7 +23,7 @@
#L%
-->
<JFrame title="coser.ui.mainview.title" width="780" height="540"
- layout="{new BorderLayout()}" onWindowClosing="System.exit(0)">
+ layout="{new BorderLayout()}" name="mainFrame" onWindowClosing="getHandler().quit()">
<CoserFrameHandler id="handler" javaBean="new CoserFrameHandler(this)" />
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 2010-11-05 10:00:25 UTC (rev 171)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-05 11:34:21 UTC (rev 172)
@@ -49,6 +49,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.i18n.I18n;
+import org.nuiton.widget.SwingSession;
import fr.ifremer.coser.CoserBusinessConfig;
import fr.ifremer.coser.CoserBusinessException;
@@ -133,9 +134,11 @@
/**
* Exit application.
- *
+ * Save swing session before exit.
*/
public void quit() {
+ SwingSession session = view.getContextValue(SwingSession.class);
+ session.save();
System.exit(0);
}
1
0
Author: chatellier
Date: 2010-11-05 10:00:25 +0000 (Fri, 05 Nov 2010)
New Revision: 171
Log:
Use nuiton-utils 1.5.1
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-11-04 16:15:33 UTC (rev 170)
+++ trunk/pom.xml 2010-11-05 10:00:25 UTC (rev 171)
@@ -83,7 +83,7 @@
<dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-utils</artifactId>
- <version>1.5</version>
+ <version>1.5.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
1
0
r170 - trunk/coser-ui/src/main/java/fr/ifremer/coser/ui
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 16:15:33 +0000 (Thu, 04 Nov 2010)
New Revision: 170
Log:
Fix sample path
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
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 2010-11-04 16:12:03 UTC (rev 169)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 16:15:33 UTC (rev 170)
@@ -166,7 +166,7 @@
public void showValidatorsConfiguration() {
ValidatorConfiguration validatorConfiguration = new ValidatorConfiguration(view);
- URL sample = Catch.class.getResource("Catch-warning-validation.xml");
+ URL sample = Catch.class.getResource("Catch-error-validation.xml");
File sampleFile = new File(sample.getFile());
validatorConfiguration.getValidationEditor().open(sampleFile);
validatorConfiguration.setLocationRelativeTo(null);
1
0
r169 - in trunk/coser-business/src/main: java/fr/ifremer/coser/services resources/i18n
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 16:12:03 +0000 (Thu, 04 Nov 2010)
New Revision: 169
Log:
Ajout du chemin de fichier dans le message d'erreur
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java
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
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-11-04 15:53:12 UTC (rev 168)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-11-04 16:12:03 UTC (rev 169)
@@ -107,7 +107,7 @@
}
else {
if (originalLoading) {
- checkFileHeader(category, line);
+ checkFileHeader(file, category, line);
if (category.isDataCategory()) {
line = (String[])ArrayUtil.concat(new String[]{AbstractDataEntity.PROPERTY_LINE}, line);
}
@@ -144,11 +144,12 @@
/**
* Check csv file header names and order depending on file category.
*
- * @param category
- * @param line
+ * @param file file
+ * @param category category
+ * @param line header line to ckeck
* @throws CoserBusinessException
*/
- protected void checkFileHeader(Category category, String[] line) throws CoserBusinessException {
+ protected void checkFileHeader(File file, Category category, String[] line) throws CoserBusinessException {
String[] enHeaders = null;
String[] frHeaders = null;
@@ -180,7 +181,8 @@
if (frHeaders != null) {
if (!Arrays.equals(line, enHeaders) && !Arrays.equals(line, frHeaders)) {
- throw new CoserBusinessException(_("Wrong header detected in file. Find : %s, expected %s or %s",
+ throw new CoserBusinessException(_("Wrong header detected in file %s. Find : %s, expected %s or %s",
+ file.getAbsolutePath(),
StringUtils.join(line, ", "),
StringUtils.join(enHeaders, ", "),
StringUtils.join(frHeaders, ", ")));
@@ -188,7 +190,8 @@
}
else {
if (!Arrays.equals(line, enHeaders)) {
- throw new CoserBusinessException(_("Wrong header detected in file. Find : %s, expected %s",
+ throw new CoserBusinessException(_("Wrong header detected in file %s. Find : %s, expected %s",
+ file.getAbsolutePath(),
StringUtils.join(line, ", "),
StringUtils.join(enHeaders, ", ")));
}
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 2010-11-04 15:53:12 UTC (rev 168)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-04 16:12:03 UTC (rev 169)
@@ -37,9 +37,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.SortedMap;
import java.util.SortedSet;
-import java.util.TreeMap;
import java.util.TreeSet;
import org.apache.commons.beanutils.PropertyUtils;
@@ -56,7 +54,6 @@
import fr.ifremer.coser.bean.Control;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.bean.Selection;
-import fr.ifremer.coser.bean.Specy;
import fr.ifremer.coser.command.Command;
import fr.ifremer.coser.command.DeleteLineCommand;
import fr.ifremer.coser.command.MergeSpeciesCommand;
@@ -148,6 +145,12 @@
for (Map.Entry<Category, File> categoryAndFile : categoriesAndFiles.entrySet()) {
Category category = categoryAndFile.getKey();
File dataFile = categoryAndFile.getValue();
+
+ // test file existence
+ if (!dataFile.exists()) {
+ throw new CoserBusinessException(_("Can't read file %s for category %s", dataFile.getAbsolutePath(), _(category.getTranslationKey())));
+ }
+
DataStorage dataStorage = importService.loadCSVFile(project, category, dataFile, true);
addProjectContent(project, control, category, dataStorage, false);
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 2010-11-04 15:53:12 UTC (rev 168)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-11-04 16:12:03 UTC (rev 169)
@@ -2,6 +2,7 @@
Can't\ create\ project=
Can't\ find\ line\ %s\ for\ deletion=
Can't\ find\ line\ %s\ for\ undeletion=
+Can't\ read\ file\ %s\ for\ category\ %s=
Can't\ read\ file\ '%s'.\ Check\ CSV\ file\ separator=
Can't\ replace\ data\ value.\ Expected\ %s\ but\ was\ %s=
Depth\ attribute\ is\ not\ a\ valid\ double=
@@ -16,6 +17,8 @@
Sex\ is\ mandatory=
Specy\ %s\ doesn't\ exist\ in\ referential=
Weight\ attribute\ is\ not\ a\ valid\ double=
+Wrong\ header\ detected\ in\ file\ %s.\ Find\ \:\ %s,\ expected\ %s=
+Wrong\ header\ detected\ in\ file\ %s.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=
Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s=
Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=
You\ must\ enter\ a\ campagne\ name.=
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 2010-11-04 15:53:12 UTC (rev 168)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-11-04 16:12:03 UTC (rev 169)
@@ -2,6 +2,7 @@
Can't\ create\ project=Impossible de cr\u00E9er le projet
Can't\ find\ line\ %s\ for\ deletion=
Can't\ find\ line\ %s\ for\ undeletion=
+Can't\ read\ file\ %s\ for\ category\ %s=Impossible de lire le fichier %s pour la cat\u00E9gorie %s \!
Can't\ read\ file\ '%s'.\ Check\ CSV\ file\ separator=Impossible de lire le fichier '%s'.\nMerci de v\u00E9rifier le s\u00E9parateur utilis\u00E9 est bien un point-virgule ';'
Can't\ replace\ data\ value.\ Expected\ %s\ but\ was\ %s=
Depth\ attribute\ is\ not\ a\ valid\ double=
@@ -16,8 +17,8 @@
Sex\ is\ mandatory=
Specy\ %s\ doesn't\ exist\ in\ referential=L'esp\u00E8ce %s n'existe pas dans le r\u00E9f\u00E9rentiel
Weight\ attribute\ is\ not\ a\ valid\ double=
-Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s.
-Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s\nou\u2009\:\n\t%s.
+Wrong\ header\ detected\ in\ file\ %s.\ Find\ \:\ %s,\ expected\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9 dans\n%s.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s.
+Wrong\ header\ detected\ in\ file\ %s.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9 dans %s.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s\nou\u2009\:\n\t%s.
You\ must\ enter\ a\ campagne\ name.=
You\ must\ enter\ a\ espece\ name.=
You\ must\ enter\ a\ haul\ name.=
1
0
r168 - 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-business/src/main/resources/i18n coser-business/src/test/java/fr/ifremer/coser/services coser-business/src/test/resources/csv/correct coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/selection coser-ui/src/main/resources/i18n
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 15:53:12 +0000 (Thu, 04 Nov 2010)
New Revision: 168
Log:
Ajout du chargement du fichier de code types des especes.
Filtrage de la liste des especes par leur type.
Added:
trunk/coser-business/src/test/resources/csv/correct/testtypeespeces.csv
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java
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-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/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListSelectionModel.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java
trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -81,6 +81,11 @@
String result = getOption(CoserBusinessOption.REFERENCE_ZONES.key);
return result;
}
+
+ public String getReferenceTypeEspecesPath() {
+ String result = getOption(CoserBusinessOption.REFERENCE_TYPE_ESPECES.key);
+ return result;
+ }
public double getObervationNobsmin() {
double result = getOptionAsDouble(CoserBusinessOption.OBSERVATION_NOBSMIN.key);
@@ -95,6 +100,7 @@
REFERENCE_SPECIES("coser.reference.species", _("coser.config.reference.species.description"), "", String.class, false, false),
REFERENCE_ZONES("coser.reference.zones", _("coser.config.reference.zones.description"), "", String.class, false, false),
+ REFERENCE_TYPE_ESPECES("coser.reference.typeEspeces", _("coser.config.reference.typeEspeces.description"), "", String.class, false, false),
OBSERVATION_NOBSMIN("coser.observation.nobsmin", _("coser.config.observation.nobsmin.description"), "1.0", Double.class, false, false);
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -77,7 +77,8 @@
STRATA(n_("coser.business.category.strata"), "strata"),
HAUL(n_("coser.business.category.haul"), "haul"),
LENGTH(n_("coser.business.category.length"), "length"),
- REFTAX_SPECIES(n_("coser.business.category.reftax.species"), "reftaxSpecies", false);
+ REFTAX_SPECIES(n_("coser.business.category.reftax.species"), "reftaxSpecies", false),
+ TYPE_ESPECES(n_("coser.business.category.typeEspece"), "codeTypeEspeces", false);
protected String translationKey;
protected String storageFileName;
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -52,6 +52,10 @@
"C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa"
};
+ public static final String[] TYPE_ESPECE_HEADER = {
+ "Types","Commentaire","NumSys min","NumSys max"
+ };
+
public static final String PROPERTY_SELECTIONS="selections";
protected String name;
@@ -62,6 +66,9 @@
/** Reftax SIH. */
protected DataStorage refTaxSpecies;
+
+ /** Type especes */
+ protected DataStorage typeEspeces;
public String getName() {
return name;
@@ -105,6 +112,14 @@
this.refTaxSpecies = refTaxSpecies;
}
+ public DataStorage getTypeEspeces() {
+ return typeEspeces;
+ }
+
+ public void setTypeEspeces(DataStorage typeEspeces) {
+ this.typeEspeces = typeEspeces;
+ }
+
/**
* Force all container data clear to force free memory.
*/
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -173,6 +173,9 @@
case REFTAX_SPECIES:
enHeaders = Project.REFTAX_SPECIES_HEADER;
break;
+ case TYPE_ESPECES:
+ enHeaders = Project.TYPE_ESPECE_HEADER;
+ break;
}
if (frHeaders != null) {
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -43,6 +43,7 @@
import java.util.TreeSet;
import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -221,21 +222,25 @@
Project project = new Project();
project.setName(projectName);
- // load additional files
- File inputFile = new File(projectDirectory,
- Category.REFTAX_SPECIES.getStorageFileName() +
- CoserConstants.STORAGE_CSV_EXTENSION);
+ for (Category category : Category.values()) {
+ // load only additional files
+ if (!category.isDataCategory()) {
+ File inputFile = new File(projectDirectory,
+ category.getStorageFileName() +
+ CoserConstants.STORAGE_CSV_EXTENSION);
+
+ if (inputFile.isFile()) {
+ DataStorage dataStorage = importService.loadCSVFile(project, category, inputFile, false);
+ addProjectContent(project, null, category, dataStorage, false);
+ }
+ else {
+ // si on arrive ici et qu'un fichier de reference
+ // n'existe pas, c'est grave
+ throw new CoserBusinessException(_("Missing file %s", inputFile));
+ }
+ }
+ }
- if (inputFile.isFile()) {
- DataStorage dataStorage = importService.loadCSVFile(project, Category.REFTAX_SPECIES, inputFile, true);
- addProjectContent(project, null, Category.REFTAX_SPECIES, dataStorage, false);
- }
- else {
- // si on arrive ici et qu'un fichier original
- // n'existe pas, c'est grave
- throw new CoserBusinessException(_("Missing file %s", inputFile));
- }
-
// reload selection without data
Map<String, Selection> selections = new HashMap<String, Selection>();
File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY);
@@ -600,6 +605,9 @@
case REFTAX_SPECIES:
project.setRefTaxSpecies(content);
break;
+ case TYPE_ESPECES:
+ project.setTypeEspeces(content);
+ break;
}
}
@@ -786,6 +794,31 @@
}
/**
+ * Retourne la liste des type d'especes definie dans le projet.
+ *
+ * @param project project to search into
+ * @return project species type
+ */
+ public List<String> getProjectSpeciesTypes(Project project) {
+ List<String> types = new ArrayList<String>();
+
+ // "Types","Commentaire","NumSys min","NumSys max"
+
+ Iterator<String[]> itTuples = project.getTypeEspeces().iterator();
+ itTuples.next(); // skip headers
+
+ while (itTuples.hasNext()) {
+ String[] tuple = itTuples.next();
+
+ String type = tuple[0];
+ types.add(type);
+ }
+
+ Collections.sort(types);
+ return types;
+ }
+
+ /**
* Find all defined year in model.
*
* Le parcours est fait sur le fichier "haul", c'est potentiellement
@@ -855,14 +888,18 @@
* Les especes sont determinées :
* - en lisant les traits pour determiner les traits à partir des zones
* - en lisant les captures pour determiner les especes à partir des traits
+ * - en filtrant la liste des especes
*
+ * @param project project
* @param container data container
* @param zoneName zone name
- * @param beginYear begin year (can be null)
- * @param endYear end year (can be null)
+ * @param beginYear begin year
+ * @param endYear end year
+ * @param filterSpecyType filterSpecyType
* @return species
*/
- public List<Specy> getProjectSpecies(AbstractDataContainer container, List<String> zoneName, Integer beginYear, Integer endYear) {
+ public List<String> getProjectSpecies(Project project, AbstractDataContainer container, List<String> zoneName,
+ Integer beginYear, Integer endYear, List<String> filterSpecyType) {
// first get traits list
Set<String> traits = new HashSet<String>();
@@ -892,7 +929,7 @@
}
// second get species with trait list
- SortedMap<String, Specy> result = new TreeMap<String, Specy>();
+ List<String> result = new ArrayList<String>();
itTuple = container.getCatch().iterator();
itTuple.next(); // skip header
while (itTuple.hasNext()) {
@@ -906,10 +943,8 @@
String haul = tuple[Catch.INDEX_HAUL];
if (intAnnee >= beginYear && intAnnee <= endYear && traits.contains(haul)) {
String species = tuple[Catch.INDEX_SPECIES];
- if (!result.containsKey(species)) {
- Specy specy = new Specy();
- specy.setName(species);
- result.put(species, specy);
+ if (!result.contains(species)) {
+ result.add(species);
}
}
}
@@ -920,8 +955,61 @@
}
}
- List<Specy> resultList = new ArrayList<Specy>(result.values());
- return resultList;
+ // third, filter specy list with specy types filter
+ if (CollectionUtils.isNotEmpty(filterSpecyType)) {
+ // load map SpecyName > numSys
+ Map<String, Integer> map = new HashMap<String, Integer>();
+ Iterator<String[]> refTaxIterator = project.getRefTaxSpecies().iterator();
+ refTaxIterator.next(); // skip header
+ 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);
+ }
+
+ // load specy type map SpecyTypeName > [min, max]
+ // iteration sur les type d'especes
+ Map<String, Integer[]> mapType = new HashMap<String, Integer[]>();
+ Iterator<String[]> itTypeSpecies = project.getTypeEspeces().iterator();
+ itTypeSpecies.next(); // skip header
+ while (itTypeSpecies.hasNext()) {
+ // "Types";"Commentaire";"NumSys min";"NumSys max"
+ String[] tuple = itTypeSpecies.next();
+ String specyType = tuple[0];
+
+ if (filterSpecyType.contains(specyType)) {
+ Integer iMinNumSys = Integer.valueOf(tuple[2]);
+ Integer iMaxNumSys = Integer.valueOf(tuple[3]);
+ mapType.put(specyType, new Integer[]{iMinNumSys, iMaxNumSys});
+ }
+ }
+
+ // iteration sur les especes trouvées
+ Iterator<String> itSpecies = result.iterator();
+ while (itSpecies.hasNext()) {
+ String specy = itSpecies.next();
+ Integer specyNumSys = map.get(specy);
+
+ // test si le numsys est dans les bornes d'un
+ // des type d'espece demandé
+ boolean foundInFilter = false;
+ for (Integer[] bornes : mapType.values()) {
+ if (specyNumSys >= bornes[0]
+ && specyNumSys <= bornes[1]){
+ foundInFilter = true;
+ }
+ }
+
+ if (!foundInFilter) {
+ itSpecies.remove();
+ }
+ }
+ }
+
+ Collections.sort(result);
+ return result;
}
/**
@@ -976,4 +1064,94 @@
return project;
}
+
+ /**
+ * Effort d'échantillonnage: nombre de traits par strate par année.
+ *
+ * lengthunique=function(x){length(unique(x))} # nombre d'éléments unique dans x
+ *
+ * haulcount=tapply(TRAITS$Trait,list(stratum=TRAITS$Strate,year=TRAITS$Anneer),FUN=lengthunique)
+ * haulcount[is.na(haulcount)]=0
+ * total=apply(haulcount,2,sum)
+ * haulcount=rbind(haulcount,total)
+ * if(language==2) tab=cbind(Strate=dimnames(haulcount)[[1]],haulcount)
+ * else tab=cbind(Stratum=dimnames(haulcount)[[1]],haulcount)
+ *
+ * @param project
+ * @param selection
+ */
+ public void getSamplingEffort(Project project, Selection selection) {
+
+ }
+
+ /**
+ * Occurrence : pourcentage des traits dans lesquels une espèce est présentes
+ *
+ * years=seq(min(CAPTURES$Annee), max(CAPTURES$Annee))
+ * nyears=length(years)
+ * catch=CAPTURES[CAPTURES$Nombre>0,] #prendre seulement données positives
+ *
+ * #compter nombre de traits par année où chaque espèce est présent
+ * occurence=tapply(catch$Trait,list(species=catch$Espece,year=catch$Annee),lengthunique)
+ * occurrence[is.na(occurence)]<-0
+ *
+ * rapport.func=function(x,v) {return (x/v);}
+ *
+ * #diviser nombre de traits avec présence par nombre total de traits
+ * pct.occur=apply(occurence,1,rapport.func,v=haulcount)# haulcount de 1)
+ * pct.occur=t(round(pct.occur*100,2)) # multiplier par 100 et arrondir à 2 décimales
+ *
+ * colnames(pct.occur)=colnames(haulcount) #affectation noms colonnes matrice
+ * rownames(pct.occur)=rownames(occur) #nom des espèces
+ *
+ * #calculerl l'occurrence moyenne à travers les années
+ * provi.oc=round(apply(pct.occur,1,mean),2)
+ * pct.occur=cbind(pct.occur,MeanOccurence=provi.oc)
+ *
+ * @param project
+ * @param selection
+ */
+ public void getOccurence(Project project, Selection selection) {
+
+ }
+
+ /**
+ * Densité: nombre par km2 par espèce par année
+ *
+ * years=sort(unique(TRAITS$Annee))
+ *
+ * #surface total pour toutes les strates
+ * totsurface=sum(STRATES$Surface)
+ *
+ * #ordonner table STRATES par nom des strates
+ * STRATES=STRATES[order(STRATES$Strate),]
+ *
+ * #combiner les 3 tables de données dans une seule table tab
+ * tab=merge(CAPTURES,STRATES,by.x=c("Annee","Trait"),by.y=c("Annee","Trait"))
+ * tab=merge(tab,TRAITS, by.x=c("Annee","Trait"),by.y=c("Annee","Trait"))
+ *
+ * species=sort(unique(CAPTURES$Espece))
+ *
+ * #calculer la densité moyenne par année par strate par espèce
+ * densparstrate=tapply(tab$Nombre/tab$SurfaceBalayee,list(tab$Espece, tab$Annee, tab$Strate), mean)
+ * densparstrate[is.na(densparstrate)]=0 # remplace NA par 0
+ *
+ * #surface par annee et strate et espèce
+ * surfaceparstrate=tapply(tab$Surface, list(tab$Espece, tab$Annee, tab$Strate), unique)
+ *
+ * #multiplier la densité par la surface de la strate pour obtenir nombre par année-strate
+ * nombreparstrate= surfaceparstrate* densparstrate
+ *
+ * #sommer nombre sur strates par année pour chaque espèce et diviser par surface totale
+ * densiteparannee=apply(nombreparstrate,c(1,2),sum)/totsurface
+ *
+ * #densité moyenne pour la période
+ * densitemoyenneespece=apply(densiteparanne,1,mean)
+ *
+ * @param project project
+ * @param selection selection
+ */
+ public void getDensity(Project project, Selection selection) {
+
+ }
}
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-11-04 15:53:12 UTC (rev 168)
@@ -31,6 +31,7 @@
coser.business.category.length=Length
coser.business.category.reftax.species=
coser.business.category.strata=Stata
+coser.business.category.typeEspece=Specy type code
coser.business.chart.compareCatchLengthNumberTitle=
coser.business.common.number=
coser.business.common.year=
@@ -46,6 +47,7 @@
coser.config.observation.nobsmin.description=
coser.config.projects.directory.description=
coser.config.reference.species.description=
+coser.config.reference.typeEspeces.description=
coser.config.reference.zones.description=
coser.config.validator.directory.description=
lat\ attribute\ is\ not\ a\ valid\ double=
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-11-04 15:53:12 UTC (rev 168)
@@ -31,6 +31,7 @@
coser.business.category.length=Tailles
coser.business.category.reftax.species=Reftax (esp\u00E8ce)
coser.business.category.strata=Strates
+coser.business.category.typeEspece=Code type des esp\u00E8ces
coser.business.chart.compareCatchLengthNumberTitle=Comparaison des nombre dans Capture et Taille
coser.business.common.number=Nombre
coser.business.common.year=Ann\u00E9e
@@ -46,6 +47,7 @@
coser.config.observation.nobsmin.description=Nombre minimal d'observation
coser.config.projects.directory.description=Emplacement des projets Coser
coser.config.reference.species.description=Emplacement du fichier de r\u00E9f\u00E9rence des esp\u00E8ces
+coser.config.reference.typeEspeces.description=Emplacement du fichier de code type des esp\u00E8ces
coser.config.reference.zones.description=Emplacement du fichier de r\u00E9f\u00E9rence des zones
coser.config.validator.directory.description=Emplacement des fichiers de validations
lat\ attribute\ is\ not\ a\ valid\ double=
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -78,6 +78,15 @@
FileUtils.deleteDirectory(testDirectory);
}
+ /**
+ * Create an initialized project with csv file in test resources.
+ *
+ * Project is filled with control data (not selections).
+ *
+ * @param projectService
+ * @return
+ * @throws CoserBusinessException
+ */
protected Project createTestProject(ProjectService projectService) throws CoserBusinessException {
Project project = new Project();
@@ -88,6 +97,7 @@
File testLength = new File(CoserTestAbstract.class.getResource("/csv/correct/testlength.csv").getFile());
File testStrata = new File(CoserTestAbstract.class.getResource("/csv/correct/teststrata.csv").getFile());
File testReftax = new File(CoserTestAbstract.class.getResource("/csv/correct/testreftax.csv").getFile());
+ File testTypeEspeces = new File(CoserTestAbstract.class.getResource("/csv/correct/testtypeespeces.csv").getFile());
Map<Category, File> categoriesAndFile = new HashMap<Category, File>();
categoriesAndFile.put(Category.CATCH, testCatch);
@@ -95,7 +105,8 @@
categoriesAndFile.put(Category.LENGTH, testLength);
categoriesAndFile.put(Category.STRATA, testStrata);
categoriesAndFile.put(Category.REFTAX_SPECIES, testReftax);
-
+ categoriesAndFile.put(Category.TYPE_ESPECES, testTypeEspeces);
+
project = projectService.createProject(project, categoriesAndFile);
project = projectService.loadControlData(project);
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -227,21 +227,21 @@
allZones.add("STR5");
allZones.add("STR6");
- List<Specy> species = service.getProjectSpecies(selection, allZones, 2010, 2011);
+ List<String> species = service.getProjectSpecies(project, selection, allZones, 2010, 2011, null);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(selection, allZones, 2011, 2011);
+ species = service.getProjectSpecies(project, selection, allZones, 2011, 2011, null);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(selection, allZones, 2009, 2009);
+ species = service.getProjectSpecies(project, selection, allZones, 2009, 2009, null);
Assert.assertEquals(0, species.size());
// test with no zones
- species = service.getProjectSpecies(selection, new ArrayList<String>(), 2010, 2011);
+ species = service.getProjectSpecies(project, selection, new ArrayList<String>(), 2010, 2011, null);
Assert.assertEquals(0, species.size());
// test with only one zone
- species = service.getProjectSpecies(selection, Collections.singletonList("STR6"), 2010, 2011);
+ species = service.getProjectSpecies(project, selection, Collections.singletonList("STR6"), 2010, 2011, null);
Assert.assertEquals(4, species.size());
}
Added: trunk/coser-business/src/test/resources/csv/correct/testtypeespeces.csv
===================================================================
--- trunk/coser-business/src/test/resources/csv/correct/testtypeespeces.csv (rev 0)
+++ trunk/coser-business/src/test/resources/csv/correct/testtypeespeces.csv 2010-11-04 15:53:12 UTC (rev 168)
@@ -0,0 +1,4 @@
+"Types";"Commentaire";"NumSys min";"NumSys max"
+"Type1";;"00001";"00002"
+"Type2";;"00003";"00005"
+"Type3";;"00006";"00010"
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -150,6 +150,7 @@
modelBuilder.addCategory(_("coser.config.category.main"), _("coser.config.category.main.description"));
modelBuilder.addOption(CoserBusinessConfig.CoserBusinessOption.REFERENCE_SPECIES);
modelBuilder.addOption(CoserBusinessConfig.CoserBusinessOption.REFERENCE_ZONES);
+ modelBuilder.addOption(CoserBusinessConfig.CoserBusinessOption.REFERENCE_TYPE_ESPECES);
// category control
modelBuilder.addCategory(_("coser.config.category.control"), _("coser.config.category.control.description"));
@@ -225,12 +226,16 @@
reftaxSpeciesPath = config.getReferenceSpeciesPath();
}
+ // get correct codeTypeEspece file to use
+ String codeTypeEspecePath = config.getReferenceTypeEspecesPath();
+
// convert to file
File capturesFile = new File(capturesPath);
File stratesFile = new File(stratesPath);
File traitsFile = new File(traitsPath);
File taillesFile = new File(taillesPath);
File reftaxSpeciesFile = new File(reftaxSpeciesPath);
+ File codeTypeEspeceFile = new File(codeTypeEspecePath);
// package in map
final Map<Category, File> fileToLoad = new HashMap<Category, File>();
@@ -239,6 +244,7 @@
fileToLoad.put(Category.LENGTH, taillesFile);
fileToLoad.put(Category.STRATA, stratesFile);
fileToLoad.put(Category.REFTAX_SPECIES, reftaxSpeciesFile);
+ fileToLoad.put(Category.TYPE_ESPECES, codeTypeEspeceFile);
// disable create button
projectView.getCreateProjectButton().setEnabled(false);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 15:53:12 UTC (rev 168)
@@ -109,7 +109,10 @@
<row>
<cell fill="horizontal" weightx="1" weighty="1" columns="2">
<JScrollPane>
- <JList />
+ <TypeSpecyListModel id="typeSpecyModel" constructorParams="this" />
+ <JList id="typeSpecyList" model="{typeSpecyModel}"
+ selectionModel="{new OneClicListSelectionModel(typeSpecyList.getSelectionModel(), typeSpecyModel)}"
+ onValueChanged="getHandler().updateSelectionSpecies(this)"/>
</JScrollPane>
</cell>
</row>
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -31,11 +31,9 @@
import java.util.ArrayList;
import java.util.List;
-import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
-import javax.swing.event.ListSelectionEvent;
import jaxx.runtime.JAXXUtil;
@@ -87,14 +85,16 @@
}
/**
- * Rafraichit la liste des especes avec les dates sélectionnées.
+ * Rafraichit la liste des especes avec les dates sélectionnées
+ * et les zones selectionnées ET filtrées par la liste
+ * des type d'especes.
*
* Appelé lorsque la selection de la liste des zones change.
*
* @param view view
*/
public void updateSelectionSpecies(SelectionDetailsView view) {
- //Project project = view.getContextValue(Project.class);
+ Project project = view.getContextValue(Project.class);
Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
@@ -105,12 +105,19 @@
zones.add((String)selectedZone);
}
+ // get selected specy types
+ Object[] selectedSpecyTypes = view.getTypeSpecyList().getSelectedValues();
+ List<String> specyTypes = new ArrayList<String>();
+ for (Object selectedSpecyType : selectedSpecyTypes) {
+ specyTypes.add((String)selectedSpecyType);
+ }
+
Integer beginYear = (Integer)view.getSelectionDetailsBeginYearField().getSelectedItem();
Integer endYear = (Integer)view.getSelectionDetailsEndYearField().getSelectedItem();
// il est possible que l'evenement fasse suite a une seule des selections
if (beginYear != null && endYear != null) {
- List<Specy> species = projectService.getProjectSpecies(selection, zones, beginYear, endYear);
+ List<String> species = projectService.getProjectSpecies(project, selection, zones, beginYear, endYear, specyTypes);
view.getSpecyListModel().setSpecy(species);
}
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -61,16 +61,16 @@
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
- Specy specy = (Specy)value;
+ String specy = (String)value;
//JCheckBox comboBox = new JCheckBox();
String stringValue = null;
- if (displayOccurrenceAndDensity) {
+ /*if (displayOccurrenceAndDensity) {
stringValue = "<html>" + specy.getName() + " <span style='font-size:85%;color:gray;'>(X=44, Y=21)</span><html>";
}
- else {
- stringValue = specy.getName();
- }
+ else {*/
+ stringValue = specy;
+ //}
//comboBox.setText(stringValue);
return super.getListCellRendererComponent(list, stringValue, index, isSelected, cellHasFocus);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -50,11 +50,11 @@
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
- Specy specy = (Specy)value;
- String stringValue = specy.getName();
+ String specy = (String)value;
+ //String stringValue = specy.getName();
//JCheckBox checkBox = new JCheckBox(stringValue);
//checkBox.setSelected(isSelected);
- return super.getListCellRendererComponent(list, stringValue, index, isSelected, cellHasFocus);
+ return super.getListCellRendererComponent(list, specy, index, isSelected, cellHasFocus);
}
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListSelectionModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListSelectionModel.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListSelectionModel.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -90,14 +90,12 @@
@Override
public void contentsChanged(ListDataEvent e) {
clearSelection();
- System.out.println("clear : " + selectedObjects);
Iterator<Object> itO = selectedObjects.iterator();
while (itO.hasNext()) {
Object o = itO.next();
int index = specyListModel.getIndexOf(o);
-
- System.out.println(((Specy)o).getName() + " index = " + index);
+
if (index >= 0) {
addSelectionInterval(index, index);
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -54,9 +54,9 @@
private final static Log log = LogFactory.getLog(SpecyListTestModel.class);
- protected List<Specy> species = new ArrayList<Specy>();
+ protected List<String> species = new ArrayList<String>();
- public void setSpecy(List<Specy> species) {
+ public void setSpecy(List<String> species) {
this.species = species;
fireContentsChanged(this, 0, species.size());
}
@@ -99,7 +99,7 @@
Object[] selectedValues = source.getSelectedValues();
species.clear();
for (Object selectedValue : selectedValues) {
- Specy specy = (Specy)selectedValue;
+ String specy = (String)selectedValue;
species.add(specy);
}
fireContentsChanged(this, 0, species.size() - 1);
Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -0,0 +1,82 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 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
+ * 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.coser.ui.selection;
+
+import java.util.List;
+
+import javax.swing.AbstractListModel;
+
+import fr.ifremer.coser.bean.Project;
+import fr.ifremer.coser.services.ProjectService;
+
+/**
+ * Affiche la liste des types d'especes définie dans le projet.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class TypeSpecyListModel extends AbstractListModel {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 441910182067909029L;
+
+ protected SelectionDetailsView view;
+
+ protected List<String> types;
+
+ public TypeSpecyListModel(SelectionDetailsView view) {
+ super();
+ this.view = view;
+ }
+
+ protected List<String> getTypes() {
+ if (types == null) {
+ Project project = view.getContextValue(Project.class);
+ ProjectService service = view.getContextValue(ProjectService.class);
+ types = service.getProjectSpeciesTypes(project);
+ }
+ return types;
+ }
+
+ /*
+ * @see javax.swing.ListModel#getSize()
+ */
+ @Override
+ public int getSize() {
+ return getTypes().size();
+ }
+
+ /*
+ * @see javax.swing.ListModel#getElementAt(int)
+ */
+ @Override
+ public Object getElementAt(int index) {
+ return getTypes().get(index);
+ }
+}
Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties 2010-11-04 15:53:12 UTC (rev 168)
@@ -97,7 +97,7 @@
coser.ui.selection.details.showSpreciesTip=Afficher la table des esp\u00E8ces
coser.ui.selection.details.species=Esp\u00E8ces \:
coser.ui.selection.details.technicalComment=Commentaire technique
-coser.ui.selection.details.type=Type \:
+coser.ui.selection.details.type=Filtrer par type \:
coser.ui.selection.details.zone=Zone \:
coser.ui.selection.filter.density=Densit\u00E9 \:
coser.ui.selection.filter.filter=Filtrer
1
0
r167 - 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 coser-ui/src/main/java/fr/ifremer/coser/ui/selection
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 13:35:35 +0000 (Thu, 04 Nov 2010)
New Revision: 167
Log:
Rafraichissement de la liste des especes ?\195?\160 partir de la liste des zones.
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.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 2010-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-04 13:35:35 UTC (rev 167)
@@ -32,9 +32,11 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeMap;
@@ -850,27 +852,60 @@
*
* Used in selection ui.
*
+ * Les especes sont determinées :
+ * - en lisant les traits pour determiner les traits à partir des zones
+ * - en lisant les captures pour determiner les especes à partir des traits
+ *
* @param container data container
+ * @param zoneName zone name
* @param beginYear begin year (can be null)
* @param endYear end year (can be null)
* @return species
*/
- public List<Specy> getProjectSpecies(AbstractDataContainer container, Integer beginYear, Integer endYear) {
-
+ public List<Specy> getProjectSpecies(AbstractDataContainer container, List<String> zoneName, Integer beginYear, Integer endYear) {
+
+ // first get traits list
+ Set<String> traits = new HashSet<String>();
+ Iterator<String[]> itTuple = container.getHaul().iterator();
+ itTuple.next(); // skip header
+ while (itTuple.hasNext()) {
+ String[] tuple = itTuple.next();
+
+ // Campagne;Annee;Trait;Mois;Strate;SurfaceBalayee;Lat;Long;ProfMoy
+ String annee = tuple[Haul.INDEX_YEAR];
+ try {
+ int intAnnee = Integer.parseInt(annee);
+
+ if (intAnnee >= beginYear && intAnnee <= endYear) {
+ String strataName = tuple[Haul.INDEX_STRATUM];
+ if (zoneName.contains(strataName)) {
+ String traitsName = tuple[Haul.INDEX_HAUL];
+ traits.add(traitsName);
+ }
+ }
+ }
+ catch (NumberFormatException ex) {
+ if (log.isWarnEnabled()) {
+ log.warn("Can't parse year '" + annee + "' as int, can't happen with controled data");
+ }
+ }
+ }
+
+ // second get species with trait list
SortedMap<String, Specy> result = new TreeMap<String, Specy>();
-
- Iterator<String[]> itTuple = container.getCatch().iterator();
+ itTuple = container.getCatch().iterator();
itTuple.next(); // skip header
while (itTuple.hasNext()) {
String[] tuple = itTuple.next();
- String species = tuple[Catch.INDEX_SPECIES];
// "Campagne","Annee","Trait","Espece","Nombre","Poids"
String annee = tuple[Catch.INDEX_YEAR];
try {
int intAnnee = Integer.parseInt(annee);
- if (intAnnee >= beginYear && intAnnee <= endYear) {
+ String haul = tuple[Catch.INDEX_HAUL];
+ if (intAnnee >= beginYear && intAnnee <= endYear && traits.contains(haul)) {
+ String species = tuple[Catch.INDEX_SPECIES];
if (!result.containsKey(species)) {
Specy specy = new Specy();
specy.setName(species);
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 2010-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-04 13:35:35 UTC (rev 167)
@@ -26,6 +26,8 @@
package fr.ifremer.coser.services;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -216,15 +218,31 @@
public void testProjectSpecies() throws CoserBusinessException {
Project project = createTestProject(service);
Selection selection = service.initProjectSelection(project);
-
- List<Specy> species = service.getProjectSpecies(selection, 2010, 2011);
+
+ List<String> allZones = new ArrayList<String>();
+ allZones.add("STR1");
+ allZones.add("STR2");
+ allZones.add("STR3");
+ allZones.add("STR4");
+ allZones.add("STR5");
+ allZones.add("STR6");
+
+ List<Specy> species = service.getProjectSpecies(selection, allZones, 2010, 2011);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(selection, 2011, 2011);
+ species = service.getProjectSpecies(selection, allZones, 2011, 2011);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(selection, 2009, 2009);
+ species = service.getProjectSpecies(selection, allZones, 2009, 2009);
Assert.assertEquals(0, species.size());
+
+ // test with no zones
+ species = service.getProjectSpecies(selection, new ArrayList<String>(), 2010, 2011);
+ Assert.assertEquals(0, species.size());
+
+ // test with only one zone
+ species = service.getProjectSpecies(selection, Collections.singletonList("STR6"), 2010, 2011);
+ Assert.assertEquals(4, species.size());
}
/**
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 2010-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 13:35:35 UTC (rev 167)
@@ -36,7 +36,6 @@
import java.util.Locale;
import java.util.Map;
-import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 13:35:35 UTC (rev 167)
@@ -89,7 +89,8 @@
<JList id="zoneList" model="{selectionZoneModel}"
cellRenderer="{new SelectionZoneListRenderer()}"
enabled="{selectionDetailsBeginYearField.getSelectedItem() != null && selectionDetailsEndYearField.getSelectedItem() != null}"
- selectionModel="{new OneClicListSelectionModel(zoneList.getSelectionModel(), selectionZoneModel)}" />
+ selectionModel="{new OneClicListSelectionModel(zoneList.getSelectionModel(), selectionZoneModel)}"
+ onValueChanged="getHandler().updateSelectionSpecies(this)"/>
</JScrollPane>
</cell>
</row>
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 2010-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-04 13:35:35 UTC (rev 167)
@@ -28,6 +28,7 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
+import java.util.ArrayList;
import java.util.List;
import javax.swing.JList;
@@ -68,18 +69,8 @@
* @param event event de la selection (combo)
*/
public void updateSelectionDateData(SelectionDetailsView view, ActionEvent event) {
- updateSelectionZone(view);
- updateSelectionSpecies(view);
- }
-
- /**
- * Rafraichit la liste des zones avec les dates selectionnees.
- *
- * @param view view
- */
- public void updateSelectionZone(SelectionDetailsView view) {
//Project project = view.getContextValue(Project.class);
- Selection seletion = view.getContextValue(Selection.class);
+ Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
Integer beginYear = (Integer)view.getSelectionDetailsBeginYearField().getSelectedItem();
@@ -87,27 +78,39 @@
// il est possible que l'evenement fasse suite a une seule des selections
if (beginYear != null && endYear != null) {
- List<String> zone = projectService.getProjectZone(seletion, beginYear, endYear);
- view.getSelectionZoneModel().setZones(zone);
+ if (log.isDebugEnabled()) {
+ log.debug("Refreshing zones list");
+ }
+ List<String> zones = projectService.getProjectZone(selection, beginYear, endYear);
+ view.getSelectionZoneModel().setZones(zones);
}
}
-
+
/**
- * Rafraichit la liste des especes avec les dates selectionnees.
+ * Rafraichit la liste des especes avec les dates sélectionnées.
*
+ * Appelé lorsque la selection de la liste des zones change.
+ *
* @param view view
*/
public void updateSelectionSpecies(SelectionDetailsView view) {
//Project project = view.getContextValue(Project.class);
- Selection seletion = view.getContextValue(Selection.class);
+ Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
-
+
+ // get selected zones as list
+ Object[] selectedZones = view.getZoneList().getSelectedValues();
+ List<String> zones = new ArrayList<String>(selectedZones.length);
+ for (Object selectedZone : selectedZones) {
+ zones.add((String)selectedZone);
+ }
+
Integer beginYear = (Integer)view.getSelectionDetailsBeginYearField().getSelectedItem();
Integer endYear = (Integer)view.getSelectionDetailsEndYearField().getSelectedItem();
// il est possible que l'evenement fasse suite a une seule des selections
if (beginYear != null && endYear != null) {
- List<Specy> species = projectService.getProjectSpecies(seletion, beginYear, endYear);
+ List<Specy> species = projectService.getProjectSpecies(selection, zones, beginYear, endYear);
view.getSpecyListModel().setSpecy(species);
}
}
1
0
r166 - in trunk/coser-ui/src/main: java/fr/ifremer/coser/ui java/fr/ifremer/coser/ui/selection resources/i18n resources/icons
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 11:27:22 +0000 (Thu, 04 Nov 2010)
New Revision: 166
Log:
Ajout d'action pour pouvoir afficher les bonnes informations de d?\195?\169cisions
Added:
trunk/coser-ui/src/main/resources/icons/map.png
trunk/coser-ui/src/main/resources/icons/table.png
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.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-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 11:27:22 UTC (rev 166)
@@ -407,8 +407,7 @@
try {
File file = new File("/home/chatellier/tmp/coser/zones.png");
- ImageIcon icon = new ImageIcon(file.toURI().toURL());
- selectionView.getSelectionDetailsTab().getZonesMap().setIcon(icon);
+ selectionView.getSelectionDetailsTab().getZonesMap().setImage(file);
} catch(Exception e) {
e.printStackTrace();
@@ -466,8 +465,7 @@
selectionView.setHandler(new SelectionHandler());
File file = new File("/home/chatellier/tmp/coser/zones.png");
- ImageIcon icon = new ImageIcon(file.toURI().toURL());
- selectionView.getSelectionDetailsTab().getZonesMap().setIcon(icon);
+ selectionView.getSelectionDetailsTab().getZonesMap().setImage(file);
setMainComponent(selectionView);
} catch (CoserBusinessException ex) {
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 11:27:22 UTC (rev 166)
@@ -74,9 +74,13 @@
</cell>
</row>
<row>
- <cell fill="horizontal" columns="4">
+ <cell fill="horizontal" columns="3">
<JLabel text="coser.ui.selection.details.zone" />
</cell>
+ <cell anchor="east">
+ <JButton icon="map.png" toolTipText="coser.ui.selection.details.showMapTip"
+ onActionPerformed='getDetailDesisionPanelLayout().show(getDetailDesisionPanel(), "ZONEMAP");' />
+ </cell>
</row>
<row>
<cell weighty="2" fill="both" columns="4">
@@ -94,26 +98,22 @@
<Table border='{BorderFactory.createTitledBorder(_("coser.ui.selection.details.species"))}'>
<row>
<cell fill="horizontal">
- <JLabel text="coser.ui.selection.details.gender" />
+ <JLabel text="coser.ui.selection.details.type" />
</cell>
- <cell fill="horizontal">
- <JLabel text="coser.ui.selection.details.family" />
+ <cell anchor="east">
+ <JButton icon="table.png" toolTipText="coser.ui.selection.details.showSpreciesTip"
+ onActionPerformed='getDetailDesisionPanelLayout().show(getDetailDesisionPanel(), "SPECIESDATA");' />
</cell>
</row>
<row>
- <cell fill="horizontal" weightx="1" weighty="1">
+ <cell fill="horizontal" weightx="1" weighty="1" columns="2">
<JScrollPane>
<JList />
</JScrollPane>
</cell>
- <cell fill="horizontal" weightx="1" weighty="1">
- <JScrollPane>
- <JList />
- </JScrollPane>
- </cell>
</row>
<row>
- <cell weighty="2" fill="both" columns="5">
+ <cell weighty="2" fill="both" columns="2">
<JScrollPane>
<SpecyListTestModel id="specyListModel" />
<JList id="specyList" model="{specyListModel}"
@@ -150,9 +150,16 @@
</Table>
</cell>
<cell weightx="4" weighty="1" fill="both" rows="2">
- <JScrollPane id="zonesScrollPane">
- <JLabel id="zonesMap" />
- </JScrollPane>
+ <CardLayout id="detailDesisionPanelLayout" />
+ <JPanel id="detailDesisionPanel" layout="{detailDesisionPanelLayout}">
+ <JScrollPane id="zonesScrollPane" constraints='"ZONEMAP"'>
+ <JXImageView id="zonesMap" />
+ </JScrollPane>
+ <JScrollPane constraints='"SPECIESDATA"'>
+ <JTable>
+ </JTable>
+ </JScrollPane>
+ </JPanel>
</cell>
</row>
</Table>
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 2010-11-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-04 11:27:22 UTC (rev 166)
@@ -112,19 +112,7 @@
}
}
-
/**
- * Mise à jour des autre liste qui dépendent de cette premiere liste.
- *
- * @param view
- * @param event
- */
- public void updateSpecySelection(SelectionDetailsView view, ListSelectionEvent event) {
- JList source = (JList)event.getSource();
-
- }
-
- /**
* Affiche un menu contextuel lors du clic (droit) sur la liste des especes.
*
* @param view view
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 2010-11-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui-en_GB.properties 2010-11-04 11:27:22 UTC (rev 166)
@@ -39,6 +39,7 @@
coser.ui.error.htmlmessage=An error occurs \: %s
coser.ui.error.title=Global application error
coser.ui.graph.compareNumberCatchSize=
+coser.ui.graph.lengthStructure=
coser.ui.mainframe.menu.configuration=Configuration
coser.ui.mainframe.menu.file=File
coser.ui.mainframe.menu.locale.fr=Fran\u00E7ais
@@ -92,8 +93,11 @@
coser.ui.selection.details.name=Selection name \:
coser.ui.selection.details.otherComment=Other comments
coser.ui.selection.details.saveSelection=Save selection
+coser.ui.selection.details.showMapTip=
+coser.ui.selection.details.showSpreciesTip=
coser.ui.selection.details.species=Species \:
coser.ui.selection.details.technicalComment=Technical comment
+coser.ui.selection.details.type=
coser.ui.selection.details.zone=Zone \:
coser.ui.selection.filter.density=Density \:
coser.ui.selection.filter.filter=Filter
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 2010-11-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties 2010-11-04 11:27:22 UTC (rev 166)
@@ -39,6 +39,7 @@
coser.ui.error.htmlmessage=Une erreur s'est produite \: %s
coser.ui.error.title=Erreur globale
coser.ui.graph.compareNumberCatchSize=Comparaison Captures/Tailles
+coser.ui.graph.lengthStructure=Structures en taille
coser.ui.mainframe.menu.configuration=Configuration
coser.ui.mainframe.menu.file=Fichier
coser.ui.mainframe.menu.locale.fr=Fran\u00E7ais
@@ -92,8 +93,11 @@
coser.ui.selection.details.name=Nom de la s\u00E9lection \:
coser.ui.selection.details.otherComment=Autre commentaire
coser.ui.selection.details.saveSelection=Sauvegarder la s\u00E9lection
+coser.ui.selection.details.showMapTip=Afficher la carte des zones
+coser.ui.selection.details.showSpreciesTip=Afficher la table des esp\u00E8ces
coser.ui.selection.details.species=Esp\u00E8ces \:
coser.ui.selection.details.technicalComment=Commentaire technique
+coser.ui.selection.details.type=Type \:
coser.ui.selection.details.zone=Zone \:
coser.ui.selection.filter.density=Densit\u00E9 \:
coser.ui.selection.filter.filter=Filtrer
Added: trunk/coser-ui/src/main/resources/icons/map.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/map.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-ui/src/main/resources/icons/table.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/table.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
r165 - in trunk/coser-ui/src/main: java/fr/ifremer/coser/ui/control resources/icons
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 11:26:50 +0000 (Thu, 04 Nov 2010)
New Revision: 165
Log:
Modification des icones save et graphes
Added:
trunk/coser-ui/src/main/resources/icons/chart_curve.png
trunk/coser-ui/src/main/resources/icons/disk.png
Removed:
trunk/coser-ui/src/main/resources/icons/bullet_disk.png
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphDialog.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/ControlView.jaxx
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphDialog.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphDialog.jaxx 2010-11-04 10:15:16 UTC (rev 164)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphDialog.jaxx 2010-11-04 11:26:50 UTC (rev 165)
@@ -33,7 +33,7 @@
</cell>
<cell fill="horizontal">
<SpecyComboModel id="specyComboModel" />
- <JComboBox model="{specyComboModel}" onActionPerformed="getHandler().updateGraphSpecy(this)" />
+ <JComboBox model="{specyComboModel}" 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 2010-11-04 10:15:16 UTC (rev 164)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-11-04 11:26:50 UTC (rev 165)
@@ -742,7 +742,7 @@
*
* @param view view
*/
- public void displayGraph(ControlView view) {
+ public void displayCompareNumberCatchGraph(ControlView view) {
ProjectService projectService = view.getContextValue(ProjectService.class);
Project project = view.getContextValue(Project.class);
List<String> species = projectService.getProjectSpecies(project.getControl());
@@ -750,18 +750,28 @@
ControlGraphDialog dialog = new ControlGraphDialog(view);
dialog.setHandler(this);
dialog.getSpecyComboModel().setSpecy(species);
- updateGraphSpecy(dialog);
+ updateCompareNumberCatchGraph(dialog);
dialog.pack();
dialog.setLocationRelativeTo(view);
dialog.setVisible(true);
}
/**
+ * Display data graph, initialized with graph for first specy
+ * selected in specyComboModel.
+ *
+ * @param view view
+ */
+ public void displayLengthStructureGraph(ControlView view) {
+
+ }
+
+ /**
* Met a jour le graphique lorsque la selection de l'espece change.
*
* @param view view
*/
- public void updateGraphSpecy(ControlGraphDialog view) {
+ public void updateCompareNumberCatchGraph(ControlGraphDialog view) {
ChartService chartService = view.getContextValue(ChartService.class);
Project project = view.getContextValue(Project.class);
String specyName = (String)view.getSpecyComboModel().getSelectedItem();
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx 2010-11-04 10:15:16 UTC (rev 164)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx 2010-11-04 11:26:50 UTC (rev 165)
@@ -39,7 +39,7 @@
<row>
<cell fill="horizontal" insets="0" anchor="west" columns="2">
<JToolBar floatable="false">
- <JButton id="saveButton" icon="bullet_disk.png"
+ <JButton id="saveButton" icon="disk.png"
text="coser.ui.control.save" enabled="false"
onActionPerformed="getHandler().saveControl(this)" />
<JSeparator />
@@ -48,8 +48,10 @@
renderer="{new fr.ifremer.coser.ui.control.ControlCategoryListRenderer()}"
onActionPerformed="getHandler().categoryChanged(this, event)"/>
<JSeparator />
- <JButton icon="chart_bar.png" text="coser.ui.graph.compareNumberCatchSize"
- onActionPerformed="getHandler().displayGraph(this)"/>
+ <JButton icon="chart_curve.png" text="coser.ui.graph.compareNumberCatchSize"
+ onActionPerformed="getHandler().displayCompareNumberCatchGraph(this)"/>
+ <JButton icon="chart_bar.png" text="coser.ui.graph.lengthStructure"
+ onActionPerformed="getHandler().displayLengthStructureGraph(this)"/>
</JToolBar>
</cell>
</row>
Deleted: trunk/coser-ui/src/main/resources/icons/bullet_disk.png
===================================================================
(Binary files differ)
Added: trunk/coser-ui/src/main/resources/icons/chart_curve.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/chart_curve.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-ui/src/main/resources/icons/disk.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/disk.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
r164 - in trunk/coser-business/src: main/java/fr/ifremer/coser/validators main/resources main/resources/fr/ifremer/coser/data test/java/fr/ifremer/coser/services
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 10:15:16 +0000 (Thu, 04 Nov 2010)
New Revision: 164
Log:
Fix test. Add custom validator to catch exception.
Added:
trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java
Modified:
trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-error-validation.xml
trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Haul-error-validation.xml
trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Length-error-validation.xml
trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Strata-error-validation.xml
trunk/coser-business/src/main/resources/validators.xml
trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java
Added: trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java (rev 0)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java 2010-11-04 10:15:16 UTC (rev 164)
@@ -0,0 +1,79 @@
+package fr.ifremer.coser.validators;
+
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.validator.ValidationException;
+import com.opensymphony.xwork2.validator.validators.ExpressionValidator;
+
+/**
+ * Modification de {@link ExpressionValidator} pour avoir les exceptions.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class CoserExpressionValidator extends ExpressionValidator {
+
+ private ValueStack localStack;
+
+ public void setValueStack(ValueStack localStack) {
+ super.setValueStack(localStack);
+ this.localStack = localStack;
+ }
+
+ public void validate(Object object) throws ValidationException {
+ Boolean answer = Boolean.FALSE;
+ Object obj = null;
+
+ try {
+ obj = getFieldValue(getExpression(), object, true);
+ } catch (ValidationException e) {
+ throw e;
+ } catch (Exception e) {
+
+ // arrive si des valeurs NA sont comparée par exemple
+ // le test lance une exception, mais on le considere
+ // valide pour la suite
+ obj = Boolean.TRUE;
+ }
+
+ if ((obj != null) && (obj instanceof Boolean)) {
+ answer = (Boolean) obj;
+ } else {
+ log.warn("Got result of " + obj + " when trying to get Boolean.");
+ }
+
+ if (!answer.booleanValue()) {
+ if (log.isDebugEnabled()) log.debug("Validation failed on expression " + getExpression() + " with validated object "+ object);
+ addActionError(object);
+ }
+ }
+
+ /**
+ * Return the field value named <code>name</code> from <code>object</code>,
+ * <code>object</code> should have the appropriate getter/setter.
+ *
+ * @param name
+ * @param object
+ * @return Object as field value
+ * @throws ValidationException
+ */
+ protected Object getFieldValue(String name, Object object, boolean throwExceptionOnFailure) throws ValidationException {
+
+ boolean pop = false;
+
+ if (!localStack.getRoot().contains(object)) {
+ localStack.push(object);
+ pop = true;
+ }
+
+ Object retVal = localStack.findValue(name, throwExceptionOnFailure);
+
+ if (pop) {
+ localStack.pop();
+ }
+
+ return retVal;
+ }
+}
Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-error-validation.xml
===================================================================
--- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-error-validation.xml 2010-11-04 10:09:36 UTC (rev 163)
+++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-error-validation.xml 2010-11-04 10:15:16 UTC (rev 164)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 Ifremer, Codelutin
+ Copyright (C) 2010 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
@@ -51,18 +51,18 @@
</field-validator>
</field>
<field name="numberAsString">
- <field-validator type="checkDouble" short-circuit="true">
+ <field-validator type="checkDouble">
<param name="notAvailable">NA</param>
<message>Number attribute is not a valid double</message>
</field-validator>
</field>
<field name="weightAsString">
- <field-validator type="checkDouble" short-circuit="true">
+ <field-validator type="checkDouble">
<param name="notAvailable">NA</param>
<message>Weight attribute is not a valid double</message>
</field-validator>
</field>
- <validator type="expression">
+ <validator type="coserExpression">
<param name="expression"><![CDATA[ (weight > 0 && number > 0) || weight == 0]]></param>
<message><![CDATA[coser.business.control.error.noCatchNumberWithWeight]]></message>
</validator>
Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Haul-error-validation.xml
===================================================================
--- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Haul-error-validation.xml 2010-11-04 10:09:36 UTC (rev 163)
+++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Haul-error-validation.xml 2010-11-04 10:15:16 UTC (rev 164)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 Ifremer, Codelutin
+ Copyright (C) 2010 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
Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Length-error-validation.xml
===================================================================
--- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Length-error-validation.xml 2010-11-04 10:09:36 UTC (rev 163)
+++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Length-error-validation.xml 2010-11-04 10:15:16 UTC (rev 164)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 Ifremer, Codelutin
+ Copyright (C) 2010 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
@@ -51,34 +51,34 @@
</field-validator>
</field>
<field name="sex">
- <field-validator type="requiredstring" short-circuit="true">
+ <field-validator type="requiredstring">
<message>Sex is mandatory</message>
</field-validator>
</field>
<field name="maturity">
- <field-validator type="requiredstring" short-circuit="true">
+ <field-validator type="requiredstring">
<message>Maturity attribute is required</message>
</field-validator>
</field>
<field name="length">
- <field-validator type="checkDouble" short-circuit="true">
+ <field-validator type="checkDouble">
<message>length attribute is not a valid double</message>
</field-validator>
</field>
<field name="number">
- <field-validator type="checkDouble" short-circuit="true">
+ <field-validator type="checkDouble">
<param name="notAvailable">NA</param>
<message>number attribute is not a valid double</message>
</field-validator>
</field>
<field name="weight">
- <field-validator type="checkDouble" short-circuit="true">
+ <field-validator type="checkDouble">
<param name="notAvailable">NA</param>
<message>Weight attribute is not a valid double</message>
</field-validator>
</field>
<field name="age">
- <field-validator type="requiredstring" short-circuit="true">
+ <field-validator type="requiredstring">
<message>Age attribute is required</message>
</field-validator>
</field>
Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Strata-error-validation.xml
===================================================================
--- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Strata-error-validation.xml 2010-11-04 10:09:36 UTC (rev 163)
+++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Strata-error-validation.xml 2010-11-04 10:15:16 UTC (rev 164)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 Ifremer, Codelutin
+ Copyright (C) 2010 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
Modified: trunk/coser-business/src/main/resources/validators.xml
===================================================================
--- trunk/coser-business/src/main/resources/validators.xml 2010-11-04 10:09:36 UTC (rev 163)
+++ trunk/coser-business/src/main/resources/validators.xml 2010-11-04 10:15:16 UTC (rev 164)
@@ -47,5 +47,6 @@
<validator name="checkDouble" class="fr.ifremer.coser.validators.CoserCheckDoubleValidator"/>
<validator name="coserDouble" class="fr.ifremer.coser.validators.CoserDoubleValidator"/>
+ <validator name="coserExpression" class="fr.ifremer.coser.validators.CoserExpressionValidator"/>
</validators>
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java 2010-11-04 10:09:36 UTC (rev 163)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java 2010-11-04 10:15:16 UTC (rev 164)
@@ -66,12 +66,12 @@
myCatch.setData(new String[]{"1", "","","","","",""});
List<ValidationError> errors = validationService.validate(myCatch);
Assert.assertNotNull(errors);
- Assert.assertEquals(4, errors.size());
+ Assert.assertEquals(3, errors.size());
myCatch.setData(new String[]{"1", "Toto","","","","999",""});
errors = validationService.validate(myCatch);
Assert.assertNotNull(errors);
- Assert.assertEquals(3, errors.size());
+ Assert.assertEquals(2, errors.size());
}
/**
1
0