Author: chatellier Date: 2011-01-12 09:23:11 +0000 (Wed, 12 Jan 2011) New Revision: 499 Log: Refactoring zone>facade, subzone > zone 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 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-12 09:23:01 UTC (rev 498) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-12 09:23:11 UTC (rev 499) @@ -2823,25 +2823,9 @@ } /** - * 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. * * @param resultDirectory result directory * @param rSufiResult rsufi 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-12 09:23:01 UTC (rev 498) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-12 09:23:11 UTC (rev 499) @@ -53,17 +53,18 @@ import fr.ifremer.coser.bean.Project; import fr.ifremer.coser.bean.RSufiResult; import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.MemoryDataStorage; /** * Service specifique à l'interface web de visualisation. * - * Ce service, contrairement au autre a un état, les indicateurs et zones - * chargées persistent apres chargement, car elle ne peuvent pas changer + * Ce service, contrairement aux autres a un état, les indicateurs et zones + * chargées persistent après 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. + * pas les données de controle et les données de selection. * * @author chatellier * @version $Revision$ @@ -86,8 +87,8 @@ /** Indicator map (id, locale > translation) (etat du service). */ protected MultiKeyMap indicatorsMap; - /** Zones map (id > zone, subzone) (etat du service). */ - protected Map<String, String[]> zonesMap; + /** Zones map (etat du service). */ + protected DataStorage zonesMap; public WebService(CoserBusinessConfig config) { this.config = config; @@ -129,7 +130,7 @@ * @return zones map * @throws CoserBusinessException */ - public Map<String, String[]> getZonesMap() throws CoserBusinessException { + public DataStorage getZonesMap() throws CoserBusinessException { if (zonesMap == null) { File zoneFile = config.getWebZonesFile(); @@ -137,20 +138,12 @@ // l'operation n'est pas obligatoire pour tous les clients // lourd, le fichier peut donc ne pas exister if (zoneFile.isFile()) { - zonesMap = new HashMap<String, String[]>(); - - DataStorage zonesStorage = importService.loadCSVFile(zoneFile); - Iterator<String[]> iteratorZones = zonesStorage.iterator(true); - while (iteratorZones.hasNext()) { - // "id";"zone";"subzone";"periode";"serie";"comment";"map" - String[] zone = iteratorZones.next(); - zonesMap.put(zone[0], new String[]{zone[1], zone[2]}); - } + zonesMap = importService.loadCSVFile(zoneFile); } else { // fait volontairement un return new, n'affecte pas l'etat du // service - return new HashMap<String, String[]>(); + return new MemoryDataStorage(); } } @@ -164,8 +157,8 @@ * Le nouveau fichier uploadé est mergé avec l'ancien, c'est à dire: * <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 resultats deja presents dans le nouveau (pour les conflits) + * <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>suppression des selections vides * <li>suppression des projets vides * <li>copie (avec ecrasement) des nouveaux fichiers dans l'ancien répertoire @@ -348,22 +341,42 @@ } /** + * Get facades list (as facadeid/facadename). + * + * @return facades map + * @throws CoserBusinessException + */ + public Map<String, String> getFacades() throws CoserBusinessException { + Map<String, String> facades = new HashMap<String, String>(); + DataStorage zonesMap = getZonesMap(); + Iterator<String[]> itZone = zonesMap.iterator(true); + while (itZone.hasNext()) { + String[] tuple = itZone.next(); + // on a pas d'id pour les facades + facades.put(tuple[1], tuple[1]); + } + return facades; + } + + /** * Pour une zone principale, recupere la liste des couples sous-zone / * campagne qui sont disponible dans cette zone principale. * - * @param mainZone main zone (le nom de la zone principale) + * @param facade facade (le nom de la facade principale) * @return couple subzoneid/sub * @throws CoserBusinessException */ - public Map<String, String> getSurveysForZone(String mainZone) throws CoserBusinessException { + public Map<String, String> getZoneForFacade(String facade) 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()); + Iterator<String[]> itZone = getZonesMap().iterator(true); + while (itZone.hasNext()) { + // "id";"facade";"zone";"periode";"serie";"comment";"map" + String[] tuple = itZone.next(); + if (tuple[1].equals(facade)) { + subZones.add(tuple[0]); } } @@ -391,18 +404,14 @@ RSufiResult rsufiResult = projectService.getRSufiResult(resultFile); String resultZoneId = rsufiResult.getZone(); if (subZones.contains(resultZoneId)) { - String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult); - String zoneid = resultZoneId + "-" + surveyName; - + String zoneid = resultZoneId; + // get zone name - String zoneName = ""; - for (Map.Entry<String, String[]> zoneEntry : getZonesMap().entrySet()) { - if (zoneEntry.getKey().equals(resultZoneId)) { - zoneName = zoneEntry.getValue()[1]; - } - } - - zoneName += " - " + surveyName; + // "id";"facade";"zone";"periode";"serie";"comment";"map" + int zoneIndex = getZonesMap().indexOf(zoneid); + String[] zoneData = getZonesMap().get(zoneIndex); + String zoneName = zoneData[2] + " - " + zoneData[3] + " - " + zoneData[4]; + surveyForZone.put(zoneid, zoneName); } } @@ -421,7 +430,7 @@ /** * Recuperer la liste des populations pour une zone donnée. * - * @param zone zone (zoneid-surveyname) + * @param zone zone id * @return map species nom info>nom officiel * @throws CoserBusinessException */ @@ -429,9 +438,6 @@ 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(); @@ -455,18 +461,14 @@ RSufiResult rsufiResult = projectService.getRSufiResult(resultFile); // extraction des especes pour le résultat demandé - if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zoneId)) { + if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) { // 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; - } + Map<String, String> resultSpecies = getRsufiResultSpecies(project, resultFile, rsufiResult); + result.putAll(resultSpecies); + break; } } } @@ -533,7 +535,7 @@ * Retourne les indicateurs calculés avec leurs traductions scientifique * pour la zone et l'especes souhaitées. * - * @param zone zone (zoneid-surveyname) + * @param zone zone id * @param species especes (if {@code null} look for com indicators * @param locale locale ({@code fr} ou {@code en}) * @return la liste des indicateurs @@ -542,9 +544,6 @@ public Map<String, String> getIndicators(String zone, String species, String locale) throws CoserBusinessException { Map<String, String> indicators = 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(); @@ -568,24 +567,18 @@ RSufiResult rsufiResult = projectService.getRSufiResult(resultFile); // extraction des especes pour le résultat demandé - if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zoneId)) { + if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) { - // get survey name (other condition) - String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult); - - // data loading not necessary here - if (surveyName.equals(survey)) { - Map<String, String> resultIndicators = null; - - if (species == null) { - resultIndicators = getRsufiResultComIndicators(resultFile, rsufiResult, locale); - } - else { - resultIndicators = getRsufiResultPopIndicators(resultFile, rsufiResult, species, locale); - } - indicators.putAll(resultIndicators); - break; + Map<String, String> resultIndicators = null; + + if (species == null) { + resultIndicators = getRsufiResultComIndicators(resultFile, rsufiResult, locale); } + else { + resultIndicators = getRsufiResultPopIndicators(resultFile, rsufiResult, species, locale); + } + indicators.putAll(resultIndicators); + break; } } } @@ -684,7 +677,7 @@ * Retourne les indicateurs calculés avec leurs traductions scientifique * pour la zone et l'especes souhaitées. * - * @param zone zone (zoneid-surveyname) + * @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}) @@ -694,9 +687,6 @@ public File getChart(String zone, String species, String indicator, String locale) throws CoserBusinessException { File result = null; - 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(); @@ -720,21 +710,15 @@ RSufiResult rsufiResult = projectService.getRSufiResult(resultFile); // extraction des especes pour le résultat demandé - if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zoneId)) { + if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) { - // get survey name (other condition) - String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult); - - // data loading not necessary here - if (surveyName.equals(survey)) { - if (species == null) { - result = publicationService.getRsufiResultComChart(resultFile, rsufiResult, indicator, locale); - } - else { - result = publicationService.getRsufiResultPopChart(resultFile, rsufiResult, species, indicator, locale); - } - break; + if (species == null) { + result = publicationService.getRsufiResultComChart(resultFile, rsufiResult, indicator, locale); } + else { + result = publicationService.getRsufiResultPopChart(resultFile, rsufiResult, species, indicator, locale); + } + break; } } } @@ -762,9 +746,6 @@ File result = null; - 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(); @@ -788,16 +769,14 @@ RSufiResult rsufiResult = projectService.getRSufiResult(resultFile); // extraction des especes pour le résultat demandé - if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zoneId)) { + if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) { // get survey name (other condition) String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult); - if (surveyName.equals(survey)) { - String mapName = survey + "_" + species.toUpperCase() + ".png"; - File mapsDirectory = new File(resultFile, CoserConstants.STORAGE_MAPS_DIRECTORY); - result = new File(mapsDirectory, mapName); - } + String mapName = surveyName + "_" + species.toUpperCase() + ".png"; + File mapsDirectory = new File(resultFile, CoserConstants.STORAGE_MAPS_DIRECTORY); + result = new File(mapsDirectory, mapName); } } }