r245 - in trunk: . coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/bean coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources/i18n coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/result coser-ui/src/main/java/fr/ifremer/coser/ui/selection coser-ui/src/main/java/fr/ifremer/coser/ui/util coser-ui/src/main/resources/fr/ifremer/coser/bean coser-ui/src/main/resources/i18n
Author: chatellier Date: 2010-11-22 17:53:03 +0000 (Mon, 22 Nov 2010) New Revision: 245 Log: Implementation de la sauvegarde des resultats. Ajout de la validation de la selection. Added: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx trunk/coser-ui/src/main/resources/fr/ifremer/coser/bean/RSufiResult-error-validation.xml Removed: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionResultView.jaxx Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.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/CoserFrameHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultTableModel.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionView.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/util/CoserListSelectionModel.java trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties trunk/pom.xml Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2010-11-22 17:53:03 UTC (rev 245) @@ -56,6 +56,9 @@ /** Nom du dossier de sauvegarde des selections. */ public static final String STORAGE_SELECTION_DIRECTORY = "selections"; + /** Nom du dossier des resultats RSufi. */ + public static final String STORAGE_RESULTS_DIRECTORY = "results"; + /** Suffix des nom de fichiers data apres control. */ public static final String STORAGE_CONTROL_SUFFIX = "_co"; @@ -67,16 +70,7 @@ /** Extension des fichiers CSV. */ public static final String STORAGE_CSV_EXTENSION = ".csv"; - - /** Nom du fichier des historiques de modification */ - public static final String STORAGE_HISTORY_FILENAME = "history"; - /** Extension du fichier d'historique pour le control. */ - public static final String STORAGE_HISTORY_CONTROL_EXTENSION = ".chc"; - - /** Extension du fichier d'historique pour la selection. */ - public static final String STORAGE_HISTORY_SELECTION_EXTENSION = ".chs"; - /** Categories des données manipulées. */ public static enum Category { CATCH(n_("coser.business.category.catch"), "catch"), Added: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java 2010-11-22 17:53:03 UTC (rev 245) @@ -0,0 +1,81 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2010 Codelutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package fr.ifremer.coser.bean; + +import java.util.Properties; + +/** + * RSufi result. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class RSufiResult extends AbstractEntity { + + /** serialVersionUID. */ + private static final long serialVersionUID = -1337710082675120199L; + + protected String name; + + protected String rsufiVersion; + + public String getName() { + return name; + } + + public void setName(String name) { + String oldValue = this.name; + this.name = name; + getPropertyChangeSupport().firePropertyChange("name", oldValue, name); + } + + public String getRsufiVersion() { + return rsufiVersion; + } + + public void setRsufiVersion(String rsufiVersion) { + String oldValue = this.rsufiVersion; + this.rsufiVersion = rsufiVersion; + getPropertyChangeSupport().firePropertyChange("name", oldValue, name); + } + + public Properties toProperties() { + Properties props = new Properties(); + if (getRsufiVersion() != null) { + props.setProperty("result.rsufiversion", getRsufiVersion()); + } + return props; + } + + public void fromProperties(Properties props) { + if (props.containsKey("result.rsufiversion")) { + setRsufiVersion(props.getProperty("result.rsufiversion")); + } + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResult.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java 2010-11-22 17:53:03 UTC (rev 245) @@ -45,6 +45,10 @@ /** serialVersionUID. */ private static final long serialVersionUID = -1484104459960459854L; + public static final String PROPERTY_VALIDATED = "validated"; + + public static final String PROPERTY_RSUFI_RESULTS = "rsufiResults"; + protected String name; protected String description; @@ -69,6 +73,10 @@ protected String comment; + protected boolean validated; + + protected List<RSufiResult> rsufiResults; + public String getName() { return name; } @@ -153,14 +161,33 @@ this.comment = comment; getPropertyChangeSupport().firePropertyChange("comment", oldValue, comment); } - + + public boolean isValidated() { + return validated; + } + + public void setValidated(boolean validated) { + boolean oldValue = this.validated; + this.validated = validated; + getPropertyChangeSupport().firePropertyChange(PROPERTY_VALIDATED, oldValue, validated); + } + + public List<RSufiResult> getRsufiResults() { + return rsufiResults; + } + + public void setRsufiResults(List<RSufiResult> rsufiResults) { + this.rsufiResults = rsufiResults; + getPropertyChangeSupport().firePropertyChange(PROPERTY_RSUFI_RESULTS, null, rsufiResults); + } + public Properties toProperties() { Properties props = new Properties(); if (getAllYears() != null) { props.setProperty("selection.allYears", StringUtils.join(getAllYears(),',')); } if (getSelectedYears() != null) { - props.setProperty("selection.selectedYears", StringUtils.join(getAllYears(),',')); + props.setProperty("selection.selectedYears", StringUtils.join(getSelectedYears(),',')); } if (getSelectedStrata() != null) { props.setProperty("selection.selectedStrata", StringUtils.join(getSelectedStrata(),',')); @@ -180,6 +207,7 @@ if (description != null) { props.setProperty("selection.description", description); } + props.setProperty("selection.validated", String.valueOf(isValidated())); if (comment != null) { props.setProperty("selection.comment", comment); } @@ -214,6 +242,9 @@ if (props.containsKey("selection.comment")) { setComment(props.getProperty("selection.comment")); } + if (props.containsKey("selection.validated")) { + setValidated(Boolean.parseBoolean(props.getProperty("selection.validated"))); + } } protected List<String> splitAsList(String str) { 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-22 14:02:49 UTC (rev 244) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-22 17:53:03 UTC (rev 245) @@ -67,6 +67,7 @@ import fr.ifremer.coser.bean.AbstractDataContainer; import fr.ifremer.coser.bean.Control; import fr.ifremer.coser.bean.Project; +import fr.ifremer.coser.bean.RSufiResult; import fr.ifremer.coser.bean.Selection; import fr.ifremer.coser.command.Command; import fr.ifremer.coser.command.DeleteLineCommand; @@ -329,6 +330,9 @@ finally { IOUtils.closeQuietly(inputStream); } + + List<RSufiResult> rsufiResults = loadRSufiResults(selectionDirectory); + selection.setRsufiResults(rsufiResults); selections.put(selectionDirectory.getName(), selection); } @@ -359,6 +363,51 @@ } /** + * Load rsufi result in specified directory. + * + * @param selectionDirectory selection directory + * @return rsufi results list + * @throws CoserBusinessException + */ + protected List<RSufiResult> loadRSufiResults(File selectionDirectory) throws CoserBusinessException { + + List<RSufiResult> results = new ArrayList<RSufiResult>(); + File resultsDirectory = new File(selectionDirectory, CoserConstants.STORAGE_RESULTS_DIRECTORY); + File[] resultsDirectories = resultsDirectory.listFiles(); + + if (resultsDirectories != null) { + for (File resultDirectory : resultsDirectories) { + if (resultDirectory.isDirectory()) { + RSufiResult rsufiResult = new RSufiResult(); + rsufiResult.setName(resultDirectory.getName()); + results.add(rsufiResult); + + // relecture des informations du resultat (properties) + File resultPropertiesFile = new File(resultDirectory, "result.properties"); + InputStream inputStream = null; + try { + Properties props = new Properties(); + inputStream = new FileInputStream(resultPropertiesFile); + props.load(inputStream); + rsufiResult.fromProperties(props); + + if (log.isDebugEnabled()) { + log.debug("Read result properties file : " + resultPropertiesFile); + } + } catch (IOException ex) { + throw new CoserBusinessException("Can't read result properties file", ex); + } + finally { + IOUtils.closeQuietly(inputStream); + } + } + } + } + + return results; + } + + /** * Load control data in an initialized project. * * @param project project @@ -607,45 +656,35 @@ * @throws CoserBusinessException */ public Selection initProjectSelection(Project project) throws CoserBusinessException { - - // tout ce qui suit doit exister à ce stade - File projectsDirectory = config.getProjectsDirectory(); - String projectName = project.getName(); - File projectDirectory = new File(projectsDirectory, projectName); - File controlDirectory = new File(projectDirectory, CoserConstants.STORAGE_CONTROL_DIRECTORY); - File catchControlFile = new File(controlDirectory, Category.CATCH.getStorageFileName() + - CoserConstants.STORAGE_CONTROL_SUFFIX + CoserConstants.STORAGE_CSV_EXTENSION); - // petit test pour savoir si la validation a été validée - // et sauvée, empechant dans le cas contraire, la création d'une selection - if (!catchControlFile.exists()) { - throw new CoserBusinessException(_("coser.business.selection.noControlForSelection")); + // le control doit être validé + if (!project.getControl().isValidated()) { + throw new CoserBusinessException(_("coser.business.selection.notValidatedControl")); } - // TODO echatellier 20101027 voir si on force que les - // fichier de validation existe ici ou pas - Project localProject = project; if (localProject.getControl() == null || !localProject.getControl().isDataLoaded()) { localProject = loadControlData(localProject); } - + // create new selection Control control = localProject.getControl(); DataStorage dataCatch = control.getCatch(); DataStorage dataHaul = control.getHaul(); DataStorage dataLength = control.getLength(); DataStorage dataStrata = control.getStrata(); - + project.clearData(); - + Selection selection = new Selection(); selection.setCatch(dataCatch); selection.setHaul(dataHaul); selection.setLength(dataLength); selection.setStrata(dataStrata); selection.setHistoryCommand(new ArrayList<Command>()); - + + selection.setRsufiResults(new ArrayList<RSufiResult>()); + return selection; } @@ -660,8 +699,7 @@ // tout ce qui suit doit exister à ce stade File projectsDirectory = config.getProjectsDirectory(); - String projectName = project.getName(); - File projectDirectory = new File(projectsDirectory, projectName); + File projectDirectory = new File(projectsDirectory, project.getName()); // creation du dossier de selections (peut deja exister) File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY); @@ -690,8 +728,7 @@ // tout ce qui suit doit exister à ce stade File projectsDirectory = config.getProjectsDirectory(); - String projectName = project.getName(); - File projectDirectory = new File(projectsDirectory, projectName); + File projectDirectory = new File(projectsDirectory, project.getName()); // creation du dossier de selections (peut deja exister) File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY); @@ -738,6 +775,59 @@ } /** + * Save Rsufi result list in directory strucuture. + * + * RSufiResult is added to selection result list by this method. + * + * @param project project + * @param selection selection + * @param rsufiResult new result to save + * @throws CoserBusinessException + */ + public void saveRsufiResults(Project project, Selection selection, + RSufiResult rsufiResult) throws CoserBusinessException { + + File projectsDirectory = config.getProjectsDirectory(); + 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 rsufiResultDirectory = new File(resultsDirectory, rsufiResult.getName()); + + // save it + if (rsufiResultDirectory.exists()) { + throw new CoserBusinessException(_("coser.business.result.rsufiResultAlreadyExists", rsufiResult.getName())); + } + else { + rsufiResultDirectory.mkdirs(); + + // sauvegarde des informations du resultat (properties) + File propertiesFile = new File(rsufiResultDirectory, "result.properties"); + Properties props = rsufiResult.toProperties(); + OutputStream outputStream = null; + try { + 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); + } + finally { + IOUtils.closeQuietly(outputStream); + } + + List<RSufiResult> results = selection.getRsufiResults(); + results.add(rsufiResult); + // this way to fire change event (do not remove) + selection.setRsufiResults(results); + } + + } + + /** * Sauve une liste ordonnées de commande dans le fichier specifié. * * @param props proparties to add command to @@ -1154,7 +1244,7 @@ * @return zones */ public List<String> filterDataYearsAndGetStrata(Selection selection, Collection<String> years) { - + List<String> result = new ArrayList<String>(); // manage haul @@ -1175,6 +1265,10 @@ } } + if (log.isDebugEnabled()) { + log.debug("Haul data filtered by " + years); + } + // manage catch Iterator<String[]> itCatch = selection.getCatch().iterator(); itCatch.next(); // skip header @@ -1187,6 +1281,10 @@ } } + if (log.isDebugEnabled()) { + log.debug("Catch data filtered by " + years); + } + // manage length Iterator<String[]> itLength = selection.getLength().iterator(); itLength.next(); // skip header @@ -1198,6 +1296,10 @@ itLength.remove(); } } + + if (log.isDebugEnabled()) { + log.debug("Length data filtered by " + years); + } return result; } 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 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2010-11-22 17:53:03 UTC (rev 245) @@ -53,7 +53,9 @@ coser.business.control.step.observation= coser.business.control.step.xworks= coser.business.line=Line +coser.business.result.rsufiResultAlreadyExists= coser.business.selection.noControlForSelection= +coser.business.selection.notValidatedControl= coser.config.control.diffcatchlength.description= coser.config.database.directory.description= coser.config.observation.nobsmin.description= 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 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2010-11-22 17:53:03 UTC (rev 245) @@ -53,7 +53,9 @@ coser.business.control.step.observation=V\u00E9rification du nombre d'observation (%d%%) coser.business.control.step.xworks=Validation par lignes (%d%%) coser.business.line=Ligne +coser.business.result.rsufiResultAlreadyExists=Le r\u00E9sultat %D existe d\u00E9j\u00E0 \! coser.business.selection.noControlForSelection=Impossible de creer une s\u00E9lection sans donn\u00E9es control\u00E9es. +coser.business.selection.notValidatedControl=Contr\u00F4le non valid\u00E9 \! coser.config.control.diffcatchlength.description=Pourcentage d'\u00E9cart tol\u00E9r\u00E9 entre les captures et les tailles coser.config.database.directory.description=Emplacement de la base de campagnes de coser coser.config.observation.nobsmin.description=Nombre minimal d'observation Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-22 17:53:03 UTC (rev 245) @@ -374,11 +374,7 @@ view.setContextValue(selection); SelectionView selectionView = new SelectionView(view); - selectionView.setCreationState(true); selectionView.setSelection(selection); - // disable tabs - selectionView.setEnabledAt(1, false); // selection lists - selectionView.setEnabledAt(2, false); // rsufi // fix, binding not working ? selectionView.getSelectionDetailsTab().getValidatorSelection().setBean(selection); @@ -435,8 +431,6 @@ setMainComponent(selectionView); } catch (CoserBusinessException ex) { throw new CoserException("Can't reload selection data", ex); - } catch(Exception ex){ - throw new CoserException("Can't init map", ex); } } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultTableModel.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultTableModel.java 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultTableModel.java 2010-11-22 17:53:03 UTC (rev 245) @@ -23,41 +23,37 @@ package fr.ifremer.coser.ui.result; -import java.util.ArrayList; -import java.util.List; +import static org.nuiton.i18n.I18n._; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + import javax.swing.table.AbstractTableModel; +import fr.ifremer.coser.bean.RSufiResult; +import fr.ifremer.coser.bean.Selection; +import fr.ifremer.coser.ui.selection.SelectionRsufiView; + /** + * Modele de la table des résultats RSufi. * - * * @author chatellier * @version $Revision$ * * Last update : $Date$ * By : $Author$ */ -public class ResultTableModel extends AbstractTableModel { +public class ResultTableModel extends AbstractTableModel implements PropertyChangeListener { /** serialVersionUID. */ private static final long serialVersionUID = -1192463259386773117L; - protected List<String> data; - protected List<String> header; + protected Selection selection; - public ResultTableModel() { - - header = new ArrayList<String>(); - header.add("Nom du r\u00E9sultat :"); - header.add("Version RSufi"); - header.add("Fichier données 1"); - header.add("Fichier données 2"); + public ResultTableModel(SelectionRsufiView view) { + selection = view.getContextValue(Selection.class); - data = new ArrayList<String>(); - data.add("R\u00E9sultat de test"); - data.add("1.0.0"); - data.add("EstComInd_IBTS.txt"); - data.add("EstPopInd_IBTS.txt"); + selection.addPropertyChangeListener(Selection.PROPERTY_RSUFI_RESULTS, this); } /* @@ -65,7 +61,7 @@ */ @Override public int getRowCount() { - return 4; + return selection.getRsufiResults().size(); } /* @@ -73,14 +69,28 @@ */ @Override public int getColumnCount() { - return header.size(); + return 4; } @Override public String getColumnName(int column) { String name = null; - name = header.get(column); + + switch (column) { + case 0: + name = _("coser.ui.result.table.resultName"); + break; + case 1: + name = _("coser.ui.result.table.rsufiVersion"); + break; + case 2: + name = _("coser.ui.result.table.dataFile1"); + break; + case 3: + name = _("coser.ui.result.table.dataFile2"); + break; + } return name; } @@ -91,9 +101,27 @@ public Object getValueAt(int rowIndex, int columnIndex) { Object result = null; + RSufiResult rsufiResult = selection.getRsufiResults().get(rowIndex); + switch (columnIndex) { + case 0: + result = rsufiResult.getName(); + break; + case 1: + result = rsufiResult.getRsufiVersion(); + break; + default: + result = "N/A"; + break; + } - result = data.get(columnIndex); - return result; } + + /* + * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) + */ + @Override + public void propertyChange(PropertyChangeEvent evt) { + fireTableDataChanged(); + } } Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx (rev 0) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx 2010-11-22 17:53:03 UTC (rev 245) @@ -0,0 +1,115 @@ +<!-- + #%L + Coser :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU 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 General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<JDialog title="coser.ui.result.newResult" modal="true"> + <Table> + <fr.ifremer.coser.ui.selection.SelectionHandler id="handler" javaBean="null" /> + + <fr.ifremer.coser.bean.RSufiResult id="rsufiResult" javaBean="null" /> + <jaxx.runtime.validator.swing.SwingValidatorMessageTableModel id='errorsTableModel' + onTableChanged='saveResultButton.setEnabled(errorsTableModel.getRowCount()==0)'/> + <BeanValidator id='validatorRSufiResult' bean='rsufiResult' + uiClass="jaxx.runtime.validator.swing.ui.ImageValidationUI" + errorTableModel="errorsTableModel"> + <field name="name" component="resultNameField" /> + <field name="rsufiVersion" component="resultRsufiVersion" /> + </BeanValidator> + + <row> + <cell anchor="west"> + <JLabel text="coser.ui.result.resultName" /> + </cell> + <cell fill="horizontal" columns="2"> + <JTextField id="resultNameField" /> + <javax.swing.text.Document javaBean="resultNameField.getDocument()" + onInsertUpdate='getRsufiResult().setName(resultNameField.getText())' + onRemoveUpdate='getRsufiResult().setName(resultNameField.getText())' /> + </cell> + </row> + <row> + <cell anchor="west"> + <JLabel text="coser.ui.result.rsufiVersion" /> + </cell> + <cell fill="horizontal" columns="2"> + <JTextField id="resultRsufiVersion" /> + <javax.swing.text.Document javaBean="resultRsufiVersion.getDocument()" + onInsertUpdate='getRsufiResult().setRsufiVersion(resultRsufiVersion.getText())' + onRemoveUpdate='getRsufiResult().setRsufiVersion(resultRsufiVersion.getText())' /> + </cell> + </row> + <row> + <cell anchor="west"> + <JLabel text="coser.ui.result.dataFile1" /> + </cell> + <cell weightx="1" fill="horizontal"> + <JTextField /> + </cell> + <cell fill="horizontal"> + <JButton text="coser.ui.common.selectFile" /> + </cell> + </row> + <row> + <cell anchor="west"> + <JLabel text="coser.ui.result.dataFile2" /> + </cell> + <cell fill="horizontal"> + <JTextField /> + </cell> + <cell fill="horizontal"> + <JButton text="coser.ui.common.selectFile" /> + </cell> + </row> + <row> + <cell anchor="west" columns="3"> + <JLabel text="coser.ui.result.otherDataFile" /> + </cell> + </row> + <row> + <cell columns="3" weighty="1" fill="both"> + <JScrollPane> + <JList /> + </JScrollPane> + </cell> + </row> + <row> + <cell columns="3" fill="horizontal"> + <Table> + <row> + <cell> + <JButton text="coser.ui.result.addOtherDataFile" /> + </cell> + <cell weightx="1" anchor="east"> + <JButton text="coser.ui.result.cancel" + onActionPerformed="dispose()"/> + </cell> + <cell> + <JButton id="saveResultButton" text="coser.ui.result.validNewResult" + onActionPerformed="getHandler().performAddResult(this)"/> + </cell> + </row> + </Table> + </cell> + </row> + </Table> +</JDialog> \ No newline at end of file Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-22 17:53:03 UTC (rev 245) @@ -49,6 +49,14 @@ </BeanValidator> <row> + <cell weightx="1" fill="horizontal" columns="2"> + <JToolBar floatable="false"> + <JButton id="saveSelectionButton" text="coser.ui.selection.details.saveSelection" + onActionPerformed="getHandler().saveSelection(this)" /> + </JToolBar> + </cell> + </row> + <row> <cell weightx="1" weighty="1" fill="both"> <Table> <row> @@ -218,12 +226,6 @@ </JScrollPane> </cell> </row> - <row> - <cell fill="horizontal" columns="1"> - <JButton id="saveSelectionButton" text="coser.ui.selection.details.saveSelection" - onActionPerformed="getHandler().saveSelection(this)" /> - </cell> - </row> </Table> </cell> <cell weightx="3" weighty="1" fill="both"> 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-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-22 17:53:03 UTC (rev 245) @@ -56,9 +56,11 @@ import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.CoserException; import fr.ifremer.coser.bean.Project; +import fr.ifremer.coser.bean.RSufiResult; import fr.ifremer.coser.bean.Selection; import fr.ifremer.coser.services.ChartService; import fr.ifremer.coser.services.ProjectService; +import fr.ifremer.coser.ui.result.SelectionAddResultDialog; import fr.ifremer.coser.ui.selection.model.OccurrenceDensitySpecyListModel; import fr.ifremer.coser.ui.util.CoserListSelectionModel; @@ -141,9 +143,16 @@ // c'est normalement la seule initialisation a faire SelectionDetailsView detailView = view.getSelectionDetailsTab(); List<String> allYears = projectService.getProjectYears(selection); + selection.setAllYears(allYears); detailView.getDatesListModel().setYears(allYears); // tout est selectionné par defaut ((CoserListSelectionModel)detailView.getDatesList().getSelectionModel()).setSelectedObjects(allYears); + + view.setCreationState(true); + + // disable tabs + view.setEnabledAt(1, false); // selection lists + view.setEnabledAt(2, false); // rsufi } /** @@ -165,19 +174,31 @@ // fill details view SelectionDetailsView detailView = view.getSelectionDetailsTab(); detailView.getDatesListModel().setYears(selection.getAllYears()); - ((CoserListSelectionModel)detailView.getDatesList().getSelectionModel()).setSelectedObjects(selection.getSelectedYears()); + List<String> selectedYears = selection.getSelectedYears(); + if (selectedYears != null) { + ((CoserListSelectionModel)detailView.getDatesList().getSelectionModel()).setSelectedObjects(selectedYears); + } // fill strata data and selection updateSelectionDateData(detailView); - ((CoserListSelectionModel)detailView.getStrataList().getSelectionModel()).setSelectedObjects(selection.getSelectedStrata()); + List<String> selectedStrata = selection.getSelectedStrata(); + if (selectedStrata != null) { + ((CoserListSelectionModel)detailView.getStrataList().getSelectionModel()).setSelectedObjects(selectedStrata); + } // fill specy list and selection strataListChanged(detailView); - detailView.getSelectedSpecyListModel().setSpecies(selection.getSelectedSpecies()); + List<String> selectedSpecies = selection.getSelectedSpecies(); + if (selectedSpecies != null) { + detailView.getSelectedSpecyListModel().setSpecies(selectedSpecies); + } if (log.isDebugEnabled()) { log.debug("Selection reloaded."); } + + // disable tabs + view.setEnabledAt(2, selection.isValidated()); // rsufi } /** @@ -198,10 +219,13 @@ selection.setSelectedYears(years); if (log.isDebugEnabled()) { - log.debug("Refreshing zones list"); + log.debug("Refreshing strata list"); } List<String> strata = projectService.filterDataYearsAndGetStrata(selection, years); view.getStrataListModel().setStrata(strata); + if (log.isDebugEnabled()) { + log.debug("Strata list refreshed"); + } } /** @@ -348,10 +372,44 @@ // enable tabs selectionView.setEnabledAt(1, true); // selection lists - selectionView.setEnabledAt(2, true); // rsufi } /** + * Sauvegarde la sélection. + * + * @param view parent view + */ + public void saveSelection(SelectionListsView view) { + + Project project = view.getContextValue(Project.class); + Selection selection = view.getContextValue(Selection.class); + ProjectService service = view.getContextValue(ProjectService.class); + SelectionView selectionView = view.getParentContainer(SelectionView.class); + + try { + service.saveProjectSelection(project, selection); + } + catch (CoserBusinessException ex) { + JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.selection.saveError"), JOptionPane.ERROR_MESSAGE); + throw new CoserException("Can't save selection", ex); + } + + // enable tabs + selectionView.setEnabledAt(2, selection.isValidated()); // selection lists + } + + /** + * Marque la selection comme validée. + * + * @param view view + */ + public void validSelection(SelectionListsView view) { + Selection selection = view.getContextValue(Selection.class); + selection.setValidated(true); + saveSelection(view); + } + + /** * Mise à jour du filtre d'ocurrence et densité. * * Selectionne dans la liste seulement les especes ayant une densité @@ -389,15 +447,6 @@ } /** - * Sauvegarde des listes des selectino d'especes. - * - * @param view view - */ - public void saveSelectionLists(SelectionListsView view) { - - } - - /** * Check que les paramêtres sont correct (nouveau nom existant) * et applique la fusion d'espece. Rafraichit la view * parente ensuite. @@ -412,7 +461,7 @@ String newSpecyName = view.getNewSpeciesNameField().getText(); String comment = view.getCommentField().getText(); Project project = view.getContextValue(Project.class); - Selection seletion = view.getContextValue(Selection.class); + Selection selection = view.getContextValue(Selection.class); ProjectService projectService = view.getContextValue(ProjectService.class); boolean newSpecyExist = projectService.isSpecyNameExist(project, newSpecyName); @@ -431,7 +480,7 @@ } try { - projectService.mergeSpecies(project, seletion, newSpecyName, comment, specyNames); + projectService.mergeSpecies(project, selection, newSpecyName, comment, specyNames); } catch (CoserBusinessException ex) { throw new CoserException("Can't merge species", ex); @@ -557,4 +606,42 @@ } selection.setSelectedSpecies(species); }*/ + + /** + * Display rsufi new result dialog. + * + * @param view view + */ + public void showAddResultDialog(SelectionRsufiView view) { + SelectionAddResultDialog addResultView = new SelectionAddResultDialog(view); + addResultView.setRsufiResult(new RSufiResult()); + addResultView.getValidatorRSufiResult().setBean(addResultView.getRsufiResult()); + addResultView.setHandler(this); + addResultView.pack(); + addResultView.setLocationRelativeTo(view); + addResultView.setVisible(true); + } + + /** + * Save new result after clicking "ok" button on SelectionAddResultDialog + * opened by {@link #showAddResultDialog(SelectionRsufiView)}. + * + * @param view view + */ + public void performAddResult(SelectionAddResultDialog view) { + + Project project = view.getContextValue(Project.class); + Selection selection = view.getContextValue(Selection.class); + ProjectService projectService = view.getContextValue(ProjectService.class); + + RSufiResult newResult = view.getRsufiResult(); + try { + projectService.saveRsufiResults(project, selection, newResult); + } + catch (CoserBusinessException ex) { + JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.result.saveError"), JOptionPane.ERROR_MESSAGE); + throw new CoserException("Can't save result", ex); + } + view.dispose(); + } } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2010-11-22 17:53:03 UTC (rev 245) @@ -47,6 +47,16 @@ ]]></script> <row> + <cell columns="8" weightx="1" fill="horizontal"> + <JToolBar floatable="false"> + <JButton id="saveSelectionButton" text="coser.ui.selection.details.saveSelection" + onActionPerformed="getHandler().saveSelection(this)" /> + <JButton id="validSelectionButton" text="coser.ui.selection.details.validSelection" + onActionPerformed="getHandler().validSelection(this)" /> + </JToolBar> + </cell> + </row> + <row> <cell fill="horizontal" columns="2"> <JXTitledSeparator title="coser.ui.selection.allSpecies" /> </cell> @@ -167,9 +177,4 @@ </JScrollPane> </cell> </row> - <row> - <cell anchor="east" columns="8"> - <JButton text="coser.ui.common.valid" onActionPerformed="getHandler().saveSelectionLists(this)" /> - </cell> - </row> </Table> Deleted: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionResultView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionResultView.jaxx 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionResultView.jaxx 2010-11-22 17:53:03 UTC (rev 245) @@ -1,126 +0,0 @@ -<!-- - #%L - Coser :: UI - - $Id$ - $HeadURL$ - %% - Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU 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 General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<Table> - <SelectionHandler id="handler" javaBean="null" /> - <row> - <cell weightx="1" fill="horizontal"> - <Table border='{BorderFactory.createTitledBorder(_("coser.ui.result.extractDataTitle"))}'> - <row> - <cell> - <JLabel text="coser.ui.result.extractDataLabel" /> - </cell> - <cell weightx="1" fill="horizontal"> - <JTextField id="resultExtractDataField" /> - </cell> - <cell> - <JButton text="coser.ui.common.selectFile" /> - </cell> - </row> - <row> - <cell columns="3"> - <JButton text="coser.ui.result.extractDataButton" /> - </cell> - </row> - </Table> - </cell> - </row> - <row> - <cell weightx="1" weighty="2" fill="both"> - <Table border='{BorderFactory.createTitledBorder(_("coser.ui.result.availableDataTitle"))}'> - <row> - <cell weightx="1" weighty="1" fill="both"> - <JScrollPane> - <JTable model="{new fr.ifremer.coser.ui.result.ResultTableModel()}"/> - </JScrollPane> - </cell> - </row> - <row> - <cell weighty="1" fill="both"> - <Table border='{BorderFactory.createTitledBorder(_("coser.ui.result.newDataTitle"))}'> - <row> - <cell anchor="west"> - <JLabel text="coser.ui.result.resultName" /> - </cell> - <cell fill="horizontal" columns="2"> - <JTextField /> - </cell> - </row> - <row> - <cell anchor="west"> - <JLabel text="coser.ui.result.rsufiVersion" /> - </cell> - <cell fill="horizontal" columns="2"> - <JTextField /> - </cell> - </row> - <row> - <cell anchor="west"> - <JLabel text="coser.ui.result.dataFile1" /> - </cell> - <cell weightx="1" fill="horizontal"> - <JTextField /> - </cell> - <cell fill="horizontal"> - <JButton text="coser.ui.common.selectFile" /> - </cell> - </row> - <row> - <cell anchor="west"> - <JLabel text="coser.ui.result.dataFile2" /> - </cell> - <cell fill="horizontal"> - <JTextField /> - </cell> - <cell fill="horizontal"> - <JButton text="coser.ui.common.selectFile" /> - </cell> - </row> - <row> - <cell anchor="west" columns="3"> - <JLabel text="coser.ui.result.otherDataFile" /> - </cell> - </row> - <row> - <cell columns="3" weighty="1" fill="both"> - <JScrollPane> - <JList /> - </JScrollPane> - </cell> - </row> - <row> - <cell weightx="1" columns="2" anchor="east"> - <JButton text="coser.ui.result.addOtherDataFile" /> - </cell> - <cell anchor="east"> - <JButton text="coser.ui.result.addNewResult" /> - </cell> - </row> - </Table> - </cell> - </row> - </Table> - </cell> - </row> -</Table> Copied: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx (from rev 207, trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionResultView.jaxx) =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx (rev 0) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx 2010-11-22 17:53:03 UTC (rev 245) @@ -0,0 +1,68 @@ +<!-- + #%L + Coser :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU 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 General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<Table> + <SelectionHandler id="handler" javaBean="null" /> + <row> + <cell weightx="1" fill="horizontal"> + <Table border='{BorderFactory.createTitledBorder(_("coser.ui.result.extractDataTitle"))}'> + <row> + <cell> + <JLabel text="coser.ui.result.extractDataLabel" /> + </cell> + <cell weightx="1" fill="horizontal"> + <JTextField id="resultExtractDataField" /> + </cell> + <cell> + <JButton text="coser.ui.common.selectFile" /> + </cell> + </row> + <row> + <cell columns="3"> + <JButton text="coser.ui.result.extractDataButton" /> + </cell> + </row> + </Table> + </cell> + </row> + <row> + <cell weightx="1" weighty="2" fill="both"> + <Table border='{BorderFactory.createTitledBorder(_("coser.ui.result.availableDataTitle"))}'> + <row> + <cell weightx="1" weighty="1" fill="both"> + <JScrollPane> + <JTable model="{new fr.ifremer.coser.ui.result.ResultTableModel(this)}"/> + </JScrollPane> + </cell> + </row> + <row> + <cell anchor="east"> + <JButton text="coser.ui.result.addNewResult" + onActionPerformed="getHandler().showAddResultDialog(this)" /> + </cell> + </row> + </Table> + </cell> + </row> +</Table> Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionView.jaxx 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionView.jaxx 2010-11-22 17:53:03 UTC (rev 245) @@ -48,7 +48,7 @@ handler="{getHandler()}" /> </tab> <tab title="coser.ui.selection.tab.rsufi"> - <SelectionResultView id="selectionResultView" constructorParams="this" + <SelectionRsufiView id="selectionResultView" constructorParams="this" handler="{getHandler()}" /> </tab> </JTabbedPane> Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/util/CoserListSelectionModel.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/util/CoserListSelectionModel.java 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/util/CoserListSelectionModel.java 2010-11-22 17:53:03 UTC (rev 245) @@ -144,6 +144,7 @@ } protected void registerSelection(int index0, int index1) { + for (int i = index0 ; i <= index1 ; ++i) { Object o = coserListModel.getElementAt(i); if (isSelectedIndex(i)) { Added: trunk/coser-ui/src/main/resources/fr/ifremer/coser/bean/RSufiResult-error-validation.xml =================================================================== --- trunk/coser-ui/src/main/resources/fr/ifremer/coser/bean/RSufiResult-error-validation.xml (rev 0) +++ trunk/coser-ui/src/main/resources/fr/ifremer/coser/bean/RSufiResult-error-validation.xml 2010-11-22 17:53:03 UTC (rev 245) @@ -0,0 +1,41 @@ +<!-- + #%L + Coser :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU 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 General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE validators PUBLIC + "-//OpenSymphony Group//XWork Validator 1.0.2//EN" + "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> +<validators> + <field name="name"> + <field-validator type="requiredstring"> + <param name="trim">true</param> + <message>coser.ui.result.requiredname</message> + </field-validator> + </field> + <field name="rsufiVersion"> + <field-validator type="requiredstring"> + <param name="trim">true</param> + <message>coser.ui.result.requiredrsufiVersion</message> + </field-validator> + </field> +</validators> Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2010-11-22 17:53:03 UTC (rev 245) @@ -89,15 +89,26 @@ coser.ui.result.addNewResult=Save result coser.ui.result.addOtherDataFile=Add file coser.ui.result.availableDataTitle=Available results \: +coser.ui.result.cancel= coser.ui.result.dataFile1=Data file 1 \: coser.ui.result.dataFile2=Data file 2 \: coser.ui.result.extractDataButton=Extract coser.ui.result.extractDataLabel=Extraction directory coser.ui.result.extractDataTitle=Extract RSufi data coser.ui.result.newDataTitle=New result +coser.ui.result.newResult= coser.ui.result.otherDataFile=Other files \: +coser.ui.result.requiredauthor= +coser.ui.result.requiredname= +coser.ui.result.requiredrsufiVersion= coser.ui.result.resultName=Result name \: coser.ui.result.rsufiVersion=RSufi version +coser.ui.result.saveError= +coser.ui.result.table.dataFile1= +coser.ui.result.table.dataFile2= +coser.ui.result.table.resultName= +coser.ui.result.table.rsufiVersion= +coser.ui.result.validNewResult= coser.ui.selection.allSpecies=L1 \: All species coser.ui.selection.createError=Creation error coser.ui.selection.details.beginDate=Begin date \: @@ -116,6 +127,7 @@ coser.ui.selection.details.type= coser.ui.selection.details.validDates= coser.ui.selection.details.validFilter= +coser.ui.selection.details.validSelection= coser.ui.selection.details.validStrata= coser.ui.selection.filter.density=Density \: coser.ui.selection.filter.filter=Filter Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2010-11-22 17:53:03 UTC (rev 245) @@ -33,11 +33,11 @@ coser.ui.control.globalErrorMenuSelectAll=S\u00E9lectionner toutes les lignes coser.ui.control.graph.specy=Esp\u00E8ces \: coser.ui.control.graphtitle=Graphique -coser.ui.control.project.requiredauthor=Le champs 'auteur' est requis +coser.ui.control.project.requiredauthor=Le champ 'auteur' est requis coser.ui.control.project.requiredcatchFile=Le fichier 'capture' est requis coser.ui.control.project.requiredhaulFile=Le fichier 'traits' est requis coser.ui.control.project.requiredlengthFile=Le fichier 'taille' est requis -coser.ui.control.project.requiredname=Le champs 'nom' est requis +coser.ui.control.project.requiredname=Le champ 'nom' est requis coser.ui.control.project.requiredstrataFile=Le fichier 'strates' est requis coser.ui.control.replace.find=Chercher \: coser.ui.control.replace.inField=Dans le champ \: @@ -86,18 +86,28 @@ coser.ui.project.traitsFile=Fichiers des traits \: coser.ui.project.useCustomReferenceSpeciesFile=Utiliser un autre fichier de r\u00E9f\u00E9rence coser.ui.project.usedReferenceSpeciesFile=Fichier de r\u00E9f\u00E9rence utilis\u00E9 (Reftax) \: -coser.ui.result.addNewResult=Enregistrer le r\u00E9sultat +coser.ui.result.addNewResult=Ajouter un r\u00E9sultat coser.ui.result.addOtherDataFile=Ajouter un fichier -coser.ui.result.availableDataTitle=R\u00E9sultats disponibles \: +coser.ui.result.availableDataTitle=R\u00E9sultats disponibles +coser.ui.result.cancel=Annuler coser.ui.result.dataFile1=Fichier r\u00E9sultat 1 \: coser.ui.result.dataFile2=Fichier r\u00E9sultat 2 \: coser.ui.result.extractDataButton=Extraire coser.ui.result.extractDataLabel=Dossier d'extraction \: coser.ui.result.extractDataTitle=Extraction des donn\u00E9es d'entr\u00E9e de RSufi coser.ui.result.newDataTitle=Nouveau r\u00E9sultat +coser.ui.result.newResult=Nouveau r\u00E9sultat coser.ui.result.otherDataFile=Autre fichiers \: +coser.ui.result.requiredname=Le champ 'name' est requis +coser.ui.result.requiredrsufiVersion=Le champ 'rsufiVersion' est requis coser.ui.result.resultName=Nom du r\u00E9sultat \: coser.ui.result.rsufiVersion=Version de RSufi \: +coser.ui.result.saveError=Erreur de sauvegarde +coser.ui.result.table.dataFile1=Fichier de donn\u00E9es 1 +coser.ui.result.table.dataFile2=Fichier de donn\u00E9es 2 +coser.ui.result.table.resultName=Nom du r\u00E9sultat +coser.ui.result.table.rsufiVersion=Version de RSufi +coser.ui.result.validNewResult=Ajouter le r\u00E9sultat coser.ui.selection.allSpecies=L1 \: Toutes les esp\u00E8ces coser.ui.selection.createError=Erreur de cr\u00E9action coser.ui.selection.details.comment=Commentaire \: @@ -105,7 +115,7 @@ coser.ui.selection.details.description=Description \: coser.ui.selection.details.filteredSpecies=Esp\u00E8ces filtr\u00E9es \: coser.ui.selection.details.name=Nom de la s\u00E9lection \: -coser.ui.selection.details.saveSelection=Sauvegarder la s\u00E9lection \: +coser.ui.selection.details.saveSelection=Sauvegarder la s\u00E9lection coser.ui.selection.details.selectedSpecies=Esp\u00E8ces s\u00E9lectionn\u00E9es \: coser.ui.selection.details.showMapTip=Afficher la carte des zones coser.ui.selection.details.showSpreciesTip=Afficher la table des esp\u00E8ces @@ -114,6 +124,7 @@ coser.ui.selection.details.type=Filtrer par type \: coser.ui.selection.details.validDates=Valider les ann\u00E9es coser.ui.selection.details.validFilter=Valider les filtres +coser.ui.selection.details.validSelection=Valider la s\u00E9lection coser.ui.selection.details.validStrata=Valider les strates coser.ui.selection.filter.density=Densit\u00E9 \: coser.ui.selection.filter.filter=Filtrer Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-11-22 14:02:49 UTC (rev 244) +++ trunk/pom.xml 2010-11-22 17:53:03 UTC (rev 245) @@ -221,7 +221,7 @@ <!-- Versions --> <jaxx.version>2.2.4-SNAPSHOT</jaxx.version> - <i18n.version>2.0</i18n.version> + <i18n.version>2.0-SNAPSHOT</i18n.version> </properties> <scm>
participants (1)
-
chatellier@users.labs.libre-entreprise.org