r518 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources/i18n coser-ui/src/main/java/fr/ifremer/coser/ui/result
Author: chatellier Date: 2011-01-17 17:02:39 +0000 (Mon, 17 Jan 2011) New Revision: 518 Log: Prise en compte des type map et publication de r?\195?\169sultats 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 trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.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-17 13:47:01 UTC (rev 517) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-17 17:02:39 UTC (rev 518) @@ -1012,7 +1012,7 @@ } /** - * Save Rsufi result list in directory strucuture. + * Create new rsufi result list in directory structure. * * RSufiResult is added to selection result list by this method. * @@ -1044,7 +1044,6 @@ rsufiResult.setCreationDate(new Date()); } - OutputStream outputStream = null; try { // sauvegarde des 2 fichiers obligatoires File estComIndFile = new File(rsufiResult.getEstComIndPath()); @@ -1072,21 +1071,12 @@ } } - // sauvegarde des informations du resultat (properties) - File propertiesFile = new File(rsufiResultDirectory, "result.properties"); - Properties props = rsufiResult.toProperties(); - outputStream = new FileOutputStream(propertiesFile); - props.store(outputStream, null); + // property file + saveRSufiResult(rsufiResultDirectory, rsufiResult); - if (log.isDebugEnabled()) { - log.debug("Saving result properties file : " + propertiesFile); - } } catch (IOException ex) { throw new CoserBusinessException("Can't save result properties file", ex); } - finally { - IOUtils.closeQuietly(outputStream); - } List<RSufiResult> results = selection.getRsufiResults(); results.add(rsufiResult); @@ -1096,6 +1086,31 @@ } /** + * Save rsufi result (only property file). + * + * @param rsufiResultDirectory rsufiresult directory + * @param rsufiResult rsufi result + * @throws CoserBusinessException + */ + public void saveRSufiResult(File rsufiResultDirectory, RSufiResult rsufiResult) throws CoserBusinessException { + + OutputStream outputStream = null; + try { + // sauvegarde des informations du resultat (properties) + File propertiesFile = new File(rsufiResultDirectory, "result.properties"); + Properties props = rsufiResult.toProperties(); + outputStream = new FileOutputStream(propertiesFile); + props.store(outputStream, null); + + if (log.isDebugEnabled()) { + log.debug("Saving result properties file : " + propertiesFile); + } + } catch (IOException ex) { + throw new CoserBusinessException("Can't save result properties file", ex); + } + } + + /** * Sauve une liste ordonnées de commande dans le fichier specifié. * * @param props proparties to add command to 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-17 13:47:01 UTC (rev 517) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-17 17:02:39 UTC (rev 518) @@ -307,14 +307,20 @@ * Upload user selected result to coser web front-end using common http * client. * + * TODO remove les 3 listes s'il y a mieux. + * * @param selectedResults selected result (collection of project/selection/rsufiresult) + * @param mapResults result selected as list result + * @param publishDataResults result selected as results published with data * @param login remote admin login * @param password remote admin password * @param progress progress monitor * @return upload error status or {@code null} if no error * @throws CoserBusinessException */ - public String performResultUpload(Collection<Object[]> selectedResults, String login, String password, ProgressMonitor progress) throws CoserBusinessException { + public String performResultUpload(Collection<Object[]> selectedResults, + Collection<Object[]> mapResults, Collection<Object[]> publishDataResults, + String login, String password, ProgressMonitor progress) throws CoserBusinessException { String uploadStatus = null; @@ -323,6 +329,9 @@ // and selection with only selected results progress.setCurrent(0); + progress.setText(_("coser.business.uploadresult.modifyResultOptions")); + modifyRSufiResults(selectedResults, mapResults, publishDataResults); + progress.setText(_("coser.business.uploadresult.checkcollision")); checkDataCollision(selectedResults); @@ -375,6 +384,58 @@ } /** + * Modifie les types et options de certains résultats rsufi (map result, + * data sources result). + * + * @param selectedResults selected result (collection of project/selection/rsufiresult) + * @param mapResults map results + * @param publishDataResults publish data results + * @throws CoserBusinessException + */ + protected void modifyRSufiResults(Collection<Object[]> selectedResults, Collection<Object[]> mapResults, + Collection<Object[]> publishDataResults) throws CoserBusinessException { + + // TODO echatellier 20110117 revoir ce code + + // attention, il faut sauver tout les resultats, sinon, les + // decochage de type map / publish result ne seront pas pris en compte + + // reset type map and data source for all + for (Object[] selectedResult : selectedResults) { + RSufiResult rsufiResult = (RSufiResult)selectedResult[2]; + rsufiResult.setMapsReferenceResult(false); + rsufiResult.setDataAllowed(false); + } + + // set map type + for (Object[] mapResult : mapResults) { + RSufiResult rsufiResult = (RSufiResult)mapResult[2]; + rsufiResult.setMapsReferenceResult(true); + } + + // set data type + for (Object[] publishDataResult : publishDataResults) { + RSufiResult rsufiResult = (RSufiResult)publishDataResult[2]; + rsufiResult.setDataAllowed(true); + } + + // save all selected results + for (Object[] selectedResult : selectedResults) { + Project project = (Project)selectedResult[0]; + Selection selection = (Selection)selectedResult[1]; + RSufiResult rsufiResult = (RSufiResult)selectedResult[2]; + + File projectDirectory = new File(config.getProjectsDirectory(), 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()); + + projectService.saveRSufiResult(resultDirectory, rsufiResult); + } + } + + /** * Met à jour les fichiers de propriétés des resultats (maps, dataSource) * and check for duplicated couple (zoneid/resulttype (map) upload). * @@ -726,7 +787,7 @@ * @throws CoserBusinessException */ public Map<String, String> getZoneForFacade(String facade) throws CoserBusinessException { - Map<String, String> surveyForZone = new HashMap<String, String>(); + Map<String, String> zonesForFacade = new HashMap<String, String>(); // get subzone for main zone Collection<String> subZones = new ArrayList<String>(); @@ -771,7 +832,7 @@ String[] zoneData = getZonesMap().get(zoneIndex); String zoneName = zoneData[2] + " - " + zoneData[3] + " - " + zoneData[4]; - surveyForZone.put(zoneid, zoneName); + zonesForFacade.put(zoneid, zoneName); } } } @@ -782,10 +843,36 @@ } } } - - return surveyForZone; + + return zonesForFacade; } + + /** + * Pour une zone principale, recupere la liste des campagnes qui sont + * disponible dans cette zone principale. + * + * @param facade facade (le nom de la facade principale) + * @return couple campagneid/campagnename + * @throws CoserBusinessException + */ + public Map<String, String> getSurveyForFacade(String facade) throws CoserBusinessException { + Map<String, String> surveyForFacade = new HashMap<String, String>(); + + // get subzone for main zone + 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)) { + if (!surveyForFacade.containsKey(tuple[4])) { + surveyForFacade.put(tuple[4], tuple[4]); + } + } + } + return surveyForFacade; + } + /** * Recupere la liste des cartes pour chaque id de zone sous forme de Map. * @@ -879,7 +966,81 @@ return result; } + + /** + * Recuperer la liste des populations pour une campagnes donnée. + * + * Les resultats retourné ne peuvent être que de type "carte". + * + * @param survey survey id + * @return map species nom info>nom officiel + * @throws CoserBusinessException + */ + public Map<String, String> getSpeciesForSurvey(String survey) throws CoserBusinessException { + Map<String, String> result = new TreeMap<String, String>(); + + // parcours des resultats disponibles + File projectsDirectory = config.getWebProjectsDirectory(); + File[] projectFiles = projectsDirectory.listFiles(); + 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); + + // extraction des especes pour le résultat demandé + if (rsufiResult.getZone() != null && rsufiResult.isMapsReferenceResult()) { + + // test parmis toutes les zones disponible + // si le resultat appartient a une zone + // qui porte sur la campagne demandée + boolean zoneRSufiResult = false; + Iterator<String[]> itZone = getZonesMap().iterator(true); + while (itZone.hasNext()) { + // "id";"facade";"zone";"periode";"serie";"comment";"map" + String[] tuple = itZone.next(); + + if (tuple[4].equals(survey) && rsufiResult.getZone().equals(tuple[0])) { + zoneRSufiResult = true; + } + } + + if (zoneRSufiResult) { + // 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; + } + } + } + } + } + } + } + } + } + } + } + + return result; + } + /** * Recupere la liste de toutes les especes nom sci et nom off à partir * d'un resultat. @@ -1134,12 +1295,12 @@ * Recupere le fichier image de la carte demandées en fonction de la zone * et de l'espece. * - * @param zone zone (zoneid-surveyname) + * @param survey survey (surveyid) * @param species * @return map file * @throws CoserBusinessException */ - public File getMapFile(String zone, String species) throws CoserBusinessException { + public File getMapFile(String survey, String species) throws CoserBusinessException { File result = null; @@ -1166,14 +1327,30 @@ RSufiResult rsufiResult = projectService.getRSufiResult(resultFile); // extraction des especes pour le résultat demandé - if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) { + if (rsufiResult.getZone() != null && rsufiResult.isMapsReferenceResult()) { - // get survey name (other condition) - String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult); + // test parmis toutes les zones disponible + // si le resultat appartient a une zone + // qui porte sur la campagne demandée + boolean zoneRSufiResult = false; + Iterator<String[]> itZone = getZonesMap().iterator(true); + while (itZone.hasNext()) { + // "id";"facade";"zone";"periode";"serie";"comment";"map" + String[] tuple = itZone.next(); - String mapName = surveyName + "_" + species.toUpperCase() + ".png"; - File mapsDirectory = new File(resultFile, CoserConstants.STORAGE_MAPS_DIRECTORY); - result = new File(mapsDirectory, mapName); + if (tuple[4].equals(survey) && rsufiResult.getZone().equals(tuple[0])) { + zoneRSufiResult = true; + } + } + + if (zoneRSufiResult) { + // get survey name (other condition) + String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult); + + String mapName = surveyName + "_" + species.toUpperCase() + ".png"; + File mapsDirectory = new File(resultFile, CoserConstants.STORAGE_MAPS_DIRECTORY); + result = new File(mapsDirectory, mapName); + } } } } Modified: trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2011-01-17 13:47:01 UTC (rev 517) +++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2011-01-17 17:02:39 UTC (rev 518) @@ -97,6 +97,7 @@ coser.business.resultupload.duplicatedresult=Result %s/%s/%s duplicate another result for zone %s \! coser.business.selection.notValidatedControl=Not validated control \! coser.business.uploadresult.checkcollision=Checking zone collisions +coser.business.uploadresult.modifyResultOptions=Modify result options coser.business.uploadresult.preparezip=Preparing zip archive\u2026 coser.business.uploadresult.sendzip=Sending zip archive\u2026 coser.config.control.diffcatchlength.description=Percentage difference allowed between catch and length (in percent, for example 5% set 5.0) Modified: trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2011-01-17 13:47:01 UTC (rev 517) +++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2011-01-17 17:02:39 UTC (rev 518) @@ -97,6 +97,7 @@ coser.business.resultupload.duplicatedresult=Le r\u00E9sultat %s/%s/%s duplique un autre r\u00E9sultat pour la zone %s \! coser.business.selection.notValidatedControl=Contr\u00F4le non valid\u00E9 \! coser.business.uploadresult.checkcollision=V\u00E9rification des collisions de zones +coser.business.uploadresult.modifyResultOptions=Modification des options des r\u00E9sultats coser.business.uploadresult.preparezip=Pr\u00E9paration de l'archive zip\u2026 coser.business.uploadresult.sendzip=Envoi de l'archive zip\u2026 coser.config.control.diffcatchlength.description=Pourcentage d'\u00E9cart tol\u00E9r\u00E9 entre les captures et les tailles (en pourcent, par exemple pour 5% mettre 5.0) Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java 2011-01-17 13:47:01 UTC (rev 517) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java 2011-01-17 17:02:39 UTC (rev 518) @@ -154,6 +154,8 @@ // get result selected by user SelectUploadResultView parentView = view.getContextValue(SelectUploadResultView.class, JAXXUtil.PARENT); final Collection<Object[]> selectedResult = parentView.getSelectedResultTableModel().getResultPath(); + final Collection<Object[]> mapResult = parentView.getSelectedResultTableModel().getMapResult(); + final Collection<Object[]> publishDataResult = parentView.getSelectedResultTableModel().getPublishDataResult(); if (CollectionUtils.isNotEmpty(selectedResult)) { SwingWorker<String, Void> task = new SwingWorker<String, Void>() { @@ -163,7 +165,7 @@ // get progress bar CoserProgressBar progressBar = view.getUploadProgressBar(); WebService webService = view.getContextValue(WebService.class); - String status = webService.performResultUpload(selectedResult, login, password, progressBar); + String status = webService.performResultUpload(selectedResult, mapResult, publishDataResult, login, password, progressBar); return status; } catch (CoserBusinessException ex) {
participants (1)
-
chatellier@users.labs.libre-entreprise.org