Author: chatellier Date: 2011-01-18 15:20:22 +0000 (Tue, 18 Jan 2011) New Revision: 521 Log: T?\195?\169l?\195?\169chargement des cartes en PDF Added: trunk/coser-business/src/main/resources/ftl/ trunk/coser-business/src/main/resources/ftl/map.ftl trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java Removed: trunk/coser-web/src/main/resources/ftl/ Modified: trunk/coser-business/pom.xml trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.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/CoserUtilsTest.java trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.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/map/map.jsp trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp trunk/pom.xml Modified: trunk/coser-business/pom.xml =================================================================== --- trunk/coser-business/pom.xml 2011-01-18 15:19:02 UTC (rev 520) +++ trunk/coser-business/pom.xml 2011-01-18 15:20:22 UTC (rev 521) @@ -102,6 +102,10 @@ <groupId>org.xhtmlrenderer</groupId> <artifactId>core-renderer</artifactId> </dependency> + <dependency> + <groupId>org.freemarker</groupId> + <artifactId>freemarker</artifactId> + </dependency> </dependencies> <name>Coser :: Business</name> Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2011-01-18 15:19:02 UTC (rev 520) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2011-01-18 15:20:22 UTC (rev 521) @@ -25,6 +25,8 @@ package fr.ifremer.coser; +import java.io.IOException; +import java.io.StringReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -32,8 +34,15 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + import org.apache.commons.lang.StringUtils; import org.nuiton.util.StringUtil; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; /** * Coser utility class. @@ -128,4 +137,25 @@ List<String> strList = Arrays.asList(strArray); return strList; } + + /** + * Convert string to {@link Document}. + * + * @param content content + * @return document + * @throws IOException + */ + public static Document parseDocument(String content) throws IOException { + Document result = null; + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + result = builder.parse(new InputSource(new StringReader(content))); + } catch (ParserConfigurationException e) { + throw new IOException(e); + } catch (SAXException e) { + throw new IOException(e); + } + return result; + } } 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-18 15:19:02 UTC (rev 520) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2011-01-18 15:20:22 UTC (rev 521) @@ -86,7 +86,7 @@ import fr.ifremer.coser.storage.DataStorage; /** - * Publication service (charts, reports, export...) + * Publication service (charts, reports, export, pdf...) * * @author chatellier * @version $Revision$ @@ -714,6 +714,7 @@ * @param resultDirectory * @param rsufiResult * @param species + * @param indicator * @param locale * @return * @throws CoserBusinessException @@ -773,7 +774,6 @@ } 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-18 15:19:02 UTC (rev 520) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-18 15:20:22 UTC (rev 521) @@ -30,7 +30,11 @@ import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; +import java.io.StringWriter; +import java.io.Writer; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; @@ -38,6 +42,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.TreeMap; import java.util.regex.Matcher; @@ -50,7 +55,6 @@ import org.apache.commons.mail.EmailException; import org.apache.commons.mail.MultiPartEmail; import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; @@ -62,7 +66,11 @@ import org.nuiton.util.FileUtil; import org.nuiton.util.StringUtil; import org.nuiton.util.ZipUtil; +import org.w3c.dom.Document; +import org.xhtmlrenderer.pdf.ITextRenderer; +import com.lowagie.text.DocumentException; + import fr.ifremer.coser.CoserBusinessConfig; import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.CoserConstants; @@ -75,6 +83,10 @@ import fr.ifremer.coser.storage.MemoryDataStorage; import fr.ifremer.coser.util.ProgressMonitor; import fr.ifremer.coser.util.ProgressStream; +import freemarker.cache.ClassTemplateLoader; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; /** * Service specifique à l'interface web de visualisation. @@ -111,12 +123,25 @@ /** Zones map (etat du service). */ protected DataStorage zonesMap; + /** Freemarker */ + protected Configuration freemarkerConfiguration; + public WebService(CoserBusinessConfig config) { this.config = config; - + importService = new ImportService(config); projectService = new ProjectService(config); publicationService = new PublicationService(config); + + freemarkerConfiguration = new Configuration(); + + // needed to overwrite "Defaults to default system encoding." + // fix encoding issue on some systems + freemarkerConfiguration.setEncoding(Locale.getDefault(), "UTF-8"); + + // specific template loader to get template from jars (classpath) + ClassTemplateLoader templateLoader = new ClassTemplateLoader(WebService.class, "/ftl"); + freemarkerConfiguration.setTemplateLoader(templateLoader); } /** @@ -1364,8 +1389,57 @@ return result; } - + /** + * Generate map file into pdf file. + * + * @param survey survey + * @param species species + * @return pdf file + * @throws CoserBusinessException + */ + public File getMapFileAsPDF(String survey, String species) throws CoserBusinessException { + + File result = null; + + try { + // render freemarker template + File mapFile = getMapFile(survey, species); + + Template mapTemplate = freemarkerConfiguration.getTemplate("map.ftl"); + Map<String, Object> root = new HashMap<String, Object>(); + root.put("mapFile", mapFile.getAbsolutePath()); + + Writer out = new StringWriter(); + mapTemplate.process(root, out); + out.flush(); + + // get content as w3c document + Document document = CoserUtils.parseDocument(out.toString()); + + // render template output as pdf + result = File.createTempFile("coserpdf", ".pdf"); + result.deleteOnExit(); + 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 pdf with map", ex); + } catch (TemplateException ex) { + throw new CoserBusinessException("Can't generate pdf with map", ex); + } catch (DocumentException ex) { + throw new CoserBusinessException("Can't generate pdf with map", ex); + } + return result; + } + + /** * Genere un fichier zip des sources d'un projet. * * Contient: Added: trunk/coser-business/src/main/resources/ftl/map.ftl =================================================================== --- trunk/coser-business/src/main/resources/ftl/map.ftl (rev 0) +++ trunk/coser-business/src/main/resources/ftl/map.ftl 2011-01-18 15:20:22 UTC (rev 521) @@ -0,0 +1,17 @@ +<html> + <body><p>L'objectif de cet atlas est de donner un aperçu de la distribution + spatiale des espèces de poissons et de certains invertébrés marin à partir + des observations des campagnes de pêche scientifiques.</p> + <p> +Pour chaque zone un quadrillage systématique a été défini, puis la densité +moyenne par km² dans chaque cellule a été calculée en utilisant les observations +de toute la période. Pour la représentation cartographique, les cellules avec +des densités moyenne correspondant aux quartiles de densité ont reçu la même +couleur : bleu : espèce jamais observée, jaune clair : densité moyenne entre +[0 et 25 %[; jaune foncé : [25-50 %[, orange : [50-75 %[ et rouge : [75-100 %]. +Donc, les zones où se trouvent les densités les plus élevées en moyenne sont +représentées en rouge.</p> + +<img src="file://${mapFile}" /> +</body> +</html> \ No newline at end of file Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/CoserUtilsTest.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/CoserUtilsTest.java 2011-01-18 15:19:02 UTC (rev 520) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/CoserUtilsTest.java 2011-01-18 15:20:22 UTC (rev 521) @@ -25,6 +25,8 @@ package fr.ifremer.coser; +import java.io.IOException; + import org.junit.Assert; import org.junit.Test; @@ -48,4 +50,23 @@ Assert.assertEquals("cap.tu.res_se.csv", CoserUtils.addSuffixBeforeExtension("cap.tu.res.csv", CoserConstants.STORAGE_SELECTION_SUFFIX)); Assert.assertEquals("captures_co", CoserUtils.addSuffixBeforeExtension("captures", CoserConstants.STORAGE_CONTROL_SUFFIX)); } + + /** + * Test le parsing xml. + * @throws IOException + */ + @Test + public void testParseDocument() throws IOException { + Assert.assertNotNull(CoserUtils.parseDocument("<html><body>test</body></html>")); + } + + /** + * Test le parsing xml avec erreur. + * @throws IOException + */ + @Test(expected=IOException.class) + public void testParseDocumentError() throws IOException { + Assert.assertNotNull(CoserUtils.parseDocument("<html>")); + } + } 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-18 15:19:02 UTC (rev 520) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2011-01-18 15:20:22 UTC (rev 521) @@ -69,6 +69,18 @@ } /** + * Simule la publication de nouveaux resultats (uplaod client lourd). + * + * @param path result to upload + * @throws CoserBusinessException + */ + protected void registerUploadedResult(String path) throws CoserBusinessException { + URL firstUpload = WebServiceTest.class.getResource(path); + File firstUploadFile = new File(firstUpload.getFile()); + webService.registerNewUploadedResults(firstUploadFile); + } + + /** * Test de lecture du fichier des indicateurs des resources de test. * * @throws CoserBusinessException @@ -98,14 +110,10 @@ */ @Test public void testUploadDirectoyMerge() throws CoserBusinessException { - URL firstUpload = WebServiceTest.class.getResource("/web/upload1.zip"); - File firstUploadFile = new File(firstUpload.getFile()); - webService.registerNewUploadedResults(firstUploadFile); + registerUploadedResult("/web/upload1.zip"); // second upload with merge - URL secondUpload = WebServiceTest.class.getResource("/web/upload2.zip"); - File secondUploadFile = new File(secondUpload.getFile()); - webService.registerNewUploadedResults(secondUploadFile); + registerUploadedResult("/web/upload2.zip"); // some tests (from first) assertFileNotExists(config.getWebProjectsDirectory() + "/projet1/selections/selection11/results/result111"); @@ -126,9 +134,7 @@ */ @Test public void testSourceZip() throws CoserBusinessException, IOException { - URL firstUpload = WebServiceTest.class.getResource("/web/upload1.zip"); - File firstUploadFile = new File(firstUpload.getFile()); - webService.registerNewUploadedResults(firstUploadFile); + registerUploadedResult("/web/upload1.zip"); File zip = webService.getSourceZip("testzone1", "en"); File tempDir = FileUtil.createTempDirectory("coser", ".tmp"); @@ -136,4 +142,28 @@ Assert.assertTrue(new File(tempDir, "coser-sources" + File.separator + "testcatch.csv").isFile()); FileUtils.deleteDirectory(tempDir); } + + /** + * Test la récupération d'une image parmit les resultat de type "mapReference". + * + * @throws CoserBusinessException + */ + @Test + public void testGetMapFile() throws CoserBusinessException { + registerUploadedResult("/web/upload2.zip"); + File file = webService.getMapFile("Medits", "SPECIES1"); + Assert.assertNotNull(file); + } + + /** + * Test la generation pdf avec l'inclusion d'image. + * + * @throws CoserBusinessException + */ + @Test + public void testGetMapFileAsPDF() throws CoserBusinessException { + registerUploadedResult("/web/upload2.zip"); + File file = webService.getMapFileAsPDF("Medits", "SPECIES1"); + Assert.assertNotNull(file); + } } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java 2011-01-18 15:19:02 UTC (rev 520) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java 2011-01-18 15:20:22 UTC (rev 521) @@ -38,7 +38,7 @@ import fr.ifremer.coser.web.ServiceFactory; /** - * Action index, recupere la liste des resultats. + * Appéle par le navigateur pour recuperer le contenu de l'image. * * @author chatellier * @version $Revision$ Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java (rev 0) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java 2011-01-18 15:20:22 UTC (rev 521) @@ -0,0 +1,98 @@ +/* + * #%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.map; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; + +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; + +/** + * Génére la carte sous forme de pdf. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class MapPdfAction extends ActionSupport { + + /** serialVersionUID. */ + private static final long serialVersionUID = 1663244944108703571L; + + protected String survey; + + protected String species; + + public String getSurvey() { + return survey; + } + + public void setSurvey(String survey) { + this.survey = survey; + } + + public String getSpecies() { + return species; + } + + public void setSpecies(String species) { + this.species = species; + } + + @Action(results= {@Result(type="stream", params={"contentType", "application/pdf", "inputName", "inputStream", "contentDisposition", "attachment; filename=\"${filename}\""})}) + public String execute() { + return SUCCESS; + } + + public String getFilename() { + return survey + "-" + species + ".pdf"; + } + + public InputStream getInputStream() { + WebService webService = ServiceFactory.getWebService(); + + InputStream input = null; + try { + File mapImage = webService.getMapFileAsPDF(survey, species); + input = new FileInputStream(mapImage); + } catch (CoserBusinessException ex) { + throw new CoserWebException("Can't get map pdf", ex); + } catch (FileNotFoundException ex) { + throw new CoserWebException("Can't get map pdf", ex); + } + + return input; + } +} Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java 2011-01-18 15:19:02 UTC (rev 520) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java 2011-01-18 15:20:22 UTC (rev 521) @@ -22,8 +22,6 @@ package fr.ifremer.coser.web.actions.source; -import java.util.Locale; - import com.opensymphony.xwork2.ActionSupport; import fr.ifremer.coser.CoserBusinessException; 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:19:02 UTC (rev 520) +++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-18 15:20:22 UTC (rev 521) @@ -47,6 +47,11 @@ message.common.selectindicator=Select an indicator message.common.noresults=No results available message.common.selectspecies=Select a species +message.map.citationtitle=Citation +message.map.citation=Trenkel V.M., O. Berthel\u00E9, P. Lorance, J.A. Bertrand, A. Brind''Amour, M.L. Cochard, F. Coppin, J.P. Leaut\u00E9, J.C. Mah\u00E9, J. Morin, M.J. Rochet, M. Salaun, A. Souplet & Y. V\u00E9rin, 2009. Grands invert\u00E9br\u00E9s et poissons observ\u00E9s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. Ifremer, Nantes. EMH : 09-003. {0}. 100 p. +message.map.downloadaspdf=Download as PDF +message.map.paragraph1=L''objectif de cet atlas est de donner un aper\u00E7u de la distribution spatiale des esp\u00E8ces de poissons et de certains invert\u00E9br\u00E9s marin \u00E0 partir des observations des campagnes de p\u00EAche scientifiques. +message.map.paragraph2=Pour chaque zone un quadrillage syst\u00E9matique a \u00E9t\u00E9 d\u00E9fini, puis la densit\u00E9 moyenne par km\u00B2 dans chaque cellule a \u00E9t\u00E9 calcul\u00E9e en utilisant les observations de toute la p\u00E9riode. Pour la repr\u00E9sentation cartographique, les cellules avec des densit\u00E9s moyenne correspondant aux quartiles de densit\u00E9 ont re\u00E7u la m\u00EAme couleur\u00A0: bleu\u00A0: esp\u00E8ce jamais observ\u00E9e, jaune clair\u00A0: densit\u00E9 moyenne entre [0 et 25\u00A0%[; jaune fonc\u00E9\u00A0: [25-50\u00A0%[, orange\u00A0: [50-75\u00A0%[ et rouge\u00A0: [75-100\u00A0%]. Donc, les zones o\u00F9 se trouvent les densit\u00E9s les plus \u00E9lev\u00E9es en moyenne sont repr\u00E9sent\u00E9es en rouge. message.source.download=Download 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) 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:19:02 UTC (rev 520) +++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 15:20:22 UTC (rev 521) @@ -47,6 +47,11 @@ message.common.selectindicator=Selectionnez un indicateur message.common.selectspecies=Selectionnez une esp\u00E8ces message.common.noresults=Aucun r\u00E9sultat disponible +message.map.citationtitle=Citation +message.map.citation=Trenkel V.M., O. Berthel\u00E9, P. Lorance, J.A. Bertrand, A. Brind''Amour, M.L. Cochard, F. Coppin, J.P. Leaut\u00E9, J.C. Mah\u00E9, J. Morin, M.J. Rochet, M. Salaun, A. Souplet & Y. V\u00E9rin, 2009. Grands invert\u00E9br\u00E9s et poissons observ\u00E9s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. Ifremer, Nantes. EMH : 09-003. {0}. 100 p. +message.map.downloadaspdf=T\u00E9l\u00E9charger en PDF +message.map.paragraph1=L''objectif de cet atlas est de donner un aper\u00E7u de la distribution spatiale des esp\u00E8ces de poissons et de certains invert\u00E9br\u00E9s marin \u00E0 partir des observations des campagnes de p\u00EAche scientifiques. +message.map.paragraph2=Pour chaque zone un quadrillage syst\u00E9matique a \u00E9t\u00E9 d\u00E9fini, puis la densit\u00E9 moyenne par km\u00B2 dans chaque cellule a \u00E9t\u00E9 calcul\u00E9e en utilisant les observations de toute la p\u00E9riode. Pour la repr\u00E9sentation cartographique, les cellules avec des densit\u00E9s moyenne correspondant aux quartiles de densit\u00E9 ont re\u00E7u la m\u00EAme couleur\u00A0: bleu\u00A0: esp\u00E8ce jamais observ\u00E9e, jaune clair\u00A0: densit\u00E9 moyenne entre [0 et 25\u00A0%[; jaune fonc\u00E9\u00A0: [25-50\u00A0%[, orange\u00A0: [50-75\u00A0%[ et rouge\u00A0: [75-100\u00A0%]. Donc, les zones o\u00F9 se trouvent les densit\u00E9s les plus \u00E9lev\u00E9es en moyenne sont repr\u00E9sent\u00E9es en rouge. message.source.download=T\u00E9l\u00E9charger 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) Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp =================================================================== --- trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp 2011-01-18 15:19:02 UTC (rev 520) +++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp 2011-01-18 15:20:22 UTC (rev 521) @@ -31,10 +31,25 @@ </head> <body> + <p><s:text name="message.map.paragraph1" /></p> + <p><s:text name="message.map.paragraph2" /></p> + <img src="<s:url action='map-data'> <s:param name="survey" value="%{survey}" /> <s:param name="species" value="%{species}" /> </s:url>" /> + <p><s:a action="map-pdf"> + <s:param name="survey" value="%{survey}" /> + <s:param name="species" value="%{species}" /> + <s:text name="message.map.downloadaspdf"></s:text> + </s:a>.</p> + + <p> + <span style="font-weight:bold"><s:text name="message.map.citationtitle" /></span> : <s:text name="message.map.citation"> + <s:param><a href="http://archimer.ifremer.fr/doc/00000/6976/">http://archimer.ifremer.fr/doc/00000/6976/</a></s:param> + </s:text> + </p> + </body> </html> \ No newline at end of file Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp =================================================================== --- trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-18 15:19:02 UTC (rev 520) +++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-18 15:20:22 UTC (rev 521) @@ -35,10 +35,15 @@ <br /> - <s:form action="map" method="get"> - <s:select name="species" list="species" label="%{getText('message.common.selectspecies')}" /> - <s:hidden name="survey" property="survey"/> - <s:submit label="Suite"/> - </s:form> + <s:if test="%{species.isEmpty()}"> + <s:text name="message.common.noresults"></s:text> + </s:if> + <s:else> + <s:form action="map" method="get"> + <s:select name="species" list="species" label="%{getText('message.common.selectspecies')}" /> + <s:hidden name="survey" property="survey"/> + <s:submit label="Suite"/> + </s:form> + </s:else> </body> </html> \ No newline at end of file Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-01-18 15:19:02 UTC (rev 520) +++ trunk/pom.xml 2011-01-18 15:20:22 UTC (rev 521) @@ -273,6 +273,13 @@ <version>R8pre2</version> <scope>compile</scope> </dependency> + + <dependency> + <groupId>org.freemarker</groupId> + <artifactId>freemarker</artifactId> + <version>2.3.16</version> + <scope>compile</scope> + </dependency> </dependencies> </dependencyManagement>