r533 - in trunk/coser-business/src: main/java/fr/ifremer/coser/services main/resources/ftl test/java/fr/ifremer/coser/services
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()); + } }
participants (1)
-
chatellier@users.labs.libre-entreprise.org