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
r533 - in trunk/coser-business/src: main/java/fr/ifremer/coser/services main/resources/ftl test/java/fr/ifremer/coser/services
by chatellier@users.labs.libre-entreprise.org 20 Jan '11
by chatellier@users.labs.libre-entreprise.org 20 Jan '11
20 Jan '11
Author: chatellier
Date: 2011-01-20 10:54:12 +0000 (Thu, 20 Jan 2011)
New Revision: 533
Log:
Generation du fichier de meta information
Added:
trunk/coser-business/src/main/resources/ftl/metainfo.ftl
Modified:
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/main/java/fr/ifremer/coser/services/WebService.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-20 08:52:30 UTC (rev 532)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-20 10:54:12 UTC (rev 533)
@@ -1922,6 +1922,33 @@
}
/**
+ * Retourne le nom d'affichage d'une especes.
+ *
+ * @param project project
+ * @param species species code
+ * @return species display name
+ */
+ public String getSpeciesDisplayName(Project project, String species) {
+ String displayName = null;
+
+ // load reftax in memory
+ Iterator<String[]> reftax = project.getRefTaxSpecies().iterator(true);
+ while (reftax.hasNext()) {
+ String[] tuple = reftax.next();
+
+ // "C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa"
+ String speciesCode = tuple[3];
+ if (speciesCode.equals(species)) {
+ // nom + auteur (sans ajout de parenthese : important)
+ displayName = tuple[4] + " " + tuple[5];
+ break;
+ }
+ }
+
+ return displayName;
+ }
+
+ /**
* Fusion d'especes.
*
* Used un selection ui.
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 2011-01-20 08:52:30 UTC (rev 532)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2011-01-20 10:54:12 UTC (rev 533)
@@ -42,7 +42,6 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.SortedMap;
import java.util.TreeMap;
import org.apache.commons.collections.CollectionUtils;
@@ -650,33 +649,6 @@
}
/**
- * Retourne le nom d'affichage d'une especes.
- *
- * @param project project
- * @param species species code
- * @return species display name
- */
- protected String getSpeciesDisplayName(Project project, String species) {
- String displayName = null;
-
- // load reftax in memory
- Iterator<String[]> reftax = project.getRefTaxSpecies().iterator(true);
- while (reftax.hasNext()) {
- String[] tuple = reftax.next();
-
- // "C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa"
- String speciesCode = tuple[3];
- if (speciesCode.equals(species)) {
- // nom + auteur (sans ajout de parenthese : important)
- displayName = tuple[4] + " " + tuple[5];
- break;
- }
- }
-
- return displayName;
- }
-
- /**
* Generate community graph for selected indicator.
* Used by web ui.
*
@@ -792,7 +764,7 @@
// get graph title
String title = projectService.getProjectSurveyName(resultDirectory, rsufiResult);
title += " - " + indicatorName;
- title += " - " + getSpeciesDisplayName(project, species);
+ title += " - " + projectService.getSpeciesDisplayName(project, species);
// le fichier estcomind
File estPopIndFile = new File(resultDirectory, rsufiResult.getEstPopIndName());
@@ -887,6 +859,7 @@
try {
result = File.createTempFile("coser-", ".csv");
+ result.deleteOnExit();
// le fichier estcomind
File estComIndFile = new File(resultDirectory, rsufiResult.getEstComIndName());
@@ -934,8 +907,9 @@
try {
result = File.createTempFile("coser-", ".csv");
+ result.deleteOnExit();
- // le fichier estcomind
+ // le fichier estpopind
File estPopIndFile = new File(resultDirectory, rsufiResult.getEstPopIndName());
// Campagne Indicateur Liste Species Strate Annee Estimation EcartType CV
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 2011-01-20 08:52:30 UTC (rev 532)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-20 10:54:12 UTC (rev 533)
@@ -46,7 +46,9 @@
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
+import java.util.SortedSet;
import java.util.TreeMap;
+import java.util.TreeSet;
import java.util.regex.Matcher;
import org.apache.commons.collections.map.MultiKeyMap;
@@ -87,6 +89,7 @@
import fr.ifremer.coser.util.ProgressMonitor;
import fr.ifremer.coser.util.ProgressStream;
import freemarker.cache.ClassTemplateLoader;
+import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
@@ -145,6 +148,9 @@
// specific template loader to get template from jars (classpath)
ClassTemplateLoader templateLoader = new ClassTemplateLoader(WebService.class, "/ftl");
freemarkerConfiguration.setTemplateLoader(templateLoader);
+
+ // pour les maps dans les template (entre autre)
+ freemarkerConfiguration.setObjectWrapper(new BeansWrapper());
}
/**
@@ -1394,7 +1400,7 @@
// load project (without data to get reftax data)
Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
- String indicatorName = (String)indicatorsMap.get(indicator, locale);
+ String indicatorName = (String)getIndicatorsMap().get(indicator, locale);
if (species == null) {
// title = surveyName - indicateur
@@ -1461,6 +1467,12 @@
if (species == null) {
// title = surveyName - indicateur
result = publicationService.getRsufiResultComChartData(resultFile, rsufiResult, indicator);
+
+ // ajout du fichier d'information sur les espèces incluses dans
+ //les calculs des indicateurs de communautés
+ // load project (without data to get reftax data)
+ Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
+ File metaFile = generateMetaFilePDF(project, resultFile, rsufiResult, indicator, locale);
}
else {
// title = surveyName - indicateur - species
@@ -1693,7 +1705,7 @@
FileUtils.copyFile(dechargePDF, new File(archiveDir, "DechargeDonnees.pdf"));
// make zip
- resultZip = File.createTempFile("coser-result", ".zip");
+ resultZip = File.createTempFile("coserresultzip-", ".zip");
resultZip.deleteOnExit();
ZipUtil.compress(resultZip, archiveDir);
@@ -1738,7 +1750,7 @@
Document document = CoserUtils.parseDocument(out.toString());
// render template output as pdf
- result = File.createTempFile("coserpdf", ".pdf");
+ result = File.createTempFile("coserdecharge-", ".pdf");
result.deleteOnExit();
OutputStream os = new FileOutputStream(result);
@@ -1758,4 +1770,99 @@
return result;
}
+
+ /**
+ * Genere le fichier PDF d'information sur les espèces incluses dans les
+ * calculs des indicateurs de communautés, à jointe à chaque téléchargement.
+ *
+ * @param project project
+ * @param resultDirectory result directory
+ * @param rsufiResult rsufi result
+ * @param indicator indicator
+ * @param locale locale (en, fr)
+ * @return generated pdf file
+ * @throws CoserBusinessException
+ */
+ protected File generateMetaFilePDF(Project project, File resultDirectory,
+ RSufiResult rsufiResult, String indicator, String locale) throws CoserBusinessException {
+
+ File result = null;
+
+ // le fichier estpopind
+ File estPopIndFile = new File(resultDirectory, rsufiResult.getEstPopIndName());
+
+ // donnees intermediare (map liste id > liste des indicateurs)
+ Map<String, SortedSet<String>> indicatorMap = new HashMap<String, SortedSet<String>>();
+
+ // le resutat sera une map complexe
+ // list des indicateurs (nom complet) > liste des especes (nom complet)
+ Map<String, SortedSet<String>> speciesMap = new HashMap<String, SortedSet<String>>();
+
+ // Campagne Indicateur Liste Species Strate Annee Estimation EcartType CV
+ DataStorage dataStorage = importService.loadCSVFile(estPopIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
+ Iterator<String[]> estPopIndIterator = dataStorage.iterator(true);
+ while (estPopIndIterator.hasNext()) {
+ String[] tuple = estPopIndIterator.next();
+
+ String indicatorCode = tuple[1];
+ String listIdCode = tuple[2];
+ String speciesCode = tuple[3];
+
+ // get indicator list
+ SortedSet<String> indicatorList = indicatorMap.get(listIdCode);
+ if (indicatorList == null) {
+ indicatorList = new TreeSet<String>();
+ indicatorMap.put(listIdCode, indicatorList);
+ }
+
+ // get indicator full name
+ String indicatorName = (String)getIndicatorsMap().get(indicatorCode, locale);
+ indicatorList.add(indicatorName);
+
+ // get species full name
+ String speciesName = projectService.getSpeciesDisplayName(project, speciesCode);
+ SortedSet<String> speciesList = speciesMap.get(listIdCode);
+ if (speciesList == null) {
+ speciesList = new TreeSet<String>();
+ speciesMap.put(listIdCode, speciesList);
+ }
+ speciesList.add(speciesName);
+ }
+
+ try {
+ // render freemarker template
+ Template mapTemplate = freemarkerConfiguration.getTemplate("metainfo.ftl");
+
+ Map<String, Object> root = new HashMap<String, Object>();
+ root.put("indicatorsMap", indicatorMap);
+ root.put("speciesMap", speciesMap);
+
+ 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("cosermetainfo-", ".pdf");
+ result.deleteOnExit();
+ OutputStream 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 meta info file", ex);
+ } catch (TemplateException ex) {
+ throw new CoserBusinessException("Can't generate meta info file", ex);
+ } catch (DocumentException ex) {
+ throw new CoserBusinessException("Can't generate meta info file", ex);
+ }
+
+ return result;
+ }
}
Added: trunk/coser-business/src/main/resources/ftl/metainfo.ftl
===================================================================
--- trunk/coser-business/src/main/resources/ftl/metainfo.ftl (rev 0)
+++ trunk/coser-business/src/main/resources/ftl/metainfo.ftl 2011-01-20 10:54:12 UTC (rev 533)
@@ -0,0 +1,28 @@
+<html>
+ <body>
+
+ <h2>Espèces incluses dans le calcul des indicateurs de communautés</h2>
+ Chaque indicateur de communautés est calculé sur une liste d'espèces
+ sélectionnée selon différents critères de cohérence et de pertinence.
+ Par exemple, les espèces n'ayant pas fait l'objet de relevés tout au long
+ de la série sur les paramètres requis sont éliminées. Les espèces incluses
+ dans le calcul des indicateurs de communautés de la présente transmission
+ sont présentés ci-dessous.
+
+
+ <#list indicatorsMap.keySet() as indicatorId>
+ <h3>
+ <#list indicatorsMap.get(indicatorId) as indicator>
+ ${indicator},
+ </#list>
+ </h3>
+
+ <ul>
+ <#list speciesMap.get(indicatorId) as species>
+ <li>${species}</li>
+ </#list>
+ </ul>
+ </#list>
+
+</body>
+</html>
\ No newline at end of file
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 2011-01-20 08:52:30 UTC (rev 532)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2011-01-20 10:54:12 UTC (rev 533)
@@ -155,7 +155,7 @@
public void testGetMapFile() throws CoserBusinessException {
registerUploadedResult("/web/upload2.zip");
File file = webService.getMapFile("Medits", "SPECIES1");
- Assert.assertNotNull(file);
+ Assert.assertTrue(file.isFile());
}
/**
@@ -167,6 +167,56 @@
public void testGetMapFileAsPDF() throws CoserBusinessException {
registerUploadedResult("/web/upload2.zip");
File file = webService.getMapFileAsPDF("Medits", "SPECIES1");
- Assert.assertNotNull(file);
+ Assert.assertTrue(file.isFile());
}
+
+ /**
+ * Test que la generation d'un graph fonctionne.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testGetChartCom() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+ File file = webService.getChart("ecorse", null, "lnN", "fr");
+ Assert.assertTrue(file.isFile());
+ }
+
+ /**
+ * Test que la generation d'un graph fonctionne.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testGetChartPop() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+ File file = webService.getChartData("ecorse", "COSER_SPECIES2", "lnN", "fr");
+ Assert.assertTrue(file.isFile());
+ }
+
+ /**
+ * Test que la generation d'un sous fichier csv à partir du fichier
+ * estcomind fonctionne.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testGetChartDataCom() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+ File file = webService.getChartData("ecorse", null, "lnN", "fr");
+ Assert.assertTrue(file.isFile());
+ }
+
+ /**
+ * Test que la generation d'un sous fichier csv à partir du fichier
+ * estcomind fonctionne.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testGetChartDataPop() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+ File file = webService.getChartData("ecorse", "COSER_SPECIES2", "lnN", "fr");
+ Assert.assertTrue(file.isFile());
+ }
}
1
0
r532 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/result coser-ui/src/main/resources/i18n
by chatellier@users.labs.libre-entreprise.org 20 Jan '11
by chatellier@users.labs.libre-entreprise.org 20 Jan '11
20 Jan '11
Author: chatellier
Date: 2011-01-20 08:52:30 +0000 (Thu, 20 Jan 2011)
New Revision: 532
Log:
Ajout de l'affichage des zones dans l'interface d'admin des r?\195?\169sultats.
Added:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultZoneRenderer.java
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultTreeModel.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/services/WebService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-19 18:23:34 UTC (rev 531)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-20 08:52:30 UTC (rev 532)
@@ -200,6 +200,28 @@
}
/**
+ * Retourne les nom d'une zone (avec la facade, l'année et la serie) en
+ * fonction de l'id de la zone.
+ *
+ * @param zoneId zone id
+ * @return zone name (or {@code null} if not found)
+ * @throws CoserBusinessException
+ */
+ public String getZoneFullName(String zoneId) throws CoserBusinessException {
+ DataStorage localZoneMap = getZonesMap();
+ String resultName = null;
+ // "id";"facade";"zone";"periode";"serie";"comment";"map"
+ int zoneIndex = localZoneMap.indexOf(zoneId);
+ if (zoneIndex != -1) {
+ resultName = localZoneMap.get(zoneIndex)[1];
+ resultName += " - " + localZoneMap.get(zoneIndex)[2];
+ resultName += " - " + localZoneMap.get(zoneIndex)[3];
+ resultName += " - " + localZoneMap.get(zoneIndex)[4];
+ }
+ return resultName;
+ }
+
+ /**
* Retourne tous les projets qui ont des résultats.
*
* De la forme d'une liste de de path (à la tree path) :
@@ -867,6 +889,7 @@
*/
public Map<String, String> getFacades() throws CoserBusinessException {
Map<String, String> facades = new HashMap<String, String>();
+ // "id";"facade";"zone";"periode";"serie";"comment";"map"
DataStorage zonesMap = getZonesMap();
Iterator<String[]> itZone = zonesMap.iterator(true);
while (itZone.hasNext()) {
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2011-01-19 18:23:34 UTC (rev 531)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2011-01-20 08:52:30 UTC (rev 532)
@@ -503,6 +503,11 @@
ResultHandler handler = new ResultHandler();
selectUploadResultView.setHandler(handler);
handler.init(selectUploadResultView);
+
+ // restore session size
+ SwingSession session = (SwingSession)view.getContextValue(SwingSession.class);
+ session.add(selectUploadResultView);
+
setMainComponent(selectUploadResultView);
}
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java 2011-01-19 18:23:34 UTC (rev 531)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java 2011-01-20 08:52:30 UTC (rev 532)
@@ -69,6 +69,8 @@
//SwingUtil.fixTableColumnWidth(view.getAvailableProjectTable(), 1, 25);
view.getAvailableResultTable().setDefaultRenderer(String[].class, new RsufiResultRenderer());
view.getSelectedResultTable().setDefaultRenderer(String[].class, new RsufiResultRenderer());
+ view.getAvailableResultTable().setDefaultRenderer(String.class, new RsufiResultZoneRenderer(view));
+ view.getSelectedResultTable().setDefaultRenderer(String.class, new RsufiResultZoneRenderer(view));
// initialise les données avec les filtres par default
updateAvailableResultsFilter(view);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultTreeModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultTreeModel.java 2011-01-19 18:23:34 UTC (rev 531)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultTreeModel.java 2011-01-20 08:52:30 UTC (rev 532)
@@ -107,9 +107,12 @@
result = _("coser.ui.uploadresult.path");
break;
case 2:
+ result = _("coser.ui.uploadresult.zone");
+ break;
+ case 3:
result = _("coser.ui.uploadresult.mapResult");
break;
- case 3:
+ case 4:
result = _("coser.ui.uploadresult.publishData");
break;
}
@@ -127,11 +130,14 @@
result = String[].class;
break;
case 2:
- result = Boolean.class;
+ result = String.class;
break;
case 3:
result = Boolean.class;
break;
+ case 4:
+ result = Boolean.class;
+ break;
}
return result;
}
@@ -141,9 +147,9 @@
*/
@Override
public int getColumnCount() {
- int result = 2;
+ int result = 3;
if (selected) {
- result = 4;
+ result = 5;
}
return result;
}
@@ -158,19 +164,25 @@
Object[] data = resultPath.get(rowIndex);
switch (columnIndex) {
- case 0:
+ case 0: {
RSufiResult rsufiResult = (RSufiResult)data[2];
result = rsufiResult.getCreationDate();
break;
+ }
case 1:
result = data;
break;
- case 2:
+ case 2: {
+ RSufiResult rsufiResult = (RSufiResult)data[2];
+ result = rsufiResult.getZone();
+ break;
+ }
+ case 3:
// c'est pas tres safe tu les hashcode des tableaux
// mais bon...
result = mapResult.contains(data);
break;
- case 3:
+ case 4:
// c'est pas tres safe tu les hashcode des tableaux
// mais bon...
result = publishDataResult.contains(data);
@@ -182,7 +194,7 @@
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
- return columnIndex >= 1;
+ return columnIndex >= 3;
}
@Override
@@ -190,7 +202,7 @@
Object[] data = resultPath.get(rowIndex);
- if (columnIndex == 2) {
+ if (columnIndex == 3) {
Boolean bValue = (Boolean)aValue;
if (bValue.booleanValue()) {
mapResult.add(data);
@@ -200,7 +212,7 @@
}
}
- else if (columnIndex == 3) {
+ else if (columnIndex == 4) {
Boolean bValue = (Boolean)aValue;
if (bValue.booleanValue()) {
publishDataResult.add(data);
Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultZoneRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultZoneRenderer.java (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultZoneRenderer.java 2011-01-20 08:52:30 UTC (rev 532)
@@ -0,0 +1,74 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 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.result;
+
+import java.awt.Component;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.CoserException;
+import fr.ifremer.coser.services.WebService;
+
+/**
+ * Available and selected result zone renderer.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class RsufiResultZoneRenderer extends DefaultTableCellRenderer {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = -9030155088814184637L;
+
+ protected SelectUploadResultView view;
+
+ public RsufiResultZoneRenderer(SelectUploadResultView view) {
+ this.view = view;
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value,
+ boolean isSelected, boolean hasFocus, int row, int column) {
+
+ // get web service
+ WebService webService = view.getContextValue(WebService.class);
+
+ Object localValue = value;
+ if (value != null && value instanceof String) {
+ String zoneId = (String)value;
+ try {
+ localValue = webService.getZoneFullName(zoneId);
+ } catch (CoserBusinessException ex) {
+ throw new CoserException("Can't get zone name", ex);
+ }
+ }
+ return super.getTableCellRendererComponent(table, localValue, isSelected, hasFocus,
+ row, column);
+ }
+}
Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/RsufiResultZoneRenderer.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 2011-01-19 18:23:34 UTC (rev 531)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2011-01-20 08:52:30 UTC (rev 532)
@@ -243,6 +243,7 @@
coser.ui.uploadresult.uploadChoice=Upload to server
coser.ui.uploadresult.uploadLogin=Admin login \:
coser.ui.uploadresult.uploadPassword=Admin password \:
+coser.ui.uploadresult.zone=Zone
coser.ui.validators.content=Content \:
coser.ui.validators.description=Application must be restarted after validators modification.
coser.ui.validators.title=Controls
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 2011-01-19 18:23:34 UTC (rev 531)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2011-01-20 08:52:30 UTC (rev 532)
@@ -243,6 +243,7 @@
coser.ui.uploadresult.uploadChoice=Envoyer sur le serveur
coser.ui.uploadresult.uploadLogin=Login admin \:
coser.ui.uploadresult.uploadPassword=Mot de passe admin \:
+coser.ui.uploadresult.zone=Zone
coser.ui.validators.content=Contenu \:
coser.ui.validators.description=L'application doit \u00EAtre red\u00E9marr\u00E9e apr\u00E8s la modification des validateurs.
coser.ui.validators.title=Contr\u00F4les
1
0
r531 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-web/src/main/java/fr/ifremer/coser/web/actions/com coser-web/src/main/java/fr/ifremer/coser/web/actions/pop coser-web/src/main/resources/fr/ifremer/coser/web coser-web/src/main/webapp/WEB-INF/content/com coser-web/src/main/webapp/WEB-INF/content/pop coser-web/src/main/webapp/WEB-INF/decorators
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
19 Jan '11
Author: chatellier
Date: 2011-01-19 18:23:34 +0000 (Wed, 19 Jan 2011)
New Revision: 531
Log:
Telechargement des donn?\195?\169es des graphs.
Generation des grah ordon?\195?\169 et avec trou.
Added:
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphCsvAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphCsvAction.java
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-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/com/graph.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/graph.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
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 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2011-01-19 18:23:34 UTC (rev 531)
@@ -42,6 +42,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.SortedMap;
import java.util.TreeMap;
import org.apache.commons.collections.CollectionUtils;
@@ -84,6 +85,7 @@
import fr.ifremer.coser.data.Catch;
import fr.ifremer.coser.data.Length;
import fr.ifremer.coser.storage.DataStorage;
+import fr.ifremer.coser.storage.MemoryDataStorage;
/**
* Publication service (charts, reports, export, pdf...)
@@ -648,24 +650,62 @@
}
/**
- * @param resultDirectory
- * @param rsufiResult
- * @param locale
- * @return
+ * Retourne le nom d'affichage d'une especes.
+ *
+ * @param project project
+ * @param species species code
+ * @return species display name
+ */
+ protected String getSpeciesDisplayName(Project project, String species) {
+ String displayName = null;
+
+ // load reftax in memory
+ Iterator<String[]> reftax = project.getRefTaxSpecies().iterator(true);
+ while (reftax.hasNext()) {
+ String[] tuple = reftax.next();
+
+ // "C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa"
+ String speciesCode = tuple[3];
+ if (speciesCode.equals(species)) {
+ // nom + auteur (sans ajout de parenthese : important)
+ displayName = tuple[4] + " " + tuple[5];
+ break;
+ }
+ }
+
+ return displayName;
+ }
+
+ /**
+ * Generate community graph for selected indicator.
+ * Used by web ui.
+ *
+ * @param project project
+ * @param resultDirectory result directory
+ * @param rsufiResult rsufiresult
+ * @param indicator indicator
+ * @param indicatorName indicatorName localized
+ * @return generated graph image (temp file)
* @throws CoserBusinessException
*/
- public File getRsufiResultComChart(File resultDirectory,
- RSufiResult rsufiResult, String indicator, String locale) throws CoserBusinessException {
+ public File getRsufiResultComChart(Project project, File resultDirectory,
+ RSufiResult rsufiResult, String indicator, String indicatorName) throws CoserBusinessException {
File result = null;
+ // get graph title
+ String title = projectService.getProjectSurveyName(resultDirectory, rsufiResult);
+ title += " - " + indicatorName;
+
// le fichier estcomind
File estComIndFile = new File(resultDirectory, rsufiResult.getEstComIndName());
// Campagne Indicateur Liste Strate Annee Estimation EcartType CV
DataStorage dataStorage = importService.loadCSVFile(estComIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
- DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
+ int minYear = Integer.MAX_VALUE;
+ int maxYear = Integer.MIN_VALUE;
+ Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>();
Iterator<String[]> estPopIndIterator = dataStorage.iterator(true);
while (estPopIndIterator.hasNext()) {
String[] tuple = estPopIndIterator.next();
@@ -674,17 +714,36 @@
if (indicatorCode.equals(indicator)) {
Double estimation = Double.parseDouble(tuple[5]);
Double ecart = Double.parseDouble(tuple[6]);
- String year = tuple[4];
- statisticalDataset.add(estimation, ecart, "Serie1", year);
+ int year = Integer.parseInt(tuple[4]);
+
+ if (year < minYear) {
+ minYear = year;
+ }
+ if (year > maxYear) {
+ maxYear = year;
+ }
+ graphData.put(year, new Double[]{estimation, ecart});
}
}
+ // generate dataset with sorted data
+ DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
+ for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
+ Double[] entry = graphData.get(indexYear);
+ if (entry != null) {
+ statisticalDataset.add(entry[0], entry[1], "Serie1", (Comparable)indexYear);
+ }
+ else {
+ statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
+ }
+ }
+
// configure chart
CategoryAxis categoryAxis = new CategoryAxis(_("coser.business.common.year"));
categoryAxis.setCategoryMargin(0);
+ categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
// label horizontaux
- categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
- ValueAxis valueAxis = new NumberAxis(_("coser.business.common.number"));
+ ValueAxis valueAxis = new NumberAxis(indicatorName);
valueAxis.setUpperMargin(0.1);
CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
@@ -696,9 +755,12 @@
CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer);
plot.setOrientation(PlotOrientation.VERTICAL);
- JFreeChart chart = new JFreeChart("Titre",
+ JFreeChart chart = new JFreeChart(title,
JFreeChart.DEFAULT_TITLE_FONT, plot, true);
+ // remove series legend
+ chart.removeLegend();
+
try {
result = File.createTempFile("coser-", ".chart");
result.deleteOnExit();
@@ -711,26 +773,36 @@
}
/**
- * @param resultDirectory
- * @param rsufiResult
- * @param species
- * @param indicator
- * @param locale
- * @return
+ * Generate population graph for selected species and indicator.
+ *
+ * @param project project
+ * @param resultDirectory result directory
+ * @param rsufiResult rsufi result
+ * @param species species
+ * @param indicator indicator
+ * @param indicatorName indicatorName localized
+ * @return generated image file (temp file)
* @throws CoserBusinessException
*/
- public File getRsufiResultPopChart(File resultDirectory,
- RSufiResult rsufiResult, String species, String indicator, String locale) throws CoserBusinessException {
+ public File getRsufiResultPopChart(Project project, File resultDirectory,
+ RSufiResult rsufiResult, String species, String indicator, String indicatorName) throws CoserBusinessException {
File result = null;
+ // get graph title
+ String title = projectService.getProjectSurveyName(resultDirectory, rsufiResult);
+ title += " - " + indicatorName;
+ title += " - " + getSpeciesDisplayName(project, species);
+
// le fichier estcomind
File estPopIndFile = new File(resultDirectory, rsufiResult.getEstPopIndName());
// Campagne Indicateur Liste Species Strate Annee Estimation EcartType CV
DataStorage dataStorage = importService.loadCSVFile(estPopIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
- DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
+ int minYear = Integer.MAX_VALUE;
+ int maxYear = Integer.MIN_VALUE;
+ Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>();
Iterator<String[]> estPopIndIterator = dataStorage.iterator(true);
while (estPopIndIterator.hasNext()) {
String[] tuple = estPopIndIterator.next();
@@ -740,21 +812,40 @@
if (speciesCode.equals(species) && indicatorCode.equals(indicator)) {
Double estimation = Double.parseDouble(tuple[6]);
Double ecart = Double.parseDouble(tuple[7]);
- String year = tuple[5];
- statisticalDataset.add(estimation, ecart, "Serie1", year);
+ int year = Integer.parseInt(tuple[5]);
+
+ if (year < minYear) {
+ minYear = year;
+ }
+ if (year > maxYear) {
+ maxYear = year;
+ }
+ graphData.put(year, new Double[]{estimation, ecart});
}
}
-
+
+ // generate dataset with sorted data
+ DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
+ for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
+ Double[] entry = graphData.get(indexYear);
+ if (entry != null) {
+ statisticalDataset.add(entry[0], entry[1], "Serie1", (Comparable)indexYear);
+ }
+ else {
+ statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
+ }
+ }
+
// configure chart
CategoryAxis categoryAxis = new CategoryAxis(_("coser.business.common.year"));
categoryAxis.setCategoryMargin(0);
+ categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
// label horizontaux
- categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
- ValueAxis valueAxis = new NumberAxis(_("coser.business.common.number"));
+ ValueAxis valueAxis = new NumberAxis(indicatorName);
valueAxis.setUpperMargin(0.1);
CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
-
+
// n'affiche pas les nombre sur le graphique
//StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator();
//renderer.setBaseItemLabelGenerator(itemLabelGenerator);
@@ -762,9 +853,12 @@
CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer);
plot.setOrientation(PlotOrientation.VERTICAL);
- JFreeChart chart = new JFreeChart("Titre",
+ JFreeChart chart = new JFreeChart(title,
JFreeChart.DEFAULT_TITLE_FONT, plot, true);
-
+
+ // remove series legend
+ chart.removeLegend();
+
try {
result = File.createTempFile("coser-", ".chart");
result.deleteOnExit();
@@ -775,5 +869,98 @@
return result;
}
-
+
+ /**
+ * Genere un sous fichier CSV (qui contient un sous ensemble de estPopInd)
+ * et qui a servit a generer le graphique.
+ *
+ * @param resultDirectory result directory
+ * @param rsufiResult rsufi result
+ * @param indicator indicator
+ * @return generated csv file (temp file)
+ * @throws CoserBusinessException
+ */
+ public File getRsufiResultComChartData(File resultDirectory,
+ RSufiResult rsufiResult, String indicator) throws CoserBusinessException {
+
+ File result = null;
+
+ try {
+ result = File.createTempFile("coser-", ".csv");
+
+ // le fichier estcomind
+ File estComIndFile = new File(resultDirectory, rsufiResult.getEstComIndName());
+
+ // Campagne Indicateur Liste Strate Annee Estimation EcartType CV
+ DataStorage dataStorage = importService.loadCSVFile(estComIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
+ DataStorage subDataStorage = new MemoryDataStorage();
+ Iterator<String[]> estComIndIterator = dataStorage.iterator();
+ // manage header
+ String[] headers = estComIndIterator.next();
+ subDataStorage.add(headers);
+
+ while (estComIndIterator.hasNext()) {
+ String[] tuple = estComIndIterator.next();
+
+ String indicatorCode = tuple[1];
+ if (indicatorCode.equals(indicator)) {
+ subDataStorage.add(tuple);
+ }
+ }
+
+ importService.storeDataWhithoutQuote(subDataStorage, result);
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save csv file", ex);
+ }
+
+ return result;
+ }
+
+ /**
+ * Genere un sous fichier CSV (qui contient un sous ensemble de estPopInd)
+ * et qui a servit a generer le graphique.
+ *
+ * @param resultDirectory result directory
+ * @param rsufiResult rsufi result
+ * @param species species
+ * @param indicator indicator
+ * @return generated csv file (temp file)
+ * @throws CoserBusinessException
+ */
+ public File getRsufiResultPopChartData(File resultDirectory,
+ RSufiResult rsufiResult, String species, String indicator) throws CoserBusinessException {
+
+ File result = null;
+
+ try {
+ result = File.createTempFile("coser-", ".csv");
+
+ // le fichier estcomind
+ File estPopIndFile = new File(resultDirectory, rsufiResult.getEstPopIndName());
+
+ // Campagne Indicateur Liste Species Strate Annee Estimation EcartType CV
+ DataStorage dataStorage = importService.loadCSVFile(estPopIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
+ DataStorage subDataStorage = new MemoryDataStorage();
+ Iterator<String[]> estPopIndIterator = dataStorage.iterator();
+ // manage header
+ String[] headers = estPopIndIterator.next();
+ subDataStorage.add(headers);
+
+ while (estPopIndIterator.hasNext()) {
+ String[] tuple = estPopIndIterator.next();
+
+ String speciesCode = tuple[3];
+ String indicatorCode = tuple[1];
+ if (speciesCode.equals(species) && indicatorCode.equals(indicator)) {
+ subDataStorage.add(tuple);
+ }
+ }
+
+ importService.storeDataWhithoutQuote(subDataStorage, result);
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save csv file", ex);
+ }
+
+ return result;
+ }
}
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 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-19 18:23:34 UTC (rev 531)
@@ -1369,11 +1369,17 @@
// extraction des especes pour le résultat demandé
if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) {
+ // load project (without data to get reftax data)
+ Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
+ String indicatorName = (String)indicatorsMap.get(indicator, locale);
+
if (species == null) {
- result = publicationService.getRsufiResultComChart(resultFile, rsufiResult, indicator, locale);
+ // title = surveyName - indicateur
+ result = publicationService.getRsufiResultComChart(project, resultFile, rsufiResult, indicator, indicatorName);
}
else {
- result = publicationService.getRsufiResultPopChart(resultFile, rsufiResult, species, indicator, locale);
+ // title = surveyName - indicateur - species
+ result = publicationService.getRsufiResultPopChart(project, resultFile, rsufiResult, species, indicator, indicatorName);
}
break;
}
@@ -1389,7 +1395,69 @@
return result;
}
+
+ /**
+ * Retourne les indicateurs calculés avec leurs traductions scientifique
+ * pour la zone et l'especes souhaitées.
+ *
+ * @param zone zone id
+ * @param species especes (if {@code null} look for com indicators
+ * @param indicator indicator
+ * @param locale locale ({@code fr} ou {@code en})
+ * @return la liste des indicateurs
+ * @throws CoserBusinessException
+ */
+ public File getChartData(String zone, String species, String indicator, String locale) throws CoserBusinessException {
+ File result = null;
+ // parcours des resultats disponibles
+ File projectsDirectory = config.getWebProjectsDirectory();
+ 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.getZone().equals(zone)) {
+
+ if (species == null) {
+ // title = surveyName - indicateur
+ result = publicationService.getRsufiResultComChartData(resultFile, rsufiResult, indicator);
+ }
+ else {
+ // title = surveyName - indicateur - species
+ result = publicationService.getRsufiResultPopChartData(resultFile, rsufiResult, species, indicator);
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
/**
* Recupere le fichier image de la carte demandées en fonction de la zone
* et de l'espece.
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphCsvAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphCsvAction.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphCsvAction.java 2011-01-19 18:23:34 UTC (rev 531)
@@ -0,0 +1,104 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 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%
+ */
+
+package fr.ifremer.coser.web.actions.com;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.Locale;
+
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.Result;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+
+/**
+ * Télécharge les données qui ont servi a généré le graph au format CSV.
+ *
+ * Parametre : zone, species, indicator.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class GraphCsvAction extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 3385467755357775199L;
+
+ protected String zone;
+
+ protected String indicator;
+
+ public String getZone() {
+ return zone;
+ }
+
+ public void setZone(String zone) {
+ this.zone = zone;
+ }
+
+ public String getIndicator() {
+ return indicator;
+ }
+
+ public void setIndicator(String indicator) {
+ this.indicator = indicator;
+ }
+
+ @Action(results= {@Result(type="stream", params={"contentType", "text/csv", "inputName", "inputStream", "contentDisposition", "attachment; filename=\"${filename}\""})})
+ public String execute() {
+ return SUCCESS;
+ }
+
+ public String getFilename() {
+ return indicator + ".csv";
+ }
+
+ public InputStream getInputStream() {
+ WebService webService = ServiceFactory.getWebService();
+
+ Locale locale = getLocale();
+ String localeCode = locale.getLanguage();
+
+ InputStream input = null;
+ try {
+ File mapImage = webService.getChartData(zone, null, indicator, localeCode);
+ input = new FileInputStream(mapImage);
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get map file", ex);
+ } catch (FileNotFoundException ex) {
+ throw new CoserWebException("Can't get map file", ex);
+ }
+
+ return input;
+ }
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphCsvAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
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 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java 2011-01-19 18:23:34 UTC (rev 531)
@@ -41,7 +41,7 @@
/**
* Affiche le graphique demandé.
*
- * Parametre : zone, species, indicator.
+ * Parametre : zone, indicator.
*
* @author chatellier
* @version $Revision$
@@ -58,8 +58,6 @@
protected String indicator;
- protected String chartUrl;
-
public String getZone() {
return zone;
}
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphCsvAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphCsvAction.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphCsvAction.java 2011-01-19 18:23:34 UTC (rev 531)
@@ -0,0 +1,114 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 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%
+ */
+
+package fr.ifremer.coser.web.actions.pop;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.Locale;
+
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.Result;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+
+/**
+ * Télécharge les données qui ont servi a généré le graph au format CSV.
+ *
+ * Parametre : zone, species, indicator.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class GraphCsvAction extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 3385467755357775199L;
+
+ protected String zone;
+
+ protected String species;
+
+ protected String indicator;
+
+ public String getZone() {
+ return zone;
+ }
+
+ public void setZone(String zone) {
+ this.zone = zone;
+ }
+
+ public String getIndicator() {
+ return indicator;
+ }
+
+ public void setIndicator(String indicator) {
+ this.indicator = indicator;
+ }
+
+ public String getSpecies() {
+ return species;
+ }
+
+ public void setSpecies(String species) {
+ this.species = species;
+ }
+
+ @Action(results= {@Result(type="stream", params={"contentType", "text/csv", "inputName", "inputStream", "contentDisposition", "attachment; filename=\"${filename}\""})})
+ public String execute() {
+ return SUCCESS;
+ }
+
+ public String getFilename() {
+ return indicator + ".csv";
+ }
+
+ public InputStream getInputStream() {
+ WebService webService = ServiceFactory.getWebService();
+
+ Locale locale = getLocale();
+ String localeCode = locale.getLanguage();
+
+ InputStream input = null;
+ try {
+ File mapImage = webService.getChartData(zone, null, indicator, localeCode);
+ input = new FileInputStream(mapImage);
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get map file", ex);
+ } catch (FileNotFoundException ex) {
+ throw new CoserWebException("Can't get map file", ex);
+ }
+
+ return input;
+ }
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphCsvAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-19 18:23:34 UTC (rev 531)
@@ -23,6 +23,7 @@
###
message.com.title=Indices de communaut\u00E9s
message.com.paragraph1=Des indices de communaut\u00E9 sont calcul\u00E9s pour un ensemble d''esp\u00E8ces dans chaque s\u00E9rie. La liste des esp\u00E8ces incluses pour le calcul de chaque indice varie selon les donn\u00E9es disponibles pour la r\u00E9alisation des calculs.
+message.com.downloadascsv=Download as CSV
message.layout.title=Populations and communities indices, resulting from Ifremer monitoring halieutics survey
message.layout.oceanicdatatitle=Gestion des donn\u00E9es des campagnes oc\u00E9anographiques
message.layout.oceanicdata1=le Syst\u00E8me d'informations scientifiques pour la mer de l'Ifremer (SISMER)
@@ -58,6 +59,7 @@
message.map.title=Cartes de distribution
message.map.warning=Warning
message.map.warningcontent=Les cartes pr\u00E9sent\u00E9es ne doivent pas \u00EAtre interpr\u00E9t\u00E9es comme des cartes de distribution des esp\u00E8ces mais comme celle des zones o\u00F9 elles sont captur\u00E9es lors des campagnes scientifiques. Les campagnes \u00E9tant r\u00E9alis\u00E9es avec des chaluts diff\u00E9rents et \u00E0 diff\u00E9rentes saisons, les esp\u00E8ces peuvent avoir des capturabilit\u00E9s tr\u00E8s diff\u00E9rentes entre les s\u00E9ries de campagnes, donc d''une zone \u00E0 l''autre.
+message.pop.downloadascsv=Download as CSV
message.pop.title=Indices biologiques
message.pop.paragraph1=Les indices pr\u00E9sent\u00E9s ont \u00E9t\u00E9 s\u00E9lectionn\u00E9s en r\u00E9f\u00E9rence \u00E0 leur aptitude \u00E0 renseigner sur l''impact de la p\u00EAche, en vue de leur int\u00E9gration dans des tableaux de bord d\u2019indicateurs d''\u00E9volution d''\u00E9cosyst\u00E8mes exploit\u00E9s par la p\u00EAche.
message.pop.paragraph2=Les donn\u00E9es disponibles sur le site sont les valeurs de chaque indice. Les informations ont \u00E9t\u00E9 valid\u00E9es par un groupe de travail dans une approche int\u00E9grative d\u2019indicateurs de populations et de communaut\u00E9s. Les r\u00E9sultats sont donn\u00E9s par zone g\u00E9ographique et par esp\u00E8ce pour l''ensemble de la s\u00E9rie de donn\u00E9es disponible. L''utilisateur peut s\u00E9lectionner la zone g\u00E9ographique, la saison (dans le cas de s\u00E9ries saisonni\u00E8res), l''esp\u00E8ce et l''indice. Pour les s\u00E9lections pour lesquelles une information est disponible, le syst\u00E8me produit un graphe pr\u00E9sentant la distribution temporelle de l''indice, avec une repr\u00E9sentation de l''\u00E9cart-type. Il fournit la possibilit\u00E9 d\u2019extraire la table des donn\u00E9es correspondantes, incluant la valeur de l\u2019indice par ann\u00E9e, ainsi que son \u00E9cart-type et son coefficient de variation.
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-19 18:23:34 UTC (rev 531)
@@ -21,6 +21,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# #L%
###
+message.com.downloadascsv=T\u00E9l\u00E9charger en CSV
message.com.title=Indices de communaut\u00E9s
message.com.paragraph1=Des indices de communaut\u00E9 sont calcul\u00E9s pour un ensemble d''esp\u00E8ces dans chaque s\u00E9rie. La liste des esp\u00E8ces incluses pour le calcul de chaque indice varie selon les donn\u00E9es disponibles pour la r\u00E9alisation des calculs.
message.layout.title=Indices de populations et de communaut\u00E9s issus des campagnes de surveillance halieutique de l''Ifremer
@@ -58,6 +59,7 @@
message.map.title=Cartes de distribution
message.map.warning=Avertissement
message.map.warningcontent=Les cartes pr\u00E9sent\u00E9es ne doivent pas \u00EAtre interpr\u00E9t\u00E9es comme des cartes de distribution des esp\u00E8ces mais comme celle des zones o\u00F9 elles sont captur\u00E9es lors des campagnes scientifiques. Les campagnes \u00E9tant r\u00E9alis\u00E9es avec des chaluts diff\u00E9rents et \u00E0 diff\u00E9rentes saisons, les esp\u00E8ces peuvent avoir des capturabilit\u00E9s tr\u00E8s diff\u00E9rentes entre les s\u00E9ries de campagnes, donc d''une zone \u00E0 l''autre.
+message.pop.downloadascsv=T\u00E9l\u00E9charger en CSV
message.pop.title=Indices biologiques
message.pop.paragraph1=Les indices pr\u00E9sent\u00E9s ont \u00E9t\u00E9 s\u00E9lectionn\u00E9s en r\u00E9f\u00E9rence \u00E0 leur aptitude \u00E0 renseigner sur l''impact de la p\u00EAche, en vue de leur int\u00E9gration dans des tableaux de bord d\u2019indicateurs d''\u00E9volution d''\u00E9cosyst\u00E8mes exploit\u00E9s par la p\u00EAche.
message.pop.paragraph2=Les donn\u00E9es disponibles sur le site sont les valeurs de chaque indice. Les informations ont \u00E9t\u00E9 valid\u00E9es par un groupe de travail dans une approche int\u00E9grative d\u2019indicateurs de populations et de communaut\u00E9s. Les r\u00E9sultats sont donn\u00E9s par zone g\u00E9ographique et par esp\u00E8ce pour l''ensemble de la s\u00E9rie de donn\u00E9es disponible. L''utilisateur peut s\u00E9lectionner la zone g\u00E9ographique, la saison (dans le cas de s\u00E9ries saisonni\u00E8res), l''esp\u00E8ce et l''indice. Pour les s\u00E9lections pour lesquelles une information est disponible, le syst\u00E8me produit un graphe pr\u00E9sentant la distribution temporelle de l''indice, avec une repr\u00E9sentation de l''\u00E9cart-type. Il fournit la possibilit\u00E9 d\u2019extraire la table des donn\u00E9es correspondantes, incluant la valeur de l\u2019indice par ann\u00E9e, ainsi que son \u00E9cart-type et son coefficient de variation.
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/graph.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/graph.jsp 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/graph.jsp 2011-01-19 18:23:34 UTC (rev 531)
@@ -38,6 +38,12 @@
<s:param name="zone" value="%{zone}" />
<s:param name="indicator" value="%{indicator}" />
</s:url>" />
+
+ <p><s:a action="graph-csv">
+ <s:param name="zone" value="%{zone}" />
+ <s:param name="indicator" value="%{indicator}" />
+ <s:text name="message.com.downloadascsv"></s:text>
+ </s:a>.</p>
</body>
</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp 2011-01-19 18:23:34 UTC (rev 531)
@@ -39,7 +39,6 @@
<s:form action="graph" method="get">
<s:select name="indicator" list="indicators" label="%{getText('message.common.selectindicator')}" />
<s:hidden name="zone" property="zone"/>
- <s:hidden name="species" property="species"/>
<s:submit label="Suite"/>
</s:form>
</body>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/graph.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/graph.jsp 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/graph.jsp 2011-01-19 18:23:34 UTC (rev 531)
@@ -41,5 +41,12 @@
<s:param name="species" value="%{species}" />
<s:param name="indicator" value="%{indicator}" />
</s:url>" />
+
+ <p><s:a action="graph-csv">
+ <s:param name="zone" value="%{zone}" />
+ <s:param name="species" value="%{species}" />
+ <s:param name="indicator" value="%{indicator}" />
+ <s:text name="message.com.downloadascsv"></s:text>
+ </s:a>.</p>
</body>
</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2011-01-19 10:16:47 UTC (rev 530)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2011-01-19 18:23:34 UTC (rev 531)
@@ -49,6 +49,7 @@
<div id="middle" class="clearfix">
<div class="page">
+ <span class="clt"></span>
<div class="content">
<div class="degrade">
<div class="top_content">
1
0
r530 - trunk/coser-business/src/main/java/fr/ifremer/coser/services
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
19 Jan '11
Author: chatellier
Date: 2011-01-19 10:16:47 +0000 (Wed, 19 Jan 2011)
New Revision: 530
Log:
Add doc, and clean file
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.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 2011-01-19 10:13:10 UTC (rev 529)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-19 10:16:47 UTC (rev 530)
@@ -1519,13 +1519,12 @@
* Contient:
* <ul>
* <li>les 4 fichiers apres sélection
- * <li>
- * <li>
+ * <li>un fichier de décharge (pdf)
* </ul>
*
* @param zone zone (zoneid-surveyname)
* @param locale locale (fr/en)
- * @return map file
+ * @return zip source file (auto delete when jvm shutdown)
* @throws CoserBusinessException
*/
public File getSourceZip(String zone, String locale) throws CoserBusinessException {
@@ -1584,7 +1583,7 @@
*
* @param project project
* @param selection selection with loaded data
- * @return generated zip file
+ * @return generated zip file (auto delete when jvm shutdown)
* @throws CoserBusinessException
*/
protected File generateSourceZip(Project project, Selection selection) throws CoserBusinessException {
@@ -1604,6 +1603,7 @@
// make zip
resultZip = File.createTempFile("coser-result", ".zip");
+ resultZip.deleteOnExit();
ZipUtil.compress(resultZip, archiveDir);
// clean directory
1
0
r529 - trunk/coser-business/src/test/java/fr/ifremer/coser/services
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
19 Jan '11
Author: chatellier
Date: 2011-01-19 10:13:10 +0000 (Wed, 19 Jan 2011)
New Revision: 529
Log:
Wrong commit
Modified:
trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2011-01-19 10:10:46 UTC (rev 528)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2011-01-19 10:13:10 UTC (rev 529)
@@ -104,7 +104,7 @@
@AfterClass
public static void cleanDirectory() throws IOException {
- //FileUtils.deleteDirectory(testDirectory);
+ FileUtils.deleteDirectory(testDirectory);
}
/**
1
0
r528 - in trunk/coser-business/src: main/java/fr/ifremer/coser/services test/java/fr/ifremer/coser/services
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
19 Jan '11
Author: chatellier
Date: 2011-01-19 10:10:46 +0000 (Wed, 19 Jan 2011)
New Revision: 528
Log:
Les sources doivent contenir l'export rsufi et non les donn?\195?\169es brutes de s?\195?\169lection.
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-19 09:43:05 UTC (rev 527)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-19 10:10:46 UTC (rev 528)
@@ -691,7 +691,7 @@
return project;
}
-
+
/**
* Load selection data in an initialized project.
*
@@ -701,8 +701,20 @@
* @throws CoserBusinessException
*/
public Project loadSelectionData(Project project, Selection selection) throws CoserBusinessException {
+ return loadSelectionData(config.getProjectsDirectory(), project, selection);
+ }
- File projectsDirectory = config.getProjectsDirectory();
+ /**
+ * Load selection data in an initialized project form specific directory.
+ *
+ * @param projectsDirectory directory containing projects
+ * @param project project
+ * @param selection selection to fill
+ * @return project with data
+ * @throws CoserBusinessException
+ */
+ public Project loadSelectionData(File projectsDirectory, Project project, Selection selection) throws CoserBusinessException {
+
File projectDirectory = new File(projectsDirectory, project.getName());
// first free memory, clear all data
@@ -2561,9 +2573,10 @@
* @param project project
* @param selection selection
* @param directory directory to extract file to
+ * @return extracted directory
* @throws CoserBusinessException
*/
- public void extractRSUfiData(Project project, Selection selection, File directory) throws CoserBusinessException {
+ public File extractRSUfiData(Project project, Selection selection, File directory) throws CoserBusinessException {
File projectDirectory = new File(directory, project.getName());
projectDirectory.mkdirs();
@@ -2602,6 +2615,8 @@
finally {
IOUtils.closeQuietly(out);
}
+
+ return projectDirectory;
}
/**
@@ -2674,6 +2689,23 @@
}
/**
+ * Look for project survey name in container data.
+ *
+ * @param container data container
+ * @return survey name
+ */
+ public String getProjectSurveyName(AbstractDataContainer container) {
+ String result = null;
+
+ Iterator<String[]> itCatchData = container.getCatch().iterator(true);
+ while (StringUtils.isEmpty(result) && itCatchData.hasNext()) {
+ result = itCatchData.next()[Catch.INDEX_SURVEY];
+ }
+
+ return result;
+ }
+
+ /**
* Look for project survey name in rsufi result.
* Read estcomind file to known that.
* Used in webservice to know map file names.
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 2011-01-19 09:43:05 UTC (rev 527)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-19 10:10:46 UTC (rev 528)
@@ -1557,10 +1557,14 @@
// extraction des especes pour le résultat demandé
if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) {
- // load project (without data to get original file names)
+ // load project (with data to get original file names)
Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
+
+ // load selection data (to do data export rsufi)
+ Selection selection = project.getSelections().get(selectionFile.getName());
+ projectService.loadSelectionData(projectsDirectory,project, selection);
- result = generateSourceZip(project, selectionFile, resultFile, rsufiResult);
+ result = generateSourceZip(project, selection);
}
}
}
@@ -1579,41 +1583,23 @@
* Generate zip for selection.
*
* @param project project
- * @param selectionDirectory selection directory
- * @param rsufiResultDirectory rsufi result directory (to get survey name)
- * @param rsufiResult rsufi result (to get survey name)
+ * @param selection selection with loaded data
* @return generated zip file
* @throws CoserBusinessException
*/
- protected File generateSourceZip(Project project, File selectionDirectory, File rsufiResultDirectory, RSufiResult rsufiResult) throws CoserBusinessException {
+ protected File generateSourceZip(Project project, Selection selection) throws CoserBusinessException {
File resultZip = null;
try {
File tempDir = FileUtil.createTempDirectory("coser-", ".tmp");
- // pour que l'archive contiennent ce dossier
- File archiveDir = new File(tempDir, project.getName());
+ // il ne faut pas les fichiers de selection, mais leurs
+ // export rsufi (sans les lignes, et les quotes)
+ File archiveDir = projectService.extractRSUfiData(project, selection, tempDir);
- // recupere les noms originaux des fichiers
- // de selection et de nom de fichier dans le zip
- String catchSeFileName = projectService.getDataStorageFileName(project, Category.CATCH, CoserConstants.STORAGE_SELECTION_SUFFIX);
- String haulSeFileName = projectService.getDataStorageFileName(project, Category.HAUL, CoserConstants.STORAGE_SELECTION_SUFFIX);
- String lengthSeFileName = projectService.getDataStorageFileName(project, Category.LENGTH, CoserConstants.STORAGE_SELECTION_SUFFIX);
- String strataSeFileName = projectService.getDataStorageFileName(project, Category.STRATA, CoserConstants.STORAGE_SELECTION_SUFFIX);
- String catchFileName = projectService.getDataStorageFileName(project, Category.CATCH, null);
- String haulFileName = projectService.getDataStorageFileName(project, Category.HAUL, null);
- String lengthFileName = projectService.getDataStorageFileName(project, Category.LENGTH, null);
- String strataFileName = projectService.getDataStorageFileName(project, Category.STRATA, null);
-
- // copy to temp directory
- FileUtils.copyFile(new File(selectionDirectory, catchSeFileName), new File(archiveDir, catchFileName));
- FileUtils.copyFile(new File(selectionDirectory, haulSeFileName), new File(archiveDir, haulFileName));
- FileUtils.copyFile(new File(selectionDirectory, lengthSeFileName), new File(archiveDir, lengthFileName));
- FileUtils.copyFile(new File(selectionDirectory, strataSeFileName), new File(archiveDir, strataFileName));
-
// add decharge file
- File dechargePDF = generateDechargePDF(rsufiResultDirectory, rsufiResult);
+ File dechargePDF = generateDechargePDF(selection);
FileUtils.copyFile(dechargePDF, new File(archiveDir, "DechargeDonnees.pdf"));
// make zip
@@ -1632,12 +1618,11 @@
/**
* Genere le PDF dynamique de decharge à partir du template freemarker.
*
- * @param rsufiResultDirectory rsufi result directory (to get survey name)
- * @param rsufiResult rsufi result (to get survey name)
+ * @param selection selection with loaded data
* @return le fichier généré
* @throws CoserBusinessException
*/
- protected File generateDechargePDF(File rsufiResultDirectory, RSufiResult rsufiResult) throws CoserBusinessException {
+ protected File generateDechargePDF(Selection selection) throws CoserBusinessException {
File result = null;
@@ -1645,7 +1630,7 @@
// get some info to put into pdf
Date updateDate = getLastDataUpdateDate();
- String surveyName = projectService.getProjectSurveyName(rsufiResultDirectory, rsufiResult);
+ String surveyName = projectService.getProjectSurveyName(selection);
// render freemarker template
Template mapTemplate = freemarkerConfiguration.getTemplate("decharge.ftl");
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2011-01-19 09:43:05 UTC (rev 527)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2011-01-19 10:10:46 UTC (rev 528)
@@ -104,7 +104,7 @@
@AfterClass
public static void cleanDirectory() throws IOException {
- FileUtils.deleteDirectory(testDirectory);
+ //FileUtils.deleteDirectory(testDirectory);
}
/**
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 2011-01-19 09:43:05 UTC (rev 527)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2011-01-19 10:10:46 UTC (rev 528)
@@ -129,17 +129,20 @@
/**
* Test du contenu du zip de téléchargement des sources.
*
+ * Generation du zip, freemarker, et pdf.
+ *
* @throws CoserBusinessException
* @throws IOException
*/
@Test
public void testSourceZip() throws CoserBusinessException, IOException {
- registerUploadedResult("/web/upload1.zip");
+ registerUploadedResult("/web/upload2.zip");
File zip = webService.getSourceZip("testzone1", "en");
File tempDir = FileUtil.createTempDirectory("coser", ".tmp");
ZipUtil.uncompress(zip, tempDir);
- Assert.assertTrue(new File(tempDir, "coser-sources" + File.separator + "testcatch.csv").isFile());
+ Assert.assertTrue(new File(tempDir, "projet1" + File.separator + "testcatch.csv").isFile());
+ Assert.assertTrue(new File(tempDir, "projet1" + File.separator + "DechargeDonnees.pdf").isFile());
FileUtils.deleteDirectory(tempDir);
}
@@ -166,18 +169,4 @@
File file = webService.getMapFileAsPDF("Medits", "SPECIES1");
Assert.assertNotNull(file);
}
-
- /**
- * Test la simulation d'un téléchargement de données sources d'un projet.
- *
- * Generation du zip, freemarker, et pdf.
- *
- * @throws CoserBusinessException
- */
- @Test
- public void testGetSourceZip() throws CoserBusinessException {
- registerUploadedResult("/web/upload2.zip");
- File file = webService.getSourceZip("testzone1", "fr");
- Assert.assertNotNull(file);
- }
}
1
0
r527 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources/ftl coser-business/src/test/java/fr/ifremer/coser/services coser-web/src/main/java/fr/ifremer/coser/web/actions
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
19 Jan '11
Author: chatellier
Date: 2011-01-19 09:43:05 +0000 (Wed, 19 Jan 2011)
New Revision: 527
Log:
Ajout d'un pdf de d?\195?\169charge dans le zip de t?\195?\169l?\195?\169chargement des sources.
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
trunk/coser-business/src/main/resources/ftl/decharge.ftl
trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/IndexAction.java
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 2011-01-19 09:42:39 UTC (rev 526)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-19 09:43:05 UTC (rev 527)
@@ -32,6 +32,7 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.io.Writer;
@@ -44,11 +45,13 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Properties;
import java.util.TreeMap;
import java.util.regex.Matcher;
import org.apache.commons.collections.map.MultiKeyMap;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -641,12 +644,83 @@
// send notification mails
sendNewResultNotifications();
+ // update data date
+ updateDataProperties();
} catch (IOException ex) {
throw new CoserBusinessException("Can't uncompress file", ex);
}
}
/**
+ * Met à jour certaines proprietes apres la mise à jour des données.
+ * @throws CoserBusinessException
+ */
+ protected void updateDataProperties() throws CoserBusinessException {
+
+ File webProperties = config.getWebPropertiesFile();
+
+ Properties props = new Properties();
+ InputStream iStream = null;
+ OutputStream oStream = null;
+ try {
+ if (webProperties.isFile()) {
+ iStream = new FileInputStream(webProperties);
+ props.load(iStream);
+ }
+
+ props.setProperty("updateDate", String.valueOf(new Date().getTime()));
+ oStream = new FileOutputStream(webProperties);
+ props.store(oStream, "Update data");
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save properties file", ex);
+ }
+ finally {
+ IOUtils.closeQuietly(iStream);
+ IOUtils.closeQuietly(oStream);
+ }
+ }
+
+ /**
+ * Retourne la date de dernière mise à jour des données du site web.
+ *
+ * Retourne une date bidon, si pas de dernière mise à jour.
+ *
+ * @return last data update date
+ * @throws CoserBusinessException
+ */
+ public Date getLastDataUpdateDate() throws CoserBusinessException {
+ Date dataUpdateDate = null;
+ File webProperties = config.getWebPropertiesFile();
+ if (webProperties.isFile()) {
+ // get update date
+ Properties props = new Properties();
+ InputStream stream = null;
+ try {
+ stream = new FileInputStream(webProperties);
+ props.load(stream);
+
+ if (props.containsKey("updateDate")) {
+ String date = props.getProperty("updateDate");
+ long time = Long.parseLong(date);
+ dataUpdateDate = new Date(time);
+ }
+
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't read properties file", ex);
+ }
+ finally {
+ IOUtils.closeQuietly(stream);
+ }
+ }
+
+ if (dataUpdateDate == null) {
+ dataUpdateDate = new Date(0);
+ }
+
+ return dataUpdateDate;
+ }
+
+ /**
* Recupere dans un repertoire donné, les resultid des resultat (zone /
* sous-zone-campagne)
*
@@ -1486,7 +1560,7 @@
// load project (without data to get original file names)
Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
- result = generateSourceZip(project, selectionFile);
+ result = generateSourceZip(project, selectionFile, resultFile, rsufiResult);
}
}
}
@@ -1506,10 +1580,12 @@
*
* @param project project
* @param selectionDirectory selection directory
+ * @param rsufiResultDirectory rsufi result directory (to get survey name)
+ * @param rsufiResult rsufi result (to get survey name)
* @return generated zip file
* @throws CoserBusinessException
*/
- protected File generateSourceZip(Project project, File selectionDirectory) throws CoserBusinessException {
+ protected File generateSourceZip(Project project, File selectionDirectory, File rsufiResultDirectory, RSufiResult rsufiResult) throws CoserBusinessException {
File resultZip = null;
@@ -1517,7 +1593,7 @@
File tempDir = FileUtil.createTempDirectory("coser-", ".tmp");
// pour que l'archive contiennent ce dossier
- File archiveDir = new File(tempDir, "coser-sources");
+ File archiveDir = new File(tempDir, project.getName());
// recupere les noms originaux des fichiers
// de selection et de nom de fichier dans le zip
@@ -1536,6 +1612,10 @@
FileUtils.copyFile(new File(selectionDirectory, lengthSeFileName), new File(archiveDir, lengthFileName));
FileUtils.copyFile(new File(selectionDirectory, strataSeFileName), new File(archiveDir, strataFileName));
+ // add decharge file
+ File dechargePDF = generateDechargePDF(rsufiResultDirectory, rsufiResult);
+ FileUtils.copyFile(dechargePDF, new File(archiveDir, "DechargeDonnees.pdf"));
+
// make zip
resultZip = File.createTempFile("coser-result", ".zip");
ZipUtil.compress(resultZip, archiveDir);
@@ -1548,4 +1628,58 @@
return resultZip;
}
+
+ /**
+ * Genere le PDF dynamique de decharge à partir du template freemarker.
+ *
+ * @param rsufiResultDirectory rsufi result directory (to get survey name)
+ * @param rsufiResult rsufi result (to get survey name)
+ * @return le fichier généré
+ * @throws CoserBusinessException
+ */
+ protected File generateDechargePDF(File rsufiResultDirectory, RSufiResult rsufiResult) throws CoserBusinessException {
+
+ File result = null;
+
+ try {
+
+ // get some info to put into pdf
+ Date updateDate = getLastDataUpdateDate();
+ String surveyName = projectService.getProjectSurveyName(rsufiResultDirectory, rsufiResult);
+
+ // render freemarker template
+ Template mapTemplate = freemarkerConfiguration.getTemplate("decharge.ftl");
+
+ Map<String, Object> root = new HashMap<String, Object>();
+ root.put("updateDate", updateDate);
+ root.put("surveyName", surveyName);
+
+ 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();
+ OutputStream 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 decharge file", ex);
+ } catch (TemplateException ex) {
+ throw new CoserBusinessException("Can't generate decharge file", ex);
+ } catch (DocumentException ex) {
+ throw new CoserBusinessException("Can't generate decharge file", ex);
+ }
+
+ return result;
+ }
}
Modified: trunk/coser-business/src/main/resources/ftl/decharge.ftl
===================================================================
--- trunk/coser-business/src/main/resources/ftl/decharge.ftl 2011-01-19 09:42:39 UTC (rev 526)
+++ trunk/coser-business/src/main/resources/ftl/decharge.ftl 2011-01-19 09:43:05 UTC (rev 527)
@@ -1,79 +1,95 @@
-Réaction
-========
+<html>
+ <body>
+ <h2>Réaction</h2>
+ <p>
Merci d'avoir téléchargé des données de ce site. Si vous avez identifié des
problèmes dans ces données, ou souhaitez fournir des remarques pour aider à
améliorer le service, vous êtes invités à adresser un courriel à
l'administrateur du site (harmonie at ifremer.fr).
+</p>
-Important
-=========
-Les données téléchargées sont issues de la série CGFS.
-
+<h2>Important</h2>
+<p>
+Les données téléchargées sont issues de la série ${surveyName}.
+</p>
+<p>
Vous êtes invités à consulter les informations relatives à cette série de
campagnes... Ce site comprend des informations spécifiques concernant l'usage de
ces données, les limitations et les problèmes connus.
-
+</p>
+<p>
Vous vous engagez à citer la source de ces données dans tout produit et
publication utilisant ces données. En téléchargeant des données à partir du
site http://www.ifremer.fr/SIH-indices-campagnes/, vous acceptez les termes et
conditions d'usage décrites dans ce document et dans tout document cité dans ce
texte.
+</p>
-Contact
-=======
+<h2>Contact</h2>
+<p>
Pour toute question concernant les données téléchargées du site
http://www.ifremer.fr/SIH-indices-campagnes/, vous pouvez adresser un courriel à
l'administrateur du site (harmonie at ifremer.fr).
+</p>
-Informations particulières sur les données téléchargées
-=======================================================
+<h2>Informations particulières sur les données téléchargées</h2>
+<p>
Les données des campagnes halieutiques de ce site sont mises à libre disposition
pour téléchargement. En dépit des soins mis à la préparation de ces données, des
défauts inhérents à l'agrégation des informations peuvent persister.
-Par exemple :
+Par exemple :</p>
-* En dépit du fait que toutes les données de toutes les séries de campagnes
+<ul>
+<li>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.
+ biocénoses échantillonnées.</li>
-* Une propriété commune aux séries d'observations à la mer est l'évolution dans
+<li>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.
+ représentatifs de l'évolution des populations concernées dans l'écosystème.</li>
-* Pour les campagnes d'une même série, des changements dans les procédures
+<li>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.
+les jeux de données doivent être préalablement filtrés adéquatement.</li>
+</ul>
+<p>
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
(harmonie at ifremer.fr).
+</p>
-Citation de l'origine des données
-=================================
-Ifremer ANNEE. Données des campagnes de surveillance halieutique de l’Ifremer.
-http://www.ifremer.fr/SIH-indices-campagnes/ (JOUR MOIS).
+<h2>Citation de l'origine des données</h2>
-Conditions d'usage des données
-==============================
-L'Ifremer met les données des campagnes de surveillance halieutique conduites
+<p>Ifremer ${updateDate?string("yyyy")}. Données des campagnes de surveillance halieutique de l’Ifremer.
+http://www.ifremer.fr/SIH-indices-campagnes/ (${updateDate?string("dd MMMM")}).</p>
+
+<h2>Conditions d'usage des données</h2>
+
+<p>L'Ifremer met les données des campagnes de surveillance halieutique conduites
par l'institut en libre accès, mais :
-- l'interprétation et l'usage approprié de ces données sont de la seule
- responsabilité de leurs utilisateurs,
-- les utilisateurs des données ne doivent d'aucune façon impliquer l'Ifremer en
+<ul>
+<li>l'interprétation et l'usage approprié de ces données sont de la seule
+ responsabilité de leurs utilisateurs,</li>
+<li>les utilisateurs des données ne doivent d'aucune façon impliquer l'Ifremer en
tant que fournisseur de données dans leurs résultats, conclusions et/ou
- recommandations.
-- la source des données doit être dûment citée,
+ recommandations.</li>
+<li>la source des données doit être dûment citée,
- les utilisateurs de données doivent respecter toutes les restrictions
d'usage et de reproduction des données, incluant les restrictions pour un
- usage commercial,
-- les utilisateurs des données doivent informer l'Ifremer de tout problème
- soupçonné dans les données.
+ usage commercial,</li>
+<li>les utilisateurs des données doivent informer l'Ifremer de tout problème
+ soupçonné dans les données.</li>
+</ul>
+</p>
+</body>
+</html>
\ No newline at end of file
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 2011-01-19 09:42:39 UTC (rev 526)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2011-01-19 09:43:05 UTC (rev 527)
@@ -166,4 +166,18 @@
File file = webService.getMapFileAsPDF("Medits", "SPECIES1");
Assert.assertNotNull(file);
}
+
+ /**
+ * Test la simulation d'un téléchargement de données sources d'un projet.
+ *
+ * Generation du zip, freemarker, et pdf.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testGetSourceZip() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+ File file = webService.getSourceZip("testzone1", "fr");
+ Assert.assertNotNull(file);
+ }
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/IndexAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/IndexAction.java 2011-01-19 09:42:39 UTC (rev 526)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/IndexAction.java 2011-01-19 09:43:05 UTC (rev 527)
@@ -36,6 +36,8 @@
import com.opensymphony.xwork2.ActionSupport;
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
import fr.ifremer.coser.web.CoserWebConfig;
import fr.ifremer.coser.web.CoserWebException;
import fr.ifremer.coser.web.ServiceFactory;
@@ -79,35 +81,14 @@
@Override
public String execute() {
-
- CoserWebConfig config = ServiceFactory.getCoserConfig();
- File webProperties = config.getWebPropertiesFile();
- if (webProperties.isFile()) {
- // get update date
- Properties props = new Properties();
- InputStream stream = null;
- try {
- stream = new FileInputStream(webProperties);
- props.load(stream);
-
- if (props.containsKey("updateDate")) {
- String date = props.getProperty("updateDate");
- long time = Long.parseLong(date);
- dataUpdateDate = new Date(time);
- }
-
- } catch (IOException ex) {
- throw new CoserWebException("Can't save properties file", ex);
- }
- finally {
- IOUtils.closeQuietly(stream);
- }
+ WebService webService = ServiceFactory.getWebService();
+
+ try {
+ dataUpdateDate = webService.getLastDataUpdateDate();
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get last update date", ex);
}
-
- if (dataUpdateDate == null) {
- dataUpdateDate = new Date(0);
- }
return SUCCESS;
}
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 2011-01-19 09:42:39 UTC (rev 526)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java 2011-01-19 09:43:05 UTC (rev 527)
@@ -23,17 +23,9 @@
package fr.ifremer.coser.web.actions;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Date;
-import java.util.Properties;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;
@@ -112,8 +104,6 @@
WebService webService = ServiceFactory.getWebService();
try {
webService.registerNewUploadedResults(resultFile);
-
- updateDataProperties();
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't register new result file", ex);
}
@@ -136,33 +126,4 @@
return INPUT;
}
-
- /**
- * Met à jour certaines proprietes apres la mise à jour des données.
- */
- protected void updateDataProperties() {
-
- CoserWebConfig config = ServiceFactory.getCoserConfig();
- File webProperties = config.getWebPropertiesFile();
-
- Properties props = new Properties();
- InputStream iStream = null;
- OutputStream oStream = null;
- try {
- if (webProperties.isFile()) {
- iStream = new FileInputStream(webProperties);
- props.load(iStream);
- }
-
- props.setProperty("updateDate", String.valueOf(new Date().getTime()));
- oStream = new FileOutputStream(webProperties);
- props.store(oStream, "Update data");
- } catch (IOException ex) {
- throw new CoserWebException("Can't save properties file", ex);
- }
- finally {
- IOUtils.closeQuietly(iStream);
- IOUtils.closeQuietly(oStream);
- }
- }
}
1
0
r526 - trunk/coser-business/src/test/resources/web
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
by chatellier@users.labs.libre-entreprise.org 19 Jan '11
19 Jan '11
Author: chatellier
Date: 2011-01-19 09:42:39 +0000 (Wed, 19 Jan 2011)
New Revision: 526
Log:
Modification d'un resultat pour autoriser le t?\195?\169l?\195?\169chargement des donn?\195?\169es (test)
Modified:
trunk/coser-business/src/test/resources/web/upload2.zip
Modified: trunk/coser-business/src/test/resources/web/upload2.zip
===================================================================
(Binary files differ)
1
0
r525 - in trunk/coser-web/src/main: java/fr/ifremer/coser/web/actions/source resources/fr/ifremer/coser/web webapp/WEB-INF/content webapp/WEB-INF/content/com webapp/WEB-INF/content/pop webapp/WEB-INF/content/source webapp/js
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
18 Jan '11
Author: chatellier
Date: 2011-01-18 17:08:55 +0000 (Tue, 18 Jan 2011)
New Revision: 525
Log:
Source, pop, com.
Avvertissement qualit?\195?\169 avant t?\195?\169l?\195?\169chargement.
Added:
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceQualityAction.java
trunk/coser-web/src/main/webapp/WEB-INF/content/source/source-quality.jsp
Modified:
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/com/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/com/graph.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/graph.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/quality.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp
trunk/coser-web/src/main/webapp/js/coser.js
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceQualityAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceQualityAction.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceQualityAction.java 2011-01-18 17:08:55 UTC (rev 525)
@@ -0,0 +1,54 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 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%
+ */
+
+package fr.ifremer.coser.web.actions.source;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * Affiche l'avertissement qualité avant le téléchargement du zip.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class SourceQualityAction extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 3385467755357775199L;
+
+ protected String zone;
+
+ public String getZone() {
+ return zone;
+ }
+
+ public void setZone(String zone) {
+ this.zone = zone;
+ }
+
+ public String execute() {
+ return SUCCESS;
+ }
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceQualityAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-18 17:08:55 UTC (rev 525)
@@ -21,6 +21,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# #L%
###
+message.com.title=Indices de communaut\u00E9s
+message.com.paragraph1=Des indices de communaut\u00E9 sont calcul\u00E9s pour un ensemble d''esp\u00E8ces dans chaque s\u00E9rie. La liste des esp\u00E8ces incluses pour le calcul de chaque indice varie selon les donn\u00E9es disponibles pour la r\u00E9alisation des calculs.
message.layout.title=Populations and communities indices, resulting from Ifremer monitoring halieutics survey
message.layout.oceanicdatatitle=Gestion des donn\u00E9es des campagnes oc\u00E9anographiques
message.layout.oceanicdata1=le Syst\u00E8me d'informations scientifiques pour la mer de l'Ifremer (SISMER)
@@ -56,7 +58,15 @@
message.map.title=Cartes de distribution
message.map.warning=Warning
message.map.warningcontent=Les cartes pr\u00E9sent\u00E9es ne doivent pas \u00EAtre interpr\u00E9t\u00E9es comme des cartes de distribution des esp\u00E8ces mais comme celle des zones o\u00F9 elles sont captur\u00E9es lors des campagnes scientifiques. Les campagnes \u00E9tant r\u00E9alis\u00E9es avec des chaluts diff\u00E9rents et \u00E0 diff\u00E9rentes saisons, les esp\u00E8ces peuvent avoir des capturabilit\u00E9s tr\u00E8s diff\u00E9rentes entre les s\u00E9ries de campagnes, donc d''une zone \u00E0 l''autre.
+message.pop.title=Indices biologiques
+message.pop.paragraph1=Les indices pr\u00E9sent\u00E9s ont \u00E9t\u00E9 s\u00E9lectionn\u00E9s en r\u00E9f\u00E9rence \u00E0 leur aptitude \u00E0 renseigner sur l''impact de la p\u00EAche, en vue de leur int\u00E9gration dans des tableaux de bord d\u2019indicateurs d''\u00E9volution d''\u00E9cosyst\u00E8mes exploit\u00E9s par la p\u00EAche.
+message.pop.paragraph2=Les donn\u00E9es disponibles sur le site sont les valeurs de chaque indice. Les informations ont \u00E9t\u00E9 valid\u00E9es par un groupe de travail dans une approche int\u00E9grative d\u2019indicateurs de populations et de communaut\u00E9s. Les r\u00E9sultats sont donn\u00E9s par zone g\u00E9ographique et par esp\u00E8ce pour l''ensemble de la s\u00E9rie de donn\u00E9es disponible. L''utilisateur peut s\u00E9lectionner la zone g\u00E9ographique, la saison (dans le cas de s\u00E9ries saisonni\u00E8res), l''esp\u00E8ce et l''indice. Pour les s\u00E9lections pour lesquelles une information est disponible, le syst\u00E8me produit un graphe pr\u00E9sentant la distribution temporelle de l''indice, avec une repr\u00E9sentation de l''\u00E9cart-type. Il fournit la possibilit\u00E9 d\u2019extraire la table des donn\u00E9es correspondantes, incluant la valeur de l\u2019indice par ann\u00E9e, ainsi que son \u00E9cart-type et son coefficient de variation.
message.source.download=Download
+message.source.title=Donn\u00E9es source
+message.source.paragraph1=Les donn\u00E9es Source sont pr\u00E9sent\u00E9es selon quatre tables fournissant des informations de base \u00E9lev\u00E9es \u00E0 l''op\u00E9ration d''\u00E9chantillonnage (en g\u00E9n\u00E9ral un trait de chalut) et organis\u00E9es selon des unit\u00E9s g\u00E9ographiques d\u00E9finies en relation avec le plan d''\u00E9chantillonnage. Une table suppl\u00E9mentaire pr\u00E9sente le r\u00E9f\u00E9rentiel taxinomique associ\u00E9 aux donn\u00E9es.
+message.source.paragraph2=Le site ne contient des donn\u00E9es Source que pour une partie des s\u00E9ries de campagnes pour lesquelles des indices de populations et de communaut\u00E9s sont pr\u00E9sent\u00E9s. Pour un acc\u00E8s aux autres s\u00E9ries de donn\u00E9es de base, il convient de contacter l''administrateur du Syst\u00E8me d''informations halieutiques de l''Ifremer ({0}).
+message.source.paragraph3=Les donn\u00E9es de campagnes halieutiques sont constitu\u00E9es \u00E0 partir de stations d''\u00E9chantillonnage r\u00E9parties dans l''espace selon le principe de tirage stratifi\u00E9. La granularit\u00E9 des donn\u00E9es conditionne la partition g\u00E9ographique selon laquelle les indices de population et de communaut\u00E9 peuvent \u00EAtre \u00E9tablis.
+message.source.paragraph4=Les plans de zonage propos\u00E9s incluent le plan de r\u00E9f\u00E9rence correspondant au plan d''\u00E9chantillonnage, ainsi que des adaptations pour tenir compte des limites des sous-r\u00E9gions d\u00E9finies par la strat\u00E9gie marine europ\u00E9enne. Ils ont \u00E9t\u00E9 valid\u00E9s par un groupe de travail de l''Ifremer, apr\u00E8s exploration de la sensibilit\u00E9 de divers indices aux ajustements propos\u00E9s.
message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
message.survey.paragraph2=Depuis une vingtaine d''ann\u00E9es, l''Ifremer organise des campagnes de p\u00EAche scientifique en mer du Nord, en Manche, en Atlantique et en M\u00E9diterran\u00E9e concernant les ressources d\u00E9mersales et benthiques. L''objectif prioritaire est de produire des indices d''abondance des principales esp\u00E8ces commerciales. Elles recueillent \u00E9galement des donn\u00E9es sur les esp\u00E8ces captur\u00E9es non commerciales. Elles contribuent ainsi aux connaissances n\u00E9cessaires au d\u00E9veloppement de l''approche \u00E9cosyst\u00E9mique des p\u00EAches, notamment dans le cadre de la politique commune des p\u00EAches et plus largement de la strat\u00E9gie marine de l''Union europ\u00E9enne.
@@ -119,8 +129,11 @@
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.quality.title=Avertissement Qualit\u00E9
message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
message.quality.paragraph3=Une propri\u00E9t\u00E9 commune aux s\u00E9ries d''observations \u00E0 la mer est l''\u00E9volution dans le temps de la comp\u00E9tence des \u00E9quipes embarqu\u00E9es pour la d\u00E9termination des esp\u00E8ces. Il peut en r\u00E9sulter des apparitions, des disparitions ou des assignations sous un m\u00EAme nom de taxons proches dans les jeux de donn\u00E9es, non repr\u00E9sentatifs de l''\u00E9volution des populations concern\u00E9es dans l''\u00E9cosyst\u00E8me.
-message.quality.paragraph4=Pour les campagnes d\'une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
+message.quality.paragraph4=Pour les campagnes d''une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
message.quality.paragraph5=Il est vivement recommand\u00E9 aux utilisateurs de donn\u00E9es de les traiter avec pr\u00E9caution. Si des utilisateurs s''interrogent sur la validit\u00E9 de donn\u00E9es, ils sont invit\u00E9s \u00E0 contacter l''administrateur de la base de donn\u00E9es ({0}).
+message.quality.acceptance=Je reconnais avoir pris connaissance des documents et des restrictions associ\u00E9es et je m'''engage \u00E0 citer la source des donn\u00E9es.
+message.quality.notaccepted=Vous devez valider les conditions Avertissement Qualit\u00E9 !
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 17:08:55 UTC (rev 525)
@@ -21,7 +21,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# #L%
###
-message.layout.title=Indices de populations et de communauté issus des campagnes de surveillance halieutique de l''Ifremer
+message.com.title=Indices de communaut\u00E9s
+message.com.paragraph1=Des indices de communaut\u00E9 sont calcul\u00E9s pour un ensemble d''esp\u00E8ces dans chaque s\u00E9rie. La liste des esp\u00E8ces incluses pour le calcul de chaque indice varie selon les donn\u00E9es disponibles pour la r\u00E9alisation des calculs.
+message.layout.title=Indices de populations et de communaut\u00E9s issus des campagnes de surveillance halieutique de l''Ifremer
message.layout.oceanicdatatitle=Gestion des donn\u00E9es des campagnes oc\u00E9anographiques
message.layout.oceanicdata1=le Syst\u00E8me d'informations scientifiques pour la mer de l'Ifremer (SISMER)
message.layout.oceanicdata2=le Syst\u00E8me d'information halieutique de l'Ifremer (SIH)
@@ -56,7 +58,16 @@
message.map.title=Cartes de distribution
message.map.warning=Avertissement
message.map.warningcontent=Les cartes pr\u00E9sent\u00E9es ne doivent pas \u00EAtre interpr\u00E9t\u00E9es comme des cartes de distribution des esp\u00E8ces mais comme celle des zones o\u00F9 elles sont captur\u00E9es lors des campagnes scientifiques. Les campagnes \u00E9tant r\u00E9alis\u00E9es avec des chaluts diff\u00E9rents et \u00E0 diff\u00E9rentes saisons, les esp\u00E8ces peuvent avoir des capturabilit\u00E9s tr\u00E8s diff\u00E9rentes entre les s\u00E9ries de campagnes, donc d''une zone \u00E0 l''autre.
+message.pop.title=Indices biologiques
+message.pop.paragraph1=Les indices pr\u00E9sent\u00E9s ont \u00E9t\u00E9 s\u00E9lectionn\u00E9s en r\u00E9f\u00E9rence \u00E0 leur aptitude \u00E0 renseigner sur l''impact de la p\u00EAche, en vue de leur int\u00E9gration dans des tableaux de bord d\u2019indicateurs d''\u00E9volution d''\u00E9cosyst\u00E8mes exploit\u00E9s par la p\u00EAche.
+message.pop.paragraph2=Les donn\u00E9es disponibles sur le site sont les valeurs de chaque indice. Les informations ont \u00E9t\u00E9 valid\u00E9es par un groupe de travail dans une approche int\u00E9grative d\u2019indicateurs de populations et de communaut\u00E9s. Les r\u00E9sultats sont donn\u00E9s par zone g\u00E9ographique et par esp\u00E8ce pour l''ensemble de la s\u00E9rie de donn\u00E9es disponible. L''utilisateur peut s\u00E9lectionner la zone g\u00E9ographique, la saison (dans le cas de s\u00E9ries saisonni\u00E8res), l''esp\u00E8ce et l''indice. Pour les s\u00E9lections pour lesquelles une information est disponible, le syst\u00E8me produit un graphe pr\u00E9sentant la distribution temporelle de l''indice, avec une repr\u00E9sentation de l''\u00E9cart-type. Il fournit la possibilit\u00E9 d\u2019extraire la table des donn\u00E9es correspondantes, incluant la valeur de l\u2019indice par ann\u00E9e, ainsi que son \u00E9cart-type et son coefficient de variation.
message.source.download=T\u00E9l\u00E9charger
+message.source.title=Donn\u00E9es source
+message.source.title=Donn\u00E9es source
+message.source.paragraph1=Les donn\u00E9es Source sont pr\u00E9sent\u00E9es selon quatre tables fournissant des informations de base \u00E9lev\u00E9es \u00E0 l''op\u00E9ration d''\u00E9chantillonnage (en g\u00E9n\u00E9ral un trait de chalut) et organis\u00E9es selon des unit\u00E9s g\u00E9ographiques d\u00E9finies en relation avec le plan d''\u00E9chantillonnage. Une table suppl\u00E9mentaire pr\u00E9sente le r\u00E9f\u00E9rentiel taxinomique associ\u00E9 aux donn\u00E9es.
+message.source.paragraph2=Le site ne contient des donn\u00E9es Source que pour une partie des s\u00E9ries de campagnes pour lesquelles des indices de populations et de communaut\u00E9s sont pr\u00E9sent\u00E9s. Pour un acc\u00E8s aux autres s\u00E9ries de donn\u00E9es de base, il convient de contacter l''administrateur du Syst\u00E8me d''informations halieutiques de l''Ifremer ({0}).
+message.source.paragraph3=Les donn\u00E9es de campagnes halieutiques sont constitu\u00E9es \u00E0 partir de stations d''\u00E9chantillonnage r\u00E9parties dans l''espace selon le principe de tirage stratifi\u00E9. La granularit\u00E9 des donn\u00E9es conditionne la partition g\u00E9ographique selon laquelle les indices de population et de communaut\u00E9 peuvent \u00EAtre \u00E9tablis.
+message.source.paragraph4=Les plans de zonage propos\u00E9s incluent le plan de r\u00E9f\u00E9rence correspondant au plan d''\u00E9chantillonnage, ainsi que des adaptations pour tenir compte des limites des sous-r\u00E9gions d\u00E9finies par la strat\u00E9gie marine europ\u00E9enne. Ils ont \u00E9t\u00E9 valid\u00E9s par un groupe de travail de l''Ifremer, apr\u00E8s exploration de la sensibilit\u00E9 de divers indices aux ajustements propos\u00E9s.
message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
message.survey.paragraph2=Depuis une vingtaine d''ann\u00E9es, l''Ifremer organise des campagnes de p\u00EAche scientifique en mer du Nord, en Manche, en Atlantique et en M\u00E9diterran\u00E9e concernant les ressources d\u00E9mersales et benthiques. L''objectif prioritaire est de produire des indices d''abondance des principales esp\u00E8ces commerciales. Elles recueillent \u00E9galement des donn\u00E9es sur les esp\u00E8ces captur\u00E9es non commerciales. Elles contribuent ainsi aux connaissances n\u00E9cessaires au d\u00E9veloppement de l''approche \u00E9cosyst\u00E9mique des p\u00EAches, notamment dans le cadre de la politique commune des p\u00EAches et plus largement de la strat\u00E9gie marine de l''Union europ\u00E9enne.
@@ -119,8 +130,11 @@
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.quality.title=Avertissement Qualit\u00E9
message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
message.quality.paragraph3=Une propri\u00E9t\u00E9 commune aux s\u00E9ries d''observations \u00E0 la mer est l''\u00E9volution dans le temps de la comp\u00E9tence des \u00E9quipes embarqu\u00E9es pour la d\u00E9termination des esp\u00E8ces. Il peut en r\u00E9sulter des apparitions, des disparitions ou des assignations sous un m\u00EAme nom de taxons proches dans les jeux de donn\u00E9es, non repr\u00E9sentatifs de l''\u00E9volution des populations concern\u00E9es dans l''\u00E9cosyst\u00E8me.
-message.quality.paragraph4=Pour les campagnes d\'une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
+message.quality.paragraph4=Pour les campagnes d''une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
message.quality.paragraph5=Il est vivement recommand\u00E9 aux utilisateurs de donn\u00E9es de les traiter avec pr\u00E9caution. Si des utilisateurs s''interrogent sur la validit\u00E9 de donn\u00E9es, ils sont invit\u00E9s \u00E0 contacter l''administrateur de la base de donn\u00E9es ({0}).
+message.quality.acceptance=Je reconnais avoir pris connaissance des documents et des restrictions associ\u00E9es et je m'''engage \u00E0 citer la source des donn\u00E9es.
+message.quality.notaccepted=Vous devez valider les conditions Avertissement Qualit\u00E9 !
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/facade.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/facade.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -26,10 +26,12 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.com.title" /></title>
</head>
<body>
+ <h2><s:text name="message.com.title" /></h2>
+
<img src="<s:url value='/images/zonesmap.jpg' />" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/graph.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/graph.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/graph.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -24,13 +24,16 @@
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
-
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.com.title" /></title>
</head>
<body>
+ <h2><s:text name="message.com.title" /></h2>
+
+ <p><s:text name="message.com.paragraph1" /></p>
+
<img src="<s:url action='graph-data'>
<s:param name="zone" value="%{zone}" />
<s:param name="indicator" value="%{indicator}" />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -24,12 +24,14 @@
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
-
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.com.title" /></title>
</head>
<body>
+
+ <h2><s:text name="message.com.title" /></h2>
+
<img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -26,10 +26,12 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.com.title" /></title>
</head>
<body>
+ <h2><s:text name="message.com.title" /></h2>
+
<!-- utilisé dynamiquement par le script JS -->
<s:iterator value="zonesPictures.entrySet()">
<div id="coserzonemap<s:property value='%{key}' />" style="display:none">
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/facade.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/facade.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -26,10 +26,12 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.pop.title" /></title>
</head>
<body>
+ <h2><s:text name="message.pop.title" /></h2>
+
<img src="<s:url value='/images/zonesmap.jpg' />" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/graph.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/graph.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/graph.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -27,10 +27,15 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.pop.title" /></title>
</head>
<body>
+ <h2><s:text name="message.pop.title" /></h2>
+
+ <p><s:text name="message.pop.paragraph1" /></p>
+ <p><s:text name="message.pop.paragraph2" /></p>
+
<img src="<s:url action='graph-data'>
<s:param name="zone" value="%{zone}" />
<s:param name="species" value="%{species}" />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -27,10 +27,12 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.pop.title" /></title>
</head>
<body>
+ <h2><s:text name="message.pop.title" /></h2>
+
<img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -27,10 +27,12 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.pop.title" /></title>
</head>
<body>
+ <h2><s:text name="message.pop.title" /></h2>
+
<img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -26,10 +26,12 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.pop.title" /></title>
</head>
<body>
+ <h2><s:text name="message.pop.title" /></h2>
+
<!-- utilisé dynamiquement par le script JS -->
<s:iterator value="zonesPictures.entrySet()">
<div id="coserzonemap<s:property value='%{key}' />" style="display:none">
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/quality.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/quality.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/quality.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -30,9 +30,7 @@
</head>
<body>
- <div class="maintitle">
- <s:text name="message.quality.title" />
- </div>
+ <h2><s:text name="message.quality.title" /></h2>
<p><s:text name="message.quality.paragraph1" /></p>
<ul>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -26,11 +26,12 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.source.title" /></title>
</head>
<body>
-
+ <h2><s:text name="message.source.title" /></h2>
+
<img src="<s:url value='/images/zonesmap.jpg' />" />
<br />
Added: trunk/coser-web/src/main/webapp/WEB-INF/content/source/source-quality.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/source-quality.jsp (rev 0)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/source-quality.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -0,0 +1,59 @@
+<!--
+ #%L
+ Coser :: Web
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2010 - 2011 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%
+ -->
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<%@taglib uri="/struts-tags" prefix="s" %>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title><s:text name="message.source.title" /></title>
+ </head>
+ <body>
+
+ <h2><s:text name="message.source.title" /></h2>
+
+ <h3><s:text name="message.quality.title" /></h3>
+
+ <p><s:text name="message.quality.paragraph1" /></p>
+ <ul>
+ <li><s:text name="message.quality.paragraph2" /></li>
+ <li><s:text name="message.quality.paragraph3" /></li>
+ <li><s:text name="message.quality.paragraph4" /></li>
+ </ul>
+ <p>
+ <s:text name="message.quality.paragraph5">
+ <s:param value="adminEmail"/>
+ </s:text>
+ </p>
+
+ <p>
+ <input type="checkbox" id="coserResultCondition" />
+ <s:text name="message.quality.acceptance" />
+ </p>
+
+ <s:a action="source-data" onclick="return coserCheckConditionAcceptance('coserResultCondition', '%{getText('message.quality.notaccepted')}')">
+ <s:param name="zone" value="%{zone}" />
+ <s:text name="message.source.download"></s:text>
+ </s:a>.
+ </body>
+</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -26,13 +26,25 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.source.title" /></title>
</head>
<body>
+ <h2><s:text name="message.source.title" /></h2>
+
+ <p><s:text name="message.source.paragraph1" /></p>
+ <p>
+ <s:text name="message.source.paragraph2">
+ <s:param><a href="mailto:harmonie at ifremer.fr">harmonie at ifremer.fr</a></s:param>
+ </s:text>
+ </p>
+
+ <p><s:text name="message.source.paragraph3" /></p>
+ <p><s:text name="message.source.paragraph4" /></p>
+
<img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
- <s:a action="source-data">
+ <s:a action="source-quality">
<s:param name="zone" value="%{zone}" />
<s:text name="message.source.download"></s:text>
</s:a>.
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp 2011-01-18 17:08:55 UTC (rev 525)
@@ -26,10 +26,12 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.source.title" /></title>
</head>
<body>
+ <h2><s:text name="message.source.title" /></h2>
+
<!-- utilisé dynamiquement par le script JS -->
<s:iterator value="zonesPictures.entrySet()">
<div id="coserzonemap<s:property value='%{key}' />" style="display:none">
Modified: trunk/coser-web/src/main/webapp/js/coser.js
===================================================================
--- trunk/coser-web/src/main/webapp/js/coser.js 2011-01-18 15:46:06 UTC (rev 524)
+++ trunk/coser-web/src/main/webapp/js/coser.js 2011-01-18 17:08:55 UTC (rev 525)
@@ -1,7 +1,17 @@
-
+// affiche la carte correspondant à la selection dans la liste
function coserShowSelectedZoneMap(select, prefix) {
// cache toutes les autres cartes
$('div[id^=' + prefix + ']').hide();
// affiche la carte selectionnee
$('#' + prefix + $(select).val()).show();
+}
+
+// affiche un message si l'utilsateur n'a pas validé les conditions
+function coserCheckConditionAcceptance(checkboxid, message) {
+ var result = true;
+ if (!$('#' + checkboxid).attr('checked')) {
+ window.alert(message);
+ result = false;
+ }
+ return result;
}
\ No newline at end of file
1
0
r524 - trunk/coser-web/src/main/resources/fr/ifremer/coser/web
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
18 Jan '11
Author: chatellier
Date: 2011-01-18 15:46:06 +0000 (Tue, 18 Jan 2011)
New Revision: 524
Log:
Encoding fix
Modified:
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 15:44:04 UTC (rev 523)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 15:46:06 UTC (rev 524)
@@ -60,7 +60,7 @@
message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
message.survey.paragraph2=Depuis une vingtaine d''ann\u00E9es, l''Ifremer organise des campagnes de p\u00EAche scientifique en mer du Nord, en Manche, en Atlantique et en M\u00E9diterran\u00E9e concernant les ressources d\u00E9mersales et benthiques. L''objectif prioritaire est de produire des indices d''abondance des principales esp\u00E8ces commerciales. Elles recueillent \u00E9galement des donn\u00E9es sur les esp\u00E8ces captur\u00E9es non commerciales. Elles contribuent ainsi aux connaissances n\u00E9cessaires au d\u00E9veloppement de l''approche \u00E9cosyst\u00E9mique des p\u00EAches, notamment dans le cadre de la politique commune des p\u00EAches et plus largement de la strat\u00E9gie marine de l''Union europ\u00E9enne.
-message.survey.dataengintitle=Diff\u00E9rents engins d''\u00E9chantillonnage sont utilis\u00E9s :
+message.survey.dataengintitle=Diff\u00E9rents engins d''\u00E9chantillonnage sont utilis\u00E9s :
message.survey.dataenginfond=Un chalut de fond \u00E0 grande ouverture verticale pour l''observation des ressources d\u00E9mersales, 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 \u00E0 perche pour les zones tr\u00E8s c\u00F4ti\u00E8res et les estuaires lors des campagnes visant les juv\u00E9niles de poissons plats : baies de Somme et de Vilaine,
message.survey.dataengincasier=Un \u00E9chantillonnage au casier pour les campagnes d''\u00E9valuation des grands crustac\u00E9s, en particulier le homard, aux abords du cap de Flamanville.
@@ -73,8 +73,8 @@
message.survey.merdunord.sudmerdunord=Sud mer du Nord
message.survey.merdunord.sudmerdunord.desc=Contribution fran\u00E7aise d''un mois \u00E0 la campagne internationale IBTS (International Bottom Trawl Survey) au premier trimestre, tous les ans depuis 1980, au chalut de fond \u00E0 grande ouverture verticale. En moyenne, le navire fran\u00E7ais fait 58 chalutages par an. Le sud de la mer du Nord est couvert par 4 navires (fran\u00E7ais, belge, danois et allemand) qui r\u00E9alisent 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\u00E9sentative des 678\u00A0000\u00A0km\u00B2 de la zone.
message.survey.merdunord.sudmerdunord.plus=Pour en savoir plus sur les campagnes IBTS
-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.ibts6=Manuel des protocoles IBTS - R\u00E9vision VI (1999)
+message.survey.merdunord.sudmerdunord.ibts7=Manuel des protocoles IBTS - R\u00E9vision VII (2004)
message.survey.mancheorientale=Fa\u00E7ade Manche orientale
message.survey.mancheorientale.mancheorientale=Manche orientale
message.survey.mancheorientale.mancheorientale.desc=Campagne fran\u00E7aise CGFS (Channel Ground Fish Survey) d''un mois en octobre, coordonn\u00E9e 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 \u00E0 grande ouverture verticale, sont r\u00E9alis\u00E9s. Chaque trait couvre une surface d''environ 0,03 km\u00B2. Cette campagne est repr\u00E9sentative des 70 748 km\u00B2 de la Manche orientale.
1
0