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
r1035 - trunk/coser-business/src/test/java/fr/ifremer/coser/services
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 17:32:19 +0200 (Fri, 10 Aug 2012)
New Revision: 1035
Url: http://forge.codelutin.com/repositories/revision/coser/1035
Log:
Fix test compilation error
Modified:
trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2012-08-09 15:38:09 UTC (rev 1034)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2012-08-10 15:32:19 UTC (rev 1035)
@@ -79,7 +79,7 @@
protected void registerUploadedResult(String path) throws CoserBusinessException {
URL firstUpload = WebServiceTest.class.getResource(path);
File firstUploadFile = new File(firstUpload.getFile());
- webService.registerNewUploadedResults(firstUploadFile);
+ webService.registerNewUploadedResults("admin", firstUploadFile);
}
/**
1
0
r1034 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources/i18n coser-web/src/main/java/fr/ifremer/coser/web/actions
by echatellier@users.forge.codelutin.com 09 Aug '12
by echatellier@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: echatellier
Date: 2012-08-09 17:38:09 +0200 (Thu, 09 Aug 2012)
New Revision: 1034
Url: http://forge.codelutin.com/repositories/revision/coser/1034
Log:
fixes #1333 : Am?\195?\169liorer le contenu du mail de mise ?\195?\160 jour des donn?\195?\169es du site
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.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-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2012-08-09 10:36:21 UTC (rev 1033)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2012-08-09 15:38:09 UTC (rev 1034)
@@ -692,10 +692,11 @@
* TODO chatellier 20110125 l'algorithme n'est pour l'instant pas performant
* et contient pas mal de code dupliqué, mais pour la v1.0 ca ira.
*
+ * @param login user login
* @param archiveFile uploaded file
* @throws CoserBusinessException
*/
- public void registerNewUploadedResults(File archiveFile) throws CoserBusinessException {
+ public void registerNewUploadedResults(String login, File archiveFile) throws CoserBusinessException {
try {
@@ -708,31 +709,29 @@
// suppression des resultats qui ont été envoyé mais
// ne sont ni maps result, ni indicator result
- List<String> noIndicatorsResultZoneIds = getZonesIds(tempDirectory, false, null);
- cleanCurrentProjectDirectory(projectsDirectory, noIndicatorsResultZoneIds);
- List<String> noMapsResultZoneIds = getZonesIds(tempDirectory, null, false);
- cleanCurrentProjectDirectory(mapsDirectory, noMapsResultZoneIds);
+ Map<String, String> noIndicatorsResultZoneIds = getZonesIds(tempDirectory, false, null);
+ cleanCurrentProjectDirectory(projectsDirectory, noIndicatorsResultZoneIds.keySet());
+ Map<String, String> noMapsResultZoneIds = getZonesIds(tempDirectory, null, false);
+ cleanCurrentProjectDirectory(mapsDirectory, noMapsResultZoneIds.keySet());
// recuperation des noms zone des nouveau fichiers
- List<String> indicatorsResultZoneIds = getZonesIds(tempDirectory, true, false);
+ Map<String, String> indicatorsResultZoneIds = getZonesIds(tempDirectory, true, false);
// suppression dans l'ancien répertoire des resultat deja present
// dans le nouveau (pour les conflits)
- cleanCurrentProjectDirectory(projectsDirectory, indicatorsResultZoneIds);
+ cleanCurrentProjectDirectory(projectsDirectory, indicatorsResultZoneIds.keySet());
// creation du filter qui copiera juste ce qu'il faut
FileFilter indicatorsFileFilter = getCopyFileFilter(tempDirectory, false);
// copie (avec ecrasement) des nouveaux fichiers dans l'ancien répertoire
- //FileUtils.copyDirectory(tempDirectory, projectsDirectory, indicatorsFileFilter);
customCopyDirectory(tempDirectory, projectsDirectory, indicatorsFileFilter);
// recuperation des noms zone des nouveau fichiers
- List<String> mapsResultZoneIds = getZonesIds(tempDirectory, false, true);
+ Map<String, String> mapsResultZoneIds = getZonesIds(tempDirectory, false, true);
// suppression dans l'ancien répertoire des resultat deja present
// dans le nouveau (pour les conflits)
- cleanCurrentProjectDirectory(mapsDirectory, mapsResultZoneIds);
+ cleanCurrentProjectDirectory(mapsDirectory, mapsResultZoneIds.keySet());
// creation du filter qui copiera juste ce qu'il faut
FileFilter mapsFileFilter = getCopyFileFilter(tempDirectory, true);
// copie (avec ecrasement) des nouveaux fichiers dans l'ancien répertoire
- //FileUtils.copyDirectory(tempDirectory, mapsDirectory, mapsFileFilter);
customCopyDirectory(tempDirectory, mapsDirectory, mapsFileFilter);
FileUtils.deleteDirectory(tempDirectory);
@@ -741,8 +740,42 @@
log.info("Unzipping file " + archiveFile + " to " + projectsDirectory);
}
+ // generate email content
+ StringBuffer content = new StringBuffer();
+ if (!noMapsResultZoneIds.isEmpty() || !mapsResultZoneIds.isEmpty()) {
+ content.append(_("coser.business.notificationmail.mapsresults") + "\n");
+ for (Map.Entry<String, String> noMapsResultZoneId : noMapsResultZoneIds.entrySet()) {
+ content.append(" - " + _("coser.business.notificationmail.deleted",
+ getZoneFullName(noMapsResultZoneId.getKey()),
+ noMapsResultZoneId.getValue()) + "\n");
+ }
+ for (Map.Entry<String, String> mapsResultZoneId : mapsResultZoneIds.entrySet()) {
+ content.append(" - " + _("coser.business.notificationmail.added",
+ getZoneFullName(mapsResultZoneId.getKey()),
+ mapsResultZoneId.getValue()) + "\n");
+ }
+ content.append("\n");
+ }
+
+ if (!noIndicatorsResultZoneIds.isEmpty() || !indicatorsResultZoneIds.isEmpty()) {
+ content.append(_("coser.business.notificationmail.indicatorsresults") + "\n");
+ for (Map.Entry<String, String> noIndicatorsResultZoneId : noIndicatorsResultZoneIds.entrySet()) {
+ content.append(" - " + _("coser.business.notificationmail.deleted",
+ getZoneFullName(noIndicatorsResultZoneId.getKey()),
+ noIndicatorsResultZoneId.getValue()) + "\n");
+ }
+ for (Map.Entry<String, String> indicatorsResultZoneId : indicatorsResultZoneIds.entrySet()) {
+ content.append(" - " + _("coser.business.notificationmail.added",
+ getZoneFullName(indicatorsResultZoneId.getKey()),
+ indicatorsResultZoneId.getValue()) + "\n");
+ }
+ content.append("\n");
+ }
+
// send notification mails
- sendNewResultNotifications();
+ int count = noMapsResultZoneIds.size() + mapsResultZoneIds.size() +
+ noIndicatorsResultZoneIds.size() + indicatorsResultZoneIds.size();
+ sendNewResultNotifications(login, count, content.toString());
// update data date
updateDataProperties();
@@ -850,7 +883,8 @@
}
/**
- * Recupere dans un repertoire donné, les zoneid des resultat.
+ * Recupere dans un repertoire donné, les zoneid des resultat avec
+ * pour chaque id, le nom du projet associé.
*
* Les boolean sont des grands {@code Boolean} car si la valeur
* est {@code null}, on ne tient pas compte du critere lors de la recherche.
@@ -858,12 +892,12 @@
* @param scanDirectory le repertoire a scanner
* @param indicatorResults if true get indicator results
* @param mapResults if true get map results
- * @return la liste des resultid
+ * @return une map de resultid/nom visuel des projets
* @throws CoserBusinessException
*/
- protected List<String> getZonesIds(File scanDirectory, Boolean indicatorResults, Boolean mapResults) throws CoserBusinessException {
+ protected Map<String, String> getZonesIds(File scanDirectory, Boolean indicatorResults, Boolean mapResults) throws CoserBusinessException {
- List<String> resultIds = new ArrayList<String>();
+ Map<String, String> resultIds = new HashMap<String, String>();
File[] projectFiles = scanDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {
@@ -888,7 +922,10 @@
( mapResults == null || rsufiResult.isMapsResult() == mapResults ) ) {
String resultResultId = rsufiResult.getZone();
if (StringUtils.isNotBlank(resultResultId)) {
- resultIds.add(resultResultId);
+ String resultPath = projectFile.getName() + "/" +
+ selectionFile.getName() + "/" +
+ resultFile.getName();
+ resultIds.put(resultResultId, resultPath);
}
}
}
@@ -971,7 +1008,7 @@
* @param newResultIds new ids
* @throws CoserBusinessException
*/
- protected void cleanCurrentProjectDirectory(File projectsDirectory, List<String> newResultIds) throws CoserBusinessException {
+ protected void cleanCurrentProjectDirectory(File projectsDirectory, Collection<String> newResultIds) throws CoserBusinessException {
try {
File[] projectFiles = projectsDirectory.listFiles();
@@ -1030,8 +1067,12 @@
/**
* Envoi un mail de notification apres la publication des resultat à la
* liste des adresses email renseignées dans la configuration.
+ *
+ * @param login user login
+ * @param count updated data count
+ * @param detail body mail detail
*/
- protected void sendNewResultNotifications() {
+ protected void sendNewResultNotifications(String login, int count, String detail) {
List<String> emails = config.getNewResultNotificationList();
for (String email : emails) {
@@ -1040,8 +1081,8 @@
emailPart.setHostName(config.getSmtpHost());
emailPart.addTo(email);
emailPart.setFrom("noreply-coser(a)ifremer.fr", "Coser");
- emailPart.setSubject(_("coser.business.notificationmail.subject"));
- emailPart.setContent(_("coser.business.notificationmail.body"), "text/plain; charset=ISO-8859-9");
+ emailPart.setSubject(_("coser.business.notificationmail.subject", count));
+ emailPart.setContent(_("coser.business.notificationmail.body", login, detail), "text/plain; charset=ISO-8859-9");
// send mail
emailPart.send();
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-09 10:36:21 UTC (rev 1033)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2012-08-09 15:38:09 UTC (rev 1034)
@@ -109,8 +109,12 @@
coser.business.matrix.lengthstructure=Length structures
coser.business.matrix.occurrence=Occurrence
coser.business.matrix.samplingeffort=Sampling effort
-coser.business.notificationmail.body=Data has been updated on website.\n\n--\nCoser.
-coser.business.notificationmail.subject=Coser \: Data updated
+coser.business.notificationmail.added=added \: %s (%s)
+coser.business.notificationmail.body=Data has been updated on website by %s.\n\n%s--\nCoser.
+coser.business.notificationmail.deleted=deleted \: %s (%s)
+coser.business.notificationmail.indicatorsresults=Indicator results \:
+coser.business.notificationmail.mapsresults=Map results \:
+coser.business.notificationmail.subject=Coser \: %d data updated
coser.business.publication.author=Author
coser.business.publication.catchfilename=Catch file name
coser.business.publication.comment=Comment
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-09 10:36:21 UTC (rev 1033)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2012-08-09 15:38:09 UTC (rev 1034)
@@ -109,8 +109,12 @@
coser.business.matrix.lengthstructure=Structures en taille
coser.business.matrix.occurrence=Occurrence
coser.business.matrix.samplingeffort=Effort d'échantillonnage
-coser.business.notificationmail.body=Les données du site internet viennent d'être mises à jour\n\n--\nCoser.
-coser.business.notificationmail.subject=Coser \: Données mises à jour
+coser.business.notificationmail.added=ajouté \: %s (%s)
+coser.business.notificationmail.body=Les données du site internet viennent d'être mises à jour par %s.\n\n%s--\nCoser.
+coser.business.notificationmail.deleted=supprimé \: %s (%s)
+coser.business.notificationmail.indicatorsresults=Résultats d'indicateur \:
+coser.business.notificationmail.mapsresults=Résultat de carte \:
+coser.business.notificationmail.subject=Coser \: %d résultats mis à jour
coser.business.publication.author=Auteur
coser.business.publication.catchfilename=Nom du fichier captures
coser.business.publication.comment=Commentaire
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java 2012-08-09 10:36:21 UTC (rev 1033)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java 2012-08-09 15:38:09 UTC (rev 1034)
@@ -106,7 +106,7 @@
if (resultFile != null) {
WebService webService = ServiceFactory.getWebService();
try {
- webService.registerNewUploadedResults(resultFile);
+ webService.registerNewUploadedResults(login, resultFile);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't register new result file", ex);
}
1
0
09 Aug '12
Author: echatellier
Date: 2012-08-09 12:36:21 +0200 (Thu, 09 Aug 2012)
New Revision: 1033
Url: http://forge.codelutin.com/repositories/revision/coser/1033
Log:
refs #1335 : Ajouter la gestion d'une troisi?\195?\168me langue : espagnol
Added:
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_es.properties
trunk/coser-web/src/main/webapp/images/es.png
trunk/coser-web/src/main/webapp/images/zones/es.png
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
trunk/coser-business/src/test/resources/webindicators.csv
trunk/coser-business/src/test/resources/webzones.csv
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/DataHandler.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDownloadAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDataAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDownloadAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java
trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
trunk/coser-web/src/main/webapp/styles/coser.css
trunk/pom.xml
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-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -46,6 +46,7 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
@@ -786,7 +787,7 @@
public File getRsufiResultComChart(Project project, File resultDirectory,
RSufiResult rsufiResult, File codeTypeEspecesFile, String indicator,
String list, String zoneDisplayName, String indicatorName, String unit,
- String locale) throws CoserBusinessException {
+ Locale locale) throws CoserBusinessException {
File result = null;
@@ -861,9 +862,10 @@
// cas special, c'est la seule valeur du fichier
// code type espece qui a besoin d'une traduction
if (tuple[4].equalsIgnoreCase("T")) {
- // FIXME fix locale
- if (locale.equalsIgnoreCase("fr")) {
+ if ("fr".equals(locale.getLanguage())) {
chartTitle += " - " + "Tous Liste " + localList.charAt(1);
+ } else if ("es".equals(locale.getLanguage())) {
+ chartTitle += " - " + "Todo Lista " + localList.charAt(1);
} else {
chartTitle += " - " + "All List " + localList.charAt(1);
}
@@ -871,8 +873,10 @@
else {
// ajout de la traduction du nom de liste plus le numéro
// FIXME fix locale
- if (locale.equalsIgnoreCase("fr")) {
+ if ("fr".equals(locale.getLanguage())) {
chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1);
+ } else if ("es".equals(locale.getLanguage())) {
+ chartTitle += " - " + tuple[0] + " Lista " + localList.charAt(1);
} else {
chartTitle += " - " + tuple[0] + " List " + localList.charAt(1);
}
@@ -900,8 +904,10 @@
// FIXME echatellier 20110414 hack just for year, need a real locale object here
// to call _(locale, i18nkey)
String yearAxis = "Year";
- if ("fr".equals(locale)) {
+ if ("fr".equals(locale.getLanguage())) {
yearAxis = "Ann\u00E9e";
+ } else if ("es".equals(locale.getLanguage())) {
+ yearAxis = "A\u00F1o";
}
CategoryAxis categoryAxis = new CategoryAxis(yearAxis);
categoryAxis.setCategoryMargin(0);
@@ -963,7 +969,7 @@
*/
public File getRsufiResultPopChart(Project project, File resultDirectory,
RSufiResult rsufiResult, String species, String indicator,
- String zoneDisplayName, String indicatorName, String unit, String locale) throws CoserBusinessException {
+ String zoneDisplayName, String indicatorName, String unit, Locale locale) throws CoserBusinessException {
File result = null;
@@ -1035,8 +1041,10 @@
// FIXME echatellier 20110414 hack just for year, need a real locale object here
// to call _(locale, i18nkey)
String yearAxis = "Year";
- if ("fr".equals(locale)) {
+ if ("fr".equals(locale.getLanguage())) {
yearAxis = "Ann\u00E9e";
+ } else if ("es".equals(locale.getLanguage())) {
+ yearAxis = "Ann\u00E9e";
}
CategoryAxis categoryAxis = new CategoryAxis(yearAxis);
categoryAxis.setCategoryMargin(0);
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -167,7 +167,7 @@
* @return indicators map
* @throws CoserBusinessException
*/
- public MultiKeyMap getIndicatorsMap() throws CoserBusinessException {
+ protected MultiKeyMap getIndicatorsMap() throws CoserBusinessException {
if (indicatorsMap == null) {
indicatorsMap = new MultiKeyMap();
@@ -175,11 +175,12 @@
DataStorage indicatorsStorage = commonService.loadCSVFile(indicatorsFile);
Iterator<String[]> iteratorInd = indicatorsStorage.iterator(true);
while (iteratorInd.hasNext()) {
- // "id";"label_fr";"label_en";"unit"
+ // "id";"label_fr";"label_en";"label_es";"unit"
String[] indicator = iteratorInd.next();
indicatorsMap.put(indicator[0], "fr", indicator[1]);
indicatorsMap.put(indicator[0], "en", indicator[2]);
- indicatorsMap.put(indicator[0], "unit", indicator[3]);
+ indicatorsMap.put(indicator[0], "es", indicator[3]);
+ indicatorsMap.put(indicator[0], "unit", indicator[4]);
}
}
@@ -187,6 +188,22 @@
}
/**
+ * Get indicator translation by checking correct locale.
+ *
+ * @param indicator indicator code
+ * @param locale locale
+ * @return indicator translation
+ */
+ protected String getIndicatorValue(String indicator, String localeCode) throws CoserBusinessException {
+ String localLocaleCode = localeCode;
+ if (!"fr".equals(localLocaleCode) && !"es".equals(localLocaleCode)
+ && !"unit".equals(localLocaleCode)) {
+ localLocaleCode = "en"; // en by default
+ }
+ return (String)getIndicatorsMap().get(indicator, localLocaleCode);
+ }
+
+ /**
* Charge les zones disponibles depuis le fichier des zones.
* (zoneid, zonename)
*
@@ -224,7 +241,7 @@
public String getZoneFullName(String zoneId) throws CoserBusinessException {
DataStorage localZoneMap = getZonesMap();
String resultName = null;
- // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"map"
+ // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map"
int zoneIndex = localZoneMap.indexOf(zoneId);
if (zoneIndex != -1) {
resultName = localZoneMap.get(zoneIndex)[2];
@@ -1044,7 +1061,7 @@
*/
public Map<String, String> getFacades() throws CoserBusinessException {
Map<String, String> facades = new LinkedHashMap<String, String>();
- // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"map"
+ // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map"
DataStorage zonesMap = getZonesMap();
Iterator<String[]> itZone = zonesMap.iterator(true);
while (itZone.hasNext()) {
@@ -1072,7 +1089,7 @@
Collection<String> subZones = new ArrayList<String>();
Iterator<String[]> itZone = getZonesMap().iterator(true);
while (itZone.hasNext()) {
- // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"map"
+ // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map"
String[] tuple = itZone.next();
if (tuple[1].equals(facade)) {
subZones.add(tuple[0]);
@@ -1148,7 +1165,7 @@
// get subzone for main zone
Iterator<String[]> itZone = getZonesMap().iterator(true);
while (itZone.hasNext()) {
- // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"map"
+ // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map"
String[] tuple = itZone.next();
String facadeid = tuple[1];
String zoneid = tuple[0];
@@ -1164,34 +1181,6 @@
}
/**
- * Pour une zone principale, recupere la liste des campagnes qui sont
- * disponible dans cette zone principale.
- *
- * @param facade facade (le nom de la facade principale)
- * @return couple campagneid/campagnename
- * @throws CoserBusinessException
- * @deprecated unused since 1.0.3
- */
- @Deprecated
- public Map<String, String> getSurveyForFacade(String facade) throws CoserBusinessException {
- Map<String, String> surveyForFacade = new HashMap<String, String>();
-
- // get subzone for main zone
- Iterator<String[]> itZone = getZonesMap().iterator(true);
- while (itZone.hasNext()) {
- // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"map"
- String[] tuple = itZone.next();
- if (tuple[1].equals(facade)) {
- if (!surveyForFacade.containsKey(tuple[5])) {
- surveyForFacade.put(tuple[5], tuple[5]);
- }
- }
- }
-
- return surveyForFacade;
- }
-
- /**
* Recupere la liste des cartes pour chaque id de zone sous forme de Map.
*
* @return zone images map
@@ -1202,9 +1191,9 @@
Iterator<String[]> itZone = getZonesMap().iterator(true);
while (itZone.hasNext()) {
- // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"map"
+ // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map"
String[] tuple = itZone.next();
- result.put(tuple[0], tuple[8]);
+ result.put(tuple[0], tuple[9]);
}
return result;
@@ -1213,20 +1202,21 @@
/**
* Recupere la liste des meta info pour chaque id de zone sous forme de Map.
*
- * @param locale locale ({@code fr} ou {@code en})
+ * @param locale locale
* @return zone meta info map
* @throws CoserBusinessException
*/
- public Map<String, String> getZoneMetaInfo(String locale) throws CoserBusinessException {
+ public Map<String, String> getZoneMetaInfo(Locale locale) throws CoserBusinessException {
Map<String, String> result = new HashMap<String, String>();
Iterator<String[]> itZone = getZonesMap().iterator(true);
while (itZone.hasNext()) {
- // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"map"
+ // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map"
String[] tuple = itZone.next();
- // FIXME echatellier 20120208 replace with real locale object
- if ("fr".equalsIgnoreCase(locale)) {
+ if (locale != null && "fr".equals(locale.getLanguage())) {
result.put(tuple[0], tuple[6]);
+ } else if (locale != null && "es".equals(locale.getLanguage())) {
+ result.put(tuple[0], tuple[8]);
} else {
result.put(tuple[0], tuple[7]);
}
@@ -1298,83 +1288,7 @@
return result;
}
-
- /**
- * Recuperer la liste des populations pour une campagnes donnée.
- *
- * Les resultats retourné ne peuvent être que de type "carte".
- *
- * @param survey survey id
- * @return map species nom info>nom officiel
- * @throws CoserBusinessException
- * @deprecated unused since 1.0.3
- */
- @Deprecated
- public Map<String, String> getSpeciesForSurvey(String survey) throws CoserBusinessException {
- Map<String, String> result = new TreeMap<String, String>();
-
- // parcours des resultats disponibles
- File projectsDirectory = config.getWebMapsProjectsDirectory();
- File[] projectFiles = projectsDirectory.listFiles();
- if (projectFiles != null) {
- for (File projectFile : projectFiles) {
- if (projectFile.isDirectory()) {
- File selectionsDirectory = new File(projectFile, CoserConstants.STORAGE_SELECTION_DIRECTORY);
- File[] selectionFiles = selectionsDirectory.listFiles();
-
- // selection iteration
- if (selectionFiles != null) {
- for (File selectionFile : selectionFiles) {
- if (selectionFile.isDirectory()) {
- File resultsDirectory = new File(selectionFile, CoserConstants.STORAGE_RESULTS_DIRECTORY);
- File[] resultFiles = resultsDirectory.listFiles();
-
- // result iteration
- if (resultFiles != null) {
- for (File resultFile : resultFiles) {
- if (resultFile.isDirectory()) {
- RSufiResult rsufiResult = projectService.getRSufiResult(resultFile);
-
- // extraction des especes pour le résultat demandé
- if (rsufiResult.getZone() != null && rsufiResult.isMapsResult()) {
-
- // test parmis toutes les zones disponible
- // si le resultat appartient a une zone
- // qui porte sur la campagne demandée
- boolean zoneRSufiResult = false;
- Iterator<String[]> itZone = getZonesMap().iterator(true);
- while (itZone.hasNext()) {
- // "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"map"
- String[] tuple = itZone.next();
-
- if (tuple[5].equals(survey) && rsufiResult.getZone().equals(tuple[0])) {
- zoneRSufiResult = true;
- }
- }
-
- if (zoneRSufiResult) {
- // load project (without data to get reftax data)
- Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
-
- Map<String, String> resultSpecies = getRsufiResultSpecies(project, resultFile, rsufiResult);
- result.putAll(resultSpecies);
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- return result;
- }
-
/**
* Recupere la liste de toutes les especes nom sci et nom off à partir
* d'un resultat.
@@ -1429,11 +1343,11 @@
*
* @param zone zone id
* @param species especes (if {@code null} look for com indicators
- * @param locale locale ({@code fr} ou {@code en})
+ * @param locale locale
* @return la liste des indicateurs
* @throws CoserBusinessException
*/
- public Map<String, String> getIndicators(String zone, String species, String locale) throws CoserBusinessException {
+ public Map<String, String> getIndicators(String zone, String species, Locale locale) throws CoserBusinessException {
Map<String, String> indicators = new TreeMap<String, String>();
// parcours des resultats disponibles
@@ -1492,14 +1406,12 @@
* @param resultDirectory rsufi result directory
* @param rsufiResult result
* @param species to get indicator
- * @param locale locale ({@code fr} ou {@code en})
+ * @param locale locale
* @return indicator for species
* @throws CoserBusinessException
*/
- protected Map<String, String> getRsufiResultPopIndicators(File resultDirectory, RSufiResult rsufiResult, String species, String locale) throws CoserBusinessException {
+ protected Map<String, String> getRsufiResultPopIndicators(File resultDirectory, RSufiResult rsufiResult, String species, Locale locale) throws CoserBusinessException {
- MultiKeyMap defaultIndicators = getIndicatorsMap();
-
Map<String, String> result = new HashMap<String, String>();
// le fichier estcomind
@@ -1516,9 +1428,9 @@
if (specyCode.equals(species)) {
String indicatorCode = tuple[1];
- String translations = (String)defaultIndicators.get(indicatorCode, locale.toLowerCase());
+ String translations = getIndicatorValue(indicatorCode, locale.getLanguage());
if (translations == null) {
- translations = "##" + indicatorCode + "##";
+ translations = "##" + indicatorCode + "##" + locale.getLanguage();
}
result.put(indicatorCode, translations);
}
@@ -1533,14 +1445,12 @@
*
* @param resultDirectory rsufi result directory
* @param rsufiResult result
- * @param locale locale ({@code fr} ou {@code en})
+ * @param locale locale
* @return indicator for species
* @throws CoserBusinessException
*/
- protected Map<String, String> getRsufiResultComIndicators(File resultDirectory, RSufiResult rsufiResult, String locale) throws CoserBusinessException {
+ protected Map<String, String> getRsufiResultComIndicators(File resultDirectory, RSufiResult rsufiResult, Locale locale) throws CoserBusinessException {
- MultiKeyMap defaultIndicators = getIndicatorsMap();
-
Map<String, String> result = new HashMap<String, String>();
// le fichier estcomind
@@ -1554,9 +1464,9 @@
String[] tuple = estPopIndIterator.next();
String indicatorCode = tuple[1];
- String translations = (String)defaultIndicators.get(indicatorCode, locale.toLowerCase());
+ String translations = getIndicatorValue(indicatorCode, locale.getLanguage());
if (translations == null) {
- translations = "##" + indicatorCode + "##";
+ translations = "##" + indicatorCode + "##" + locale.getLanguage();
}
result.put(indicatorCode, translations);
}
@@ -1569,11 +1479,11 @@
*
* @param zone zone id
* @param indicator indicator
- * @param locale locale ({@code fr} ou {@code en})
+ * @param locale locale
* @return la liste des indicateurs
* @throws CoserBusinessException
*/
- public Map<String, String> getIndicatorLists(String zone, String indicator, String locale) throws CoserBusinessException {
+ public Map<String, String> getIndicatorLists(String zone, String indicator, Locale locale) throws CoserBusinessException {
// linked hash map (doit respecter l'ordre d'insertion)
Map<String, String> indicators = new LinkedHashMap<String, String>();
@@ -1631,12 +1541,12 @@
* @param resultDirectory rsufi result directory
* @param rsufiResult result
* @param indicator indicator
- * @param locale locale ({@code fr} ou {@code en})
+ * @param locale locale
* @return indicator for species
* @throws CoserBusinessException
*/
protected Map<String, String> getRsufiResultComIndicatorLists(File resultDirectory,
- RSufiResult rsufiResult, File codeTypeEspecesFile, String indicator, String locale) throws CoserBusinessException {
+ RSufiResult rsufiResult, File codeTypeEspecesFile, String indicator, Locale locale) throws CoserBusinessException {
// linked hash map (doit respecter l'ordre d'insertion)
Map<String, String> result = new LinkedHashMap<String, String>();
@@ -1670,18 +1580,20 @@
// cas special, c'est la seule valeur du fichier
// code type espece qui a besoin d'une traduction
if (tupleType[4].equalsIgnoreCase("T")) {
- // FIXME fix locale
- if ("fr".equalsIgnoreCase(locale)) {
+ if (locale != null && "fr".equals(locale.getLanguage())) {
translation = "Tous Liste " + list.charAt(1);
+ } else if (locale != null && "en".equals(locale.getLanguage())) {
+ translation = "Todo Lista " + list.charAt(1);
} else {
translation = "All List " + list.charAt(1);
}
}
else {
// ajout de la traduction du nom de liste plus le numéro
- // FIXME fix locale
- if ("fr".equalsIgnoreCase(locale)) {
+ if (locale != null && "fr".equals(locale.getLanguage())) {
translation = tupleType[0] + " Liste " + list.charAt(1);
+ } else if (locale != null && "en".equals(locale.getLanguage())) {
+ translation = tupleType[0] + " Lista " + list.charAt(1);
} else {
translation = tupleType[0] + " List " + list.charAt(1);
}
@@ -1704,11 +1616,11 @@
* @param species especes (if {@code null} look for com indicators
* @param indicator indicator
* @param list indicator's list (if {@code null} look for pop indicators or no list selected
- * @param locale locale ({@code fr} ou {@code en})
+ * @param locale locale
* @return la liste des indicateurs
* @throws CoserBusinessException
*/
- public File getChart(String zone, String species, String indicator, String list, String locale) throws CoserBusinessException {
+ public File getChart(String zone, String species, String indicator, String list, Locale locale) throws CoserBusinessException {
File result = null;
// parcours des resultats disponibles
@@ -1738,8 +1650,8 @@
// load project (without data to get reftax data)
Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
- String indicatorName = (String)getIndicatorsMap().get(indicator, locale);
- String unit = (String)getIndicatorsMap().get(indicator, "unit");
+ String indicatorName = getIndicatorValue(indicator, locale.getLanguage());
+ String unit = getIndicatorValue(indicator, "unit");
String zoneDisplayName = getZoneFullName(zone);
@@ -1782,11 +1694,11 @@
* @param species especes (if {@code null} look for com indicators
* @param indicator indicator
* @param list indicator's list (if {@code null} look for pop indicators or no list selected
- * @param locale locale ({@code fr} ou {@code en})
+ * @param locale locale
* @return la liste des indicateurs
* @throws CoserBusinessException
*/
- public File getChartData(String zone, String species, String indicator, String list, String locale) throws CoserBusinessException {
+ public File getChartData(String zone, String species, String indicator, String list, Locale locale) throws CoserBusinessException {
File result = null;
// parcours des resultats disponibles
@@ -1840,13 +1752,13 @@
* @param species species (can be null for community)
* @param indicator indicator
* @param list indicator's list (if {@code null} look for pop indicators or no list selected
- * @param locale locale (fr/en)
+ * @param locale locale
* @return generated file (auto delete when jvm shutdown)
* @throws CoserBusinessException
*/
protected File getChartDataFile(File projectsDirectory, File projectDirectory, File selectionDirectory,
File resultDirectory, RSufiResult rSufiResult, String species, String indicator, String list,
- String locale) throws CoserBusinessException {
+ Locale locale) throws CoserBusinessException {
File result = null;
@@ -1960,60 +1872,6 @@
}
/**
- * Generate map file into pdf file.
- *
- * @param survey survey
- * @param species species
- * @return pdf file
- * @throws CoserBusinessException
- * @deprecated not used anymore (at least 1.1.0)
- */
- @Deprecated
- public File getMapFileAsPDF(String survey, String species) throws CoserBusinessException {
-
- File result = null;
-
- OutputStream os = null;
- try {
- // render freemarker template
- File mapFile = getMapFile(survey, species);
-
- Template mapTemplate = freemarkerConfiguration.getTemplate("map.ftl");
- Map<String, Object> root = new HashMap<String, Object>();
- root.put("mapFile", mapFile.getAbsolutePath());
-
- Writer out = new StringWriter();
- mapTemplate.process(root, out);
- out.flush();
-
- // get content as w3c document
- Document document = CoserUtils.parseDocument(out.toString());
-
- // render template output as pdf
- result = File.createTempFile("coserpdf", ".pdf");
- result.deleteOnExit();
- os = new FileOutputStream(result);
-
- ITextRenderer renderer = new ITextRenderer();
- renderer.setDocument(document, null);
- renderer.layout();
- renderer.createPDF(os);
-
- os.close();
-
- } catch (IOException ex) {
- throw new CoserBusinessException("Can't generate pdf with map", ex);
- } catch (TemplateException ex) {
- throw new CoserBusinessException("Can't generate pdf with map", ex);
- } catch (DocumentException ex) {
- throw new CoserBusinessException("Can't generate pdf with map", ex);
- } finally {
- IOUtils.closeQuietly(os);
- }
- return result;
- }
-
- /**
* Genere un fichier zip des sources d'un projet.
*
* Contient:
@@ -2023,11 +1881,11 @@
* </ul>
*
* @param zone zone (zoneid-surveyname)
- * @param locale locale (fr/en)
+ * @param locale locale
* @return zip source file (auto delete when jvm shutdown)
* @throws CoserBusinessException
*/
- public File getSourceZip(String zone, String locale) throws CoserBusinessException {
+ public File getSourceZip(String zone, Locale locale) throws CoserBusinessException {
File result = null;
@@ -2095,7 +1953,7 @@
* @throws CoserBusinessException
*/
protected File generateSourceZip(Project project, Selection selection, File resultDirectory,
- RSufiResult rSufiResult, String locale) throws CoserBusinessException {
+ RSufiResult rSufiResult, Locale locale) throws CoserBusinessException {
if (!rSufiResult.isDataAllowed()) {
throw new CoserBusinessException("Can't download source for non allowed result");
@@ -2113,9 +1971,10 @@
// add decharge file
File dechargePDF = generateDechargePDF(resultDirectory, rSufiResult, locale);
String filename = null;
- // FIXME chatellier 20120228 a remplacer par une vraie locale
- if ("fr".equalsIgnoreCase(locale)) {
+ if (locale != null && "fr".equals(locale.getLanguage())) {
filename = "DechargeDonnees.pdf";
+ } else if (locale != null && "es".equals(locale.getLanguage())) {
+ filename = "DatosDeExencionDeResponsabilidad.pdf";
} else {
filename = "DataDisclaimer.pdf";
}
@@ -2150,7 +2009,7 @@
* @return le fichier généré
* @throws CoserBusinessException
*/
- protected File generateDechargePDF(File resultDirectory, RSufiResult rSufiResult, String locale) throws CoserBusinessException {
+ protected File generateDechargePDF(File resultDirectory, RSufiResult rSufiResult, Locale locale) throws CoserBusinessException {
File result = null;
@@ -2162,14 +2021,7 @@
String surveyName = projectService.getProjectSurveyName(resultDirectory, rSufiResult);
// render freemarker template
- // FIXME chatellier 20120228 a remplacer par un vrai
- // freemarkerConfiguration.getTemplate("decharge.ftl", locale);
- Template mapTemplate = null;
- if ("fr".equalsIgnoreCase(locale)) {
- mapTemplate = freemarkerConfiguration.getTemplate("decharge_fr.ftl");
- } else {
- mapTemplate = freemarkerConfiguration.getTemplate("decharge_en.ftl");
- }
+ Template mapTemplate = freemarkerConfiguration.getTemplate("decharge.ftl", locale);
Map<String, Object> root = new HashMap<String, Object>();
root.put("updateDate", updateDate);
@@ -2215,12 +2067,12 @@
* @param resultDirectory result directory
* @param rsufiResult rsufi result
* @param indicator indicator
- * @param locale locale (en, fr)
+ * @param locale locale
* @return generated pdf file
* @throws CoserBusinessException
*/
protected File generateMetaFilePDF(Project project, Selection selection, File resultDirectory,
- RSufiResult rsufiResult, String indicator, String locale) throws CoserBusinessException {
+ RSufiResult rsufiResult, String indicator, Locale locale) throws CoserBusinessException {
File result = null;
@@ -2287,7 +2139,7 @@
}
// get indicator full name
- String indicatorName = (String)getIndicatorsMap().get(indicatorCode, locale);
+ String indicatorName = getIndicatorValue(indicatorCode, locale.getLanguage());
// peut arriver pour les indicateurs inconnu par coser
if (indicatorName != null) {
indicatorList.add(indicatorName);
@@ -2345,14 +2197,7 @@
OutputStream os = null;
try {
// render freemarker template
- // FIXME chatellier 20110506 a remplacer par un vrai
- // freemarkerConfiguration.getTemplate("metainfo.ftl", locale);
- Template mapTemplate = null;
- if ("fr".equalsIgnoreCase(locale)) {
- mapTemplate = freemarkerConfiguration.getTemplate("metainfo_fr.ftl");
- } else {
- mapTemplate = freemarkerConfiguration.getTemplate("metainfo_en.ftl");
- }
+ Template mapTemplate = freemarkerConfiguration.getTemplate("metainfo.ftl", locale);
Map<String, Object> root = new HashMap<String, Object>();
root.put("indicatorsMap", indicatorMap);
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -28,6 +28,7 @@
import java.io.File;
import java.io.IOException;
import java.net.URL;
+import java.util.Locale;
import java.util.Map;
import org.apache.commons.collections.map.MultiKeyMap;
@@ -89,7 +90,7 @@
@Test
public void testGetIndicators() throws CoserBusinessException {
MultiKeyMap indicators = webService.getIndicatorsMap();
- Assert.assertEquals(93, indicators.size());
+ Assert.assertEquals(124, indicators.size());
}
/**
@@ -121,10 +122,10 @@
*/
@Test
public void testGetZoneMetaInfo() throws CoserBusinessException {
- Map<String, String> zonesMetaInfos = webService.getZoneMetaInfo("fr");
+ Map<String, String> zonesMetaInfos = webService.getZoneMetaInfo(Locale.FRENCH);
Assert.assertEquals("Ensemble de la couverture Evhoe", zonesMetaInfos.get("gdgmc"));
- zonesMetaInfos = webService.getZoneMetaInfo("en");
+ zonesMetaInfos = webService.getZoneMetaInfo(Locale.ENGLISH);
Assert.assertEquals("Area covered by Evhoe survey", zonesMetaInfos.get("gdgmc"));
zonesMetaInfos = webService.getZoneMetaInfo(null);
@@ -165,7 +166,7 @@
public void testSourceZipError() throws CoserBusinessException, IOException {
registerUploadedResult("/web/upload2.zip");
- webService.getSourceZip("ecorse", "en");
+ webService.getSourceZip("ecorse", Locale.ENGLISH);
}
/**
@@ -180,14 +181,14 @@
public void testSourceZip() throws CoserBusinessException, IOException {
registerUploadedResult("/web/upload2.zip");
- File zip = webService.getSourceZip("testzone1", "en");
+ File zip = webService.getSourceZip("testzone1", Locale.ENGLISH);
File tempDir = FileUtil.createTempDirectory("coser", ".tmp");
ZipUtil.uncompress(zip, tempDir);
Assert.assertTrue(new File(tempDir, "RSUFI_DATA_projet1" + File.separator + "testcatch.csv").isFile());
Assert.assertTrue(new File(tempDir, "RSUFI_DATA_projet1" + File.separator + "DataDisclaimer.pdf").isFile());
FileUtils.deleteDirectory(tempDir);
- zip = webService.getSourceZip("testzone1", "fr");
+ zip = webService.getSourceZip("testzone1", Locale.FRENCH);
tempDir = FileUtil.createTempDirectory("coser", ".tmp");
ZipUtil.uncompress(zip, tempDir);
Assert.assertTrue(new File(tempDir, "RSUFI_DATA_projet1" + File.separator + "DechargeDonnees.pdf").isFile());
@@ -209,18 +210,6 @@
}
/**
- * Test la generation pdf avec l'inclusion d'image.
- *
- * @throws CoserBusinessException
- */
- @Test
- public void testGetMapFileAsPDF() throws CoserBusinessException {
- registerUploadedResult("/web/upload2.zip");
- File file = webService.getMapFileAsPDF("ecorse", "SPECIES1");
- Assert.assertTrue(file.isFile());
- }
-
- /**
* Test que la generation d'un graph fonctionne.
*
* @throws CoserBusinessException
@@ -228,7 +217,7 @@
@Test
public void testGetChartCom() throws CoserBusinessException {
registerUploadedResult("/web/upload2.zip");
- File file = webService.getChart("ecorse", null, "Lbcomm", null, "fr");
+ File file = webService.getChart("ecorse", null, "Lbcomm", null, Locale.FRENCH);
Assert.assertTrue(file.isFile());
}
@@ -240,7 +229,7 @@
@Test
public void testGetChartPop() throws CoserBusinessException {
registerUploadedResult("/web/upload2.zip");
- File file = webService.getChartData("ecorse", "COSER_SPECIES2", "lnN", null, "fr");
+ File file = webService.getChartData("ecorse", "COSER_SPECIES2", "lnN", null, Locale.FRENCH);
Assert.assertTrue(file.isFile());
}
@@ -253,7 +242,7 @@
@Test
public void testGetChartDataCom() throws CoserBusinessException {
registerUploadedResult("/web/upload2.zip");
- File file = webService.getChartData("ecorse", null, "lnN", null, "fr");
+ File file = webService.getChartData("ecorse", null, "lnN", null, Locale.FRENCH);
Assert.assertTrue(file.isFile());
}
@@ -266,7 +255,7 @@
@Test
public void testGetChartDataPop() throws CoserBusinessException {
registerUploadedResult("/web/upload2.zip");
- File file = webService.getChartData("ecorse", "COSER_SPECIES2", "lnN", null, "fr");
+ File file = webService.getChartData("ecorse", "COSER_SPECIES2", "lnN", null, Locale.FRENCH);
Assert.assertTrue(file.isFile());
}
@@ -278,7 +267,7 @@
@Test
public void testGetIndicatorLists() throws CoserBusinessException {
registerUploadedResult("/web/upload2.zip");
- Map<String, String> lists = webService.getIndicatorLists("ecorse", "Delta", "fr");
+ Map<String, String> lists = webService.getIndicatorLists("ecorse", "Delta", Locale.FRENCH);
Assert.assertEquals(2, lists.size());
Assert.assertEquals("Type2 Liste 1", lists.get("m1"));
Assert.assertEquals("Type2 Liste 2", lists.get("m2"));
Modified: trunk/coser-business/src/test/resources/webindicators.csv
===================================================================
--- trunk/coser-business/src/test/resources/webindicators.csv 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-business/src/test/resources/webindicators.csv 2012-08-09 10:36:21 UTC (rev 1033)
@@ -1,33 +1,33 @@
-"id";"label_fr";"label_en";"unit"
-"Abundance";"Abondance totale dans la zone (valeur relative)";"Total abundance in the area (relative value)";""
-"Biomass";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)";""
-"Dbar";"Densité relative dans la zone";"Relative density in the area";""
-"l0.05";"Longueur au 5ème percentile de la distribution de longueur";"Length at the fifth percentile of the length distribution";"cm"
-"l0.25";"Longueur au 25ème percentile de la distribution de longueur";"Length at the twenty-fifth percentile of the length distribution";"cm"
-"l0.75";"Longueur au 75ème percentile de la distribution de longueur";"Length at the seventy-fifth percentile of the length distribution";"cm"
-"l0.95";"Longueur au 95ème percentile de la distribution de longueur";"Length at the ninety- fifth percentile of the length distribution";"cm"
-"L50";"Taille à 50 % de maturité";"Size at 50 % maturity";"cm"
-"Lbar";"Longueur moyenne dans la population";"Mean length in the population";"cm"
-"lnN";"Logarithme naturel de l'abondance";"Natural Logarithm of abundance";""
-"lvar";"Variance de la longueur dans l'échantillon";"Sample variance of length measurements";""
-"PropMat";"Proportion de matures";"Proportion of mature individuals";""
-"sexRatio";"Sexe ratio (males/femelles)";"Sex ratio (males/females)";""
-"Wbar";"Poids individuel moyen dans la population";"Average individual weight in the population";"kg"
-"biomBig";"Biomasse des grandes espèces (valeur relative)";"Biomass of the large species (relative value)";""
-"biomSmall";"Biomasse des petites espèces (valeur relative)";"Biomass of the small species (relative value)";""
-"Btot";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)";""
-"Delta";"Indice de diversité Delta";"Diversity index Delta";""
-"Gtot";"Moyenne géométrique du nombre par espèce";"Geometric mean of species abundances";""
-"Lbcomm";"Taille moyenne dans communauté";"Average length in community";"cm"
-"meanQuant0.95";"Moyenne des l0;95 des espèces";"Average across species of l0;95";"cm"
-"meanWbar";"Moyenne des Wbar par espèce";"Average of species Wbar";"kg"
-"Ntot";"Abondance totale dans la zone (valeur relative)";"Total abundance in the area (relative value)";""
-"propL15";"Proportion des grands individus en nombre (taille seuil 15 cm)";"Proportion of large individuals in numbers (threshold size 15 cm)";""
-"propL20";"Proportion des grands individus en nombre (taille seuil 20 cm)";"Proportion of large individuals in numbers (threshold size 20 cm)";""
-"propL25";"Proportion des grands individus en nombre (taille seuil 25 cm)";"Proportion of large individuals in numbers (threshold size 25 cm)";""
-"propL30";"Proportion des grands individus en nombre (taille seuil 30 cm)";"Proportion of large individuals in numbers (threshold size 30 cm)";""
-"propLW";"Proportion des grands individus en poids (/ taille seuil spécifique à la zone)";"Proportion of large individuals in weight (/ threshold length area specific)";""
-"Shannonmod";"Indice de Shannon normalisé / première année";"Shannon index normalized wrt the first year";""
-"Wbcomm";"Poids moyen d'un individu)";"Average weight of an individual";"kg"
-"Wtot";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)";""
+"id";"label_fr";"label_en";"label_es";"unit"
+"Abundance";"Abondance totale dans la zone (valeur relative)";"Total abundance in the area (relative value)";;""
+"Biomass";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)";;""
+"Dbar";"Densité relative dans la zone";"Relative density in the area";;""
+"l0.05";"Longueur au 5ème percentile de la distribution de longueur";"Length at the fifth percentile of the length distribution";;"cm"
+"l0.25";"Longueur au 25ème percentile de la distribution de longueur";"Length at the twenty-fifth percentile of the length distribution";;"cm"
+"l0.75";"Longueur au 75ème percentile de la distribution de longueur";"Length at the seventy-fifth percentile of the length distribution";;"cm"
+"l0.95";"Longueur au 95ème percentile de la distribution de longueur";"Length at the ninety- fifth percentile of the length distribution";;"cm"
+"L50";"Taille à 50 % de maturité";"Size at 50 % maturity";;"cm"
+"Lbar";"Longueur moyenne dans la population";"Mean length in the population";;"cm"
+"lnN";"Logarithme naturel de l'abondance";"Natural Logarithm of abundance";;""
+"lvar";"Variance de la longueur dans l'échantillon";"Sample variance of length measurements";;""
+"PropMat";"Proportion de matures";"Proportion of mature individuals";;""
+"sexRatio";"Sexe ratio (males/femelles)";"Sex ratio (males/females)";;""
+"Wbar";"Poids individuel moyen dans la population";"Average individual weight in the population";;"kg"
+"biomBig";"Biomasse des grandes espèces (valeur relative)";"Biomass of the large species (relative value)";;""
+"biomSmall";"Biomasse des petites espèces (valeur relative)";"Biomass of the small species (relative value)";;""
+"Btot";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)";;""
+"Delta";"Indice de diversité Delta";"Diversity index Delta";;""
+"Gtot";"Moyenne géométrique du nombre par espèce";"Geometric mean of species abundances";;""
+"Lbcomm";"Taille moyenne dans communauté";"Average length in community";;"cm"
+"meanQuant0.95";"Moyenne des l0;95 des espèces";"Average across species of l0;95";;"cm"
+"meanWbar";"Moyenne des Wbar par espèce";"Average of species Wbar";;"kg"
+"Ntot";"Abondance totale dans la zone (valeur relative)";"Total abundance in the area (relative value)";;""
+"propL15";"Proportion des grands individus en nombre (taille seuil 15 cm)";"Proportion of large individuals in numbers (threshold size 15 cm)";;""
+"propL20";"Proportion des grands individus en nombre (taille seuil 20 cm)";"Proportion of large individuals in numbers (threshold size 20 cm)";;""
+"propL25";"Proportion des grands individus en nombre (taille seuil 25 cm)";"Proportion of large individuals in numbers (threshold size 25 cm)";;""
+"propL30";"Proportion des grands individus en nombre (taille seuil 30 cm)";"Proportion of large individuals in numbers (threshold size 30 cm)";;""
+"propLW";"Proportion des grands individus en poids (/ taille seuil spécifique à la zone)";"Proportion of large individuals in weight (/ threshold length area specific)";;""
+"Shannonmod";"Indice de Shannon normalisé / première année";"Shannon index normalized wrt the first year";;""
+"Wbcomm";"Poids moyen d'un individu)";"Average weight of an individual";;"kg"
+"Wtot";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)";;""
Modified: trunk/coser-business/src/test/resources/webzones.csv
===================================================================
--- trunk/coser-business/src/test/resources/webzones.csv 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-business/src/test/resources/webzones.csv 2012-08-09 10:36:21 UTC (rev 1033)
@@ -1,24 +1,24 @@
-"id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"map"
-"northibts";"merdunord";"Mer du Nord";"Toutes zones IBTS au sud de 57° 30' N";"1983 >";"IBTS";"Application prioritaire : cartes de distribution des espèces";"Selected area: species distribution maps";"C_Ciem-4b-4c-E7d.png"
-"northibts2";"merdunord";"Mer du Nord";"Toutes zones IBTS au sud de 57° 30' N";"2007 >";"IBTS";"Application prioritaire : cartes de distribution des espèces";"Selected area: species distribution maps";"C_Ciem-4b-4c.png"
-"ciem4b4c";"merdunord";"Mer du Nord";"CIEM 4b - 4c";"1983 >";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"Based on international data from ICES Datras data base";"C_Ciem-4b-4c.png"
-"ciem4c";"merdunord";"Mer du Nord";"CIEM 4c";"1983 >";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"Based on international data from ICES Datras data base";"C_Ciem-4c.png"
-"ciem4ce7d";"merdunord";"Mer du Nord";"CIEM 4c - Est 7d";"2007 >";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"Based on international data from ICES Datras data base";"C_Ciem-4c-E7d.png"
-"ciem4c4e7d";"merdunord";"Mer du Nord";"CIEM 4c4 - Est 7d";"2007 >";"IBTS";"- Détroit du Pas-de-Calais\n- D'après données internationales extraites de la base Datras du CIEM";"Based on international data from ICES Datras data base";"C_Ciem-4c4-E7d.png"
-"cieme7d";"mancheorientale";"Manche orientale";"Est de 1° 15' O";"1988 >";"CGFS";;;"C_Ciem-E7d.png"
-"ciem7d";"mancheorientale";"Manche orientale";"Ensemble Manche orientale";"1990 >";"CGFS";"Correspond à l'ensemble de la zone VIId du CIEM";"Corresponds to ICES Division VIId";"C_Ciem-7d.png"
-"noursom";"mancheorientale";"Manche orientale";"Baie de Somme";"1994 >";"Noursom";;;"C_Noursom.png"
-"nurvil";"atlantique";"Atlantique";"Baie de Vilaine";"1997 >";"Nurvil";;;"C_Nurvil.png"
-"noursein";"mancheorientale";"Manche orientale";"Baie de Seine";"1995 - 2010";"Noursein";"Série arrêtée en 2010";"Survey discontinued in 2010";"C_Noursein.png"
-"crustaflam";"mancheoccidentale";"Manche occidentale";"Abords du cap de Flamanville";"Juin 1985 >";"Crustaflam";"Série du mois de juin";"June survey";"C_Crustaflam.png"
-"crustaflam2";"mancheoccidentale";"Manche occidentale";"Abords du cap de Flamanville";"Sept. – 1985 >";"Crustaflam";"Série du mois de septembre";"September survey";"C_Crustaflam.png"
-"gdgmc";"atlantique";"Atlantique";"Golfe de Gascogne + mer Celtique";"1997 >";"Evhoe";"Ensemble de la couverture Evhoe";"Area covered by Evhoe survey";"C_GdG-MC.png"
-"mcech";"atlantique";"Atlantique";"Mer Celtique (strates d'échantillonnage)";"1997 >";"Evhoe";;;"C_MC-Ech.png"
-"mcciem7";"atlantique";"Atlantique";"Mer Celtique (zone VII du CIEM)";"1997 >";"Evhoe";"La limite sud de la zone VII du CIEM (48 °N) constitue aussi une limite de régions de la DCSMM";"The southern limit of ICES division VII (48 °N) corresponds to a regional limit of the MSFD. ";"C_MC-Ciem-7.png"
-"gdgech";"atlantique";"Atlantique";"Golfe de Gascogne (strates d'échantillonnage)";"1987 >";"Evhoe";;;"C_GdG-Ech.png"
-"gdgech2";"atlantique";"Atlantique";"Golfe de Gascogne (strates d'échantillonnage)";"1992 >";"Evhoe";"Plus d'espèces mesurées à partir de 1992";"Size measurements for more species from 1992";"C_GdG-Ech.png"
-"gdgciem7";"atlantique";"Atlantique";"Golfe de Gascogne (zone VIII du CIEM)";"1987 >";"Evhoe";"La limite nord de la zone VIII du CIEM (48 °N) constitue aussi une limite de régions de la DCSMM";"The northern limit of ICES division VIII (48 °N) corresponds to a regional limit of the MSFD.";"C_GdG-Ciem-7.png"
-"gdgciem72";"atlantique";"Atlantique";"Golfe de Gascogne (zone VIII du CIEM)";"1992 >";"Evhoe";"- La limite nord de la zone VIII du CIEM (48 °N) constitue aussi une limite de régions de la DCSMM\n- Plus d'espèces mesurées à partir de 1992";"The northern limit of ICES division VIII (48 °N) corresponds to a regional limit of the MSFD.\n- Size measurements for more species from 1992";"C_GdG-Ciem-7.png"
-"gdl";"mediteranee";"Méditerranée";"Golfe du Lion";"1994 >";"Medits";;;"C_GdL.png"
-"ecorse";"mediteranee";"Méditerranée";"Est-Corse";"1994 >";"Medits";"1997 exclue (couverture incomplète)";"1997 excluded (only partial coverage)";"C_E-Corse.png"
-"solper";"atlantique";"Atlantique";"Pertuis";"2005 >";"Solper";"Limitation aux Pertuis Charentais";"Limited to Pertuis Charentais";
+"id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es","map"
+"northibts";"merdunord";"Mer du Nord";"Toutes zones IBTS au sud de 57° 30' N";"1983 >";"IBTS";"Application prioritaire : cartes de distribution des espèces";"Selected area: species distribution maps";;"C_Ciem-4b-4c-E7d.png"
+"northibts2";"merdunord";"Mer du Nord";"Toutes zones IBTS au sud de 57° 30' N";"2007 >";"IBTS";"Application prioritaire : cartes de distribution des espèces";"Selected area: species distribution maps";;"C_Ciem-4b-4c.png"
+"ciem4b4c";"merdunord";"Mer du Nord";"CIEM 4b - 4c";"1983 >";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"Based on international data from ICES Datras data base";;"C_Ciem-4b-4c.png"
+"ciem4c";"merdunord";"Mer du Nord";"CIEM 4c";"1983 >";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"Based on international data from ICES Datras data base";;"C_Ciem-4c.png"
+"ciem4ce7d";"merdunord";"Mer du Nord";"CIEM 4c - Est 7d";"2007 >";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"Based on international data from ICES Datras data base";;"C_Ciem-4c-E7d.png"
+"ciem4c4e7d";"merdunord";"Mer du Nord";"CIEM 4c4 - Est 7d";"2007 >";"IBTS";"- Détroit du Pas-de-Calais\n- D'après données internationales extraites de la base Datras du CIEM";"Based on international data from ICES Datras data base";;"C_Ciem-4c4-E7d.png"
+"cieme7d";"mancheorientale";"Manche orientale";"Est de 1° 15' O";"1988 >";"CGFS";;;;"C_Ciem-E7d.png"
+"ciem7d";"mancheorientale";"Manche orientale";"Ensemble Manche orientale";"1990 >";"CGFS";"Correspond à l'ensemble de la zone VIId du CIEM";"Corresponds to ICES Division VIId";;"C_Ciem-7d.png"
+"noursom";"mancheorientale";"Manche orientale";"Baie de Somme";"1994 >";"Noursom";;;;"C_Noursom.png"
+"nurvil";"atlantique";"Atlantique";"Baie de Vilaine";"1997 >";"Nurvil";;;;"C_Nurvil.png"
+"noursein";"mancheorientale";"Manche orientale";"Baie de Seine";"1995 - 2010";"Noursein";"Série arrêtée en 2010";"Survey discontinued in 2010";;"C_Noursein.png"
+"crustaflam";"mancheoccidentale";"Manche occidentale";"Abords du cap de Flamanville";"Juin 1985 >";"Crustaflam";"Série du mois de juin";"June survey";;"C_Crustaflam.png"
+"crustaflam2";"mancheoccidentale";"Manche occidentale";"Abords du cap de Flamanville";"Sept. – 1985 >";"Crustaflam";"Série du mois de septembre";"September survey";;"C_Crustaflam.png"
+"gdgmc";"atlantique";"Atlantique";"Golfe de Gascogne + mer Celtique";"1997 >";"Evhoe";"Ensemble de la couverture Evhoe";"Area covered by Evhoe survey";;"C_GdG-MC.png"
+"mcech";"atlantique";"Atlantique";"Mer Celtique (strates d'échantillonnage)";"1997 >";"Evhoe";;;;"C_MC-Ech.png"
+"mcciem7";"atlantique";"Atlantique";"Mer Celtique (zone VII du CIEM)";"1997 >";"Evhoe";"La limite sud de la zone VII du CIEM (48 °N) constitue aussi une limite de régions de la DCSMM";"The southern limit of ICES division VII (48 °N) corresponds to a regional limit of the MSFD. ";;"C_MC-Ciem-7.png"
+"gdgech";"atlantique";"Atlantique";"Golfe de Gascogne (strates d'échantillonnage)";"1987 >";"Evhoe";;;;"C_GdG-Ech.png"
+"gdgech2";"atlantique";"Atlantique";"Golfe de Gascogne (strates d'échantillonnage)";"1992 >";"Evhoe";"Plus d'espèces mesurées à partir de 1992";"Size measurements for more species from 1992";;"C_GdG-Ech.png"
+"gdgciem7";"atlantique";"Atlantique";"Golfe de Gascogne (zone VIII du CIEM)";"1987 >";"Evhoe";"La limite nord de la zone VIII du CIEM (48 °N) constitue aussi une limite de régions de la DCSMM";"The northern limit of ICES division VIII (48 °N) corresponds to a regional limit of the MSFD.";;"C_GdG-Ciem-7.png"
+"gdgciem72";"atlantique";"Atlantique";"Golfe de Gascogne (zone VIII du CIEM)";"1992 >";"Evhoe";"- La limite nord de la zone VIII du CIEM (48 °N) constitue aussi une limite de régions de la DCSMM\n- Plus d'espèces mesurées à partir de 1992";"The northern limit of ICES division VIII (48 °N) corresponds to a regional limit of the MSFD.\n- Size measurements for more species from 1992";;"C_GdG-Ciem-7.png"
+"gdl";"mediteranee";"Méditerranée";"Golfe du Lion";"1994 >";"Medits";;;;"C_GdL.png"
+"ecorse";"mediteranee";"Méditerranée";"Est-Corse";"1994 >";"Medits";"1997 exclue (couverture incomplète)";"1997 excluded (only partial coverage)";;"C_E-Corse.png"
+"solper";"atlantique";"Atlantique";"Pertuis";"2005 >";"Solper";"Limitation aux Pertuis Charentais";"Limited to Pertuis Charentais";;
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/DataHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/DataHandler.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/DataHandler.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -26,7 +26,6 @@
import static org.nuiton.i18n.I18n._;
import java.awt.Component;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -120,12 +120,11 @@
public String getIndicatorDisplayName() {
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
WebService webService = ServiceFactory.getWebService();
String displayName = null;
try {
- displayName = webService.getIndicators(zone, null, localeCode).get(indicator);
+ displayName = webService.getIndicators(zone, null, locale).get(indicator);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get species display name", ex);
}
@@ -136,11 +135,10 @@
public String execute() {
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
WebService webService = ServiceFactory.getWebService();
try {
- lists = webService.getIndicatorLists(zone, indicator, localeCode);
+ lists = webService.getIndicatorLists(zone, indicator, locale);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get indicator's list names", ex);
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -93,11 +93,10 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
InputStream input = null;
try {
- File mapImage = webService.getChart(zone, null, indicator, list, localeCode);
+ File mapImage = webService.getChart(zone, null, indicator, list, locale);
input = new FileInputStream(mapImage);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get map file", ex);
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDownloadAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDownloadAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDownloadAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -99,11 +99,10 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
InputStream input = null;
try {
- File mapImage = webService.getChartData(zone, null, indicator, list, localeCode);
+ File mapImage = webService.getChartData(zone, null, indicator, list, locale);
input = new FileInputStream(mapImage);
} catch (Exception ex) {
if (log.isErrorEnabled()) {
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -135,10 +135,9 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
try {
- indicators = webService.getIndicators(zone, species, localeCode);
+ indicators = webService.getIndicators(zone, species, locale);
zonePicture = webService.getZonePictures().get(zone);
} catch (CoserBusinessException ex) {
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -90,13 +90,12 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
try {
// renvoi la liste des id subzone-survey et leurs label associé
zones = webService.getZoneForFacade(facade, false, false);
zonesPictures = webService.getZonePictures();
- zonesMetaInfo = webService.getZoneMetaInfo(localeCode);
+ zonesMetaInfo = webService.getZoneMetaInfo(locale);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get zone map", ex);
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -50,13 +50,12 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
try {
// renvoi la liste des id subzone-survey et leurs label associé
zones = webService.getZoneForFacade(facade, false, true);
zonesPictures = webService.getZonePictures();
- zonesMetaInfo = webService.getZoneMetaInfo(localeCode);
+ zonesMetaInfo = webService.getZoneMetaInfo(locale);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get zone map", ex);
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -122,12 +122,11 @@
public String getIndicatorDisplayName() {
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
WebService webService = ServiceFactory.getWebService();
String displayName = null;
try {
- displayName = webService.getIndicators(zone, species, localeCode).get(indicator);
+ displayName = webService.getIndicators(zone, species, locale).get(indicator);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get species display name", ex);
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDataAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDataAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDataAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -94,11 +94,10 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
InputStream input = null;
try {
- File mapImage = webService.getChart(zone, species, indicator, null, localeCode);
+ File mapImage = webService.getChart(zone, species, indicator, null, locale);
input = new FileInputStream(mapImage);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get map file", ex);
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDownloadAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDownloadAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDownloadAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -98,11 +98,10 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
InputStream input = null;
try {
- File mapImage = webService.getChartData(zone, species, indicator, null, localeCode);
+ File mapImage = webService.getChartData(zone, species, indicator, null, locale);
input = new FileInputStream(mapImage);
} catch (Exception ex) {
if (log.isErrorEnabled()) {
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -80,12 +80,11 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
InputStream input = null;
try {
- File sourceZip = webService.getSourceZip(zone, localeCode);
+ File sourceZip = webService.getSourceZip(zone, locale);
input = new FileInputStream(sourceZip);
} catch (Exception ex) {
if (log.isErrorEnabled()) {
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java 2012-08-09 10:36:21 UTC (rev 1033)
@@ -3,7 +3,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 Affero General Public License as published by
@@ -50,13 +50,12 @@
WebService webService = ServiceFactory.getWebService();
Locale locale = getLocale();
- String localeCode = locale.getLanguage();
try {
// renvoi la liste des id subzone-survey et leurs label associé
zones = webService.getZoneForFacade(facade, true, false);
zonesPictures = webService.getZonePictures();
- zonesMetaInfo = webService.getZoneMetaInfo(localeCode);
+ zonesMetaInfo = webService.getZoneMetaInfo(locale);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get zone map", ex);
}
Added: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_es.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_es.properties (rev 0)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_es.properties 2012-08-09 10:36:21 UTC (rev 1033)
@@ -0,0 +1,190 @@
+###
+# #%L
+# Coser :: Web
+#
+# $Id$
+# $HeadURL$
+# %%
+# 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 Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# #L%
+###
+message.admin.title=Coser admin
+message.admin.indexaction=Actions d''administration
+message.admin.listprojects.deleteselected=Supprimer les projets s�lectionn�s
+message.admin.listprojects.title=Gestion des projets
+message.admin.listprojects.indicatorsprojects=Projects d'indicateur par zones
+message.admin.listprojects.indicatorsprojects.comment=La suppression d''un projets d''indicateur supprimera �galement la possibilit� de t�l�charger les donn�es sources du projet concern�.
+message.admin.listprojects.mapsprojects=Projects de cartes par zones
+message.admin.login=Identifiant
+message.admin.loginrequiered=Autentification requise
+message.admin.password=Mot de passe
+message.com.downloadascsv=T�l�charger en CSV
+message.com.downloadaszip=T�l�charger en ZIP
+message.com.moredetailspdf=Plus d''informations sur les indices calcul�s des communaut�s
+message.com.paragraph1=Des indices de communaut� sont calcul�s pour un ensemble de taxon dans chaque s�rie. La liste des taxons inclus pour le calcul de chaque indice varie selon les donn�es disponibles pour la r�alisation des calculs.
+message.com.paragraph2=La liste des esp�ces incluses dans le calcul de chaque indice de communaut� est pr�sent�e dans le dossier t�l�chargable sous chaque graphe (fichier \"Information.pdf\").
+message.com.selectindicatorlist=S�lectionner une liste de donn�es
+message.com.title=Indices de communaut�s
+message.common.anchortop=Haut
+message.common.facade=Facade
+message.common.jsreadmore=Voir la suite
+message.common.noresults=Aucun r�sultat disponible.
+message.common.selectfacade=S�lectionnez une fa�ade
+message.common.selectindicator=S�lectionnez un indicateur
+message.common.selectpop=S�lectionnez une population
+message.common.selectspecies=S�lectionnez une esp�ce
+message.common.selectsurvey=S�lectionnez une campagne
+message.common.selectzone=S�lectionnez une zone
+message.common.validform=Valider
+message.common.zone=Zone
+message.documents.genparagraph1=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. 2009. {0}
+message.documents.genparagraph2=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Bilan 2007. 2009. {0}
+message.documents.genparagraph3=L''�tat des communaut�s exploit�es au large des c�tes de France. Application d''indicateurs � l''�valuation de l''impact de la p�che. Bilan 2004 Edition 2009. {0}
+message.documents.genparagraph4=Poissons et invert�br�s au large des c�tes de France. Indicateurs issus des p�ches scientifiques. Bilan 2004. 2007. {0}
+message.documents.gentitle1=Rapports g�n�raux
+message.documents.activityparagraph1=Battaglia A., V. M. Trenkel & M. J. Rochet, 2006. Estimating end effects in trawl catches. ICES J. Mar. Sci. 63: 956-959.
+message.documents.activityparagraph2=Lorance P., J. A. Bertrand, A. Brind''Amour, M. J. Rochet & V. Trenkel, 2009. Assessment of impacts from human activities on ecosystem components in the Bay of Biscay in the early 1990s. Aquatic living resources 22: 409-431.
+message.documents.activityparagraph3=Rochet M. J., M. Prigent, J. A. Bertrand, A. Carpentier, F. Coppin, J. P. Delpech, G. Fontenelle, E. Foucher, K. Mah�, E. Rostiaux & V. M. Trenkel, 2008. Ecosystem trends: evidence for agreement between fishers'' perceptions and scientific information. ICES J. Mar. Sci. 65: 1057-1068.
+message.documents.activityparagraph4=Rochet M. J. & J. Rice, 2005. Do explicit criteria help in selecting indicators for ecosystem-based fisheries management? ICES J. Mar. Sci. 62: 528-539.
+message.documents.activityparagraph5=Rochet M. J. & V. Trenkel, 2003. Which community indicators can measure the impact of fishing? A review and proposals. Can. J. Fish. Aquat. Sci. 60: 86-99.
+message.documents.activityparagraph6=Rochet M. J., V. M. Trenkel, R. Bellail, F. Coppin, O. Le Pape, J.-C. Mah�, A. Morin, J.-C. Poulard, I. Schlaich, A. Souplet, Y. V�rin & J. A. Bertrand, 2005. Combining indicator trends to assess ongoing changes in exploited fish communities: diagnostic of communities off the coasts of France. ICES Journal of Marine Science 62: 1647-1664.
+message.documents.activityparagraph7=Rochet M. J., V. M. Trenkel, A. Carpentier, F. Coppin, L. Gil de Sola Simarro, J. P. L�aut�, J. C. Mah�, P. Maiorano, A. Mannini, M. Murenu, G. Piet, C. Politou, B. Reale, M. T. Spedicato, G. Tserpes & J. A. Bertrand, 2010. Do changes in environmental pressures impact marine communities? An empirical assessment. J. Applied Ecology 47 (4): 741-750. Publisher''s official version : {0}, Open Access version : {1}
+message.documents.activityparagraph8=Trenkel V. & M. J. Rochet, 2003. Performance of indicators derived from abundance estimates for detecting the impact of fishing on a fish community. Can. J. Fish. Aquat. Sci. 60: 67-85.
+message.documents.activitytitle2=Publications des membres du GT relatives � l''activit� du groupe
+message.documents.indicatorparagraph1=Dreves L., C. Abernot-Le Gac, E. Antajan, P. Clabaut, P. Claquin, M.L. Cochard, P. Monbet, J. Morin, A. T�tard, C. Warenbourg & H. Thillaye du Boullay, 2010. Synth�se hydrobiologique du site �lectronucl�aire de Penly. Ifremer. DOP/LER/2010.05. 280 p.
+message.documents.indicatortitle3=Travaux ayant utilis� les r�sultats du groupe de travail sur les indicateurs de populations et de peuplements
+message.documents.title=Documents
+message.index.datatypecom=Des indices de communaut� par zone.
+message.index.datatypemap=Des cartes de distribution par esp�ce et par zone
+message.index.datatypepop=Des indices biologiques par esp�ce et par zone
+message.index.datatypesource=Des donn�es par op�ration d''�chantillonnage (en g�n�ral par trait de chalut)
+message.index.datatypetitle=Quatre types de donn�es sont pr�sent�es
+message.index.documentsmessage=Documents
+message.index.documentstitle=Documents
+message.index.paragraph1=Ce site a �t� con�u pour fournir en libre acc�s des donn�es brutes et des donn�es �labor�es relatives aux campagnes scientifiques d''observation halieutique conduites par l''Ifremer le long des c�tes fran�aises.
+message.index.paragraph2=Toutes les donn�es mises � disposition ont fait l''objet de qualification selon des protocoles sp�cifiques. La qualit� des interpr�tations �tant directement li�e � la nature des donn�es source, les utilisateurs de donn�es sont invit�s � consid�rer avec attention les descriptions des protocoles mis en \u0153uvre ainsi que les niveaux de qualit� contr�l�s.
+message.index.paragraph3=Chaque s�rie de campagnes est conduite selon une strat�gie d''�chantillonnage sp�cifique. Sauf cas particuliers, les analyses et interpr�tations doivent �tre conduites par s�rie, en prenant en compte les strat�gies d''�chantillonnage propres � chacune de ces s�ries. Sur le site, les donn�es sont pr�sent�es par s�rie.
+message.index.paragraph4=Dans les tables de donn�es, toutes les esp�ces sont identifi�es selon le r�f�rentiel taxinomique du Syst�me d''informations halieutiques de l''Ifremer ({0}).
+message.index.partnertitle=Membres du groupe
+message.index.partnerparagraph1=Les r�sultats pr�sent�s sur ce site sont le produit de l''activit� d''un groupe de travail de l''Ifremer qui se r�unit chaque ann�e depuis 2001 pour d�velopper des indicateurs de populations et de peuplements � partir des donn�es des s�ries de campagnes halieutiques standardis�es conduites depuis la fin des ann�es 1970 par l''Ifremer le long des c�tes de France m�tropolitaine. Les principaux membres du groupe sont (par ordre alphab�tique de site et de patronyme)\u00A0: Florence Sanchez (Anglet), Franck Coppin, Sandrine Vaz et Yves V�rin (Boulogne-sur-mer), Andr� Battaglia et Jean-Pierre L�aut� (L''Houmeau), Jean-Claude Mah� et Mich�le Salaun (Lorient), Jacques Bertrand, Anik Brind''Amour, Yves D�saunay, Pascal Laffargue, Olivier Le Pape, J�r�my Lobry, Pascal Lorance, Jean-Charles Poulard, Marie-Jo\u00EBlle Rochet et Verena Trenkel (Nantes), Marie-Laure Cochard, Jocelyne Morin et Ivan Schlaich (Port-en-Bessin), Ang�lique Jadaud et Arnaud Souplet (S�te). La d�marche qualit� est g�r�e par Vincent Badts. Le support informatique de gestion des donn�es est assur� par Olivier Berthel�.
+message.index.qualitymessage=Avertissement qualit�
+message.index.qualitytitle=Avertissement qualit�
+message.index.quotemessage=Ifremer {0,date,yyyy}. Indices de populations et de communautés issus des campagnes de surveillance halieutique de l''Ifremer. {1} ({0,date,dd MMMM})
+message.index.quotetitle=Pour citer ce site
+message.index.surveyparagraph=Des manuels des protocoles d�crivent les modalit�s techniques de r�alisation de chaque s�rie de campagnes.
+message.index.surveytitle=Description des campagnes
+message.index.thankstitle=Remerciements
+message.index.thanksparagraph1=Bien que toutes les s�ries de campagnes dont des r�sultats sont pr�sent�s sur ce site aient �t� conduites par l''Ifremer, elles ont fait l''objet de financements vari�s. Certaines, apr�s une phase �ventuelle de financement unique par l''Ifremer font l''objet de cofinancements, comme les s�ries IBTS, Evhoe et Medits retenues au titre du r�glement europ�en sur la collecte des donn�es halieutiques (DCF). D''autres sont prises en charge en totalit� par l''Ifremer, comme les s�ries NourVil et CGFS (cette derni�re �tant en cours d''�valuation pour une reconnaissance au titre du r�glement europ�en sur la collecte des donn�es halieutiques - DCF). Pour la s�rie NourSein, les campagnes ont �t� co-financ�es par le conseil r�gional de Haute Normandie, le GPMH, le programme Liteau, le programme Seine Aval et le GIP-Seine Aval, selon les ann�es. Enfin, les s�ries Crustaflam et NourSomme sont financ�es en totalit� par EDF au titre de la surveillance de centrales nucl�aires littorales, dans le cadre de contrats entre Ifremer et EDF. Le pr�sent site a �t� cr�� gr\u00E2ce � un soutien du MEEDDM (contrat Ifremer-MEEDDM 2010). Pour l''�tablissement des indices en mer du Nord, les donn�es sources utilis�es sont celles mises � disposition par les diff�rents pays partenaires de la s�rie IBTS dans la base Datras du CIEM (http://datras.ices.dk)
+message.index.title=Bienvenida
+message.layout.oceanicdata1=le Syst�me d''informations scientifiques pour la mer de l''Ifremer (SISMER)
+message.layout.oceanicdata2=le Syst�me d''information halieutique de l''Ifremer (SIH)
+message.layout.oceanicdatatitle=Gestion des donn�es des campagnes oc�anographiques � l''Ifremer
+message.layout.title=�ndices de las poblaciones y comunidades de las campa�as de seguimiento, que participan de la pesquer�a pulgadas Ifremer
+message.map.citation=Trenkel V.M., O. Berthel�, P. Lorance, J.A. Bertrand, A. Brind''Amour, M.L. Cochard, F. Coppin, J.P. Leaut�, J.C. Mah�, J. Morin, M.J. Rochet, M. Salaun, A. Souplet & Y. V�rin, 2009. Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. Ifremer, Nantes. EMH : 09-003. {0}. 100 p.
+message.map.citationtitle=Citation
+message.map.downloadaspdf=T�l�charger en PDF
+message.map.linkarchimer=Acc�s � l''atlas : {0}
+message.map.paragraph1=L''objectif de cet atlas est de donner un aper�u de la distribution spatiale des esp�ces de poissons et de certains invert�br�s marins � partir des observations des campagnes de p�che scientifiques.
+message.map.paragraph2=Pour chaque zone un quadrillage syst�matique a �t� d�fini, puis la densit� moyenne par km\u00B2 dans chaque cellule a �t� calcul�e en utilisant les observations de toute la p�riode. Pour la repr�sentation cartographique, les cellules avec des densit�s moyenne correspondant aux quartiles de densit� ont re�u la m�me couleur\u00A0: bleu\u00A0: esp�ce jamais observ�e, jaune clair\u00A0: densit� moyenne entre [0 et 25\u00A0%[; jaune fonc�\u00A0: [25-50\u00A0%[, orange\u00A0: [50-75\u00A0%[ et rouge\u00A0: [75-100\u00A0%]. Donc, les zones o\u00F9 se trouvent les densit�s les plus �lev�es en moyenne sont repr�sent�es en rouge.
+message.map.title=Cartes de distribution
+message.map.warning=Avertissement
+message.map.warningcontent=Les cartes pr�sent�es ne doivent pas �tre interpr�t�es comme des cartes de distribution des esp�ces mais comme celle des zones o\u00F9 elles sont captur�es lors des campagnes scientifiques. Les campagnes �tant r�alis�es avec des chaluts diff�rents et � diff�rentes saisons, les esp�ces peuvent avoir des capturabilit�s tr�s diff�rentes entre les s�ries de campagnes, donc d''une zone � l''autre.
+message.pop.downloadascsv=T�l�charger en CSV
+message.pop.moredetailspdf=Plus d''informations sur les indices calcul�s des populations
+message.pop.paragraph1=Les indices pr�sent�s ont �t� s�lectionn�s en r�f�rence � leur aptitude � renseigner sur l''impact de la p�che, en vue de leur int�gration dans des tableaux de bord d''indicateurs d''�volution d''�cosyst�mes exploit�s par la p�che.
+message.pop.paragraph2=Les donn�es disponibles sur le site sont les valeurs de chaque indice. Les informations ont �t� valid�es par un groupe de travail dans une approche int�grative d''indicateurs de populations et de communaut�s. Les r�sultats sont donn�s par zone g�ographique et par esp�ce pour l''ensemble de la s�rie de donn�es disponible. L''utilisateur peut s�lectionner la zone g�ographique, la saison (dans le cas de s�ries saisonni�res), l''esp�ce et l''indice. Pour les s�lections pour lesquelles une information est disponible, le syst�me produit un graphe pr�sentant la distribution temporelle de l''indice, avec une repr�sentation de l''�cart-type. Il fournit la possibilit� d''extraire la table des donn�es correspondantes, incluant la valeur de l''indice par ann�e, ainsi que son �cart-type et son coefficient de variation.
+message.pop.title=Indices biologiques
+message.quality.acceptance=Je reconnais avoir pris connaissance des documents et des restrictions associ�es et je m''engage � citer la source des donn�es.
+message.quality.notaccepted=Vous devez valider les conditions Avertissement Qualit� !
+message.quality.paragraph1=Bien que les donn�es aient �t� pr�cautionneusement contr�l�es par l''Ifremer, des d�fauts inh�rents � l''agr�gation des informations peuvent persister. Par exemple\u00A0:
+message.quality.paragraph2=En d�pit du fait que toutes les donn�es de toutes les s�ries de campagnes soient pr�sent�es selon le m�me format, sauf cas particuliers, des diff�rences dans les strat�gies d''observation emp�chent la combinaison de donn�es de diff�rentes campagnes dans une m�me analyse. Par exemple, la capturabilit� d''une m�me esp�ce varie selon le type d''engin d''�chantillonnage utilis�. Il en r�sulte que chaque engin capture un sous-ensemble particulier des bioc�noses �chantillonn�es.
+message.quality.paragraph3=Une propri�t� commune aux s�ries d''observations � la mer est l''�volution dans le temps de la comp�tence des �quipes embarqu�es pour la d�termination des esp�ces. Il peut en r�sulter des apparitions, des disparitions ou des assignations sous un m�me nom de taxons proches dans les jeux de donn�es, non repr�sentatifs de l''�volution des populations concern�es dans l''�cosyst�me.
+message.quality.paragraph4=Pour les campagnes d''une m�me s�rie, des changements dans les proc�dures d''�chantillonnage, dans les caract�ristiques des engins, dans la p�riode de r�alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr�venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn�es doivent �tre pr�alablement filtr�s ad�quatement.
+message.quality.paragraph5=Il est vivement recommand� aux utilisateurs de donn�es de les traiter avec pr�caution. Si des utilisateurs s''interrogent sur la validit� de donn�es, ils sont invit�s � contacter l''administrateur de la base de donn�es ({0}).
+message.quality.title=Avertissement Qualit�
+message.source.download=T�l�charger
+message.source.paragraph1=Les donn�es de base sont pr�sent�es selon quatre tables fournissant des informations de base �lev�es � l''op�ration d''�chantillonnage (en g�n�ral un trait de chalut) et organis�es selon des unit�s g�ographiques d�finies en relation avec le plan d''�chantillonnage. Une table suppl�mentaire pr�sente le r�f�rentiel taxinomique associ� aux donn�es. Il s''agit des donn�es utilis�es pour r�aliser les calculs des indicateurs pr�sent�s. Ces donn�es ont fait l''objet de filtrages et de regroupements �ventuels par rapport aux donn�es de base de chaque s�rie, afin d''assurer la coh�rence des jeux de donn�es en vue du calcul des indicateurs. Ainsi, pour certaines s�ries, des groupes entiers (e.g. les amphihalins) ont pu �tre retir�s. Pour certaines s�ries, certaines ann�es ou certaines strates ont �t� retir�es afin de pr�server l''homog�n�it� de la s�rie. Dans des cas d''�volution du niveau de d�termination au cours de la s�rie, plusieurs taxons ont �t� regroup�s � un niveau sup�rieur.
+message.source.paragraph2=Les donn�es IBTS (donn�es fran�aises et donn�es des autres pays) issues de la base Datras du CIEM (http://datras.ices.dk) ont fait l''objet des m�mes contr�les de qualit� que les autres s�ries de donn�es utilis�es, ainsi que de filtrages et de regroupements taxinomiques pour en pr�server la coh�rence vis-�-vis du pr�sent objectif de production d''indicateurs de tendances.
+message.source.paragraph3=Le site ne contient des donn�es de base que pour une partie des s�ries de campagnes pour lesquelles des indices de populations et de communaut�s sont pr�sent�s, selon les modalit�s d''acc�s � ces donn�es. Pour un acc�s aux s�ries de donn�es source, il convient de contacter l''administrateur du Syst�me d''informations halieutiques de l''Ifremer ({0}) pour les donn�es fran�aises, et le site Datras du CIEM (http://datras.ices.dk) pour les donn�es IBTS des autres pays.
+message.source.paragraph4=Les donn�es de campagnes halieutiques sont constitu�es � partir de stations d''�chantillonnage r�parties dans l''espace selon le principe de tirage stratifi�. La densit� de l''�chantillonnage conditionne la partition g�ographique selon laquelle les indices de population et de communaut� peuvent �tre �tablis.
+message.source.paragraph5=Les plans de zonage propos�s incluent le plan de r�f�rence correspondant au plan d''�chantillonnage, ainsi que des adaptations pour tenir compte des limites des sous-r�gions d�finies par la strat�gie marine europ�enne. Ils ont �t� valid�s par un groupe de travail de l''Ifremer, apr�s exploration de la sensibilit� de divers indices aux ajustements propos�s.
+message.source.title=Donn�es de base
+message.survey.atlantique.celtique.desc=Campagne Evhoe (Evaluation des ressources halieutiques de l''ouest europ�en) d''un mois au quatri�me trimestre, tous les ans depuis 1997. En moyenne 75 traits d''une demi-heure, au chalut de fond � grande ouverture verticale, sont r�alis�s. Chaque trait couvre une surface d''environ 0,067 km\u00B2. Cette campagne est repr�sentative des 150 000 km\u00B2 de la mer Celtique.
+message.survey.atlantique.celtique.evhoe1=Manuel des protocoles EVHOE - Version 1.0 (2005)
+message.survey.atlantique.celtique.plus=Pour en savoir plus sur les campagnes Evhoe
+message.survey.atlantique.celtique=Mer Celtique
+message.survey.atlantique.gascogne.desc=Campagne Evhoe (Evaluation des ressources halieutiques de l''ouest europ�en) d''un mois au quatri�me trimestre, tous les ans depuis 1992 (sauf en 1993 et 1996). En moyenne, 70 traits de chalut d''une demi-heure au chalut de fond � grande ouverture verticale, sont r�alis�s. Chaque trait couvre une surface de 0,067 km\u00B2. Cette campagne est repr�sentative des 72 500 km\u00B2 du golfe de Gascogne. La campagne Evhoe couvre donc le golfe de Gascogne et la mer Celtique avec le m�me protocole. De plus elle est coordonn�e internationalement, dans le cadre des campagnes IBTS, avec une campagne espagnole en mer Cantabrique, une campagne irlandaise et une campagne anglaise en mer Celtique.
+message.survey.atlantique.gascogne.evhoe1=Manuel des protocoles EVHOE - Version 1.0 (2005)
+message.survey.atlantique.gascogne.plus=Pour en savoir plus sur les campagnes Evhoe
+message.survey.atlantique.gascogne=Golfe de Gascogne
+message.survey.atlantique.vilaine.desc=Campagne sur la nourricerie de la baie de Vilaine (NourVil), d''une semaine � l''automne, tous les ans de 1980 � 2010, sauf en 1991, 1994, 1995, 1998, 1999, 2006 et 2007, au chalut � perche de 3 m�tres de large. En moyenne, 30 chalutages de 15 minutes sont r�alis�s. Chaque trait couvre une surface d''environ 0,0041 km\u00B2. Cette campagne est repr�sentative des 330 km\u00B2 de la baie.
+message.survey.atlantique.vilaine.nourvil1=Manuel des protocoles Nourriceries Gascogne - V 1.0 (2002)
+message.survey.atlantique.vilaine.plus=Pour en savoir plus sur les campagnes Nourvil
+message.survey.atlantique.vilaine=Baie de Vilaine
+message.survey.atlantique=Fa�ade Atlantique
+message.survey.dataengincasier=Un �chantillonnage au casier pour les campagnes d''�valuation des grands crustac�s, en particulier le homard, aux abords du cap de Flamanville.
+message.survey.dataenginfond=Un chalut de fond � grande ouverture verticale pour l''observation des ressources d�mersales, sur les plateaux continentaux et le haut des pentes continentales (accores) en mer du Nord, Manche orientale, mer Celtique, golfe de Gascogne, golfe du Lion et Est de la Corse,
+message.survey.dataenginperche=Un chalut � perche pour les zones tr�s c�ti�res et les estuaires lors des campagnes visant les juv�niles de poissons plats : baies de Somme et de Vilaine,
+message.survey.dataengintitle=Diff�rents engins d''�chantillonnage sont utilis�s :
+message.survey.detailstitle=Caract�ristiques des campagnes de surveillance halieutique de l''Ifremer
+message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
+message.survey.mancheoccidentale.flamanville.crustaflam1=Manuel des protocoles CRUSTAFLAM - Version 1.0 (2003)
+message.survey.mancheoccidentale.flamanville.desc=Deux campagnes de 15 jours aux casiers � crustac�s aux abords du cap de Flamanville (CrustaFlam), en juin et septembre, depuis 1986 : 1200 casiers relev�s par campagne sur une zone de 26 km\u00B2.
+message.survey.mancheoccidentale.flamanville.plus=Pour en savoir plus sur les campagnes CrustFlam
+message.survey.mancheoccidentale.flamanville=Abords du cap de Flamanville
+message.survey.mancheoccidentale=Fa�ade Manche occidentale
+message.survey.mancheorientale.baiedeseine=Baie de Seine
+message.survey.mancheorientale.baiedeseine.desc=Campagnes annuelles de prospection sur les nourriceries de l''estuaire de Seine et de la baie de Seine orientale (NourSeine) effectu�es essentiellement � l''automne, de 1995 � 2002. L''objectif premier �tait d''identifier les nourriceries c�ti�res de ce site et d''en �valuer la richesse halieutique et macro-�pibenthique. Environ 45 traits effectu�s � chaque campagne, � l''aide d''un chalut � perche standard.
+message.survey.mancheorientale.baiedeseine.plus=Pour en savoir plus sur les campagnes NourSeine
+message.survey.mancheorientale.baiedeseine.nourseine1=http://archimer.ifremer.fr/doc/00036/14714/
+message.survey.mancheorientale.baiedesomme.desc=Campagne de p�che sur la nourricerie de la baie de Somme (NourSomme) d''une semaine en septembre-octobre, tous les ans depuis 1995, aux chaluts � perche de 2 m�tres de large dans la partie la plus estuarienne de la baie et 3 m�tres dans la partie externe, plus marine. En moyenne 50 chalutages sont r�alis�s chaque ann�e. Ils durent en moyenne 7 minutes sur une surface de 0,001 km\u00B2 chacun dans la partie interne de la baie et 15 minutes sur une surface d''environ 0,004 km\u00B2 dans la partie externe. Cette campagne est repr�sentative des 720 km\u00B2 de la baie.
+message.survey.mancheorientale.baiedesomme.noursomme1=Manuel des protocoles Nourriceries Somme - V 1.0 (2002)
+message.survey.mancheorientale.baiedesomme.plus=Pour en savoir plus sur les campagnes NourSomme
+message.survey.mancheorientale.baiedesomme=Baie de Somme
+message.survey.mancheorientale.mancheorientale.cgfs1=Manuel des protocoles CGFS - Version 1.0 (2002)
+message.survey.mancheorientale.mancheorientale.desc=Campagne fran�aise CGFS (Channel Ground Fish Survey) d''un mois en octobre, coordonn�e au plan international avec les campagnes IBTS. La campagne a lieu tous les ans depuis 1988. En moyenne 90 traits d''une demi-heure, au chalut de fond � grande ouverture verticale, sont r�alis�s. Chaque trait couvre une surface d''environ 0,03 km\u00B2. Cette campagne est repr�sentative des 70 748 km\u00B2 de la Manche orientale.
+message.survey.mancheorientale.mancheorientale.plus=Pour en savoir plus sur les campagnes CGFS
+message.survey.mancheorientale.mancheorientale=Manche orientale
+message.survey.mancheorientale=Fa�ade Manche orientale
+message.survey.mediterranee.estcorse.desc=Contribution fran�aise � la campagne internationale Medits (International bottom Trawl Surveys in the Mediterranean), d''une semaine au printemps, tous les ans depuis 1994, sauf en 2002, au chalut de fond � grande ouverture verticale � ailes courtes. En moyenne 20 chalutages sont r�alis�s, d''une demi-heure couvrant une surface d''environ 0,05 km\u00B2 chacun pour les profondeurs inf�rieures � 200 m�tres et d''une heure (surface d''environ 0,1\u00A0km\u00B2) pour les profondeurs sup�rieures � 200 m�tres. La campagne est repr�sentative des 4 562 km\u00B2 du plateau insulaire de l''est de la Corse.
+message.survey.mediterranee.estcorse.medits1=Manuel des protocoles Medits, Version 1 (1994)
+message.survey.mediterranee.estcorse.medits2=Manuel des protocoles Medits, Version 2 (1995)
+message.survey.mediterranee.estcorse.medits3=Manuel des protocoles Medits, Version 3 (1999)
+message.survey.mediterranee.estcorse.medits4=Manuel des protocoles Medits, Version 4 (2001)
+message.survey.mediterranee.estcorse.medits5=Manuel des protocoles Medits, Version 5 (2007)
+message.survey.mediterranee.estcorse.plus=Pour en savoir plus sur les campagnes Medits
+message.survey.mediterranee.estcorse=Est de la Corse
+message.survey.mediterranee.golfelion.desc=Contribution fran�aise aux campagnes internationales Medits (International bottom Trawl Surveys in the Mediterranean), d''un mois au deuxi�me trimestre tous les ans depuis 1994 au chalut de fond � grande ouverture verticale � ailes courtes. En moyenne 69 chalutages sont r�alis�s, d''une demi-heure couvrant une surface d''environ 0,05 km\u00B2 chacun pour les profondeurs inf�rieures � 200 m�tres et d''une heure (surface d''environ 0,1\u00A0km\u00B2) pour les profondeurs sup�rieures � 200 m�tres. Medits est repr�sentative des 13 860 km\u00B2 du golfe de Lion.
+message.survey.mediterranee.golfelion.medits1=Manuel des protocoles Medits, Version 1 (1994)
+message.survey.mediterranee.golfelion.medits2=Manuel des protocoles Medits, Version 2 (1995)
+message.survey.mediterranee.golfelion.medits3=Manuel des protocoles Medits, Version 3 (1999)
+message.survey.mediterranee.golfelion.medits4=Manuel des protocoles Medits, Version 4 (2001)
+message.survey.mediterranee.golfelion.medits5=Manuel des protocoles Medits, Version 5 (2007)
+message.survey.mediterranee.golfelion.plus=Pour en savoir plus sur les campagnes Medits
+message.survey.mediterranee.golfelion=Golfe du Lion
+message.survey.mediterranee=Fa�ade M�diterran�e
+message.survey.merdunord.sudmerdunord.desc=Contribution fran�aise d''un mois � la campagne internationale IBTS (International Bottom Trawl Survey) au premier trimestre, tous les ans depuis 1980, au chalut de fond � grande ouverture verticale. En moyenne, le navire fran�ais fait 58 chalutages par an. Le sud de la mer du Nord est couvert par 4 navires (fran�ais, belge, danois et allemand) qui r�alisent en tout environ 200 traits par an. Chaque trait dure une demi-heure et couvre une surface d''environ 0,067 km\u00B2. Cette campagne est repr�sentative des 678\u00A0000\u00A0km\u00B2 de la zone.
+message.survey.merdunord.sudmerdunord.ibts6=Manuel des protocoles IBTS - R�vision VI (1999)
+message.survey.merdunord.sudmerdunord.ibts7=Manuel des protocoles IBTS - R�vision VII (2004)
+message.survey.merdunord.sudmerdunord.plus=Pour en savoir plus sur les campagnes IBTS
+message.survey.merdunord.sudmerdunord=Sud mer du Nord
+message.survey.merdunord=Fa�ade Mer du Nord
+message.survey.paragraph1=Les campagnes de p�che scientifique standardis�es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m�mes m�thodes d''�chantillonnage. Elles sont toujours r�alis�es dans la m�me zone, � la m�me saison, avec des engins de p�che standardis�s, afin que les donn�es soient comparables d''ann�e en ann�e. Elles servent � d�crire les esp�ces, qu''elles soient commerciales ou non, d''une zone et � observer les changements s''il y en a. Les poissons, les mollusques et les crustac�s sont d�nombr�s, mesur�s et pes�s. Certains d''entre eux font l''objet de pr�l�vements biologiques. Chaque campagne fournit ainsi une repr�sentation quantitative de l''ensemble des esp�ces de la zone � une p�riode donn�e. Selon les s�ries, d''autres informations sont relev�es (temp�rature, salinit�, macrofaune, observation des mammif�res marins, oiseaux, macro d�chets etc., mais ne sont pas pr�sent�es dans ce site)
+message.survey.paragraph2=Depuis une vingtaine d''ann�es, l''Ifremer organise des campagnes de p�che scientifique en mer du Nord, en Manche, en Atlantique et en M�diterran�e concernant les ressources d�mersales et benthiques. L''objectif prioritaire est de produire des indices d''abondance des principales esp�ces commerciales. Elles recueillent �galement des donn�es sur les esp�ces captur�es non commerciales. Elles contribuent ainsi aux connaissances n�cessaires au d�veloppement de l''approche �cosyst�mique des p�ches, notamment dans le cadre de la politique commune des p�ches et plus largement de la strat�gie marine de l''Union europ�enne.
+message.survey.paragraph3=Les campagnes sont r�alis�es selon des plans d''�chantillonnage standardis�s. L''engin de p�che et son gr�ement, la position des stations, le tri des captures, les pr�l�vements biologiques suivent des protocoles fix�s.
+message.survey.paragraph4=Pour les campagnes coordonn�es entre navires de recherche des pays riverains en mer du Nord, Manche orientale, mer Celtique, golfe de Gascogne et M�diterran�e, les protocoles sont communs � l''ensemble des pays partenaires. Les traits de chalut des diff�rents navires de recherche sont comparables.
+message.survey.paragraph5=Chaque zone �tudi�e est d�coup�e en strates en fonction de la profondeur, de la latitude ou d''autres crit�res. L''�chantillonnage pr�voit un nombre de traits de chalut ou de mouillages de casiers par strate.
+message.survey.paragraph6=Dans une campagne de chalutage scientifique, les positions des traits de chalut sont choisies selon un plan d''�chantillonnage statistique. L''objectif n''est pas d''obtenir les meilleures captures possibles comme le recherchent les p�cheurs, mais de r�colter des donn�es comparables d''une ann�e sur l''autre afin de relever des �volutions.
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2012-08-09 10:36:21 UTC (rev 1033)
@@ -75,6 +75,9 @@
<a href="<s:url namespace="/" action="locale">
<s:param name="request_locale">fr</s:param>
</s:url>" class="francais">Francais</a>
+ <a href="<s:url namespace="/" action="locale">
+ <s:param name="request_locale">es</s:param>
+ </s:url>" class="espagnol">Espagnol</a>
</div>
<decorator:body/>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2012-08-09 10:36:21 UTC (rev 1033)
@@ -71,6 +71,9 @@
<a href="<s:url namespace="/" action="locale">
<s:param name="request_locale">fr</s:param>
</s:url>" class="francais">Francais</a>
+ <a href="<s:url namespace="/" action="locale">
+ <s:param name="request_locale">es</s:param>
+ </s:url>" class="espagnol">Espagnol</a>
</div>
<div class="page">
Added: trunk/coser-web/src/main/webapp/images/es.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/es.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ image/png
Added: trunk/coser-web/src/main/webapp/images/zones/es.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/es.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ image/png
Modified: trunk/coser-web/src/main/webapp/styles/coser.css
===================================================================
--- trunk/coser-web/src/main/webapp/styles/coser.css 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/coser-web/src/main/webapp/styles/coser.css 2012-08-09 10:36:21 UTC (rev 1033)
@@ -482,7 +482,7 @@
text-indent: -999999px;
background: url(../images/gb.png) no-repeat;
position: absolute;
- right: 0;
+ right: 20px;
top: 10px;
width: 16px;
height: 11px;
@@ -498,7 +498,7 @@
text-indent: -999999px;
background: url(../images/fr.png) no-repeat;
position: absolute;
- right: 20px;
+ right: 40px;
top: 10px;
width: 16px;
height: 11px;
@@ -509,6 +509,22 @@
border: 2px solid #ffe600;
}
+#middle .top_content .espagnol {
+ display: block;
+ text-indent: -999999px;
+ background: url(../images/es.png) no-repeat;
+ position: absolute;
+ right: 0px;
+ top: 10px;
+ width: 16px;
+ height: 11px;
+ border: 2px solid transparent;
+}
+
+#middle .top_content .espagnol:hover {
+ border: 2px solid #ffe600;
+}
+
#middle .page .degrade ul li {
/*list-style: none;*/
/*padding-left: 20px;*/
@@ -597,15 +613,21 @@
#conteneur_int .top_content .anglais {
position: absolute;
top: 22px;
- right: 20px;
+ right: 40px;
}
#conteneur_int .top_content .francais {
position: absolute;
top: 22px;
- right: 40px;
+ right: 60px;
}
+#conteneur_int .top_content .espagnol {
+ position: absolute;
+ top: 22px;
+ right: 20px;
+}
+
#conteneur_int #middle .col_droite {
margin: 0;
}
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-09 08:39:35 UTC (rev 1032)
+++ trunk/pom.xml 2012-08-09 10:36:21 UTC (rev 1033)
@@ -377,12 +377,12 @@
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
- <version>8.0.4.v20111024</version>
+ <version>8.1.5.v20120716</version>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-jspc-maven-plugin</artifactId>
- <version>8.0.4.v20111024</version>
+ <version>8.1.5.v20120716</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
1
0
r1032 - 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/ui/common coser-ui/src/main/java/fr/ifremer/coser/ui/control
by echatellier@users.forge.codelutin.com 09 Aug '12
by echatellier@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: echatellier
Date: 2012-08-09 10:39:35 +0200 (Thu, 09 Aug 2012)
New Revision: 1032
Url: http://forge.codelutin.com/repositories/revision/coser/1032
Log:
refs #1331, #1332 : gestion des visualisations des esp?\195?\168ces dans le graph de structure en taille.
Added:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java
Removed:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/DataHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
trunk/pom.xml
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-07 13:40:47 UTC (rev 1031)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-09 08:39:35 UTC (rev 1032)
@@ -113,6 +113,9 @@
/** Reftax SIH. */
protected DataStorage refTaxSpecies;
+ /** Map de cache entre les codes especes et la visualisation utilisateur. */
+ protected Map<String, String> refTaxSpeciesMap;
+
/** Type especes */
protected DataStorage typeEspeces;
@@ -284,6 +287,41 @@
this.refTaxSpecies = refTaxSpecies;
}
+ /**
+ * Recuperation de la map de cache code especes/visualisation utilisateur.
+ *
+ * @return refTax species map
+ * @since 1.3
+ */
+ public Map<String, String> getRefTaxSpeciesMap() {
+ return this.refTaxSpeciesMap;
+ }
+
+ /**
+ * Modification de la map de cache code especes/visualisation utilisateur.
+ *
+ * @param refTaxSpeciesMap new map
+ * @since 1.3
+ */
+ public void setRefTaxSpeciesMap(Map<String, String> refTaxSpeciesMap) {
+ this.refTaxSpeciesMap = refTaxSpeciesMap;
+ }
+
+ /**
+ * Retourne le nom de visualisation de l'espèce conformement à la configuration
+ * du projet.
+ *
+ * @return le label espece
+ * @since 1.3
+ */
+ public String getDisplaySpeciesText(String speciesCode) {
+ String speciesText = speciesCode;
+ if (refTaxSpeciesMap.containsKey(speciesCode)) {
+ speciesText = refTaxSpeciesMap.get(speciesCode);
+ }
+ return speciesText;
+ }
+
public DataStorage getTypeEspeces() {
return typeEspeces;
}
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-07 13:40:47 UTC (rev 1031)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-08-09 08:39:35 UTC (rev 1032)
@@ -1078,9 +1078,20 @@
while (itReftax.hasNext() ) {
String[] tuple = itReftax.next();
// "C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa"
- String specyName = tuple[3];
+ String speciesId = null;
+ switch (project.getStorageSpeciesType()) {
+ case C_PERM:
+ speciesId = tuple[0];
+ break;
+ case C_Valide:
+ speciesId = tuple[3];
+ break;
+ case L_Valide:
+ speciesId = tuple[4];
+ break;
+ }
Integer iNumSys = Integer.valueOf(tuple[1]);
- refTaxSpecies.put(specyName, iNumSys);
+ refTaxSpecies.put(speciesId, iNumSys);
}
// parcourt du fichier des types de données
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-07 13:40:47 UTC (rev 1031)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-09 08:39:35 UTC (rev 1032)
@@ -235,10 +235,9 @@
String storageFileName = commonService.getDataStorageFileName(project, category, null);
File storageDataFile = new File(originalDirectory, storageFileName);
FileUtils.copyFile(dataFile, storageDataFile);
- }
-
+
// les fichiers autres (reftax) sont stockes a la base
- else {
+ } else {
File storageDataFile = new File(projectDirectory,
category.getStorageFileName());
FileUtils.copyFile(dataFile, storageDataFile);
@@ -261,6 +260,11 @@
control.setHistoryCommands(new ArrayList<Command>());
project.setControl(control);
+ // 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);
+ project.setRefTaxSpeciesMap(reftaxSpecies);
+
return project;
}
@@ -295,10 +299,14 @@
}
} catch (IOException ex) {
throw new CoserBusinessException("Can't save project properties file", ex);
- }
- finally {
+ } finally {
IOUtils.closeQuietly(outputStream);
}
+
+ // 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);
+ project.setRefTaxSpeciesMap(reftaxSpecies);
}
/**
@@ -495,6 +503,11 @@
IOUtils.closeQuietly(inputStream);
}
+ // 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);
+ project.setRefTaxSpeciesMap(reftaxSpecies);
+
return project;
}
@@ -2486,8 +2499,11 @@
* Calcul. Sommer TAILLES$Nombres par classe de longueur (TAILLES$Longueur)
* sur tous les traits d'une année (ou tous les années si regroupé)
*
- * Second version : matrix proxy et provider.
+ * Seconde version : matrix proxy et provider.
*
+ * Cette methode utilise directement les noms de visualisation des especes
+ * au lieu de leurs codes (trop compliqué de faire un rendu basé sur le code).
+ *
* @param project project
* @param dataContainer data container
* @return matrix proxy with 4 dimension
@@ -2528,7 +2544,8 @@
}
// remember for matrix spemantics
- speciesSet.add(species);
+ String speciesText = project.getDisplaySpeciesText(species);
+ speciesSet.add(speciesText);
strataSet.add(strata);
yearsSet.add(year);
@@ -2634,7 +2651,8 @@
// quitte l'iteration courante si les dimensions demandée
// ne sont pas dans la matrice reduite
- if (!matrix.getSemantic(1).contains(species)) {
+ String speciesText = project.getDisplaySpeciesText(species);
+ if (!matrix.getSemantic(1).contains(speciesText)) {
continue;
}
if (!matrix.getSemantic(2).contains(strata)) {
@@ -2658,9 +2676,9 @@
double number = Double.parseDouble(numberAsString);
// dimHelper is more performant
- double currentNumber = matrix.getValue(dimHelper.get(length, species, strata, year));
+ double currentNumber = matrix.getValue(dimHelper.get(length, speciesText, strata, year));
currentNumber += number;
- matrix.setValue(dimHelper.get(length, species, strata, year), currentNumber);
+ matrix.setValue(dimHelper.get(length, speciesText, strata, year), currentNumber);
}
catch (NumberFormatException ex) {
if (log.isWarnEnabled()) {
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/DataHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/DataHandler.java 2012-08-07 13:40:47 UTC (rev 1031)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/DataHandler.java 2012-08-09 08:39:35 UTC (rev 1032)
@@ -26,6 +26,9 @@
import static org.nuiton.i18n.I18n._;
import java.awt.Component;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
@@ -86,6 +89,11 @@
panel.addMatrixRenderer(new MatrixPanelRenderer());
panel.addMatrixFilter(new LengthStructureMatrixFilter(project, container));
panel.setMatrix(matrix);
+ // init default selection and rendering
+ panel.initRenderering(new List[]{
+ matrix.getSemantic(0), // select all length
+ Collections.singletonList(matrix.getSemantic(1).get(0)) // select first species
+ }, new int[]{-1, -1, 0, 0}); // select dim 3 et 4 sum action
matrixViewerFrame.add(panel);
matrixViewerFrame.pack();
matrixViewerFrame.setLocationRelativeTo(parent);
Deleted: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java 2012-08-07 13:40:47 UTC (rev 1031)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java 2012-08-09 08:39:35 UTC (rev 1032)
@@ -1,61 +0,0 @@
-/*
- * #%L
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 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
- * 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.ui.common;
-
-import java.awt.Component;
-import java.util.Map;
-
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.JList;
-
-/**
- * L'editeur remplace la valeur présente dans le fichier csv pour l'especes
- * par un autre nom (latin valide, code...)
- *
- * @author echatellier
- * @since 1.3
- */
-public class SpeciesComboRenderer extends DefaultListCellRenderer {
-
- /** serialVersionUID. */
- private static final long serialVersionUID = 3747535342745177615L;
-
- protected Map<String, String> reftaxSpecies;
-
- public SpeciesComboRenderer(Map<String, String> reftaxSpecies) {
- this.reftaxSpecies = reftaxSpecies;
- }
-
- @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);
- }
-
- return super.getListCellRendererComponent(list, speciesId, index, isSelected,
- cellHasFocus);
- }
-}
Added: 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 (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java 2012-08-09 08:39:35 UTC (rev 1032)
@@ -0,0 +1,61 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 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
+ * 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.ui.common;
+
+import java.awt.Component;
+import java.util.Map;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JList;
+
+/**
+ * L'editeur remplace la valeur présente dans le fichier csv pour l'especes
+ * par un autre nom (latin valide, code...)
+ *
+ * @author echatellier
+ * @since 1.3
+ */
+public class SpeciesListRenderer extends DefaultListCellRenderer {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 3747535342745177615L;
+
+ protected Map<String, String> reftaxSpecies;
+
+ public SpeciesListRenderer(Map<String, String> reftaxSpecies) {
+ this.reftaxSpecies = reftaxSpecies;
+ }
+
+ @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);
+ }
+
+ return super.getListCellRendererComponent(list, speciesId, index, isSelected,
+ cellHasFocus);
+ }
+}
Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
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-07 13:40:47 UTC (rev 1031)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2012-08-09 08:39:35 UTC (rev 1032)
@@ -96,7 +96,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.SpeciesComboRenderer;
+import fr.ifremer.coser.ui.common.SpeciesListRenderer;
import fr.ifremer.coser.ui.common.SpeciesTableCellRenderer;
import fr.ifremer.coser.ui.util.CoserProgressBar;
@@ -113,8 +113,6 @@
private static final Log log = LogFactory.getLog(ControlHandler.class);
- protected static final String REFTAX_SPECIES_FIELD = "reftaxSpecies";
-
/**
* Init control view.
*
@@ -125,16 +123,10 @@
boolean localUsed = config.getValidatorsDirectory().isDirectory();
controlView.getLocalControlUsedLabel().setVisible(localUsed);
- // about dans le context de la map des traductions d'especes
- // du reftax par rapport aux preferences du projet
- ProjectService projectService = controlView.getContextValue(ProjectService.class);
- Project project = controlView.getContextValue(Project.class);
- Map<String, String> reftaxSpecies = projectService.getReftaxSpeciesDisplayFieldMap(project, false);
- controlView.setContextValue(reftaxSpecies, REFTAX_SPECIES_FIELD);
-
// fixe les editeurs qui affiche les noms d'espèces différement
// de leur nom de stockage
- SpeciesTableCellRenderer renderer = new SpeciesTableCellRenderer(reftaxSpecies);
+ Project project = controlView.getContextValue(Project.class);
+ SpeciesTableCellRenderer renderer = new SpeciesTableCellRenderer(project.getRefTaxSpeciesMap());
controlView.getControlDataTableCatch().getColumnModel().getColumn(4).setCellRenderer(renderer);
controlView.getControlDataTableLength().getColumnModel().getColumn(4).setCellRenderer(renderer);
}
@@ -842,7 +834,8 @@
if ((category == Category.CATCH && fieldIndex == Catch.INDEX_SPECIES) ||
(category == Category.LENGTH && fieldIndex == Length.INDEX_SPECIES)) {
// combo box used to choose for species in list
- Map<String, String> reftaxSpecies = view.getContextValue(Map.class, REFTAX_SPECIES_FIELD);
+ 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
@@ -851,7 +844,7 @@
}
ListComboBoxModel<String> speciesComboModel = new ListComboBoxModel<String>(domain);
JComboBox speciesCombo = new JComboBox(speciesComboModel);
- speciesCombo.setRenderer(new SpeciesComboRenderer(reftaxSpecies));
+ speciesCombo.setRenderer(new SpeciesListRenderer(reftaxSpecies));
speciesCombo.setSelectedItem(fieldValue);
speciesCombo.addItemListener(new ItemListener() {
@Override
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-07 13:40:47 UTC (rev 1031)
+++ trunk/pom.xml 2012-08-09 08:39:35 UTC (rev 1032)
@@ -130,14 +130,14 @@
<dependency>
<groupId>org.nuiton.matrix</groupId>
<artifactId>nuiton-matrix</artifactId>
- <version>2.2.3</version>
+ <version>2.3-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.nuiton.matrix</groupId>
<artifactId>nuiton-matrix-gui</artifactId>
- <version>2.2.3</version>
+ <version>2.3-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
1
0
07 Aug '12
Author: echatellier
Date: 2012-08-07 15:40:47 +0200 (Tue, 07 Aug 2012)
New Revision: 1031
Url: http://forge.codelutin.com/repositories/revision/coser/1031
Log:
refs #1331 : G?\195?\169rer les esp?\195?\168ces par C_Perm, AA_Valide ou L_Valide
Added:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesTableCellRenderer.java
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/CommonService.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-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectCreationView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectEditView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectHandler.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/replay/SelectionReplayHandler.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/CoserUtils.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2012-08-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -29,8 +29,13 @@
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -219,4 +224,25 @@
}
return result;
}
+
+ /**
+ * Sort a map by value.
+ * See http://stackoverflow.com/a/2581754/1165234
+ *
+ * @param map map to sort
+ * @return sorted map
+ */
+ public static <K, V extends Comparable<? super V>> Map<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>();
+ for (Map.Entry<K, V> entry : list) {
+ result.put(entry.getKey(), entry.getValue());
+ }
+ return result;
+ }
}
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -414,20 +414,20 @@
Date date = new Date(Long.parseLong(props.getProperty("project.creationdate")));
setCreationDate(date);
}
-
+
// species field type was added in 1.3+
// missing values for previous project are considered as L_Valide
- if (props.contains("project.storageSpeciesType")) {
+ if (props.containsKey("project.storageSpeciesType")) {
setStorageSpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.storageSpeciesType")));
} else {
setStorageSpeciesType(SpeciesFieldType.C_Valide);
}
- if (props.contains("project.displaySpeciesType")) {
+ if (props.containsKey("project.displaySpeciesType")) {
setDisplaySpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.displaySpeciesType")));
} else {
setDisplaySpeciesType(SpeciesFieldType.C_Valide);
}
- if (props.contains("project.outputSpeciesType")) {
+ if (props.containsKey("project.outputSpeciesType")) {
setOutputSpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.outputSpeciesType")));
} else {
setOutputSpeciesType(SpeciesFieldType.C_Valide);
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java 2012-08-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -54,8 +54,8 @@
import fr.ifremer.coser.CoserBusinessConfig;
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConstants;
+import fr.ifremer.coser.CoserConstants.Category;
import fr.ifremer.coser.CoserUtils;
-import fr.ifremer.coser.CoserConstants.Category;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.data.AbstractDataEntity;
import fr.ifremer.coser.data.Catch;
@@ -148,8 +148,7 @@
if (line == null || line.length <= 1) {
throw new CoserBusinessException(_("Can't read file '%s'. Check CSV file separator",
file.getAbsolutePath()));
- }
- else {
+ } else {
if (originalLoading) {
checkFileHeader(file, category, line);
if (category.isDataCategory()) {
@@ -174,8 +173,7 @@
}
} catch (IOException ex) {
throw new CoserBusinessException("Can't read file", ex);
- }
- finally {
+ } finally {
IOUtils.closeQuietly(csvReader);
}
@@ -228,8 +226,7 @@
StringUtils.join(frHeaders, ", "),
StringUtils.join(enHeaders, ", ")));
}
- }
- else {
+ } else {
if (!Arrays.equals(line, enHeaders)) {
throw new CoserBusinessException(_("Wrong header detected in file %s. Found : %s, expected %s",
file.getName(),
@@ -299,10 +296,13 @@
*
* @param content content to save
* @param file file to save to
+ * @param project project used only to get species output field (can be null)
+ * @param category category used to replace species output field if needed (can be null)
*
* @throws CoserBusinessException
*/
- public void storeDataWhithoutQuote(DataStorage content, File file) throws CoserBusinessException {
+ public void storeDataWhithoutQuote(DataStorage content, File file, Map<String, String> refTaxSpecies, Category category) throws CoserBusinessException {
+
// save content
Writer writer = null;
try {
@@ -320,10 +320,20 @@
}
String contentData = contentDatas[i];
+
+ // for some category, need to swap species output field with
+ // user preference (since 1.3)
+ if ((category == Category.CATCH && i == Catch.INDEX_SPECIES) ||
+ (category == Category.LENGTH && i == Length.INDEX_SPECIES)) {
+ // can not exists, stay unchanged
+ if (refTaxSpecies.containsKey(contentData)) {
+ contentData = refTaxSpecies.get(contentData);
+ }
+ }
+
if (contentData.indexOf(CoserConstants.CSV_SEPARATOR_CHAR) > -1) {
writer.write("\"" + contentData + "\"");
- }
- else {
+ } else {
writer.write(contentData);
}
}
@@ -331,8 +341,7 @@
}
} catch (IOException ex) {
throw new CoserBusinessException("Can't save data", ex);
- }
- finally {
+ } finally {
IOUtils.closeQuietly(writer);
}
}
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -81,6 +81,7 @@
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.bean.RSufiResult;
import fr.ifremer.coser.bean.Selection;
+import fr.ifremer.coser.bean.SpeciesFieldType;
import fr.ifremer.coser.command.Command;
import fr.ifremer.coser.command.DeleteLineCommand;
import fr.ifremer.coser.command.MergeSpeciesCommand;
@@ -376,7 +377,7 @@
* Just load non category data (reftax).
*
* @param projectName project name to open
- * @param parentDirectory optionnal custom parent directory (for results)
+ * @param parentDirectory optional custom parent directory (for results)
* @return loaded project with data
* @throws CoserBusinessException
*/
@@ -429,8 +430,7 @@
}
} catch (IOException ex) {
throw new CoserBusinessException("Can't read control properties file", ex);
- }
- finally {
+ } finally {
IOUtils.closeQuietly(inputStream);
}
}
@@ -462,8 +462,7 @@
}
} catch (IOException ex) {
throw new CoserBusinessException("Can't read selection properties file", ex);
- }
- finally {
+ } finally {
IOUtils.closeQuietly(inputStream);
}
@@ -492,8 +491,7 @@
}
} catch (IOException ex) {
throw new CoserBusinessException("Can't read project properties file", ex);
- }
- finally {
+ } finally {
IOUtils.closeQuietly(inputStream);
}
@@ -1945,45 +1943,23 @@
}
/**
- * Get species name in project.
- *
- * Used in control ui (graph).
- *
- * @param container data container
- * @return species
- */
- public List<String> getProjectSpecies(AbstractDataContainer container) {
- List<String> result = new ArrayList<String>();
-
- Iterator<String[]> itTuple = container.getCatch().iterator(true);
- while (itTuple.hasNext()) {
- String[] tuple = itTuple.next();
- String species = tuple[Catch.INDEX_SPECIES];
- if (!result.contains(species)) {
- result.add(species);
- }
- }
-
- Collections.sort(result);
- return result;
- }
-
- /**
* Get species name in project with data in [{@code beginYear}-{@code endYear}].
*
* Used in selection ui.
*
+ * Cette liste est issue du fichier captures (petit fichier, mais suffisant).
+ *
* 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 filterSpecyType filterSpecyType (can be null or empty)
+ * @param project project (can be {@code null}, no filtering)
+ * @param filterSpecyType filterSpecyType (can be {@code null}, no filtering)
* @return species
*/
- public List<String> getProjectSpecies(Project project, AbstractDataContainer container, Collection<String> filterSpecyType) {
+ public List<String> getProjectSpecies(AbstractDataContainer container, Project project, Collection<String> filterSpecyType) {
// first get species with trait list
List<String> result = new ArrayList<String>();
@@ -1998,62 +1974,65 @@
}
}
- // load map SpecyName > numSys
- Map<String, Integer> map = 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);
- }
-
- // 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(true);
- while (itTypeSpecies.hasNext()) {
- // "Types";"Commentaire";"NumSys min";"NumSys max","Code"
- String[] tuple = itTypeSpecies.next();
- String specyType = tuple[0];
-
- if (filterSpecyType != null && filterSpecyType.contains(specyType)) {
- Integer iMinNumSys = Integer.valueOf(tuple[2]);
- Integer iMaxNumSys = Integer.valueOf(tuple[3]);
- mapType.put(specyType, new Integer[]{iMinNumSys, iMaxNumSys});
+ // filtering is optionnal
+ if (project != null && filterSpecyType != null) {
+ // load map SpecyName > numSys
+ Map<String, Integer> map = 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);
}
- }
-
- // iteration sur les especes trouvées
- Iterator<String> itSpecies = result.iterator();
- while (itSpecies.hasNext()) {
- String specy = itSpecies.next();
- Integer specyNumSys = map.get(specy);
-
- if (specyNumSys == null) {
- // ca ne peut pas arriver, ce cs est valider
- // par un control
- if (log.isWarnEnabled()) {
- log.warn("Can't find specy " + specy + " in reftax");
+
+ // 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(true);
+ while (itTypeSpecies.hasNext()) {
+ // "Types";"Commentaire";"NumSys min";"NumSys max","Code"
+ String[] tuple = itTypeSpecies.next();
+ String specyType = tuple[0];
+
+ if (filterSpecyType != null && filterSpecyType.contains(specyType)) {
+ Integer iMinNumSys = Integer.valueOf(tuple[2]);
+ Integer iMaxNumSys = Integer.valueOf(tuple[3]);
+ mapType.put(specyType, new Integer[]{iMinNumSys, iMaxNumSys});
}
- itSpecies.remove();
- continue;
}
-
- // 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;
+
+ // iteration sur les especes trouvées
+ Iterator<String> itSpecies = result.iterator();
+ while (itSpecies.hasNext()) {
+ String specy = itSpecies.next();
+ Integer specyNumSys = map.get(specy);
+
+ if (specyNumSys == null) {
+ // ca ne peut pas arriver, ce cs est valider
+ // par un control
+ if (log.isWarnEnabled()) {
+ log.warn("Can't find specy " + specy + " in reftax");
+ }
+ itSpecies.remove();
+ continue;
}
+
+ // 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();
+ }
}
-
- if (!foundInFilter) {
- itSpecies.remove();
- }
}
Collections.sort(result);
@@ -2750,7 +2729,8 @@
}
DataStorage content = getProjectContent(project, selection, category, false);
- commonService.storeDataWhithoutQuote(content, dataFile);
+ Map<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, true);
+ commonService.storeDataWhithoutQuote(content, dataFile, reftaxSpecies, category);
}
}
@@ -3017,4 +2997,105 @@
selection.setSelectedSpeciesSizeAllYear(localSpeciesSizeAllYear);
selection.setSelectedSpeciesMaturity(localSpeciesMaturity);
}
+
+ /**
+ * Retourne une map de transcription entre la valeur de stockage de l'espece
+ * et la valeur retranscrite à l'utilisateur suivant les préférences qu'il
+ * a renseigner dans le projet.
+ * La map est triée sur le "VALEUR" et non sur la clé (pour la visualisation
+ * soit triée suivant la représentation de l'utilisateur).
+ *
+ * Les données sont issues du reftax.
+ *
+ * @param project le projet pour avoir accès au reftax
+ * @param outputField meme algorithm, mais renvoi une map de correspondance
+ * pour le champ de sortie
+ * @since 1.3
+ */
+ public Map<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"
+ Iterator<String[]> itData = project.getRefTaxSpecies().iterator(true);
+ while (itData.hasNext()) {
+ String[] tuple = itData.next();
+ String key = null;
+ String value = null;
+
+ switch (project.getStorageSpeciesType()) {
+ case C_Valide:
+ key = tuple[3];
+ break;
+ case C_PERM:
+ key = tuple[0];
+ break;
+ case L_Valide:
+ key = tuple[4];
+ break;
+ }
+
+ SpeciesFieldType valueField = outputField ? project.getOutputSpeciesType():
+ project.getDisplaySpeciesType();
+
+ switch (valueField) {
+ case C_Valide:
+ value = tuple[3];
+ break;
+ case C_PERM:
+ value = tuple[0];
+ break;
+ case L_Valide:
+ value = tuple[4];
+ break;
+ }
+
+ speciesMap.put(key, value);
+ }
+
+ return CoserUtils.sortByValue(speciesMap);
+ }
+
+ /*
+ * Retourne le nom d'affichage d'une espèce pour l'utilisateur suivant
+ * les préférences qu'il a choisit.
+ *
+ * @param project le projet pour avoir accès au reftax
+ * @param speciesId le code a retranscrire
+ * @return display name
+ * @since 1.3
+ *
+ public String getSpeciesDisplayField(Project project, String speciesId) {
+
+ // "C_Perm";"NumSys";"NivSys";"C_VALIDE";"L_VALIDE";"AA_VALIDE";"C_TxPère";"Taxa"
+ int index = -1;
+ switch (project.getStorageSpeciesType()) {
+ case C_Valide:
+ index = ((ReftaxMemoryDataStorage)project.getRefTaxSpecies()).indexOfCValide(speciesId);
+ break;
+ case C_PERM:
+ index = ((ReftaxMemoryDataStorage)project.getRefTaxSpecies()).indexOfCode(speciesId);
+ break;
+ case L_Valide:
+ index = ((ReftaxMemoryDataStorage)project.getRefTaxSpecies()).indexOfLValide(speciesId);
+ break;
+ }
+
+ String speciesText = speciesId;
+ if (index >= 0) {
+ String[] data = project.getRefTaxSpecies().get(index);
+ switch (project.getDisplaySpeciesType()) {
+ case C_Valide:
+ speciesText = data[3];
+ break;
+ case C_PERM:
+ speciesText = data[0];
+ break;
+ case L_Valide:
+ speciesText = data[4];
+ break;
+ }
+ }
+
+ return speciesText;
+ }*/
}
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -1133,7 +1133,7 @@
}
}
- commonService.storeDataWhithoutQuote(subDataStorage, result);
+ commonService.storeDataWhithoutQuote(subDataStorage, result, null, null);
} catch (IOException ex) {
throw new CoserBusinessException("Can't save csv file", ex);
}
@@ -1199,7 +1199,7 @@
}
}
- commonService.storeDataWhithoutQuote(subDataStorage, result);
+ commonService.storeDataWhithoutQuote(subDataStorage, result, null, null);
} catch (IOException ex) {
throw new CoserBusinessException("Can't save csv file", ex);
}
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -321,35 +321,35 @@
// all data
List<String> allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years20102011);
projectService.filterDataStrata(project, selection, allStrata);
- List<String> species = projectService.getProjectSpecies(project, selection, allPpeciesType);
+ List<String> species = projectService.getProjectSpecies(selection, project, allPpeciesType);
Assert.assertEquals(4, species.size());
// data in 2011
projectService.loadControlDataToSelection(project, selection);
allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years2011);
projectService.filterDataStrata(project, selection, allStrata);
- species = projectService.getProjectSpecies(project, selection, allPpeciesType);
+ species = projectService.getProjectSpecies(selection, project, allPpeciesType);
Assert.assertEquals(4, species.size());
// all strata but no data for years
projectService.loadControlDataToSelection(project, selection);
allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years2009);
projectService.filterDataStrata(project, selection, allStrata);
- species = projectService.getProjectSpecies(project, selection, allPpeciesType);
+ species = projectService.getProjectSpecies(selection, project, allPpeciesType);
Assert.assertEquals(0, species.size());
// test with no strata
projectService.loadControlDataToSelection(project, selection);
allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years20102011);
projectService.filterDataStrata(project, selection, new ArrayList<String>());
- species = projectService.getProjectSpecies(project, selection, allPpeciesType);
+ species = projectService.getProjectSpecies(selection, project, allPpeciesType);
Assert.assertEquals(0, species.size());
// test with only one stratum
projectService.loadControlDataToSelection(project, selection);
allStrata = projectService.filterDataYearsAndGetStrata(project, selection, years20102011);
projectService.filterDataStrata(project, selection, Collections.singletonList("STR6"));
- species = projectService.getProjectSpecies(project, selection, allPpeciesType);
+ species = projectService.getProjectSpecies(selection, project, allPpeciesType);
Assert.assertEquals(4, species.size());
}
@@ -373,15 +373,15 @@
project = projectService.mergeSpecies(project, selection, "COSER_SPECIES_1_3", null, "COSER_SPECIES1", "COSER_SPECIES3");
Assert.assertEquals(19, selection.getCatch().size());
Assert.assertEquals(28, selection.getLength().size());
- Assert.assertTrue(projectService.getProjectSpecies(selection).contains("COSER_SPECIES_1_3"));
- Assert.assertFalse(projectService.getProjectSpecies(selection).contains("COSER_SPECIES1"));
+ Assert.assertTrue(projectService.getProjectSpecies(selection, null, null).contains("COSER_SPECIES_1_3"));
+ Assert.assertFalse(projectService.getProjectSpecies(selection, null, null).contains("COSER_SPECIES1"));
// second merge
project = projectService.mergeSpecies(project, selection, "COSER_SPECIES_2_4", null, "COSER_SPECIES2", "COSER_SPECIES4");
Assert.assertEquals(13, selection.getCatch().size());
Assert.assertEquals(26, selection.getLength().size());
- Assert.assertTrue(projectService.getProjectSpecies(selection).contains("COSER_SPECIES_2_4"));
- Assert.assertFalse(projectService.getProjectSpecies(selection).contains("COSER_SPECIES4"));
+ Assert.assertTrue(projectService.getProjectSpecies(selection, null, null).contains("COSER_SPECIES_2_4"));
+ Assert.assertFalse(projectService.getProjectSpecies(selection, null, null).contains("COSER_SPECIES4"));
projectService.createProjectSelection(project, selection);
}
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -25,6 +25,7 @@
package fr.ifremer.coser;
import java.io.File;
+import java.util.Map;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
@@ -41,9 +42,9 @@
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.CommonService;
import fr.ifremer.coser.services.ProjectService;
import fr.ifremer.coser.services.PublicationService;
import fr.ifremer.coser.services.WebService;
Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -0,0 +1,61 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 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
+ * 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.ui.common;
+
+import java.awt.Component;
+import java.util.Map;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JList;
+
+/**
+ * L'editeur remplace la valeur présente dans le fichier csv pour l'especes
+ * par un autre nom (latin valide, code...)
+ *
+ * @author echatellier
+ * @since 1.3
+ */
+public class SpeciesComboRenderer extends DefaultListCellRenderer {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 3747535342745177615L;
+
+ protected Map<String, String> reftaxSpecies;
+
+ public SpeciesComboRenderer(Map<String, String> reftaxSpecies) {
+ this.reftaxSpecies = reftaxSpecies;
+ }
+
+ @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);
+ }
+
+ return super.getListCellRendererComponent(list, speciesId, index, isSelected,
+ cellHasFocus);
+ }
+}
Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesComboRenderer.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesTableCellRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesTableCellRenderer.java (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesTableCellRenderer.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -0,0 +1,61 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 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
+ * 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.ui.common;
+
+import java.awt.Component;
+import java.util.Map;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+/**
+ * L'editeur remplace la valeur présente dans le fichier csv pour l'especes
+ * par un autre nom (latin valide, code...)
+ *
+ * @author echatellier
+ * @since 1.3
+ */
+public class SpeciesTableCellRenderer extends DefaultTableCellRenderer {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = -1913267872081009935L;
+
+ protected Map<String, String> reftaxSpecies;
+
+ public SpeciesTableCellRenderer(Map<String, String> reftaxSpecies) {
+ this.reftaxSpecies = reftaxSpecies;
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value,
+ boolean isSelected, boolean hasFocus, int row, int column) {
+
+ String speciesId = (String)value;
+ if (reftaxSpecies.containsKey(speciesId)) {
+ speciesId = reftaxSpecies.get(speciesId);
+ }
+ return super.getTableCellRendererComponent(table, speciesId, isSelected, hasFocus,
+ row, column);
+ }
+}
Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesTableCellRenderer.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -24,7 +24,6 @@
package fr.ifremer.coser.ui.control;
import static org.nuiton.i18n.I18n._;
-import static org.nuiton.i18n.I18n.n_;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
@@ -33,16 +32,18 @@
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.beans.Introspector;
import java.io.File;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
+import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
@@ -69,8 +70,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.JXTreeTable;
-import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
-import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
+import org.jdesktop.swingx.combobox.ListComboBoxModel;
import org.jdesktop.swingx.treetable.TreeTableNode;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
@@ -85,7 +85,6 @@
import fr.ifremer.coser.command.Command;
import fr.ifremer.coser.control.ControlError;
import fr.ifremer.coser.control.ControlErrorGroup;
-import fr.ifremer.coser.control.DiffCatchLengthControlError;
import fr.ifremer.coser.control.SpeciesControlError;
import fr.ifremer.coser.data.AbstractDataEntity;
import fr.ifremer.coser.data.Catch;
@@ -97,6 +96,8 @@
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.SpeciesComboRenderer;
+import fr.ifremer.coser.ui.common.SpeciesTableCellRenderer;
import fr.ifremer.coser.ui.util.CoserProgressBar;
/**
@@ -112,6 +113,8 @@
private static final Log log = LogFactory.getLog(ControlHandler.class);
+ protected static final String REFTAX_SPECIES_FIELD = "reftaxSpecies";
+
/**
* Init control view.
*
@@ -121,6 +124,19 @@
CoserConfig config = controlView.getContextValue(CoserConfig.class);
boolean localUsed = config.getValidatorsDirectory().isDirectory();
controlView.getLocalControlUsedLabel().setVisible(localUsed);
+
+ // about dans le context de la map des traductions d'especes
+ // du reftax par rapport aux preferences du projet
+ ProjectService projectService = controlView.getContextValue(ProjectService.class);
+ Project project = controlView.getContextValue(Project.class);
+ Map<String, String> reftaxSpecies = projectService.getReftaxSpeciesDisplayFieldMap(project, false);
+ controlView.setContextValue(reftaxSpecies, REFTAX_SPECIES_FIELD);
+
+ // fixe les editeurs qui affiche les noms d'espèces différement
+ // de leur nom de stockage
+ SpeciesTableCellRenderer renderer = new SpeciesTableCellRenderer(reftaxSpecies);
+ controlView.getControlDataTableCatch().getColumnModel().getColumn(4).setCellRenderer(renderer);
+ controlView.getControlDataTableLength().getColumnModel().getColumn(4).setCellRenderer(renderer);
}
/**
@@ -819,46 +835,82 @@
final String stringBeanFieldName = beanFieldName + "AsString";
JLabel label = new JLabel(headerValue + "\u2009:");
- final JTextField fieldTextField = new JTextField(fieldValue);
- fieldTextField.getDocument().addDocumentListener(new DocumentListener() {
- @Override
- public void insertUpdate(DocumentEvent event) {
- valueChanged(event);
- }
+ panel.add(label, new GridBagConstraints(0, fieldIndex, 1, 1, 0, 0,
+ GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(
+ 1, 1, 1, 1), 0, 0));
- @Override
- public void removeUpdate(DocumentEvent event) {
- valueChanged(event);
+ if ((category == Category.CATCH && fieldIndex == Catch.INDEX_SPECIES) ||
+ (category == Category.LENGTH && fieldIndex == Length.INDEX_SPECIES)) {
+ // combo box used to choose for species in list
+ Map<String, String> reftaxSpecies = view.getContextValue(Map.class, REFTAX_SPECIES_FIELD);
+ 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)) {
+ domain.add(0, fieldValue);
}
-
- @Override
- public void changedUpdate(DocumentEvent event) {
- valueChanged(event);
- }
-
- protected void valueChanged(DocumentEvent event) {
- try {
- PropertyUtils.setProperty(finalBean, stringBeanFieldName, fieldTextField.getText());
- } catch (Exception ex) {
- if (log.isErrorEnabled()) {
- log.error("Can't set property value (" + stringBeanFieldName + ")", ex);
+ ListComboBoxModel<String> speciesComboModel = new ListComboBoxModel<String>(domain);
+ JComboBox speciesCombo = new JComboBox(speciesComboModel);
+ speciesCombo.setRenderer(new SpeciesComboRenderer(reftaxSpecies));
+ speciesCombo.setSelectedItem(fieldValue);
+ speciesCombo.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ if (e.getStateChange() == ItemEvent.SELECTED) {
+ String value = (String)e.getItem();
+ try {
+ PropertyUtils.setProperty(finalBean, stringBeanFieldName, value);
+ } catch (Exception ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't set property value (" + stringBeanFieldName + ")", ex);
+ }
+ }
}
}
- }
- });
-
- panel.add(label, new GridBagConstraints(0, fieldIndex, 1, 1, 0, 0,
- GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(
- 1, 1, 1, 1), 0, 0));
- panel.add(SwingUtil.boxComponentWithJxLayer(fieldTextField), new GridBagConstraints(1, fieldIndex, 1, 1, 1, 0,
- GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(
- 1, 1, 1, 1), 0, 0));
-
- // permet de dire a jaxx que les erreurs sur les
- // champs d'origine, et les champs string pointent sur le
- // même composant
- validator.setFieldRepresentation(beanFieldName, fieldTextField);
- validator.setFieldRepresentation(stringBeanFieldName, fieldTextField);
+ });
+ panel.add(SwingUtil.boxComponentWithJxLayer(speciesCombo), new GridBagConstraints(1, fieldIndex, 1, 1, 1, 0,
+ GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(
+ 1, 1, 1, 1), 0, 0));
+ // permet de dire a jaxx que les erreurs sur les
+ // champs d'origine, et les champs string pointent sur le
+ // même composant
+ validator.setFieldRepresentation(beanFieldName, speciesCombo);
+ validator.setFieldRepresentation(stringBeanFieldName, speciesCombo);
+ } else {
+ final JTextField fieldTextField = new JTextField(fieldValue);
+ fieldTextField.getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void insertUpdate(DocumentEvent event) {
+ valueChanged(event);
+ }
+ @Override
+ public void removeUpdate(DocumentEvent event) {
+ valueChanged(event);
+ }
+ @Override
+ public void changedUpdate(DocumentEvent event) {
+ valueChanged(event);
+ }
+ protected void valueChanged(DocumentEvent event) {
+ try {
+ PropertyUtils.setProperty(finalBean, stringBeanFieldName, fieldTextField.getText());
+ } catch (Exception ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't set property value (" + stringBeanFieldName + ")", ex);
+ }
+ }
+ }
+ });
+ panel.add(SwingUtil.boxComponentWithJxLayer(fieldTextField), new GridBagConstraints(1, fieldIndex, 1, 1, 1, 0,
+ GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(
+ 1, 1, 1, 1), 0, 0));
+
+ // permet de dire a jaxx que les erreurs sur les
+ // champs d'origine, et les champs string pointent sur le
+ // même composant
+ validator.setFieldRepresentation(beanFieldName, fieldTextField);
+ validator.setFieldRepresentation(stringBeanFieldName, fieldTextField);
+ }
}
validator.installUIs();
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectCreationView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectCreationView.jaxx 2012-08-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectCreationView.jaxx 2012-08-07 13:40:47 UTC (rev 1031)
@@ -201,7 +201,7 @@
<cell anchor="west">
<JLabel text="coser.ui.project.storageSpeciesType" />
</cell>
- <cell columns="2">
+ <cell anchor="west" columns="2">
<JComboBox id="projectStorageSpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
renderer="{new SpeciesFieldTypeListRenderer()}"
onItemStateChanged="getProject().setStorageSpeciesType((SpeciesFieldType)projectStorageSpeciesType.getSelectedItem())"/>
@@ -211,7 +211,7 @@
<cell anchor="west">
<JLabel text="coser.ui.project.displaySpeciesType" />
</cell>
- <cell columns="2">
+ <cell anchor="west" columns="2">
<JComboBox id="projectDisplaySpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
renderer="{new SpeciesFieldTypeListRenderer()}"
onItemStateChanged="getProject().setDisplaySpeciesType((SpeciesFieldType)projectDisplaySpeciesType.getSelectedItem())"/>
@@ -221,7 +221,7 @@
<cell anchor="west">
<JLabel text="coser.ui.project.outputSpeciesType" />
</cell>
- <cell columns="2">
+ <cell anchor="west" columns="2">
<JComboBox id="projectOutputSpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
renderer="{new SpeciesFieldTypeListRenderer()}"
onItemStateChanged="getProject().setOutputSpeciesType((SpeciesFieldType)projectOutputSpeciesType.getSelectedItem())"/>
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectEditView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectEditView.jaxx 2012-08-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectEditView.jaxx 2012-08-07 13:40:47 UTC (rev 1031)
@@ -92,8 +92,8 @@
<cell>
<JComboBox id="projectStorageSpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
renderer="{new SpeciesFieldTypeListRenderer()}"
- enabled="false"
- selectedItem="{getProject().getStorageSpeciesType()}"/>
+ selectedItem="{getProject().getStorageSpeciesType()}"
+ enabled="false" />
</cell>
</row>
<row>
@@ -103,8 +103,8 @@
<cell>
<JComboBox id="projectDisplaySpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
renderer="{new SpeciesFieldTypeListRenderer()}"
- onItemStateChanged="getProject().setDisplaySpeciesType((SpeciesFieldType)projectDisplaySpeciesType.getSelectedItem())"
- selectedItem="{getProject().getDisplaySpeciesType()}"/>
+ selectedItem="{getProject().getDisplaySpeciesType()}"
+ onItemStateChanged="getProject().setDisplaySpeciesType((SpeciesFieldType)projectDisplaySpeciesType.getSelectedItem())" />
</cell>
</row>
<row>
@@ -114,8 +114,8 @@
<cell>
<JComboBox id="projectOutputSpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
renderer="{new SpeciesFieldTypeListRenderer()}"
- onItemStateChanged="getProject().setOutputSpeciesType((SpeciesFieldType)projectOutputSpeciesType.getSelectedItem())"
- selectedItem="{getProject().getOutputSpeciesType()}"/>
+ selectedItem="{getProject().getOutputSpeciesType()}"
+ onItemStateChanged="getProject().setOutputSpeciesType((SpeciesFieldType)projectOutputSpeciesType.getSelectedItem())" />
</cell>
</row>
<row>
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectHandler.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -314,8 +314,8 @@
ProjectService projectService = projectView.getContextValue(ProjectService.class);
CoserFrame parent = projectView.getContextValue(CoserFrame.class, JAXXUtil.PARENT);
- setWaitCursor(projectView);
try {
+ setWaitCursor(projectView);
Project project = projectService.openProject(projectName);
parent.getHandler().projectLoaded(project);
parent.getHandler().showSummaryView();
@@ -325,7 +325,8 @@
}
JOptionPane.showMessageDialog(projectView, ex.getMessage(), _("coser.ui.project.openError"),
JOptionPane.ERROR_MESSAGE);
+ } finally {
+ setDefaultCursor(projectView);
}
- setDefaultCursor(projectView);
}
}
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -486,7 +486,7 @@
speciesTypes.add((String)selectedSpeciesType);
}
- List<String> filteredSpecies = projectService.getProjectSpecies(project, selection, speciesTypes);
+ List<String> filteredSpecies = projectService.getProjectSpecies(selection, project, speciesTypes);
// ne fait pas apparaitre les especes deja selectionnées
List<String> selectedSpecies = view.getSelectedSpeciesListModel().getSpecies();
@@ -889,6 +889,7 @@
if (canBeValidated) {
try {
service.validSelection(project, selection);
+ selection.setValidated(true);
JOptionPane.showMessageDialog(view, _("coser.ui.selection.selectionValidated"),
_("coser.ui.selection.selectionTitle"), JOptionPane.INFORMATION_MESSAGE);
} catch (CoserBusinessException ex) {
@@ -1398,19 +1399,23 @@
*/
public void extractRSufiData(SelectionRsufiView view) {
- ProjectService projectService = view.getContextValue(ProjectService.class);
- Project project = view.getContextValue(Project.class);
- Selection selection = view.getContextValue(Selection.class);
-
- String directoryPath = view.getResultExtractDataField().getText();
- File directory = new File(directoryPath);
try {
+ setWaitCursor(view);
+ ProjectService projectService = view.getContextValue(ProjectService.class);
+ Project project = view.getContextValue(Project.class);
+ Selection selection = view.getContextValue(Selection.class);
+
+ String directoryPath = view.getResultExtractDataField().getText();
+ File directory = new File(directoryPath);
+
projectService.extractRSUfiData(project, selection, directory, false);
JOptionPane.showMessageDialog(view, _("coser.ui.selection.rsufidataextracted"),
_("coser.ui.selection.selectionTitle"), JOptionPane.INFORMATION_MESSAGE);
} catch (CoserBusinessException ex) {
throw new CoserException("Can't extract rsufi files", ex);
+ } finally {
+ setDefaultCursor(view);
}
}
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/replay/SelectionReplayHandler.java 2012-08-07 13:40:47 UTC (rev 1031)
@@ -248,7 +248,7 @@
}
// init next step
- List<String> currentSpecies = projectService.getProjectSpecies(project, selection, null);
+ List<String> currentSpecies = projectService.getProjectSpecies(selection, project, null);
view.getSelectedSpeciesListModel().setSpecies(currentSpecies);
((CoserListSelectionModel)view.getSelectedSpeciesList().getSelectionModel()).setSelectedObjects(replayedSelection.getSelectedSpecies());
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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-07 13:40:47 UTC (rev 1031)
@@ -107,9 +107,9 @@
coser.ui.mainview.accesswontrolwithselection=Can't access control interface since selection exists in project \!\n\nIn order to maintain consistency between the controlled data\nand data used to create selection, create a new project\nor remove selections to access to the control interface.
coser.ui.mainview.titleempty=Contrôle et Sélection RSufi
coser.ui.mainview.titleproject=Contrôle et Sélection RSufi (%s)
-coser.ui.project.lValideSpeciesTypeDesc=Species latin name
coser.ui.project.addMaps=Add map…
coser.ui.project.cPermSpeciesTypeDesc=Numeric species code
+coser.ui.project.cValideSpeciesTypeDesc=Alphabetic species code
coser.ui.project.catchFile=Catch file \:
coser.ui.project.createProject=Create project
coser.ui.project.createProjectMissingCodeTypeSpecies=File 'CodeTypeSpecies' is not valid \!\n(check configuration \: coser.reference.typeSpecies)
@@ -118,7 +118,7 @@
coser.ui.project.displaySpeciesType=Display field \:
coser.ui.project.editProject=Edit project
coser.ui.project.haulFile=Haul file \:
-coser.ui.project.cValideSpeciesTypeDesc=Alphabetic species code
+coser.ui.project.lValideSpeciesTypeDesc=Species latin name
coser.ui.project.lengthFile=Length file \:
coser.ui.project.maps=Maps \:
coser.ui.project.missingFile=Missing 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-06 15:01:20 UTC (rev 1030)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-07 13:40:47 UTC (rev 1031)
@@ -107,9 +107,9 @@
coser.ui.mainview.accesswontrolwithselection=Impossible d'acceder à l'interface de contrôle alors que des sélections existent \!\n\nDans le but de garder une cohérence entre les données contrôlées et les données\nutilisées pour créer les sélections, créez un nouveau projet\nou supprimer les sélections du projet pour accèder de nouveau à l'interface de contrôle.
coser.ui.mainview.titleempty=Contrôle et Sélection RSufi
coser.ui.mainview.titleproject=Contrôle et Sélection RSufi (%s)
-coser.ui.project.lValideSpeciesTypeDesc=Nom latin des espèces
coser.ui.project.addMaps=Ajouter…
coser.ui.project.cPermSpeciesTypeDesc=Code numerique des espèces
+coser.ui.project.cValideSpeciesTypeDesc=Code alphabetique des espèces
coser.ui.project.catchFile=Fichier de captures \:
coser.ui.project.createProject=Créer le projet
coser.ui.project.createProjectMissingCodeTypeSpecies=Le fichier 'CodeTypeEspeces' n'est pas valide \!\n(vérifiez la configuration \: coser.reference.typeSpecies)
@@ -118,7 +118,7 @@
coser.ui.project.displaySpeciesType=Champ pour affichage \:
coser.ui.project.editProject=Modifier le projet
coser.ui.project.haulFile=Fichier des traits \:
-coser.ui.project.cValideSpeciesTypeDesc=Code alphabetique des espèces
+coser.ui.project.lValideSpeciesTypeDesc=Nom latin des espèces
coser.ui.project.lengthFile=Fichier des tailles \:
coser.ui.project.maps=Cartes \:
coser.ui.project.missingFile=Fichier manquant
1
0
r1030 - trunk/coser-business/src/main/java/fr/ifremer/coser/bean
by echatellier@users.forge.codelutin.com 06 Aug '12
by echatellier@users.forge.codelutin.com 06 Aug '12
06 Aug '12
Author: echatellier
Date: 2012-08-06 17:01:20 +0200 (Mon, 06 Aug 2012)
New Revision: 1030
Url: http://forge.codelutin.com/repositories/revision/coser/1030
Log:
refs #1331 : C_valide par defaut
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java
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-06 14:58:30 UTC (rev 1029)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-06 15:01:20 UTC (rev 1030)
@@ -117,13 +117,13 @@
protected DataStorage typeEspeces;
/** Species field type used in storage. */
- protected SpeciesFieldType storageSpeciesType = SpeciesFieldType.L_Valide;
+ protected SpeciesFieldType storageSpeciesType = SpeciesFieldType.C_Valide;
/** Species field type used for user display. */
- protected SpeciesFieldType displaySpeciesType = SpeciesFieldType.L_Valide;
+ protected SpeciesFieldType displaySpeciesType = SpeciesFieldType.C_Valide;
/** Species field type used for rsufi output files. */
- protected SpeciesFieldType outputSpeciesType = SpeciesFieldType.L_Valide;
+ protected SpeciesFieldType outputSpeciesType = SpeciesFieldType.C_Valide;
public Project() {
@@ -420,17 +420,17 @@
if (props.contains("project.storageSpeciesType")) {
setStorageSpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.storageSpeciesType")));
} else {
- setStorageSpeciesType(SpeciesFieldType.L_Valide);
+ setStorageSpeciesType(SpeciesFieldType.C_Valide);
}
if (props.contains("project.displaySpeciesType")) {
setDisplaySpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.displaySpeciesType")));
} else {
- setDisplaySpeciesType(SpeciesFieldType.L_Valide);
+ setDisplaySpeciesType(SpeciesFieldType.C_Valide);
}
if (props.contains("project.outputSpeciesType")) {
setOutputSpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.outputSpeciesType")));
} else {
- setOutputSpeciesType(SpeciesFieldType.L_Valide);
+ setOutputSpeciesType(SpeciesFieldType.C_Valide);
}
}
}
1
0
r1029 - 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/ui/project coser-ui/src/main/resources/i18n
by echatellier@users.forge.codelutin.com 06 Aug '12
by echatellier@users.forge.codelutin.com 06 Aug '12
06 Aug '12
Author: echatellier
Date: 2012-08-06 16:58:30 +0200 (Mon, 06 Aug 2012)
New Revision: 1029
Url: http://forge.codelutin.com/repositories/revision/coser/1029
Log:
refs #1331 : G?\195?\169rer les esp?\195?\168ces par C_Perm, AA_Valide ou L_Valide
Added:
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesFieldType.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/SpeciesFieldTypeListRenderer.java
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectCreationView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectEditView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectHandler.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/Project.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-06 10:48:10 UTC (rev 1028)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-06 14:58:30 UTC (rev 1029)
@@ -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
@@ -102,18 +102,29 @@
/** Commentaire du projet. */
protected String comment;
+ protected Date creationDate;
+
+ /** Project control. */
protected Control control;
- protected Date creationDate;
-
+ /** Project selections. */
protected Map<String, Selection> selections;
/** Reftax SIH. */
protected DataStorage refTaxSpecies;
-
+
/** Type especes */
protected DataStorage typeEspeces;
+ /** Species field type used in storage. */
+ protected SpeciesFieldType storageSpeciesType = SpeciesFieldType.L_Valide;
+
+ /** Species field type used for user display. */
+ protected SpeciesFieldType displaySpeciesType = SpeciesFieldType.L_Valide;
+
+ /** Species field type used for rsufi output files. */
+ protected SpeciesFieldType outputSpeciesType = SpeciesFieldType.L_Valide;
+
public Project() {
}
@@ -259,7 +270,7 @@
this.selections = selections;
getPropertyChangeSupport().firePropertyChange(PROPERTY_SELECTIONS, null, selections);
}
-
+
public void addSelections(Selection selection) {
this.selections.put(selection.getName(), selection);
getPropertyChangeSupport().firePropertyChange(PROPERTY_SELECTIONS, null, selections);
@@ -272,7 +283,7 @@
public void setRefTaxSpecies(DataStorage refTaxSpecies) {
this.refTaxSpecies = refTaxSpecies;
}
-
+
public DataStorage getTypeEspeces() {
return typeEspeces;
}
@@ -280,7 +291,37 @@
public void setTypeEspeces(DataStorage typeEspeces) {
this.typeEspeces = typeEspeces;
}
-
+
+ public SpeciesFieldType getStorageSpeciesType() {
+ return storageSpeciesType;
+ }
+
+ public void setStorageSpeciesType(SpeciesFieldType storageSpeciesType) {
+ SpeciesFieldType oldValue = this.storageSpeciesType;
+ this.storageSpeciesType = storageSpeciesType;
+ getPropertyChangeSupport().firePropertyChange("storageSpeciesType", oldValue, storageSpeciesType);
+ }
+
+ public SpeciesFieldType getDisplaySpeciesType() {
+ return displaySpeciesType;
+ }
+
+ public void setDisplaySpeciesType(SpeciesFieldType displaySpeciesType) {
+ SpeciesFieldType oldValue = this.displaySpeciesType;
+ this.displaySpeciesType = displaySpeciesType;
+ getPropertyChangeSupport().firePropertyChange("displaySpeciesType", oldValue, displaySpeciesType);
+ }
+
+ public SpeciesFieldType getOutputSpeciesType() {
+ return outputSpeciesType;
+ }
+
+ public void setOutputSpeciesType(SpeciesFieldType outputSpeciesType) {
+ SpeciesFieldType oldValue = this.outputSpeciesType;
+ this.outputSpeciesType = outputSpeciesType;
+ getPropertyChangeSupport().firePropertyChange("outputSpeciesType", oldValue, outputSpeciesType);
+ }
+
/**
* Force all container data clear to force free memory.
*/
@@ -294,7 +335,7 @@
}
}
}
-
+
public Properties toProperties() {
Properties props = new Properties();
if (author != null) {
@@ -329,6 +370,15 @@
if (creationDate != null) {
props.setProperty("project.creationdate", String.valueOf(creationDate.getTime()));
}
+ if (storageSpeciesType != null) {
+ props.setProperty("project.storageSpeciesType", storageSpeciesType.toString());
+ }
+ if (displaySpeciesType != null) {
+ props.setProperty("project.displaySpeciesType", displaySpeciesType.toString());
+ }
+ if (outputSpeciesType != null) {
+ props.setProperty("project.outputSpeciesType", outputSpeciesType.toString());
+ }
return props;
}
@@ -364,5 +414,23 @@
Date date = new Date(Long.parseLong(props.getProperty("project.creationdate")));
setCreationDate(date);
}
+
+ // species field type was added in 1.3+
+ // missing values for previous project are considered as L_Valide
+ if (props.contains("project.storageSpeciesType")) {
+ setStorageSpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.storageSpeciesType")));
+ } else {
+ setStorageSpeciesType(SpeciesFieldType.L_Valide);
+ }
+ if (props.contains("project.displaySpeciesType")) {
+ setDisplaySpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.displaySpeciesType")));
+ } else {
+ setDisplaySpeciesType(SpeciesFieldType.L_Valide);
+ }
+ if (props.contains("project.outputSpeciesType")) {
+ setOutputSpeciesType(SpeciesFieldType.valueOf(props.getProperty("project.outputSpeciesType")));
+ } else {
+ setOutputSpeciesType(SpeciesFieldType.L_Valide);
+ }
}
}
Added: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesFieldType.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesFieldType.java (rev 0)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesFieldType.java 2012-08-06 14:58:30 UTC (rev 1029)
@@ -0,0 +1,55 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 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
+ * 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.bean;
+
+/**
+ * Since 1.3, species can be managed by C_Perm, AA_Valide or L_Valide.
+ * They are always presented to user with latin name.
+ *
+ * @author echatellier
+ * @since 1.3
+ */
+public enum SpeciesFieldType {
+
+ /** Species alpha code (BONA, BONAOST...)*/
+ C_Valide("C_Valide"),
+
+ /** Species num code (1, 2, 3...). */
+ C_PERM("C_Perm"),
+
+ /** Species latin name. */
+ L_Valide("L_Valide");
+
+ protected String reftaxField;
+
+ private SpeciesFieldType(String reftaxField) {
+ this.reftaxField = reftaxField;
+ }
+
+ public String getReftaxField() {
+ return reftaxField;
+ }
+}
Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesFieldType.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java 2012-08-06 10:48:10 UTC (rev 1028)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java 2012-08-06 14:58:30 UTC (rev 1029)
@@ -504,13 +504,13 @@
}
/**
- * Retourne le nom d'affichage d'une especes.
+ * Retourne le nom d'affichage d'une especes pour les rapports.
*
* @param project project
* @param species species code
* @return species display name
*/
- public String getSpeciesDisplayName(Project project, String species) {
+ public String getReportDisplayName(Project project, String species) {
String displayName = null;
// load reftax in memory
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-06 10:48:10 UTC (rev 1028)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-06 14:58:30 UTC (rev 1029)
@@ -1013,7 +1013,7 @@
// get graph title
String title = zoneDisplayName;
title += " - " + indicatorName;
- title += " - " + commonService.getSpeciesDisplayName(project, species);
+ title += " - " + commonService.getReportDisplayName(project, species);
// generate dataset with sorted data
DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectCreationView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectCreationView.jaxx 2012-08-06 10:48:10 UTC (rev 1028)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectCreationView.jaxx 2012-08-06 14:58:30 UTC (rev 1029)
@@ -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
@@ -25,6 +25,7 @@
<Table>
<import>
javax.swing.JCheckBox
+ fr.ifremer.coser.bean.SpeciesFieldType
</import>
<ProjectHandler id="handler" javaBean="null" />
@@ -197,6 +198,36 @@
</cell>
</row>
<row>
+ <cell anchor="west">
+ <JLabel text="coser.ui.project.storageSpeciesType" />
+ </cell>
+ <cell columns="2">
+ <JComboBox id="projectStorageSpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
+ renderer="{new SpeciesFieldTypeListRenderer()}"
+ onItemStateChanged="getProject().setStorageSpeciesType((SpeciesFieldType)projectStorageSpeciesType.getSelectedItem())"/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor="west">
+ <JLabel text="coser.ui.project.displaySpeciesType" />
+ </cell>
+ <cell columns="2">
+ <JComboBox id="projectDisplaySpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
+ renderer="{new SpeciesFieldTypeListRenderer()}"
+ onItemStateChanged="getProject().setDisplaySpeciesType((SpeciesFieldType)projectDisplaySpeciesType.getSelectedItem())"/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor="west">
+ <JLabel text="coser.ui.project.outputSpeciesType" />
+ </cell>
+ <cell columns="2">
+ <JComboBox id="projectOutputSpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
+ renderer="{new SpeciesFieldTypeListRenderer()}"
+ onItemStateChanged="getProject().setOutputSpeciesType((SpeciesFieldType)projectOutputSpeciesType.getSelectedItem())"/>
+ </cell>
+ </row>
+ <row>
<cell anchor="northwest">
<JLabel text="coser.ui.project.projectcomment" />
</cell>
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectEditView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectEditView.jaxx 2012-08-06 10:48:10 UTC (rev 1028)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectEditView.jaxx 2012-08-06 14:58:30 UTC (rev 1029)
@@ -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
@@ -23,6 +23,10 @@
#L%
-->
<Table>
+ <import>
+ fr.ifremer.coser.bean.SpeciesFieldType
+ </import>
+
<ProjectHandler id="handler" javaBean="null" />
<!-- Validation -->
@@ -59,7 +63,6 @@
<javax.swing.text.Document javaBean="projectAuthor.getDocument()"
onInsertUpdate='getProject().setAuthor(projectAuthor.getText())'
onRemoveUpdate='getProject().setAuthor(projectAuthor.getText())' />
-
</cell>
</row>
<row>
@@ -83,6 +86,39 @@
</cell>
</row>
<row>
+ <cell anchor="west">
+ <JLabel text="coser.ui.project.storageSpeciesType" />
+ </cell>
+ <cell>
+ <JComboBox id="projectStorageSpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
+ renderer="{new SpeciesFieldTypeListRenderer()}"
+ enabled="false"
+ selectedItem="{getProject().getStorageSpeciesType()}"/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor="west">
+ <JLabel text="coser.ui.project.displaySpeciesType" />
+ </cell>
+ <cell>
+ <JComboBox id="projectDisplaySpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
+ renderer="{new SpeciesFieldTypeListRenderer()}"
+ onItemStateChanged="getProject().setDisplaySpeciesType((SpeciesFieldType)projectDisplaySpeciesType.getSelectedItem())"
+ selectedItem="{getProject().getDisplaySpeciesType()}"/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor="west">
+ <JLabel text="coser.ui.project.outputSpeciesType" />
+ </cell>
+ <cell>
+ <JComboBox id="projectOutputSpeciesType" model="{new org.jdesktop.swingx.combobox.EnumComboBoxModel(SpeciesFieldType.class)}"
+ renderer="{new SpeciesFieldTypeListRenderer()}"
+ onItemStateChanged="getProject().setOutputSpeciesType((SpeciesFieldType)projectOutputSpeciesType.getSelectedItem())"
+ selectedItem="{getProject().getOutputSpeciesType()}"/>
+ </cell>
+ </row>
+ <row>
<cell anchor="northwest">
<JLabel text="coser.ui.project.projectcomment" />
</cell>
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-06 10:48:10 UTC (rev 1028)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/ProjectHandler.java 2012-08-06 14:58:30 UTC (rev 1029)
@@ -33,7 +33,6 @@
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
-import javax.swing.ListSelectionModel;
import javax.swing.SwingWorker;
import javax.swing.filechooser.FileFilter;
Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/SpeciesFieldTypeListRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/SpeciesFieldTypeListRenderer.java (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/SpeciesFieldTypeListRenderer.java 2012-08-06 14:58:30 UTC (rev 1029)
@@ -0,0 +1,73 @@
+/*
+ * #%L
+ * Coser :: UI
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 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
+ * 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.ui.project;
+
+import static org.nuiton.i18n.I18n._;
+
+import java.awt.Component;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JList;
+
+import fr.ifremer.coser.bean.SpeciesFieldType;
+
+/**
+ * List renderer used to render {@link SpeciesFieldType} enum values with
+ * additionnal comment.
+ *
+ * @author echatellier
+ * @since 1.3
+ */
+public class SpeciesFieldTypeListRenderer extends DefaultListCellRenderer {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 6335214555392070266L;
+
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value,
+ int index, boolean isSelected, boolean cellHasFocus) {
+
+ SpeciesFieldType type = (SpeciesFieldType)value;
+ String text = type.getReftaxField();
+
+ // add another human comment
+ switch (type) {
+ case C_Valide:
+ text += " (" + _("coser.ui.project.cValideSpeciesTypeDesc") + ")";
+ break;
+ case C_PERM:
+ text += " (" + _("coser.ui.project.cPermSpeciesTypeDesc") + ")";
+ break;
+ case L_Valide:
+ text += " (" + _("coser.ui.project.lValideSpeciesTypeDesc") + ")";
+ break;
+ }
+
+ return super.getListCellRendererComponent(list, text, index, isSelected,
+ cellHasFocus);
+ }
+
+}
Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/project/SpeciesFieldTypeListRenderer.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
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-06 10:48:10 UTC (rev 1028)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-06 14:58:30 UTC (rev 1029)
@@ -107,14 +107,18 @@
coser.ui.mainview.accesswontrolwithselection=Can't access control interface since selection exists in project \!\n\nIn order to maintain consistency between the controlled data\nand data used to create selection, create a new project\nor remove selections to access to the control interface.
coser.ui.mainview.titleempty=Contrôle et Sélection RSufi
coser.ui.mainview.titleproject=Contrôle et Sélection RSufi (%s)
+coser.ui.project.lValideSpeciesTypeDesc=Species latin name
coser.ui.project.addMaps=Add map…
+coser.ui.project.cPermSpeciesTypeDesc=Numeric species code
coser.ui.project.catchFile=Catch file \:
coser.ui.project.createProject=Create project
coser.ui.project.createProjectMissingCodeTypeSpecies=File 'CodeTypeSpecies' is not valid \!\n(check configuration \: coser.reference.typeSpecies)
coser.ui.project.createProjectMissingReftax=File 'Reftax' is not valid \!\n(check configuration \: coser.reference.species)
coser.ui.project.customReferenceSpeciesFile=New taxonomy reference file \:
+coser.ui.project.displaySpeciesType=Display field \:
coser.ui.project.editProject=Edit project
coser.ui.project.haulFile=Haul file \:
+coser.ui.project.cValideSpeciesTypeDesc=Alphabetic species code
coser.ui.project.lengthFile=Length file \:
coser.ui.project.maps=Maps \:
coser.ui.project.missingFile=Missing file
@@ -122,6 +126,7 @@
coser.ui.project.openError=Open error
coser.ui.project.openProject=Open
coser.ui.project.openProjectTitle=Open existing project
+coser.ui.project.outputSpeciesType=Output field \:
coser.ui.project.project=Project \:
coser.ui.project.projectauthor=Author \:
coser.ui.project.projectcomment=Comment \:
@@ -129,6 +134,7 @@
coser.ui.project.projectname=Project name \:
coser.ui.project.removeMaps=Remove map
coser.ui.project.saveProject=Save project
+coser.ui.project.storageSpeciesType=Storage field \:
coser.ui.project.strataFile=Strata file \:
coser.ui.project.summary.catchFileName=Catch file name \:
coser.ui.project.summary.haulFileName=Haul file name \:
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-06 10:48:10 UTC (rev 1028)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-06 14:58:30 UTC (rev 1029)
@@ -107,14 +107,18 @@
coser.ui.mainview.accesswontrolwithselection=Impossible d'acceder à l'interface de contrôle alors que des sélections existent \!\n\nDans le but de garder une cohérence entre les données contrôlées et les données\nutilisées pour créer les sélections, créez un nouveau projet\nou supprimer les sélections du projet pour accèder de nouveau à l'interface de contrôle.
coser.ui.mainview.titleempty=Contrôle et Sélection RSufi
coser.ui.mainview.titleproject=Contrôle et Sélection RSufi (%s)
+coser.ui.project.lValideSpeciesTypeDesc=Nom latin des espèces
coser.ui.project.addMaps=Ajouter…
+coser.ui.project.cPermSpeciesTypeDesc=Code numerique des espèces
coser.ui.project.catchFile=Fichier de captures \:
coser.ui.project.createProject=Créer le projet
coser.ui.project.createProjectMissingCodeTypeSpecies=Le fichier 'CodeTypeEspeces' n'est pas valide \!\n(vérifiez la configuration \: coser.reference.typeSpecies)
coser.ui.project.createProjectMissingReftax=Le fichier 'Reftax' n'est pas valide \!\n(vérifiez la configuration \: coser.reference.species)
coser.ui.project.customReferenceSpeciesFile=Nouveau fichier de référence taxonomique \:
+coser.ui.project.displaySpeciesType=Champ pour affichage \:
coser.ui.project.editProject=Modifier le projet
coser.ui.project.haulFile=Fichier des traits \:
+coser.ui.project.cValideSpeciesTypeDesc=Code alphabetique des espèces
coser.ui.project.lengthFile=Fichier des tailles \:
coser.ui.project.maps=Cartes \:
coser.ui.project.missingFile=Fichier manquant
@@ -122,6 +126,7 @@
coser.ui.project.openError=Erreur d'ouverture
coser.ui.project.openProject=Ouvrir
coser.ui.project.openProjectTitle=Ouvrir un projet existant
+coser.ui.project.outputSpeciesType=Champ de sortie \:
coser.ui.project.project=Projet \:
coser.ui.project.projectauthor=Auteur \:
coser.ui.project.projectcomment=Commentaire \:
@@ -129,6 +134,7 @@
coser.ui.project.projectname=Nom du projet \:
coser.ui.project.removeMaps=Supprimer
coser.ui.project.saveProject=Sauver le projet
+coser.ui.project.storageSpeciesType=Champ de stockage \:
coser.ui.project.strataFile=Fichier des strates \:
coser.ui.project.summary.catchFileName=Nom du fichier captures \:
coser.ui.project.summary.haulFileName=Nom du fichier traits \:
1
0
r1028 - in trunk: . coser-ui/src/main/java/fr/ifremer/coser/ui/selection coser-ui/src/main/resources/i18n coser-ui/src/main/resources/icons
by echatellier@users.forge.codelutin.com 06 Aug '12
by echatellier@users.forge.codelutin.com 06 Aug '12
06 Aug '12
Author: echatellier
Date: 2012-08-06 12:48:10 +0200 (Mon, 06 Aug 2012)
New Revision: 1028
Url: http://forge.codelutin.com/repositories/revision/coser/1028
Log:
fixes #1322 : Ajouter des boutons suppl?\195?\169mentaires correspondant au action du menu contextuel
Added:
trunk/coser-ui/src/main/resources/icons/arrow_jion_up.png
trunk/coser-ui/src/main/resources/icons/stock_select_clear.png
trunk/coser-ui/src/main/resources/icons/stock_select_table.png
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/SelectionHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.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
trunk/pom.xml
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 2012-07-19 14:07:21 UTC (rev 1027)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2012-08-06 10:48:10 UTC (rev 1028)
@@ -171,7 +171,7 @@
onActionPerformed='getDetailDecisionPanelLayout().show(getDetailDecisionPanel(), "ZONEMAP");getHandler().showStataOnMap(this);' />
</cell>
<cell anchor="northeast">
- <JButton icon="table.png" toolTipText="coser.ui.selection.details.showSpreciesTip"
+ <JButton icon="table.png" toolTipText="coser.ui.selection.details.showSpeciesTip"
onActionPerformed='getDetailDecisionPanelLayout().show(getDetailDecisionPanel(), "SPECIESDATA");getHandler().showSamplingEffort(this);' />
</cell>
</row>
@@ -233,10 +233,10 @@
<ListSelectionModel id="filteredSpeciesListSelectionModel" javaBean="filteredSpeciesList.getSelectionModel()" />
</JScrollPane>
</cell>
- <cell anchor="north">
+ <cell anchor="north" insets="2">
<Table>
<row>
- <cell>
+ <cell insets="0">
<JButton icon="arrow_right.png"
toolTipText="coser.ui.selection.details.addToSelectedListTip"
onActionPerformed="getHandler().addSelectedFilteredSpecies(this)"
@@ -244,13 +244,49 @@
</cell>
</row>
<row>
- <cell>
+ <cell insets="0">
<JButton icon="arrow_left.png"
toolTipText="coser.ui.selection.details.removeFromSelectedListTip"
onActionPerformed="getHandler().removeSelectedSpecies(this)"
enabled="{getSelectedSpeciesList().getSelectedIndex() != -1 && isYearsValidated() && isStrataValidated()}"/>
</cell>
</row>
+ <row>
+ <cell>
+ <JSeparator />
+ </cell>
+ </row>
+ <row>
+ <cell insets="0">
+ <JButton icon="stock_select_table.png"
+ toolTipText="coser.ui.selection.details.selectAllSpeciesTip"
+ onActionPerformed="getHandler().selectAllListSpecies(this)" />
+ </cell>
+ </row>
+ <row>
+ <cell insets="0">
+ <JButton icon="stock_select_clear.png"
+ toolTipText="coser.ui.selection.details.unSelectAllSpeciesTip"
+ onActionPerformed="getHandler().unSelectAllListSpecies(this)" />
+ </cell>
+ </row>
+ <row>
+ <cell insets="0">
+ <JButton icon="chart_curve.png"
+ toolTipText="coser.ui.selection.details.displayDiffCatchLengthGraphTip"
+ onActionPerformed="getHandler().showSelectedSpeciesGraph(this, null)"
+ enabled="{isYearsValidated() && isStrataValidated() && (getSelectedSpeciesList().getSelectedIndex() != -1 || getFilteredSpeciesList().getSelectedIndex() != -1)}" />
+ </cell>
+ </row>
+
+ <row>
+ <cell insets="0">
+ <JButton icon="arrow_jion_up.png"
+ toolTipText="coser.ui.selection.details.mergeSpeciesTip"
+ onActionPerformed="getHandler().showSpeciesMergeDialog(this)"
+ enabled="{getFilteredSpeciesList().getSelectedIndex() != -1 && isYearsValidated() && isStrataValidated()}"/>
+ </cell>
+ </row>
</Table>
</cell>
<cell weightx="1" weighty="1" fill="both">
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-07-19 14:07:21 UTC (rev 1027)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-06 10:48:10 UTC (rev 1028)
@@ -623,15 +623,7 @@
fusionMenu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- SpeciesFusionDialog speciesFusionDialog = new SpeciesFusionDialog(view);
- speciesFusionDialog.setHandler(SelectionHandler.this);
-
- // pre fill new speci name with first selected species name
- String firstSelected = (String)view.getFilteredSpeciesList().getSelectedValue();
- speciesFusionDialog.getNewSpeciesNameField().setText(firstSelected);
-
- speciesFusionDialog.setLocationRelativeTo(view);
- speciesFusionDialog.setVisible(true);
+ showSpeciesMergeDialog(view);
}
});
popupMenu.add(fusionMenu);
@@ -675,7 +667,7 @@
popupMenu.show(view.getFilteredSpeciesList(), event.getX(), event.getY());
}
}
-
+
/**
* Affiche un menu contextuel lors du clic (droit) sur la liste des especes
* sélectionnées.
@@ -729,6 +721,56 @@
}
/**
+ * Show species merge dialog. Called from view action or context menu.
+ *
+ * @param view parent view
+ */
+ protected void showSpeciesMergeDialog(SelectionDetailsView view) {
+ SpeciesFusionDialog speciesFusionDialog = new SpeciesFusionDialog(view);
+ speciesFusionDialog.setHandler(SelectionHandler.this);
+
+ // pre fill new speci name with first selected species name
+ String firstSelected = (String)view.getFilteredSpeciesList().getSelectedValue();
+ speciesFusionDialog.getNewSpeciesNameField().setText(firstSelected);
+
+ speciesFusionDialog.setLocationRelativeTo(view);
+ speciesFusionDialog.setVisible(true);
+
+ }
+
+ /**
+ * Clic sur le bouton selectionner tout.
+ * Selectionne toutes les espèces dans les 2 listes contrairement au
+ * menu contextuel qui ne selectionne que dans une seule liste.
+ *
+ * @param view parent view
+ * @since 1.3
+ */
+ public void selectAllListSpecies(SelectionDetailsView view) {
+ // available
+ int size = view.getFilteredSpeciesList().getModel().getSize();
+ view.getFilteredSpeciesList().getSelectionModel().addSelectionInterval(0, size - 1);
+ // selected
+ size = view.getSelectedSpeciesList().getModel().getSize();
+ view.getSelectedSpeciesList().getSelectionModel().addSelectionInterval(0, size - 1);
+ }
+
+ /**
+ * Clic sur le bouton selectionner tout.
+ * Selectionne toutes les espèces dans les 2 listes contrairement au
+ * menu contextuel qui ne selectionne que dans une seule liste.
+ *
+ * @param view parent view
+ * @since 1.3
+ */
+ public void unSelectAllListSpecies(SelectionDetailsView view) {
+ // available
+ view.getFilteredSpeciesList().getSelectionModel().clearSelection();
+ // selected
+ view.getSelectedSpeciesList().getSelectionModel().clearSelection();
+ }
+
+ /**
* Sauvegarde (ou creer) la sélection (partie details).
*
* @param view parent view
@@ -1186,7 +1228,7 @@
* sur laquelle porte l'appel.
*
* @param view view
- * @param source
+ * @param source source list to choose selected values (can be {@code null}, read both lists)
*/
public void showSelectedSpeciesGraph(SelectionDetailsView view, JList source) {
@@ -1194,11 +1236,25 @@
Project project = view.getContextValue(Project.class);
Selection selection = view.getContextValue(Selection.class);
- Object[] selectedSpecies = source.getSelectedValues();
Set<String> graphSpecies = new HashSet<String>();
- for (Object selectedSingleSpecies : selectedSpecies) {
- graphSpecies.add((String)selectedSingleSpecies);
+ // specific list given (context menu)
+ if (source != null) {
+ Object[] selectedSpecies = source.getSelectedValues();
+ for (Object selectedSingleSpecies : selectedSpecies) {
+ graphSpecies.add((String)selectedSingleSpecies);
+ }
}
+ else {
+ // merge both lists
+ Object[] selectedSpecies = view.getFilteredSpeciesList().getSelectedValues();
+ for (Object selectedSingleSpecies : selectedSpecies) {
+ graphSpecies.add((String)selectedSingleSpecies);
+ }
+ selectedSpecies = view.getSelectedSpeciesList().getSelectedValues();
+ for (Object selectedSingleSpecies : selectedSpecies) {
+ graphSpecies.add((String)selectedSingleSpecies);
+ }
+ }
Map<String, JFreeChart> chartsMap = publicationService.getCompareCatchLengthGraph(project, selection, graphSpecies);
Collection<JFreeChart> charts = chartsMap.values();
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-07-19 14:07:21 UTC (rev 1027)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2012-08-06 10:48:10 UTC (rev 1028)
@@ -53,7 +53,7 @@
]]></script>
<row>
- <cell columns="8" weightx="1" fill="horizontal">
+ <cell columns="8" weightx="1" insets="0" fill="horizontal">
<JToolBar floatable="false">
<Component initializer="javax.swing.Box.createHorizontalGlue()" />
<JButton id="validSelectionButton" text="coser.ui.selection.details.validSelection"
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-07-19 14:07:21 UTC (rev 1027)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-06 10:48:10 UTC (rev 1028)
@@ -41,12 +41,12 @@
coser.ui.control.globalErrorMenuSelectAll=Select all lines
coser.ui.control.graph.species=Species \:
coser.ui.control.progressStep=Step %d/%d \: %s
-coser.ui.control.project.requiredauthor=Author field is required
-coser.ui.control.project.requiredcatchFile=Catch file is required
-coser.ui.control.project.requiredhaulFile=Haul file is required
-coser.ui.control.project.requiredlengthFile=Length file is required
-coser.ui.control.project.requiredname=Project name is required
-coser.ui.control.project.requiredstrataFile=Strata file is required
+coser.ui.control.project.requiredauthor=
+coser.ui.control.project.requiredcatchFile=
+coser.ui.control.project.requiredhaulFile=
+coser.ui.control.project.requiredlengthFile=
+coser.ui.control.project.requiredname=
+coser.ui.control.project.requiredstrataFile=
coser.ui.control.replace.find=Find \:
coser.ui.control.replace.inField=In field \:
coser.ui.control.replace.replace=Replace \:
@@ -156,10 +156,10 @@
coser.ui.result.newResult=New Result
coser.ui.result.otherDataFile=Other files \:
coser.ui.result.publiableResult=Publiable \:
-coser.ui.result.requiredestComIndPath=ESTCOMind file is required
-coser.ui.result.requiredestPopIndPath=ESTPOPind file is required
-coser.ui.result.requiredname=Result name is required
-coser.ui.result.requiredrsufiVersion=Rsufi version is required
+coser.ui.result.requiredestComIndPath=
+coser.ui.result.requiredestPopIndPath=
+coser.ui.result.requiredname=
+coser.ui.result.requiredrsufiVersion=
coser.ui.result.resultName=Result name \:
coser.ui.result.rsufiVersion=RSufi version \:
coser.ui.result.saveError=Save error
@@ -189,17 +189,21 @@
coser.ui.selection.details.comment=Comments \:
coser.ui.selection.details.description=Description \:
coser.ui.selection.details.displayDiffCatchLengthGraph=Comparison catch/length graphs
+coser.ui.selection.details.displayDiffCatchLengthGraphTip=Comparison catch/length graphs
coser.ui.selection.details.filteredSpecies=Filtered species (%d/%d) \:
+coser.ui.selection.details.mergeSpeciesTip=Merge
coser.ui.selection.details.name=Selection name \:
coser.ui.selection.details.removeFromSelectedListTip=Remove selected species from selected species list
coser.ui.selection.details.saveSelection=Save selection
+coser.ui.selection.details.selectAllSpeciesTip=Select all
coser.ui.selection.details.selectedSpecies=L1 \: Selected species (%d/%d) \:
coser.ui.selection.details.showMapTip=Display strata map
-coser.ui.selection.details.showSpreciesTip=Display sampling effort table
+coser.ui.selection.details.showSpeciesTip=
coser.ui.selection.details.speciesDataDescription=Haul count by strata and year \:
coser.ui.selection.details.speciescontextmenu=For more options, use species lists contextual menu
coser.ui.selection.details.strata=Strata (%d/%d) \:
coser.ui.selection.details.type=Filter by type (%d/%d) \:
+coser.ui.selection.details.unSelectAllSpeciesTip=Unselect all
coser.ui.selection.details.validFilter=Valid filter
coser.ui.selection.details.validSelection=Valid selection
coser.ui.selection.details.validSpecies=Valid species
@@ -240,8 +244,8 @@
coser.ui.selection.replay.selectioninfos=Selection information \:
coser.ui.selection.rsufidataextracted=RSufi data extracted.
coser.ui.selection.saveError=Save error
-coser.ui.selection.selection.requiredDescription=Selection description is required
-coser.ui.selection.selection.requiredName=Selection name is required
+coser.ui.selection.selection.requiredDescription=
+coser.ui.selection.selection.requiredName=
coser.ui.selection.selectionCreated=Selection created.
coser.ui.selection.selectionFilterDescription=Coser selection (*.selection)
coser.ui.selection.selectionSaved=Selection saved.
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-07-19 14:07:21 UTC (rev 1027)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-06 10:48:10 UTC (rev 1028)
@@ -41,12 +41,12 @@
coser.ui.control.globalErrorMenuSelectAll=Sélectionner toutes les lignes
coser.ui.control.graph.species=Espèces \:
coser.ui.control.progressStep=Étape %d/%d \: %s
-coser.ui.control.project.requiredauthor=Le champ 'auteur' est requis
-coser.ui.control.project.requiredcatchFile=Le fichier 'capture' est requis
-coser.ui.control.project.requiredhaulFile=Le fichier 'traits' est requis
-coser.ui.control.project.requiredlengthFile=Le fichier 'taille' est requis
-coser.ui.control.project.requiredname=Le nom du project est requis
-coser.ui.control.project.requiredstrataFile=Le fichier 'strates' est requis
+coser.ui.control.project.requiredauthor=
+coser.ui.control.project.requiredcatchFile=
+coser.ui.control.project.requiredhaulFile=
+coser.ui.control.project.requiredlengthFile=
+coser.ui.control.project.requiredname=
+coser.ui.control.project.requiredstrataFile=
coser.ui.control.replace.find=Chercher \:
coser.ui.control.replace.inField=Dans le champ \:
coser.ui.control.replace.replace=Remplacer \:
@@ -156,10 +156,10 @@
coser.ui.result.newResult=Nouveau résultat
coser.ui.result.otherDataFile=Autre fichiers \:
coser.ui.result.publiableResult=Publiable \:
-coser.ui.result.requiredestComIndPath=Le fichier ESTCOMind est requis
-coser.ui.result.requiredestPopIndPath=Le fichier ESTPOPind est requis
-coser.ui.result.requiredname=Le nom du résultat est requis
-coser.ui.result.requiredrsufiVersion=Le champ 'rsufiVersion' est requis
+coser.ui.result.requiredestComIndPath=
+coser.ui.result.requiredestPopIndPath=
+coser.ui.result.requiredname=
+coser.ui.result.requiredrsufiVersion=
coser.ui.result.resultName=Nom du résultat \:
coser.ui.result.rsufiVersion=Version de RSufi \:
coser.ui.result.saveError=Erreur de sauvegarde
@@ -189,17 +189,21 @@
coser.ui.selection.details.comment=Commentaire \:
coser.ui.selection.details.description=Description \:
coser.ui.selection.details.displayDiffCatchLengthGraph=Graphiques des différences captures/tailles
+coser.ui.selection.details.displayDiffCatchLengthGraphTip=Graphiques des différences captures/tailles
coser.ui.selection.details.filteredSpecies=Espèces filtrées (%d/%d) \:
+coser.ui.selection.details.mergeSpeciesTip=Fusion
coser.ui.selection.details.name=Nom de la sélection \:
coser.ui.selection.details.removeFromSelectedListTip=Retire les espèces sélectionnées de la liste des espèces sélectionnées
coser.ui.selection.details.saveSelection=Sauvegarder la sélection
+coser.ui.selection.details.selectAllSpeciesTip=Sélectionner tout
coser.ui.selection.details.selectedSpecies=L1 \: Espèces sélectionnées (%d/%d) \:
coser.ui.selection.details.showMapTip=Afficher la carte des strates
-coser.ui.selection.details.showSpreciesTip=Afficher la table de l'effort d'échantillonage
+coser.ui.selection.details.showSpeciesTip=Afficher la table de l'effort d'échantillonage
coser.ui.selection.details.speciesDataDescription=Nombre de traits par strate par année \:
coser.ui.selection.details.speciescontextmenu=Pour plus d'options, utilisez le menu contextuel sur les listes d'espèces
coser.ui.selection.details.strata=Strates (%d/%d) \:
coser.ui.selection.details.type=Filtrer par type (%d/%d) \:
+coser.ui.selection.details.unSelectAllSpeciesTip=Désélectionner tout
coser.ui.selection.details.validFilter=Valider les filtres
coser.ui.selection.details.validSelection=Valider la sélection
coser.ui.selection.details.validSpecies=Valider les espèces
@@ -240,8 +244,8 @@
coser.ui.selection.replay.selectioninfos=Information sur la sélection \:
coser.ui.selection.rsufidataextracted=Données RSufi extraites.
coser.ui.selection.saveError=Erreur de sauvegarde
-coser.ui.selection.selection.requiredDescription=La description de la sélection est requise
-coser.ui.selection.selection.requiredName=Le nom de la sélection est requis
+coser.ui.selection.selection.requiredDescription=
+coser.ui.selection.selection.requiredName=
coser.ui.selection.selectionCreated=Sélection créée.
coser.ui.selection.selectionFilterDescription=Coser sélection (*.selection)
coser.ui.selection.selectionSaved=Sélection sauvée.
Added: trunk/coser-ui/src/main/resources/icons/arrow_jion_up.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/arrow_jion_up.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Added: trunk/coser-ui/src/main/resources/icons/stock_select_clear.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/stock_select_clear.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Added: trunk/coser-ui/src/main/resources/icons/stock_select_table.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/stock_select_table.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-07-19 14:07:21 UTC (rev 1027)
+++ trunk/pom.xml 2012-08-06 10:48:10 UTC (rev 1028)
@@ -117,13 +117,13 @@
<dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-utils</artifactId>
- <version>2.5.2-SNAPSHOT</version>
+ <version>2.5.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-validator</artifactId>
- <version>2.5.2-SNAPSHOT</version>
+ <version>2.5.2</version>
<scope>compile</scope>
</dependency>
@@ -172,7 +172,7 @@
<dependency>
<groupId>org.swinglabs.swingx</groupId>
<artifactId>swingx-core</artifactId>
- <version>1.6.3</version>
+ <version>1.6.4</version>
<scope>compile</scope>
</dependency>
@@ -346,7 +346,7 @@
<license.organizationName>Ifremer, Codelutin</license.organizationName>
<!-- Versions -->
- <jaxx.version>2.5.2</jaxx.version>
+ <jaxx.version>2.5.3</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
r1027 - in trunk/coser-business/src: main/java/fr/ifremer/coser/services main/resources/i18n test/java/fr/ifremer/coser/services test/resources
by echatellier@users.forge.codelutin.com 19 Jul '12
by echatellier@users.forge.codelutin.com 19 Jul '12
19 Jul '12
Author: echatellier
Date: 2012-07-19 16:07:21 +0200 (Thu, 19 Jul 2012)
New Revision: 1027
Url: http://forge.codelutin.com/repositories/revision/coser/1027
Log:
refs #1321: Control sur valeurs aberrantes utilisant l'?\195?\169cart type mais n'?\195?\169tant pas tout ?\195?\160 fait satisfaisant.
Modified:
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-business/src/test/java/fr/ifremer/coser/services/ControlServiceTest.java
trunk/coser-business/src/test/resources/log4j.properties
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-07-19 09:41:56 UTC (rev 1026)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-07-19 14:07:21 UTC (rev 1027)
@@ -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
@@ -203,13 +203,15 @@
*
* @param project project
* @param control control a valider
- * @param progress progress monitor
+ * @param progress progress monitor (can be null)
* @return les erreurs de validation
*/
public List<ControlError> validateData(Project project, Control control, ProgressMonitor progress) {
- progress.setStepCount(10);
- progress.setStep(0);
+ if (progress != null) {
+ progress.setStepCount(11);
+ progress.setStep(0);
+ }
// valide chaque category
List<ControlError> validationErrors = new ArrayList<ControlError>();
@@ -220,27 +222,35 @@
if (categoryErrors != null) {
validationErrors.addAll(categoryErrors);
}
- progress.nextStep();
+ if (progress != null) {
+ progress.nextStep();
+ }
// validation specifique de la category
List<ControlError> specificErrors = validateCategorySpecific(control, category, progress);
if (specificErrors != null) {
validationErrors.addAll(specificErrors);
}
- progress.nextStep();
+ if (progress != null) {
+ progress.nextStep();
+ }
}
}
// validation entre catch et length (specific)
List<? extends ControlError> diffCatchLengthErrors = validateDiffCatchLength(control, progress);
- progress.nextStep();
+ if (progress != null) {
+ progress.nextStep();
+ }
if (diffCatchLengthErrors != null) {
validationErrors.addAll(diffCatchLengthErrors);
}
// validation par croisement de fichiers
List<ControlError> crossFileErrors = validationCrossFiles(project, control, progress);
- progress.nextStep();
+ if (progress != null) {
+ progress.nextStep();
+ }
if (crossFileErrors != null) {
validationErrors.addAll(crossFileErrors);
}
@@ -261,7 +271,7 @@
*
* @param control control a valider
* @param category category a valider
- * @param progress progress monitor
+ * @param progress progress monitor (can be null)
* @return les erreurs de validation
*/
public List<ControlError> validateCategory(Control control, Category category, ProgressMonitor progress) {
@@ -282,7 +292,7 @@
*
* @param control control a valider
* @param category category a valider
- * @param progress progress monitor
+ * @param progress progress monitor (can be null)
* @return les erreurs de validation (not null)
*/
public List<ControlError> validateCategoryXWork(Control control, Category category, ProgressMonitor progress) {
@@ -485,7 +495,7 @@
* Alerte si Somme(CAPTURES$Nombre par CAPTURES$Annee|Strate|Espece) < nobsmin.
*
* @param control control
- * @param progress progress monitor
+ * @param progress progress monitor (can be null)
* @return error list
*/
protected List<ControlError> validateCategorySpecificCatch(
@@ -579,7 +589,7 @@
* et les nombres dans taille.
*
* @param control data container
- * @param progress progress
+ * @param progress progress (can be null)
*
* @see PublicationService#getCompareCatchLengthGraph(Project, AbstractDataContainer, Collection) for details
* @see CoserBusinessConfig#getControlDiffCatchLength() for option
@@ -753,8 +763,16 @@
/**
* Alerte si Somme(TAILLES$Nombre par TAILLES$Annee|Strate|Espece) < nobsmin
*
+ * Warning sur les tailles aberrantes par espèce:
+ * <ul>
+ * <li>premiere passe pour calculer l'écart type et la moyenne par espèce
+ * <li>seconde passe pour détecter les valeurs abérentes (> ecart type)
+ * </ul>
+ *
+ * L'ecarty étant : racine( somme (x - moyenne)^2 / n)
+ *
* @param control control
- * @param progress progress
+ * @param progress progress (can be null)
* @return error list
*/
protected List<ControlError> validateCategorySpecificLength(
@@ -772,6 +790,10 @@
Map<String, Double> nombreForKey = new HashMap<String, Double>();
Map<String, String> firstLineForKey = new HashMap<String, String>();
+ // Standard deviation
+ Map<String, Double> lengthSumForSpecies = new HashMap<String, Double>();
+ Map<String, Double> lengthCountForSpecies = new HashMap<String, Double>();
+
// parcours des elements
Iterator<String[]> itTuple = control.getLength().iterator(true);
int lineIndex = 1; // skip header
@@ -813,20 +835,45 @@
}
}
catch (NumberFormatException ex) {
- // par trop grave, normalement les données deviennet
+ // par trop grave, normalement les données deviennent
// valide au fil de la validation
if (log.isWarnEnabled()) {
log.warn("Can't parse " + nombreValue + " as double");
}
}
+
+ // store lenght for Standard deviation
+ String lengthValue = tuple[Length.INDEX_LENGTH];
+ try {
+ Double nombre = Double.valueOf(lengthValue);
+ String key = tuple[Length.INDEX_SPECIES];
+ if (lengthSumForSpecies.containsKey(key)) {
+ Double oldValue = lengthSumForSpecies.get(key);
+ Double newValue = oldValue + nombre;
+ lengthSumForSpecies.put(key, newValue);
+ Double count = lengthCountForSpecies.get(key);
+ lengthCountForSpecies.put(key, count + 1);
+ }
+ else {
+ lengthSumForSpecies.put(key, nombre);
+ lengthCountForSpecies.put(key, 1d);
+ }
+ }
+ catch (NumberFormatException ex) {
+ // par trop grave, normalement les données deviennent
+ // valide au fil de la validation
+ if (log.isWarnEnabled()) {
+ log.warn("Can't parse " + lengthValue + " as double");
+ }
+ }
}
- // now look for invalid data
+ // now look for invalid data (observations)
for (Map.Entry<String, Double> sumObservation : nombreForKey.entrySet()) {
String key = sumObservation.getKey();
Double value = sumObservation.getValue();
if (value < config.getControlNobsmin()) {
-
+
String lineNumber = firstLineForKey.get(key);
ControlError error = new ControlError();
@@ -839,6 +886,114 @@
}
}
+ // recherche des valeurs abérrantes
+ if (progress != null) {
+ progress.nextStep();
+ progress.setTotal(total * 2);
+ }
+
+ // Standard deviation : calcul de la moyenne
+ Map<String, Double> avgForSpecies = new HashMap<String, Double>();
+ for (Map.Entry<String, Double> entry : lengthSumForSpecies.entrySet()) {
+ double avg = entry.getValue() / lengthCountForSpecies.get(entry.getKey());
+ avgForSpecies.put(entry.getKey(), avg);
+ }
+
+ // Standard deviation : somme des variances au carré
+ Map<String, Double> varianceSumForSpecies = new HashMap<String, Double>();
+ itTuple = control.getLength().iterator(true);
+ lineIndex = 1; // skip header
+ while (itTuple.hasNext()) {
+
+ // update progress
+ if (progress != null) {
+ int progressPercent = (int)((double)lineIndex / (double)total * 50.0);
+ progress.setText(_("coser.business.control.step.lengthdeviation", _(Category.LENGTH.getTranslationKey()), progressPercent));
+ progress.setCurrent(lineIndex);
+ ++lineIndex;
+ }
+
+ String[] tuple = itTuple.next();
+ // store lenght for Standard deviation
+ String lengthValue = tuple[Length.INDEX_LENGTH];
+ try {
+ String key = tuple[Length.INDEX_SPECIES];
+ Double nombre = Double.valueOf(lengthValue);
+ Double value = Math.pow(nombre - avgForSpecies.get(key), 2);
+
+ if (varianceSumForSpecies.containsKey(key)) {
+ Double oldValue = varianceSumForSpecies.get(key);
+ Double newValue = oldValue + value;
+ varianceSumForSpecies.put(key, newValue);
+ }
+ else {
+ varianceSumForSpecies.put(key, value);
+ }
+ }
+ catch (NumberFormatException ex) {
+ // par trop grave, normalement les données deviennent
+ // valide au fil de la validation
+ if (log.isWarnEnabled()) {
+ log.warn("Can't parse " + lengthValue + " as double");
+ }
+ }
+ }
+
+ // Standard deviation : calcul de l'ecart type par espèce
+ // racine( somme (x - moyenne)^2 / n)
+ Map<String, Double> deviationForSpecies = new HashMap<String, Double>();
+ for (Map.Entry<String, Double> entry : varianceSumForSpecies.entrySet()) {
+ double avg = Math.sqrt(entry.getValue() / lengthCountForSpecies.get(entry.getKey()));
+ deviationForSpecies.put(entry.getKey(), avg);
+ }
+
+ // Standard deviation : recherche des valeurs aberantes : 3 fois l'écart type
+ itTuple = control.getLength().iterator(true);
+ lineIndex = 1; // skip header
+ while (itTuple.hasNext()) {
+
+ // update progress
+ if (progress != null) {
+ int progressPercent = (int)((double)lineIndex / (double)total * 50.0 + 50.0);
+ progress.setText(_("coser.business.control.step.lengthoutliers", _(Category.LENGTH.getTranslationKey()), progressPercent));
+ progress.setCurrent(total + lineIndex);
+ ++lineIndex;
+ }
+
+ String[] tuple = itTuple.next();
+ // store lenght for Standard deviation
+ String lengthValue = tuple[Length.INDEX_LENGTH];
+ try {
+ String species = tuple[Length.INDEX_SPECIES];
+ Double nombre = Double.valueOf(lengthValue);
+ Double avg = avgForSpecies.get(species);
+ Double deviation = deviationForSpecies.get(species);
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Species %s, avg=%f, deviation=%f, value=%f", species, avg, deviation, nombre));
+ }
+
+ if (Math.abs(nombre - avg) > deviation * 3) {
+ String lineNumber = tuple[AbstractDataEntity.INDEX_LINE];
+
+ ControlError error = new ControlError();
+ error.setCategory(Category.LENGTH);
+ 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));
+ validationErrors.add(error);
+ }
+ }
+ catch (NumberFormatException ex) {
+ // par trop grave, normalement les données deviennent
+ // valide au fil de la validation
+ if (log.isWarnEnabled()) {
+ log.warn("Can't parse " + lengthValue + " as double");
+ }
+ }
+ }
+
return validationErrors;
}
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-07-19 09:41:56 UTC (rev 1026)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2012-07-19 14:07:21 UTC (rev 1027)
@@ -49,6 +49,8 @@
coser.business.control.error.invalidLengthLengthStep=Invalid length step (authorized centimeters and half-centimeters)
coser.business.control.error.invalidLengthLengthStepDetail=Invalid length step %s for species %s
coser.business.control.error.invalidLengthLengthStepTip=Length field must be in centimeters.
+coser.business.control.error.lengthOutliers=Aberrants lengths
+coser.business.control.error.lengthOutliersDetail=Species %s \: length %4$s aberrant (average\: %2$.2f, deviation\: %3$.2f)
coser.business.control.error.minObservationCount=Minimum number of observation not reached
coser.business.control.error.minObservationCountDetail=Minimum number of observation not reached (%s) \: %.2f
coser.business.control.error.missingCatchHaulFromHaul=Missing haul file hauls in catch file
@@ -92,6 +94,8 @@
coser.business.control.noerrorfound=No error found
coser.business.control.step.crossFileChech=Cross file checks (%d%%)
coser.business.control.step.diffCatchLength=Check diff catch/length (%d%%)
+coser.business.control.step.lengthdeviation=Comptuting standard deviation \: %s (%d%%)
+coser.business.control.step.lengthoutliers=Searching for aberrants lengths \: %s (%d%%)
coser.business.control.step.observation=Checking observation number \: %s (%d%%)
coser.business.control.step.xworks=Line checks \: %s (%d%%)
coser.business.extract.creationdate=Creation date \:
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-07-19 09:41:56 UTC (rev 1026)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2012-07-19 14:07:21 UTC (rev 1027)
@@ -49,6 +49,8 @@
coser.business.control.error.invalidLengthLengthStep=Le pas de longueur est invalide (autorisé centimètre et demi-centimètre)
coser.business.control.error.invalidLengthLengthStepDetail=Le pas longueur %s est invalide pour l'espèce %s
coser.business.control.error.invalidLengthLengthStepTip=Le champs de longueur doit être en centimètre (ou demi centimètre)
+coser.business.control.error.lengthOutliers=Longueurs aberrantes
+coser.business.control.error.lengthOutliersDetail=Espèce %s \: longueur %4$s aberrantes (moyenne\: %2$.2f, écart\: %3$.2f)
coser.business.control.error.minObservationCount=Nombre minimal d'observation non atteint
coser.business.control.error.minObservationCountDetail=Nombre minimal d'observation non atteint (%s) \: %.2f
coser.business.control.error.missingCatchHaulFromHaul=Traits du fichier traits absents dans le fichier captures
@@ -92,6 +94,8 @@
coser.business.control.noerrorfound=Aucune erreur détectée
coser.business.control.step.crossFileChech=Vérification par croisement de fichiers (%d%%)
coser.business.control.step.diffCatchLength=Vérification des différences captures/taille (%d%%)
+coser.business.control.step.lengthdeviation=Calcul de l'écart type \: %s (%d%%)
+coser.business.control.step.lengthoutliers=Recherche des longueurs abérrantes \: %s (%d%%)
coser.business.control.step.observation=Vérification du nombre d'observation \: %s (%d%%)
coser.business.control.step.xworks=Validation par lignes \: %s (%d%%)
coser.business.extract.creationdate=Date de création \:
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-07-19 09:41:56 UTC (rev 1026)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ControlServiceTest.java 2012-07-19 14:07:21 UTC (rev 1027)
@@ -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 Lesser General Public License as
@@ -32,8 +32,10 @@
import org.junit.Assert;
import org.junit.Test;
+import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConstants.Category;
import fr.ifremer.coser.bean.Control;
+import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.control.ControlError;
import fr.ifremer.coser.data.Catch;
import fr.ifremer.coser.data.Haul;
@@ -42,7 +44,7 @@
import fr.ifremer.coser.storage.MemoryDataStorage;
/**
- * Test abour validation.
+ * Test about control service (validation...).
*
* @author chatellier
* @version $Revision$
@@ -55,6 +57,7 @@
private static final Log log = LogFactory.getLog(ControlServiceTest.class);
protected ControlService controlService = new ControlService(config);
+ protected ProjectService projectService = new ProjectService(config);
/**
* Test les validations sur les champs vide.
@@ -164,4 +167,33 @@
Assert.assertFalse(controlService.isValidFishLength("1.3"));
Assert.assertFalse(controlService.isValidFishLength("1.001"));
}
+
+ /**
+ * Test que la validation globales fonctionne.
+ * Méthode valid data qui passe tout les contôles.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testValidData() throws CoserBusinessException {
+ Project project = createTestProject(projectService, false);
+ List<ControlError> errors = controlService.validateData(project, project.getControl(), null);
+
+ // 18 : xxx must contain at least x decimals
+ // 1 : Duplicated line for key : COSER_TEST|2010|TRAIT1|COSER_SPECIES2|i|NA|19.60|
+ // 8 : Differences between length and catch for species XXX
+ // 15 : Missing XXX tuple in catch
+ // 4 : Missing strata xxx in haul file
+ // 3 : Missing haul xxx in length file
+ // Total : 49
+ if (log.isInfoEnabled()) {
+ for (ControlError error : errors) {
+ log.info(error.getLevel() + " " + error.getDetailMessage());
+ }
+ }
+
+ // il y a beaucoup d'erreurs car les jeux d'essai ne sont
+ // pas forcements cohérents
+ Assert.assertEquals(49, errors.size());
+ }
}
Modified: trunk/coser-business/src/test/resources/log4j.properties
===================================================================
--- trunk/coser-business/src/test/resources/log4j.properties 2012-07-19 09:41:56 UTC (rev 1026)
+++ trunk/coser-business/src/test/resources/log4j.properties 2012-07-19 14:07:21 UTC (rev 1027)
@@ -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 Lesser General Public License as
@@ -33,4 +33,3 @@
# Categories
#log4j.category.fr.ifremer.coser=DEBUG
-#log4j.category.com.opensymphony.xwork2=DEBUG
1
0
r1026 - trunk/coser-business/src/main/java/fr/ifremer/coser/services
by echatellier@users.forge.codelutin.com 19 Jul '12
by echatellier@users.forge.codelutin.com 19 Jul '12
19 Jul '12
Author: echatellier
Date: 2012-07-19 11:41:56 +0200 (Thu, 19 Jul 2012)
New Revision: 1026
Url: http://forge.codelutin.com/repositories/revision/coser/1026
Log:
Erreur, comment?\195?\169 juste pour tests.
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java
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-07-19 09:36:52 UTC (rev 1025)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-07-19 09:41:56 UTC (rev 1026)
@@ -213,7 +213,7 @@
// valide chaque category
List<ControlError> validationErrors = new ArrayList<ControlError>();
- /*for (Category category : Category.values()) {
+ for (Category category : Category.values()) {
if (category.isDataCategory()) {
// validation de la category seule (generique)
List<ControlError> categoryErrors = validateCategoryXWork(control, category, progress);
@@ -229,7 +229,7 @@
}
progress.nextStep();
}
- }*/
+ }
// validation entre catch et length (specific)
List<? extends ControlError> diffCatchLengthErrors = validateDiffCatchLength(control, progress);
1
0