Author: chatellier
Date: 2011-01-24 17:08:51 +0000 (Mon, 24 Jan 2011)
New Revision: 556
Log:
Manage graph units and graph scale * 1000, * 1000000
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
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-24 17:07:12 UTC (rev 555)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2011-01-24 17:08:51 UTC (rev 556)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 Codelutin, Chatellier Eric
+ * 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 Lesser General Public License as
@@ -27,6 +27,7 @@
import static org.nuiton.i18n.I18n._;
+import java.awt.Color;
import java.awt.Shape;
import java.io.File;
import java.io.IOException;
@@ -657,11 +658,12 @@
* @param rsufiResult rsufiresult
* @param indicator indicator
* @param indicatorName indicatorName localized
+ * @param unit data unit
* @return generated graph image (temp file)
* @throws CoserBusinessException
*/
public File getRsufiResultComChart(Project project, File resultDirectory,
- RSufiResult rsufiResult, String indicator, String indicatorName) throws CoserBusinessException {
+ RSufiResult rsufiResult, String indicator, String indicatorName, String unit) throws CoserBusinessException {
File result = null;
@@ -675,6 +677,7 @@
// Campagne Indicateur Liste Strate Annee Estimation EcartType CV
DataStorage dataStorage = importService.loadCSVFile(estComIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
+ int multiplicator = 1;
int minYear = Integer.MAX_VALUE;
int maxYear = Integer.MIN_VALUE;
Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>();
@@ -695,6 +698,15 @@
maxYear = year;
}
graphData.put(year, new Double[]{estimation, ecart});
+
+ // si les données sont énormes, on affiche les données
+ // / multiplicator et on le mentionne dans la légende
+ if (estimation > 1e9) {
+ multiplicator = 1000000;
+ }
+ if (estimation > 1e6 && multiplicator < 1000000) {
+ multiplicator = 1000;
+ }
}
}
@@ -703,7 +715,9 @@
for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
Double[] entry = graphData.get(indexYear);
if (entry != null) {
- statisticalDataset.add(entry[0], entry[1], "Serie1", (Comparable)indexYear);
+ Double estimation = entry[0] / multiplicator;
+ Double ecart = entry[1] / multiplicator;
+ statisticalDataset.add(estimation, ecart, "Serie1", (Comparable)indexYear);
}
else {
statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
@@ -715,7 +729,15 @@
categoryAxis.setCategoryMargin(0);
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
// label horizontaux
- ValueAxis valueAxis = new NumberAxis(indicatorName);
+ String legendY = indicatorName;
+ if (multiplicator != 1) {
+ // affiche par exemple : cm * 1000
+ legendY += " (" + unit + "*" + multiplicator + ")";
+ }
+ else if (StringUtils.isNotEmpty(unit)) {
+ legendY += " (" + unit + ")";
+ }
+ ValueAxis valueAxis = new NumberAxis(legendY);
valueAxis.setUpperMargin(0.1);
CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
@@ -732,6 +754,8 @@
// remove series legend
chart.removeLegend();
+ // white background
+ chart.setBackgroundPaint(Color.WHITE);
try {
result = File.createTempFile("coser-", ".chart");
@@ -753,11 +777,12 @@
* @param species species
* @param indicator indicator
* @param indicatorName indicatorName localized
+ * @param unit data unit
* @return generated image file (temp file)
* @throws CoserBusinessException
*/
public File getRsufiResultPopChart(Project project, File resultDirectory,
- RSufiResult rsufiResult, String species, String indicator, String indicatorName) throws CoserBusinessException {
+ RSufiResult rsufiResult, String species, String indicator, String indicatorName, String unit) throws CoserBusinessException {
File result = null;
@@ -772,6 +797,7 @@
// Campagne Indicateur Liste Species Strate Annee Estimation EcartType CV
DataStorage dataStorage = importService.loadCSVFile(estPopIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
+ int multiplicator = 1;
int minYear = Integer.MAX_VALUE;
int maxYear = Integer.MIN_VALUE;
Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>();
@@ -793,6 +819,15 @@
maxYear = year;
}
graphData.put(year, new Double[]{estimation, ecart});
+
+ // si les données sont énormes, on affiche les données
+ // / multiplicator et on le mentionne dans la légende
+ if (estimation > 1e9) {
+ multiplicator = 1000000;
+ }
+ if (estimation > 1e6 && multiplicator < 1000000) {
+ multiplicator = 1000;
+ }
}
}
@@ -801,7 +836,9 @@
for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
Double[] entry = graphData.get(indexYear);
if (entry != null) {
- statisticalDataset.add(entry[0], entry[1], "Serie1", (Comparable)indexYear);
+ Double estimation = entry[0] / multiplicator;
+ Double ecart = entry[1] / multiplicator;
+ statisticalDataset.add(estimation, ecart, "Serie1", (Comparable)indexYear);
}
else {
statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
@@ -813,7 +850,15 @@
categoryAxis.setCategoryMargin(0);
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
// label horizontaux
- ValueAxis valueAxis = new NumberAxis(indicatorName);
+ String legendY = indicatorName;
+ if (multiplicator != 1) {
+ // affiche par exemple : cm * 1000
+ legendY += " (" + unit + "*" + multiplicator + ")";
+ }
+ else if (StringUtils.isNotEmpty(unit)) {
+ legendY += " (" + unit + ")";
+ }
+ ValueAxis valueAxis = new NumberAxis(legendY);
valueAxis.setUpperMargin(0.1);
CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
@@ -830,6 +875,8 @@
// remove series legend
chart.removeLegend();
+ // white background
+ chart.setBackgroundPaint(Color.WHITE);
try {
result = File.createTempFile("coser-", ".chart");
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-24 17:07:12 UTC (rev 555)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-24 17:08:51 UTC (rev 556)
@@ -126,7 +126,7 @@
protected PublicationService publicationService;
- /** Indicator map (id, locale > translation) (etat du service). */
+ /** Indicator map (id, locale > translation, id, "unit" > unit) (etat du service). */
protected MultiKeyMap indicatorsMap;
/** Zones map (etat du service). */
@@ -171,10 +171,11 @@
DataStorage indicatorsStorage = importService.loadCSVFile(indicatorsFile);
Iterator<String[]> iteratorInd = indicatorsStorage.iterator(true);
while (iteratorInd.hasNext()) {
- // "id";"label_fr";"label_en"
+ // "id";"label_fr";"label_en";"unit"
String[] indicator = iteratorInd.next();
indicatorsMap.put(indicator[0], "fr", indicator[1]);
indicatorsMap.put(indicator[0], "en", indicator[2]);
+ indicatorsMap.put(indicator[0], "unit", indicator[3]);
}
}
@@ -615,13 +616,13 @@
|| currentPathName.startsWith(resultPath);
// cas ou les données sources ne doivent pas être exporter
- // condition sur les nom de fichier ?
+ // condition sur les noms de fichiers ?
if (!exportWithData) {
String fileName = pathname.getName();
- // on exclu tout les fichiers qui commence
- // par les meme nom de fichier que ceux du projet
- // (les noms de fichier sont personnalisable)
+ // on exclu tout les fichiers qui commencent
+ // par les memes noms de fichiers que ceux du projet
+ // (les noms de fichiers sont personnalisables)
for (Category category : Category.values()) {
if (category.isDataCategory()) {
String sourceFileName = projectService.getDataStorageFileName(project, category, null);
@@ -649,8 +650,8 @@
* Le nouveau fichier uploadé est mergé avec l'ancien, c'est à dire:
* <ul>
* <li>dezipage dans un fichier temporaire
- * <li>recuperation des noms de zones des nouveau fichiers
- * <li>suppression dans l'ancien répertoire des resultats deja presents dans le nouveau (pour les conflits zone-type : map/non map)
+ * <li>recuperation des noms de zones des nouveau fichiers (par type, carte/indicateur)
+ * <li>suppression dans l'ancien répertoire des resultats deja presents dans le nouveau (pour les conflits zone)
* <li>suppression des selections vides
* <li>suppression des projets vides
* <li>copie (avec ecrasement) des nouveaux fichiers dans l'ancien répertoire
@@ -662,21 +663,31 @@
public void registerNewUploadedResults(File archiveFile) throws CoserBusinessException {
try {
- File projectsDirectory = config.getWebProjectsDirectory();
// dezipage dans un fichier temporaire
File tempDirectory = FileUtil.createTempDirectory("coser", ".tmp");
ZipUtil.uncompress(archiveFile, tempDirectory);
- // recuperation des noms zone/souszone-campagne des nouveau fichiers
- List<String> newResultIds = getResultIds(tempDirectory);
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
+ // recuperation des noms zone des nouveau fichiers
+ List<String> indicatorsResultZoneIds = getZonesIds(tempDirectory, false);
+ // suppression dans l'ancien répertoire des resultat deja present
+ // dans le nouveau (pour les conflits)
+ cleanCurrentProjectDirectory(projectsDirectory, indicatorsResultZoneIds);
+ // copie (avec ecrasement) des nouveaux fichiers dans l'ancien répertoire
+ FileUtils.copyDirectory(tempDirectory, projectsDirectory);
+
+ File mapsDirectory = config.getWebMapsProjectsDirectory();
+ // recuperation des noms zone des nouveau fichiers
+ List<String> mapsResultZoneIds = getZonesIds(tempDirectory, true);
// suppression dans l'ancien répertoire des resultat deja present
// dans le nouveau (pour les conflits)
- cleanCurrentProjectDirectory(projectsDirectory, newResultIds);
+ cleanCurrentProjectDirectory(mapsDirectory, mapsResultZoneIds);
+ // copie (avec ecrasement) des nouveaux fichiers dans l'ancien répertoire
+ FileUtils.copyDirectory(tempDirectory, mapsDirectory);
- // copie (avec ecrasement) des nouveaux fichiers dans l'ancien répertoire
- FileUtils.copyDirectory(tempDirectory, projectsDirectory);
+
FileUtils.deleteDirectory(tempDirectory);
if (log.isInfoEnabled()) {
@@ -763,14 +774,14 @@
}
/**
- * Recupere dans un repertoire donné, les resultid des resultat (zone /
- * sous-zone-campagne)
+ * Recupere dans un repertoire donné, les zoneid des resultat.
*
* @param scanDirectory le repertoire a scanner
+ * @param mapResults if true get only map result (otherwise, get indicator results)
* @return la liste des resultid
* @throws CoserBusinessException
*/
- protected List<String> getResultIds(File scanDirectory) throws CoserBusinessException {
+ protected List<String> getZonesIds(File scanDirectory, boolean mapResults) throws CoserBusinessException {
List<String> resultIds = new ArrayList<String>();
File[] projectFiles = scanDirectory.listFiles();
@@ -790,9 +801,14 @@
for (File resultFile : resultFiles) {
if (resultFile.isDirectory()) {
RSufiResult rsufiResult = projectService.getRSufiResult(resultFile);
- String resultResultId = rsufiResult.getZone();
- if (StringUtils.isNotBlank(resultResultId)) {
- resultIds.add(resultResultId);
+
+ // return result depending on result type
+ if ( (mapResults && rsufiResult.isMapsResult()) ||
+ (!mapResults && rsufiResult.isIndicatorsResult())) {
+ String resultResultId = rsufiResult.getZone();
+ if (StringUtils.isNotBlank(resultResultId)) {
+ resultIds.add(resultResultId);
+ }
}
}
}
@@ -943,7 +959,7 @@
}
// get survey names in subZones collection
- File[] projectFiles = config.getWebProjectsDirectory().listFiles();
+ File[] projectFiles = config.getWebIndicatorsProjectsDirectory().listFiles();
// project iteration
if (projectFiles != null) {
@@ -1065,7 +1081,7 @@
Map<String, String> result = new TreeMap<String, String>();
// parcours des resultats disponibles
- File projectsDirectory = config.getWebProjectsDirectory();
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
File[] projectFiles = projectsDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {
@@ -1123,7 +1139,7 @@
Map<String, String> result = new TreeMap<String, String>();
// parcours des resultats disponibles
- File projectsDirectory = config.getWebProjectsDirectory();
+ File projectsDirectory = config.getWebMapsProjectsDirectory();
File[] projectFiles = projectsDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {
@@ -1245,7 +1261,7 @@
Map<String, String> indicators = new TreeMap<String, String>();
// parcours des resultats disponibles
- File projectsDirectory = config.getWebProjectsDirectory();
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
File[] projectFiles = projectsDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {
@@ -1388,7 +1404,7 @@
File result = null;
// parcours des resultats disponibles
- File projectsDirectory = config.getWebProjectsDirectory();
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
File[] projectFiles = projectsDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {
@@ -1415,14 +1431,15 @@
// load project (without data to get reftax data)
Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
String indicatorName = (String)getIndicatorsMap().get(indicator, locale);
+ String unit = (String)getIndicatorsMap().get(indicator, "unit");
if (species == null) {
// title = surveyName - indicateur
- result = publicationService.getRsufiResultComChart(project, resultFile, rsufiResult, indicator, indicatorName);
+ result = publicationService.getRsufiResultComChart(project, resultFile, rsufiResult, indicator, indicatorName, unit);
}
else {
// title = surveyName - indicateur - species
- result = publicationService.getRsufiResultPopChart(project, resultFile, rsufiResult, species, indicator, indicatorName);
+ result = publicationService.getRsufiResultPopChart(project, resultFile, rsufiResult, species, indicator, indicatorName, unit);
}
break;
}
@@ -1454,7 +1471,7 @@
File result = null;
// parcours des resultats disponibles
- File projectsDirectory = config.getWebProjectsDirectory();
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
File[] projectFiles = projectsDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {
@@ -1486,7 +1503,7 @@
//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);
+ //File metaFile = generateMetaFilePDF(project, resultFile, rsufiResult, indicator, locale);
}
else {
// title = surveyName - indicateur - species
@@ -1511,8 +1528,11 @@
* Recupere le fichier image de la carte demandées en fonction de la zone
* et de l'espece.
*
+ * Retourne également la repartition globale sur la zone si le nom de
+ * l'espece est {@code null}.
+ *
* @param survey survey (surveyid)
- * @param species
+ * @param species species or (null to get <survey>_Repartition-stations.png map file)
* @return map file
* @throws CoserBusinessException
*/
@@ -1521,7 +1541,7 @@
File result = null;
// parcours des resultats disponibles
- File projectsDirectory = config.getWebProjectsDirectory();
+ File projectsDirectory = config.getWebMapsProjectsDirectory();
File[] projectFiles = projectsDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {
@@ -1562,8 +1582,15 @@
if (zoneRSufiResult) {
// get survey name (other condition)
String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult);
-
- String mapName = surveyName + "_" + species.toUpperCase() + ".png";
+
+ String mapName = null;
+ if (species != null) {
+ mapName = surveyName + "_" + species.toUpperCase() + ".png";
+ }
+ else {
+ mapName = surveyName + "_Repartition-stations.png";
+ }
+
File mapsDirectory = new File(resultFile, CoserConstants.STORAGE_MAPS_DIRECTORY);
result = new File(mapsDirectory, mapName);
}
@@ -1577,7 +1604,7 @@
}
}
}
-
+
return result;
}
@@ -1649,7 +1676,7 @@
File result = null;
// parcours des resultats disponibles
- File projectsDirectory = config.getWebProjectsDirectory();
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
File[] projectFiles = projectsDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {