Author: chatellier Date: 2010-10-29 11:42:24 +0000 (Fri, 29 Oct 2010) New Revision: 129 Log: Improve selection, ui controls and ui checks Removed: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-warning-validation.xml Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/control/ValidationError.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/CoserFrame.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlDataTableModel.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/control/ValidationError.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/control/ValidationError.java 2010-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/control/ValidationError.java 2010-10-29 11:42:24 UTC (rev 129) @@ -51,7 +51,11 @@ /** Message explicitant l'erreur de validation. */ protected String message; - /** Numero de la ligne dans le fichier CSV (header non compté). */ + /** + * Numero de la ligne dans le fichier CSV. + * + * Peut être {@code null} si l'erreur n'est pas associéa a une ligne specifiques. + */ protected String lineNumber; public ValidationError() { @@ -97,6 +101,8 @@ /** * Numero de la ligne dans le fichier CSV. * + * Peut être {@code null} si l'erreur n'est pas associéa a une ligne specifiques. + * * @return line number */ public String getLineNumber() { @@ -106,6 +112,8 @@ /** * Numero de la ligne dans le fichier CSV. * + * Peut être {@code null} si l'erreur n'est pas associéa a une ligne specifiques. + * * @param lineNumber line number */ public void setLineNumber(String lineNumber) { 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-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-10-29 11:42:24 UTC (rev 129) @@ -432,6 +432,20 @@ */ 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")); + } + // TODO echatellier 20101027 voir si on force que les // fichier de validation existe ici ou pas Deleted: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-warning-validation.xml =================================================================== --- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-warning-validation.xml 2010-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-warning-validation.xml 2010-10-29 11:42:24 UTC (rev 129) @@ -1,36 +0,0 @@ -<!-- - #%L - Coser :: UI - - $Id$ - $HeadURL$ - %% - Copyright (C) 2010 Ifremer, Codelutin - %% - 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% - --> -<!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="weight"> - <field-validator type="coserDouble"> - <param name="min">0</param> - <param name="max">999</param> - <message>Weight n'est pas compris entre ${min} en ${max}</message> - </field-validator> - </field> -</validators> \ No newline at end of file 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-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-10-29 11:42:24 UTC (rev 129) @@ -16,7 +16,6 @@ Sex\ is\ mandatory= Specy\ %s\ doesn't\ exist\ in\ referential= Weight\ attribute\ is\ not\ a\ valid\ double= -Weight\ n'est\ pas\ compris\ entre\ ${min}\ en\ ${max}= Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s= Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s\ or\ %s= You\ must\ enter\ a\ campagne\ name.= @@ -26,7 +25,6 @@ You\ must\ enter\ a\ strata\ name.= You\ must\ enter\ a\ stratum\ name.= You\ must\ enter\ a\ survey\ name.= -You\ must\ enter\ a\ sweptSurface\ name.= You\ must\ enter\ a\ trait\ name.= You\ must\ enter\ a\ year\ name.= coser.business.category.catch=Catch @@ -38,9 +36,9 @@ coser.business.control.error.minObservationCount= coser.business.control.error.noCatchNumberWithWeight= coser.business.control.step.observation= -coser.business.control.step.observation.catch= coser.business.control.step.xworks= coser.business.line=Line +coser.business.selection.noControlForSelection= coser.config.database.directory.description= coser.config.observation.nobsmin.description= coser.config.projects.directory.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-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-10-29 11:42:24 UTC (rev 129) @@ -16,7 +16,6 @@ Sex\ is\ mandatory= Specy\ %s\ doesn't\ exist\ in\ referential=L'esp\u00E8ce %s n'existe pas dans le r\u00E9f\u00E9rentiel Weight\ attribute\ is\ not\ a\ valid\ double= -Weight\ n'est\ pas\ compris\ entre\ ${min}\ en\ ${max}= Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s. Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s\nou\u2009\:\n\t%s. You\ must\ enter\ a\ campagne\ name.= @@ -26,7 +25,6 @@ You\ must\ enter\ a\ strata\ name.= You\ must\ enter\ a\ stratum\ name.= You\ must\ enter\ a\ survey\ name.= -You\ must\ enter\ a\ sweptSurface\ name.= You\ must\ enter\ a\ trait\ name.= You\ must\ enter\ a\ year\ name.= coser.business.category.catch=Captures @@ -40,6 +38,7 @@ 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.selection.noControlForSelection=Impossible de creer une s\u00E9lection sans donn\u00E9es control\u00E9es. coser.config.database.directory.description=Emplacement de la base de campagnes de coser coser.config.observation.nobsmin.description=Nombre minimal d'observation coser.config.projects.directory.description=Emplacement des projets Coser Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx 2010-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx 2010-10-29 11:42:24 UTC (rev 129) @@ -40,7 +40,7 @@ </JMenu> <JMenu id='menuWindow' text="coser.ui.mainframe.menu.window" enabled="false"> - <JMenuItem text="coser.ui.mainframe.menu.window.validation" onActionPerformed="getHandler().showControlView()"/> + <JMenuItem text="coser.ui.mainframe.menu.window.control" onActionPerformed="getHandler().showControlView()"/> <SelectionsListMenuItem id="menuWindowSelectionMenuItem" text="coser.ui.mainframe.menu.window.selection" constructorParams="this" /> </JMenu> 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-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-10-29 11:42:24 UTC (rev 129) @@ -395,6 +395,8 @@ }; setMainComponent(selectionView); } catch (CoserBusinessException ex) { + JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.selection.createError"), + JOptionPane.ERROR_MESSAGE); throw new CoserException("Can't create new selection", ex); } } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlDataTableModel.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlDataTableModel.java 2010-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlDataTableModel.java 2010-10-29 11:42:24 UTC (rev 129) @@ -29,6 +29,9 @@ import javax.swing.table.AbstractTableModel; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import fr.ifremer.coser.CoserConstants.Category; import fr.ifremer.coser.bean.Project; import fr.ifremer.coser.data.AbstractDataEntity; @@ -45,6 +48,8 @@ */ public class ControlDataTableModel extends AbstractTableModel { + private static final Log log = LogFactory.getLog(ControlDataTableModel.class); + /** serialVersionUID. */ private static final long serialVersionUID = -1192463259386773117L; @@ -140,6 +145,10 @@ } ++index; } + + if (log.isDebugEnabled()) { + log.debug("Real line for " + lineNumber + " = " + index); + } return result; } } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-10-29 11:42:24 UTC (rev 129) @@ -32,6 +32,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; +import java.util.Iterator; import java.util.List; import javax.swing.JLabel; @@ -59,6 +60,7 @@ import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.CoserConstants.Category; +import fr.ifremer.coser.CoserConstants.ValidationLevel; import fr.ifremer.coser.CoserException; import fr.ifremer.coser.bean.Project; import fr.ifremer.coser.control.ValidationError; @@ -172,6 +174,21 @@ try { List<ValidationError> errors = get(); view.getGlobalValidationModel().setValidationErrors(errors); + + // active le bouton de sauvegarde si la liste d'erreur + // ne contient pas de message d'erreur + // warning, c'est ok + boolean errorFound = false; + Iterator<ValidationError> itError = errors.iterator(); + while (itError.hasNext() && !errorFound) { + ValidationError error = itError.next(); + if (error.getLevel() == ValidationLevel.ERROR || error.getLevel() == ValidationLevel.FATAL) { + errorFound = true; + } + } + if (!errorFound) { + view.getSaveButton().setEnabled(true); + } } catch (Exception ex) { throw new CoserException("Can't validate data", ex); } @@ -250,9 +267,13 @@ if (selectedError != -1) { ValidationError error = view.getGlobalValidationModel().getErrorAt(selectedError); String errorLineNumber = error.getLineNumber(); - int errorLineIndex = view.getControlDataTableModel().getRealIndexOfLine(errorLineNumber); - view.getControlDataTableSelectionModel().setSelectionInterval(errorLineIndex, errorLineIndex); - scrollToVisible(view.getControlDataTable(), errorLineIndex, 0); + + // peut être null, si l'erreur ne porte pas sur un bean en particulier + if (errorLineNumber != null) { + int errorLineIndex = view.getControlDataTableModel().getRealIndexOfLine(errorLineNumber); + view.getControlDataTableSelectionModel().setSelectionInterval(errorLineIndex, errorLineIndex); + scrollToVisible(view.getControlDataTable(), errorLineIndex, 0); + } } } @@ -389,6 +410,13 @@ view.getControlDataDeleteButton().setEnabled(true); } else { + + // set to all validators to clear non concerned + view.getValidatorCatch().setBean(null); + view.getValidatorHaul().setBean(null); + view.getValidatorLength().setBean(null); + view.getValidatorStrata().setBean(null); + view.getControlDataValidButton().setEnabled(false); view.getControlDataCancelButton().setEnabled(false); view.getControlDataDeleteButton().setEnabled(false); Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx 2010-10-29 11:41:17 UTC (rev 128) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx 2010-10-29 11:42:24 UTC (rev 129) @@ -149,7 +149,8 @@ </row> <row> <cell anchor="east" columns="2"> - <JButton id="saveButton" text="coser.ui.control.save" onActionPerformed="getHandler().saveControl(this)" /> + <JButton id="saveButton" text="coser.ui.control.save" enabled="false" + onActionPerformed="getHandler().saveControl(this)" /> </cell> </row> </Table>