Author: chatellier Date: 2011-01-10 14:33:20 +0000 (Mon, 10 Jan 2011) New Revision: 488 Log: Gestion des zones / sous zones Added: trunk/coser-business/src/test/resources/webindicators.csv trunk/coser-business/src/test/resources/webzones.csv trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SubzoneAction.java trunk/coser-web/src/main/webapp/WEB-INF/content/pop/subzone.jsp Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 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 trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2011-01-07 12:45:07 UTC (rev 487) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2011-01-10 14:33:20 UTC (rev 488) @@ -146,11 +146,19 @@ File result = getOptionAsFile(CoserBusinessOption.WEB_INDICATORS.key); return result; } + + public void setWebIndicatorsFile(String indicatorsFile) { + setOption(CoserBusinessOption.WEB_INDICATORS.key, indicatorsFile); + } public File getWebZonesFile() { File result = getOptionAsFile(CoserBusinessOption.WEB_ZONES.key); return result; } + + public void setWebZonesFile(String zoneFile) { + setOption(CoserBusinessOption.WEB_ZONES.key, zoneFile); + } public List<String> getNewResultNotificationList() { // la liste est vide si l'option est null 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-07 12:45:07 UTC (rev 487) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-10 14:33:20 UTC (rev 488) @@ -2840,6 +2840,31 @@ } /** + * Look for project survey name in rsufi result. + * Read estcomind file to known that. + * + * @param resultDirectory result directory + * @param rSufiResult rsufi result + * @return survey name + * @throws CoserBusinessException + */ + public String getProjectSurveyName(File resultDirectory, RSufiResult rSufiResult) throws CoserBusinessException { + String result = null; + + // le fichier estcomind est moins gros que l'autre + String estComIndName = rSufiResult.getEstComIndName(); + File estComIndFile = new File(resultDirectory, estComIndName); + DataStorage dataStorage = importService.loadCSVFile(estComIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR); + // Campagne Indicateur Liste Strate Annee Estimation EcartType CV + Iterator<String[]> itEstComIndData = dataStorage.iterator(true); + while (StringUtils.isEmpty(result) && itEstComIndData.hasNext()) { + result = itEstComIndData.next()[0]; + } + + return result; + } + + /** * Retourne tous les projets qui ont des résultats. * * De la forme d'une liste de de path (à la tree path) : 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-07 12:45:07 UTC (rev 487) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-10 14:33:20 UTC (rev 488) @@ -30,6 +30,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -61,6 +62,10 @@ * chargées persistent apres chargement, car elle ne peuvent pas changer * tant que l'application est en cours d'utilisation. * + * Il faut garder à l'esprit que les projets n'ont pas forcement + * de resultat, donc le chargement du projet est possible, mais + * pas les données de control et les données de selection. + * * @author chatellier * @version $Revision$ * @@ -158,9 +163,9 @@ * <ul> * <li>dezipage dans un fichier temporaire * <li>recuperation des noms zone/souszone-campagne des nouveau fichiers - * <li>suppression dans l'ancien répertoire des resultat deja present dans le nouveau (pour les conlfits) - * <li>suppression des selections vide - * <li>suppression des projets vide + * <li>suppression dans l'ancien répertoire des resultats deja presents dans le nouveau (pour les conflits) + * <li>suppression des selections vides + * <li>suppression des projets vides * <li>copie (avec ecrasement) des nouveaux fichiers dans l'ancien répertoire * </ul> * @@ -341,42 +346,131 @@ } /** - * Recuperer la liste des populations pour une zone données. + * Pour une zone principale, recupere la liste des couples sous-zone / + * campagne qui sont disponible dans cette zone principale. * - * @param zone zone + * @param mainZone main zone (le nom de la zone principale) + * @return couple subzoneid/sub + * @throws CoserBusinessException + */ + public Map<String, String> getSurveysForZone(String mainZone) throws CoserBusinessException { + Map<String, String> surveyForZone = new HashMap<String, String>(); + + // get subzone for main zone + Collection<String> subZones = new ArrayList<String>(); + for (Map.Entry<String, String[]> zoneEntry : getZonesMap().entrySet()) { + String[] zoneAndSubZone = zoneEntry.getValue(); + if (zoneAndSubZone[0].equals(mainZone)) { + subZones.add(zoneEntry.getKey()); + } + } + + // get survey names in subZones collection + File[] projectFiles = config.getWebProjectsDirectory().listFiles(); + + // project iteration + 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); + String resultZoneId = rsufiResult.getZone(); + if (subZones.contains(resultZoneId)) { + String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult); + String zoneid = resultZoneId + "-" + surveyName; + + // get zone name + String zoneName = ""; + for (Map.Entry<String, String[]> zoneEntry : getZonesMap().entrySet()) { + if (zoneEntry.getKey().equals(resultZoneId)) { + zoneName = zoneEntry.getValue()[1]; + } + } + + zoneName += " - " + surveyName; + surveyForZone.put(zoneid, zoneName); + } + } + } + } + } + } + } + } + } + } + + return surveyForZone; + } + + /** + * Recuperer la liste des populations pour une zone donnée. + * + * @param zone zone (zoneid-surveyname) * @return map species nom info>nom officiel * @throws CoserBusinessException */ public Map<String, String> getSpecies(String zone) throws CoserBusinessException { - + Map<String, String> result = new TreeMap<String, String>(); - + String zoneId = zone.substring(0, zone.indexOf('-')); + String survey = zone.substring(zone.indexOf('-') + 1); + // parcours des resultats disponibles File projectsDirectory = config.getWebProjectsDirectory(); File[] projectFiles = projectsDirectory.listFiles(); if (projectFiles != null) { for (File projectFile : projectFiles) { if (projectFile.isDirectory()) { - Project project = projectService.openProject(projectFile.getName(), projectsDirectory); + File selectionsDirectory = new File(projectFile, CoserConstants.STORAGE_SELECTION_DIRECTORY); + File[] selectionFiles = selectionsDirectory.listFiles(); - for (Selection selection : project.getSelections().values()) { - boolean resultFound = false; - - for (RSufiResult rsufiResult : selection.getRsufiResults()) { + // 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)) { - Map<String, String> resultSpecies = getRsufiResultSpecies(project, selection, rsufiResult); - result.putAll(resultSpecies); - resultFound = true; - break; + // extraction des especes pour le résultat demandé + if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zoneId)) { + + // load project (without data to get reftax data) + Project project = projectService.openProject(projectFile.getName(), projectsDirectory); + + // get survey name (other condition) + String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult); + if (surveyName.equals(survey)) { + Map<String, String> resultSpecies = getRsufiResultSpecies(project, resultFile, rsufiResult); + result.putAll(resultSpecies); + break; + } + } + } + } + } } } - - if (resultFound) { - break; - } } } } @@ -390,13 +484,12 @@ * d'un resultat. * * @param project project - * @param selection selection - * @param rsufiResult rsufi result + * @param resultDirectory rsufi result directory + * @param rSUfiResult rsufi result * @return map with each species code/species name * @throws CoserBusinessException */ - protected Map<String, String> getRsufiResultSpecies(Project project, - Selection selection, RSufiResult rsufiResult) throws CoserBusinessException { + protected Map<String, String> getRsufiResultSpecies(Project project, File resultDirectory, RSufiResult rsufiResult) throws CoserBusinessException { Map<String, String> result = new HashMap<String, String>(); // load reftax in memory @@ -412,16 +505,8 @@ speciesNames.put(speciesCode, speciesName); } - - // get this selection data // un peu lourd mais reconstruit le path jusqu'au fichier estcomind - File projectsDirectory = config.getWebProjectsDirectory(); - File projectDirectory = new File(projectsDirectory, project.getName()); - File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY); - File selectionDirectory = new File(selectionsDirectory, selection.getName()); - File resultsDirectory = new File(selectionDirectory, CoserConstants.STORAGE_RESULTS_DIRECTORY); - File resultDirectory = new File(resultsDirectory, rsufiResult.getName()); File estPopIndFile = new File(resultDirectory, rsufiResult.getEstPopIndName()); // Campagne Indicateur Liste Espece Strate Annee Estimation EcartType CV @@ -561,24 +646,35 @@ if (projectFiles != null) { for (File projectFile : projectFiles) { if (projectFile.isDirectory()) { - Project project = projectService.openProject(projectFile.getName(), projectsDirectory); - - for (Selection selection : project.getSelections().values()) { - boolean resultFound = false; - - for (RSufiResult rsufiResult : selection.getRsufiResults()) { - if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) { - projectService.loadSelectionData(project, selection); - Map<String, String> resultSpecies = getRsufiResultSpecies(project, selection, rsufiResult); - //result.putAll(resultSpecies); - resultFound = true; - break; + 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); + if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) { + + // load project (without data to get reftax data) + Project project = projectService.openProject(projectFile.getName(), projectsDirectory); + + Map<String, String> resultSpecies = getRsufiResultSpecies(project, resultFile, rsufiResult); + //result.putAll(resultSpecies); + break; + } + } + } + } } } - - if (resultFound) { - break; - } } } } 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-07 12:45:07 UTC (rev 487) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2011-01-10 14:33:20 UTC (rev 488) @@ -97,6 +97,9 @@ return result; } }); + + config.setWebIndicatorsFile(CoserTestAbstract.class.getResource("/webindicators.csv").getFile()); + config.setWebZonesFile(CoserTestAbstract.class.getResource("/webzones.csv").getFile()); } @AfterClass 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-07 12:45:07 UTC (rev 487) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2011-01-10 14:33:20 UTC (rev 488) @@ -27,8 +27,11 @@ import java.io.File; import java.net.URL; +import java.util.Map; +import org.apache.commons.collections.map.MultiKeyMap; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import fr.ifremer.coser.CoserBusinessException; @@ -44,19 +47,46 @@ */ public class WebServiceTest extends CoserTestAbstract { + protected WebService webService; + + @Before + public void initServices() { + webService = new WebService(config); + } + protected void assertFileExists(String filepath) { File file = new File(filepath.replace('/', File.separatorChar)); - System.out.println("testing file " + file); Assert.assertTrue(file.exists()); } protected void assertFileNotExists(String filepath) { File file = new File(filepath.replace('/', File.separatorChar)); - System.out.println("testing file " + file); Assert.assertFalse(file.exists()); } /** + * Test de lecture du fichier des indicateurs des resources de test. + * + * @throws CoserBusinessException + */ + @Test + public void testGetIndicators() throws CoserBusinessException { + MultiKeyMap indicators = webService.getIndicatorsMap(); + Assert.assertEquals(62, indicators.size()); + } + + /** + * Test de lecture du fichier de zones de resources de test. + * + * @throws CoserBusinessException + */ + @Test + public void testGetZones() throws CoserBusinessException { + Map<String, String[]> zones = webService.getZonesMap(); + Assert.assertEquals(16, zones.size()); + } + + /** * Test que les upload successible merge bien les resultats en fonction * des idenfiants des zones auquels ils sont affectés et que les resulats * en conflit sont bien supprimé (avec si besoins leurs selections et projets). @@ -64,8 +94,6 @@ */ @Test public void testUploadDirectoyMerge() throws CoserBusinessException { - WebService webService = new WebService(config); - URL firstUpload = WebServiceTest.class.getResource("/web/upload1.zip"); File firstUploadFile = new File(firstUpload.getFile()); webService.registerNewUploadedResults(firstUploadFile); Added: trunk/coser-business/src/test/resources/webindicators.csv =================================================================== --- trunk/coser-business/src/test/resources/webindicators.csv (rev 0) +++ trunk/coser-business/src/test/resources/webindicators.csv 2011-01-10 14:33:20 UTC (rev 488) @@ -0,0 +1,33 @@ +"id";"label_fr";"label_en" +"Abundance";"Abondance totale dans la zone (valeur relative)";"Total abundance in the area (relative value)" +"Biomass";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)" +"Dbar";"Densité relative dans la zone";"Relative density in the area" +"l0.05";"Longueur au 5ème percentile de la distribution de longueur";"Length at the fifth percentile of the length distribution" +"l0.25";"Longueur au 25ème percentile de la distribution de longueur";"Length at the twenty-fifth percentile of the length distribution" +"l0.75";"Longueur au 75ème percentile de la distribution de longueur";"Length at the seventy-fifth percentile of the length distribution" +"l0.95";"Longueur au 95ème percentile de la distribution de longueur";"Length at the ninety- fifth percentile of the length distribution" +"L50";"Taille à 50 % de maturité";"Size at 50 % maturity" +"Lbar";"Longueur moyenne dans la population";"Mean length in the population" +"lnN";"Logarithme naturel de l'abondance";"Natural Logarithm of abundance" +"lvar";"Variance de la longueur dans l'échantillon";"Sample variance of length measurements" +"PropMat";"Proportion de matures";"Proportion of mature individuals" +"sexRatio";"Sexe ratio (males/femelles)";"Sex ratio (males/females)" +"Wbar";"Poids individuel moyen dans la population";"Average individual weight in the population" +"biomBig";"Biomasse des grandes espèces (valeur relative)";"Biomass of the large species (relative value)" +"biomSmall";"Biomasse des petites espèces (valeur relative)";"Biomass of the small species (relative value)" +"Btot";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)" +"Delta";"Indice de diversité \u0394";"Diversity index \u0394" +"Gtot";"Moyenne géométrique du nombre par espèce";"Geometric mean of species abundances" +"Lbcomm";"Taille moyenne dans communauté";"Average length in community" +"meanQuant0.95";"Moyenne des l0;95 des espèces";"Average across species of l0;95" +"meanWbar";"Moyenne des Wbar par espèce";"Average of species Wbar " +"Ntot";"Abondance totale dans la zone (valeur relative)";"Total abundance in the area (relative value)" +"propL15";"Proportion des grands individus en nombre (taille seuil 15 cm)";"Proportion of large individuals in numbers (threshold size 15 cm)" +"propL20";"Proportion des grands individus en nombre (taille seuil 20 cm)";"Proportion of large individuals in numbers (threshold size 20 cm)" +"propL25";"Proportion des grands individus en nombre (taille seuil 25 cm)";"Proportion of large individuals in numbers (threshold size 25 cm)" +"propL30";"Proportion des grands individus en nombre (taille seuil 30 cm)";"Proportion of large individuals in numbers (threshold size 30 cm)" +"propLW";"Proportion des grands individus en poids (/ taille seuil spécifique à la zone)";"Proportion of large individuals in weight (/ threshold length area specific)" +"Shannonmod";"Indice de Shannon normalisé / première année";"Shannon index normalized wrt the first year" +"Wbcomm";"Poids moyen d'un individu";"Average weight of an individual" +"Wtot";"Biomasse totale dans la zone (valeur relative)";"Total biomass in the area (relative value)" + Added: trunk/coser-business/src/test/resources/webzones.csv =================================================================== --- trunk/coser-business/src/test/resources/webzones.csv (rev 0) +++ trunk/coser-business/src/test/resources/webzones.csv 2011-01-10 14:33:20 UTC (rev 488) @@ -0,0 +1,19 @@ +"id";"zone";"subzone";"periode";"serie";"comment";"map" +"ciem4b4c";"Mer du Nord";"CIEM 4b - 4c";"1983";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"C_Ciem-4b-4c.jpg" +"ciem4c";"Mer du Nord";"CIEM 4c";"1983";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"C_Ciem-4c.jpg" +"ciem4ce7d";"Mer du Nord";"CIEM 4c - Est 7d";"2007";"IBTS";"D'après données internationales extraites de la base Datras du CIEM";"C_Ciem-4c-E7d.jpg" +"ciem4c4e7d";"Mer du Nord";"CIEM 4c4 - Est 7d";"2007";"IBTS";"- Détroit du Pas-de-Calais\n- D'après données internationales extraites de la base Datras du CIEM";"C_Ciem-4c4-E7d.jpg" +"cieme7d";"Manche orientale";"Est de 1° 15' O";"1988 ";"CGFS";;"C_Ciem-E7d.jpg" +"ciem7d";"Manche orientale";"Ensemble Manche orientale";"1990";"CGFS";"Correspond à l'ensemble de la zone VIId du CIEM";"C_Ciem-7d.jpg" +"noursom";"Manche orientale";"Baie de Somme";"1994";"Noursom";;"C_Noursom.jpg" +"noursein";"Manche orientale";"Baie de Seine";"1995 - 2010";"Noursein";"Série arrêtée en 2010";"C_Noursein.jpg" +"crustaflam";"Manche occidentale";"Abords du cap de Flamanville";"1986";"Crustaflam";;"C_Crustaflam.jpg" +"gdgmc";"Atlantique";"Golfe de Gascogne + mer Celtique";"1997";"Evhoe";"Ensemble de la couverture Evhoe";"C_GdG-MC.jpg" +"mcech";"Atlantique";"Mer Celtique (strates d'échantillonnage)";"1997";"Evhoe";;"C_MC-Ech.jpg" +"mcciem7";"Atlantique";"Mer Celtique (zone VII du CIEM)";"1997";"Evhoe";"La limite sud de la zone VII du CIEM (48 °N) constitue aussi une limite de régions de la DCSMM";"C_MC-Ciem-7.jpg" +"gdgech";"Atlantique";"Golfe de Gascogne (strates d'échantillonnage)";"1987";"Evhoe";;"C_GdG-Ech.jpg" +"gdgciem7";"Atlantique";"Golfe de Gascogne (zone VIII du CIEM)";"1987";"Evhoe";"La limite nord de la zone VIII du CIEM (48 °N) constitue aussi une limite de régions de la DCSMM";"C_GdG-Ciem-7.jpg" +"gdl";"Méditerranée";"Golfe du Lion";"1994";"Medits";;"C_GdL.jpg" +"ecorse";"Méditerranée";"Est-Corse";"1994";"Medits";"1997 exclue (couverture incomplète)";"C_E-Corse.jpg" + + Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java 2011-01-07 12:45:07 UTC (rev 487) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java 2011-01-10 14:33:20 UTC (rev 488) @@ -3,7 +3,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 Ifremer, 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 Affero General Public License as published by Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java 2011-01-07 12:45:07 UTC (rev 487) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java 2011-01-10 14:33:20 UTC (rev 488) @@ -3,7 +3,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 Ifremer, 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 Affero General Public License as published by Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java 2011-01-07 12:45:07 UTC (rev 487) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java 2011-01-10 14:33:20 UTC (rev 488) @@ -3,7 +3,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 Ifremer, 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 Affero General Public License as published by Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SubzoneAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SubzoneAction.java (rev 0) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SubzoneAction.java 2011-01-10 14:33:20 UTC (rev 488) @@ -0,0 +1,76 @@ +/* + * #%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.util.Map; + +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; + +/** + * Affiche la liste des sous zones (zone). + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class SubzoneAction extends ActionSupport { + + /** serialVersionUID. */ + private static final long serialVersionUID = 3385467755357775199L; + + protected String mainZone; + + public void setMainZone(String mainZone) { + this.mainZone = mainZone; + } + + protected Map<String, String> zones; + + public Map<String, String> getZones() { + return zones; + } + + @Override + public String execute() { + + WebService webService = ServiceFactory.getWebService(); + try { + + // renvoi la liste des id subzone-survey et leurs label + // associé + zones = webService.getSurveysForZone(mainZone); + + } catch (CoserBusinessException ex) { + throw new CoserWebException("Can't get zone map", ex); + } + + return SUCCESS; + } +} Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SubzoneAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java 2011-01-07 12:45:07 UTC (rev 487) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java 2011-01-10 14:33:20 UTC (rev 488) @@ -3,7 +3,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 Ifremer, 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 Affero General Public License as published by @@ -27,8 +27,13 @@ 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; + /** - * Action index, affiche une liste fixe de 10 zones. + * Action index, affiche la liste des zones majeures (main zone). * * @author chatellier * @version $Revision$ @@ -41,30 +46,29 @@ /** serialVersionUID. */ private static final long serialVersionUID = 3385467755357775199L; - protected Map<String, String> zones; - - public Map<String, String> getZones() { - return zones; + protected Map<String, String> mainZones; + + public Map<String, String> getMainZones() { + return mainZones; } @Override public String execute() { - zones = new HashMap<String, String>(); - zones.put("manchecgfs", "Plateau - Manche CGFS"); - zones.put("celtiqueevhoe", "Plateau - Celtique EVHOE"); - zones.put("gascogneevhoe", "Plateau - Gascogne EVHOE"); - zones.put("gascogneressgasc01", "Plateau - Gascogne RESSGASC_01"); - zones.put("gascogneressgasc02", "Plateau - Gascogne RESSGASC_02"); - zones.put("gascogneressgasc03", "Plateau - Gascogne RESSGASC_03"); - zones.put("gascogneressgasc04", "Plateau - Gascogne RESSGASC_04"); - zones.put("lionmedtis", "Plateau - Lion MEDITS"); - zones.put("estcorsemedits", "Plateau - Est-Corse MEDITS"); - zones.put("sommenoursom", "Baie - Somme NOURSOM"); - zones.put("seinenoursei", "Baie - Seine NOURSEI"); - zones.put("vilainenourvil", "Baie - Vilaine NOURVIL"); - zones.put("crustaflamjuin", "Cap - Flamanville CRUSTAFLAM Juin"); + mainZones = new HashMap<String, String>(); + WebService webService = ServiceFactory.getWebService(); + try { + Map<String, String[]> zonesMap = webService.getZonesMap(); + + for (Map.Entry<String, String[]> zoneMapEntry : zonesMap.entrySet()) { + mainZones.put(zoneMapEntry.getValue()[0], zoneMapEntry.getValue()[0]); + } + + } catch (CoserBusinessException ex) { + throw new CoserWebException("Can't get zone map", ex); + } + return SUCCESS; } } Added: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/subzone.jsp =================================================================== --- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/subzone.jsp (rev 0) +++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/subzone.jsp 2011-01-10 14:33:20 UTC (rev 488) @@ -0,0 +1,47 @@ +<!-- + #%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>Coser</title> + </head> + <body> + + <img src="<s:url value='/images/zonesmap.jpg' />" /> + + <br /> + + <s:if test="%{zones.isEmpty()}"> + No result founds + </s:if> + <s:else> + <s:form action="species" method="get"> + <s:select name="zone" list="zones" label="Select a sub zone" /> + <s:submit label="Suite"/> + </s:form> + </s:else> + </body> +</html> \ No newline at end of file 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-07 12:45:07 UTC (rev 487) +++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-10 14:33:20 UTC (rev 488) @@ -34,8 +34,8 @@ <br /> - <s:form action="species" method="get"> - <s:select name="zone" list="zones" label="Select a zone" /> + <s:form action="subzone" method="get"> + <s:select name="mainZone" list="mainZones" label="Select a zone" /> <s:submit label="Suite"/> </s:form> </body>