Author: chatellier Date: 2010-11-30 14:39:55 +0000 (Tue, 30 Nov 2010) New Revision: 310 Log: Extraction des donn?\195?\169es RSUfi Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx 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 2010-11-30 14:39:40 UTC (rev 309) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-30 14:39:55 UTC (rev 310) @@ -28,12 +28,15 @@ import static org.nuiton.i18n.I18n._; import java.beans.Introspector; +import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.PrintStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -2111,7 +2114,9 @@ String strata = densityForYear.getKey(); Double surfaceparstrate = surfacesParStrates.get(specy + ";" + year + ";" + strata); if (surfaceparstrate == null) { - log.warn("no surface for " + specy + ";" + year + ";" + strata); + if (log.isWarnEnabled()) { + log.warn("no surface for " + specy + ";" + year + ";" + strata); + } surfaceparstrate = 0.0; } double nombreparstrate = surfaceparstrate * meanDensity; @@ -2125,4 +2130,63 @@ return matrix; } + + /** + * Extrait les données de la selection + * + * @param project project + * @param selection selection + * @param directory directory to extract file to + * @throws CoserBusinessException + */ + public void extractRSUfiData(Project project, Selection selection, File directory) throws CoserBusinessException { + + File projectDirectory = new File(directory, project.getName()); + projectDirectory.mkdirs(); + + // extract 4 data files + for (Category category : Category.values()) { + if (category.isDataCategory()) { + // originals names without suffix + String storageFileName = getDataStorageFileName(project, category, null); + File dataFile = new File(projectDirectory, storageFileName); + if (log.isDebugEnabled()) { + log.debug("Saving selection file : " + dataFile); + } + + DataStorage content = getProjectContent(project, selection, category, false); + importService.storeData(project, content, dataFile); + } + } + + // extract additionnal data file (selected species) + List<String> allSpecies = selection.getSelectedSpecies(); + List<String> occDensSpecies = selection.getSelectedSpeciesOccDens(); + List<String> sizeAllYearSpecies = selection.getSelectedSpeciesSizeAllYear(); + List<String> maturitySpecies = selection.getSelectedSpeciesMaturity(); + + File resultDirectory = new File(projectDirectory, "result-" + project.getName()); + File prepDirectory = new File(resultDirectory, "prep-" + project.getName()); + prepDirectory.mkdirs(); + File listSpeciesFile = new File(prepDirectory, "ListEspeces" + project.getName() + ".txt"); + PrintStream out = null; + try { + out = new PrintStream(new BufferedOutputStream(new FileOutputStream(listSpeciesFile))); + + // header + out.println("Espece\tListAll\tListIdent\tListLong\tListMat"); + + for (String species : allSpecies) { + String listIdent = occDensSpecies.contains(species) ? "1" : "0"; + String listLong = sizeAllYearSpecies.contains(species) ? "1" : "0"; + String listMat = maturitySpecies.contains(species) ? "1" : "0"; + out.println(species + "\t1\t" + listIdent + "\t" + listLong + "\t" + listMat); + } + } catch (FileNotFoundException ex) { + throw new CoserBusinessException("Can't extract rsufi files", ex); + } + finally { + IOUtils.closeQuietly(out); + } + } } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-30 14:39:40 UTC (rev 309) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-30 14:39:55 UTC (rev 310) @@ -31,6 +31,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; +import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -40,9 +41,11 @@ import java.util.Map; import java.util.Set; +import javax.swing.JFileChooser; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; +import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import jaxx.runtime.JAXXUtil; @@ -142,7 +145,6 @@ * @param view view */ public void initSelection(SelectionView view) { - ProjectService projectService = view.getContextValue(ProjectService.class); Selection selection = view.getContextValue(Selection.class); // initialize la liste de toutes les années @@ -690,4 +692,52 @@ } view.dispose(); } + + /** + * Retourne une unique instance du file chooser pour conserver + * le répertoire de sélection d'un appel sur l'autre. + * + * @return + */ + protected JFileChooser getFileChooser() { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + return fileChooser; + } + + /** + * Extract data as RSufi format. + * + * @param view view + * @param textComponent text component to set selected directory + */ + public void selectOutputDirectory(SelectionRsufiView view, JTextField textComponent) { + JFileChooser selectFileChooser = getFileChooser(); + + int result = selectFileChooser.showOpenDialog(view); + if (result == JFileChooser.APPROVE_OPTION) { + File selectedFile = selectFileChooser.getSelectedFile(); + textComponent.setText(selectedFile.getAbsolutePath()); + } + } + + /** + * Extract data as RSufi format. + * + * @param view view + */ + public void extractRSufiData(SelectionRsufiView view) { + + ProjectService projectService = view.getContextValue(ProjectService.class); + Project project = view.getContextValue(Project.class); + Selection selection = view.getContextValue(Selection.class); + + String directoryPath = view.getResultExtractDataField().getText(); + File directory = new File(directoryPath); + try { + projectService.extractRSUfiData(project, selection, directory); + } catch (CoserBusinessException ex) { + throw new CoserException("Can't extract rsufi files", ex); + } + } } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx 2010-11-30 14:39:40 UTC (rev 309) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx 2010-11-30 14:39:55 UTC (rev 310) @@ -35,12 +35,14 @@ <JTextField id="resultExtractDataField" /> </cell> <cell> - <JButton text="coser.ui.common.selectFile" /> + <JButton text="coser.ui.common.selectFile" + onActionPerformed="getHandler().selectOutputDirectory(this, resultExtractDataField)" /> </cell> </row> <row> <cell columns="3"> - <JButton text="coser.ui.result.extractDataButton" /> + <JButton text="coser.ui.result.extractDataButton" enabled="{!resultExtractDataField.getText().isEmpty()}" + onActionPerformed="getHandler().extractRSufiData(this)"/> </cell> </row> </Table>
participants (1)
-
chatellier@users.labs.libre-entreprise.org